)]}'
{"id":"openinfra%2Fpython-tempestconf~991760","triplet_id":"openinfra%2Fpython-tempestconf~master~I5dcae665b98ac9a71751916fe336f920b2ec415e","project":"openinfra/python-tempestconf","branch":"master","attention_set":{},"removed_from_attention_set":{"7102":{"account":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"last_update":"2026-06-05 15:04:02.000000000","reason":"removed on reply"}},"hashtags":[],"change_id":"I5dcae665b98ac9a71751916fe336f920b2ec415e","subject":"Fix service availability when a service has multiple types","status":"ABANDONED","created":"2026-06-05 06:00:50.000000000","updated":"2026-06-05 15:04:02.000000000","total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"39eb59b43abf323b89d6bf7de7856618eae68bf7","_number":991760,"virtual_id_number":991760,"owner":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"actions":{},"labels":{"Verified":{"all":[{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-06-05 06:47:07.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"5fa9a833db185548d8c6c442182b14547cd88501","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"date":"2026-06-05 06:00:50.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"57d0ba70712fafdb47d54fd08ef02068de8de550","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-05 06:47:07.000000000","message":"Patch Set 1: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/5641006a91eb427f843dd3803e4a5228\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/ad747a369c864db9bc9e6541dec07ed5 : SUCCESS in 3m 31s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/2ec73fbe6e804926b2170ba5568e3453 : SUCCESS in 3m 42s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/9be4a51b6c4d45f58b0a0fcfbb36fe8b : SUCCESS in 3m 19s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/9c7668d207ac47d4bdf75bf9c99acba5 : SUCCESS in 4m 43s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/047e2b05ed3149ccb43c90c2c955fbef : SUCCESS in 3m 05s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/90317eeb6bc2407ba8abcb428ff431cf : SUCCESS in 2m 42s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/cbf2d72d3d8e49469415a49a89244505 : SUCCESS in 5m 28s\n- python-tempestconf-tempest-devstack-admin https://zuul.opendev.org/t/openstack/build/3d9d9e1f294049d4a95e2f46d319da01 : FAILURE in 35m 58s\n- python-tempestconf-tempest-devstack-admin-2024-2 https://zuul.opendev.org/t/openstack/build/4261e20dae504678980553f51af92943 : FAILURE in 37m 50s\n- python-tempestconf-tempest-devstack-admin-2025-1 https://zuul.opendev.org/t/openstack/build/1c0c251eadf0434e8095f00f6952de2f : SUCCESS in 36m 11s\n- python-tempestconf-tempest-devstack-admin-2025-2 https://zuul.opendev.org/t/openstack/build/98e8f370024e466aae2f2715cdabf48f : SUCCESS in 25m 47s\n- python-tempestconf-tempest-devstack-admin-fips-centos9 https://zuul.opendev.org/t/openstack/build/398a3394bc6d4c3183760f57fc82cbae : FAILURE in 19m 18s (non-voting)\n- python-tempestconf-tempest-devstack-admin-rocky https://zuul.opendev.org/t/openstack/build/66098b9ce62c4846aeb97b5e4b0c3f6f : FAILURE in 17m 40s (non-voting)\n- python-tempestconf-tempest-devstack-demo https://zuul.opendev.org/t/openstack/build/a9175d59ea4b4d15a81c3082ad702920 : FAILURE in 34m 55s\n- python-tempestconf-tempest-devstack-admin-plugins https://zuul.opendev.org/t/openstack/build/4f061f6a45aa45739553bd38cb95ccf7 : FAILURE in 25m 15s (non-voting)\n- python-tempestconf-tempest-devstack-enforce-scope-new-defaults-admin https://zuul.opendev.org/t/openstack/build/b5e209dc21764d04a5ee8428bd1097ed : FAILURE in 37m 01s\n- python-tempestconf-tempest-devstack-enforce-scope-new-defaults-demo https://zuul.opendev.org/t/openstack/build/9f408653e95d431c94ba95ff7c16bd41 : FAILURE in 18m 17s\n- opendev-tox-docs https://zuul.opendev.org/t/openstack/build/2d9490d686d4460daf9dd503fb70641c : SUCCESS in 3m 33s","accounts_in_message":[],"_revision_number":1},{"id":"897e1d3da7da67270bcf6c96efa33a869c34573c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"date":"2026-06-05 11:52:15.000000000","message":"Uploaded patch set 2: Patch Set 1 was rebased.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":2},{"id":"30559a679ba60d078c60ffdab911d16f0afa843f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-05 13:09:20.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/2097f7995e524f26809ff29e3a22f5a2\n\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/f5e982e69dc94915b2c8ccb4371bbedb : SUCCESS in 4m 23s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/11972915ae4949a389816b24e31b6730 : SUCCESS in 4m 37s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/a8853f6f15e44561998dbeba273bfa32 : SUCCESS in 3m 38s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/3be0da464a924e8ea147726806cdb031 : SUCCESS in 4m 09s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/e72c101acbea4fcea972f61db84b5f8e : SUCCESS in 2m 38s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/cda6ca7e839a4a07ae6fa5b9aaa066cb : SUCCESS in 3m 58s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/db11bf93c1ae4cb0bc3071fed4c43c41 : SUCCESS in 8m 02s\n- python-tempestconf-tempest-devstack-admin https://zuul.opendev.org/t/openstack/build/30bc11717448405f8ea217139188121a : SUCCESS in 52m 16s\n- python-tempestconf-tempest-devstack-admin-2025-1 https://zuul.opendev.org/t/openstack/build/39cc73bc5f204630a3bb0e3f79580d4d : SUCCESS in 56m 43s\n- python-tempestconf-tempest-devstack-admin-2025-2 https://zuul.opendev.org/t/openstack/build/25e8d1b6d82e40bab754b6b4146c7331 : SUCCESS in 54m 18s\n- python-tempestconf-tempest-devstack-admin-2026-1 https://zuul.opendev.org/t/openstack/build/22528c6380bd45c99bf115200c7a9569 : SUCCESS in 49m 47s\n- python-tempestconf-tempest-devstack-admin-fips-centos9 https://zuul.opendev.org/t/openstack/build/59f6b5cc22f84751b8ae7aa983011ba8 : FAILURE in 11m 40s (non-voting)\n- python-tempestconf-tempest-devstack-admin-rocky https://zuul.opendev.org/t/openstack/build/bedca13b2467450cafbe45f7a1c5c31e : FAILURE in 12m 17s (non-voting)\n- python-tempestconf-tempest-devstack-demo https://zuul.opendev.org/t/openstack/build/a1b809761d0846c8b8a29100bdb2ff3c : SUCCESS in 20m 12s\n- python-tempestconf-tempest-devstack-admin-plugins https://zuul.opendev.org/t/openstack/build/b3588878bdea4f458145eb7cfe104b27 : FAILURE in 25m 57s (non-voting)\n- python-tempestconf-tempest-devstack-enforce-scope-new-defaults-admin https://zuul.opendev.org/t/openstack/build/5852c37e9d9440b9b92e3279c5ef870a : SUCCESS in 53m 36s\n- python-tempestconf-tempest-devstack-enforce-scope-new-defaults-demo https://zuul.opendev.org/t/openstack/build/c7ff6283d5bf4d898f7136e7afb94c06 : SUCCESS in 31m 23s\n- opendev-tox-docs https://zuul.opendev.org/t/openstack/build/412d8a4eae63401cbfdeb2a1ef96e2a5 : SUCCESS in 3m 01s","accounts_in_message":[],"_revision_number":2},{"id":"2c12ef4f967f91ae81331d7196ce8d2b0f10ecc1","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"date":"2026-06-05 14:58:45.000000000","message":"Uploaded patch set 3: New patch set was added with same tree, parent tree, and commit message as Patch Set 2.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"NEVER\")\n","accounts_in_message":[],"_revision_number":3},{"id":"39eb59b43abf323b89d6bf7de7856618eae68bf7","tag":"autogenerated:gerrit:abandon","author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"date":"2026-06-05 15:04:02.000000000","message":"Abandoned\n\nSquashed into change 991669 (I6f992459bbeb70698bd886040522c746608cbdcb).","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"4231eb28566f496abcfba35d4c227829402e7a43","revisions":{"54e8e2e709b91776bf287dd758d8e9702fad773a":{"kind":"REWORK","_number":1,"created":"2026-06-05 06:00:50.000000000","uploader":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"ref":"refs/changes/60/991760/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openinfra/python-tempestconf","ref":"refs/changes/60/991760/1","commands":{"Checkout":"git fetch https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/1"}}},"commit":{"parents":[{"commit":"56c8c4167bf63aaf936f8bfe7d267b81a90c68ab","subject":"Switch the unit test jobs from py310 to py314","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openinfra/python-tempestconf/commit/56c8c4167bf63aaf936f8bfe7d267b81a90c68ab"}]}],"author":{"name":"Thomas Bechtold","email":"thomasbechtold@jpberlin.de","date":"2026-06-05 05:59:21.000000000","tz":120},"committer":{"name":"Thomas Bechtold","email":"thomasbechtold@jpberlin.de","date":"2026-06-05 06:00:31.000000000","tz":120},"subject":"Fix service availability when a service has multiple types","message":"Fix service availability when a service has multiple types\n\nServices.discover() loops over every catalog type returned by a\nservice class and, for each type that is not present in the catalog,\ninstantiates the class and sets its availability to False. When a\nservice is registered under more than one type (an \"alias\", e.g.\ncinder as \u0027block-storage\u0027 and the legacy \u0027volumev3\u0027, or manila as\n\u0027share\u0027 and \u0027sharev2\u0027), an absent alias overrides the availability\nalready set by a present one. The final result then depends purely on\nthe order of the types: with [\u0027block-storage\u0027, \u0027volumev3\u0027] and only\n\u0027block-storage\u0027 registered, cinder ends up as service_available\u003dFalse\neven though the service was discovered correctly.\n\nUse Python\u0027s for/else so the service is only marked unavailable when\nnone of its types matched, and stop at the first type that is present\n(the types are aliases for the same service).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nChange-Id: I5dcae665b98ac9a71751916fe336f920b2ec415e\nSigned-off-by: Thomas Bechtold \u003cthomasbechtold@jpberlin.de\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openinfra/python-tempestconf/commit/54e8e2e709b91776bf287dd758d8e9702fad773a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openinfra/python-tempestconf/commit/54e8e2e709b91776bf287dd758d8e9702fad773a"}]},"branch":"refs/heads/master"},"f789cbcde9bbd156c48038c7392fb35aa2027661":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2026-06-05 11:52:15.000000000","uploader":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"ref":"refs/changes/60/991760/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openinfra/python-tempestconf","ref":"refs/changes/60/991760/2","commands":{"Checkout":"git fetch https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/2"}}},"commit":{"parents":[{"commit":"06741367d4bc5a7492388430339a80f6630e2a64","subject":"Add the member role to the generated primary account","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openinfra/python-tempestconf/commit/06741367d4bc5a7492388430339a80f6630e2a64"}]}],"author":{"name":"Thomas Bechtold","email":"thomasbechtold@jpberlin.de","date":"2026-06-05 05:59:21.000000000","tz":120},"committer":{"name":"Thomas Bechtold","email":"thomasbechtold@jpberlin.de","date":"2026-06-05 11:48:44.000000000","tz":120},"subject":"Fix service availability when a service has multiple types","message":"Fix service availability when a service has multiple types\n\nServices.discover() loops over every catalog type returned by a\nservice class and, for each type that is not present in the catalog,\ninstantiates the class and sets its availability to False. When a\nservice is registered under more than one type (an \"alias\", e.g.\ncinder as \u0027block-storage\u0027 and the legacy \u0027volumev3\u0027, or manila as\n\u0027share\u0027 and \u0027sharev2\u0027), an absent alias overrides the availability\nalready set by a present one. The final result then depends purely on\nthe order of the types: with [\u0027block-storage\u0027, \u0027volumev3\u0027] and only\n\u0027block-storage\u0027 registered, cinder ends up as service_available\u003dFalse\neven though the service was discovered correctly.\n\nUse Python\u0027s for/else so the service is only marked unavailable when\nnone of its types matched, and stop at the first type that is present\n(the types are aliases for the same service).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nChange-Id: I5dcae665b98ac9a71751916fe336f920b2ec415e\nSigned-off-by: Thomas Bechtold \u003cthomasbechtold@jpberlin.de\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openinfra/python-tempestconf/commit/f789cbcde9bbd156c48038c7392fb35aa2027661"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openinfra/python-tempestconf/commit/f789cbcde9bbd156c48038c7392fb35aa2027661"}]},"branch":"refs/heads/master"},"4231eb28566f496abcfba35d4c227829402e7a43":{"kind":"NO_CHANGE","_number":3,"created":"2026-06-05 14:58:45.000000000","uploader":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"ref":"refs/changes/60/991760/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openinfra/python-tempestconf","ref":"refs/changes/60/991760/3","commands":{"Checkout":"git fetch https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openinfra/python-tempestconf refs/changes/60/991760/3"}}},"commit":{"parents":[{"commit":"301ed344a2f01b6928a150cba2017254306931f0","subject":"Fix the devstack and unit test CI jobs","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openinfra/python-tempestconf/commit/301ed344a2f01b6928a150cba2017254306931f0"}]}],"author":{"name":"Thomas Bechtold","email":"thomasbechtold@jpberlin.de","date":"2026-06-05 05:59:21.000000000","tz":120},"committer":{"name":"Thomas Bechtold","email":"thomasbechtold@jpberlin.de","date":"2026-06-05 14:58:14.000000000","tz":120},"subject":"Fix service availability when a service has multiple types","message":"Fix service availability when a service has multiple types\n\nServices.discover() loops over every catalog type returned by a\nservice class and, for each type that is not present in the catalog,\ninstantiates the class and sets its availability to False. When a\nservice is registered under more than one type (an \"alias\", e.g.\ncinder as \u0027block-storage\u0027 and the legacy \u0027volumev3\u0027, or manila as\n\u0027share\u0027 and \u0027sharev2\u0027), an absent alias overrides the availability\nalready set by a present one. The final result then depends purely on\nthe order of the types: with [\u0027block-storage\u0027, \u0027volumev3\u0027] and only\n\u0027block-storage\u0027 registered, cinder ends up as service_available\u003dFalse\neven though the service was discovered correctly.\n\nUse Python\u0027s for/else so the service is only marked unavailable when\nnone of its types matched, and stop at the first type that is present\n(the types are aliases for the same service).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nChange-Id: I5dcae665b98ac9a71751916fe336f920b2ec415e\nSigned-off-by: Thomas Bechtold \u003cthomasbechtold@jpberlin.de\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openinfra/python-tempestconf/commit/4231eb28566f496abcfba35d4c227829402e7a43"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openinfra/python-tempestconf/commit/4231eb28566f496abcfba35d4c227829402e7a43"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
