)]}'
{"id":"openstack%2Fopenstack-helm~1011023","triplet_id":"openstack%2Fopenstack-helm~master~I193197991d0d4581d038a50e217393a8a7a699f5","project":"openstack/openstack-helm","branch":"master","attention_set":{},"removed_from_attention_set":{"5890":{"account":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"last_update":"2026-10-19 18:47:21.000000000","reason":"Change was submitted"}},"hashtags":[],"change_id":"I193197991d0d4581d038a50e217393a8a7a699f5","subject":"feat(watcher): run the applier as a StatefulSet","status":"MERGED","created":"2026-10-16 22:14:19.000000000","updated":"2026-10-19 18:48:28.000000000","submitted":"2026-10-19 18:47:21.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"1011023","meta_rev_id":"09bc04a6f19476909e6ec355a954298e2d3907e2","_number":1011023,"virtual_id_number":1011023,"owner":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},{"value":0,"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-10-19 18:47:20.000000000","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":{"approved":{"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},"all":[{"value":2,"date":"2026-10-19 17:02:38.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},{"value":2,"date":"2026-10-19 13:57:03.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},{"value":0,"_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":{"approved":{"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},"all":[{"value":1,"date":"2026-10-19 17:02:38.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},{"value":0,"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},{"value":0,"_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":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-10-16 22:55:16.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"},{"updated":"2026-10-19 13:57:03.000000000","updated_by":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"reviewer":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"state":"REVIEWER"},{"updated":"2026-10-19 17:02:38.000000000","updated_by":{"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},"reviewer":{"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},"state":"REVIEWER"}],"messages":[{"id":"0fdb0467bc05631c9bccf167fa357441e55445d4","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"date":"2026-10-16 22:14:19.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"2e826febd7880ecdb3fef659dfc7f32a28399123","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-16 22:55:16.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/86ab5db755dd41c78fb791317159f816\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/4bad1e173c7e4ddc88845b8d5afa28cf : SUCCESS in 2m 20s\n- openstack-helm-linter https://zuul.opendev.org/t/openstack/build/6dd7c61d7e254c47b4c1b763733acdb5 : SUCCESS in 1m 59s\n- openstack-helm-pre-commit https://zuul.opendev.org/t/openstack/build/e329ab6092de46c19438cc020d17a149 : SUCCESS in 2m 44s\n- openstack-helm-release-notes https://zuul.opendev.org/t/openstack/build/20c50e9292ef4a35aa0b5423c68ed774 : SUCCESS in 1m 35s\n- openstack-helm-build-charts https://zuul.opendev.org/t/openstack/build/a1adffed5ba74dd88fa67ad91e6ee3b2 : SUCCESS in 2m 01s\n- openstack-helm-watcher-2026-1-ubuntu_noble https://zuul.opendev.org/t/openstack/build/7d05d6e6bda344c6a1b734629183b0f3 : SUCCESS in 36m 34s","accounts_in_message":[],"_revision_number":1},{"id":"02b81d6a4756645ad434bda424a339db3216f1c0","author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"date":"2026-10-19 13:57:03.000000000","message":"Patch Set 1: Code-Review+2","accounts_in_message":[],"_revision_number":1},{"id":"89c52bc77a16b90eb4154d0f0bb6f22eab743dda","author":{"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},"date":"2026-10-19 17:02:38.000000000","message":"Patch Set 1: Code-Review+2 Workflow+1","accounts_in_message":[],"_revision_number":1},{"id":"3e04899852230636b26961358c72a71fa5c3999e","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-19 17:02:52.000000000","message":"Patch Set 1: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":1},{"id":"ed2a066b9c8f66bb492dc0133a339e25d40738fc","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-19 18:47:20.000000000","message":"Patch Set 1: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/18e7e07665f54df3996629fbe565bfd1\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/c169f327cfe449b3a9f6c66543ce0659 : SUCCESS in 3m 56s\n- openstack-helm-linter https://zuul.opendev.org/t/openstack/build/67da62b23b5d4cbaa46367df6f2fd0fe : SUCCESS in 3m 08s\n- openstack-helm-release-notes https://zuul.opendev.org/t/openstack/build/bc28c3a0ba774a97823459edd0491417 : SUCCESS in 1m 44s\n- openstack-helm-compute-kit-2026-1-ubuntu_noble https://zuul.opendev.org/t/openstack/build/3a5fa3f071794737af95b2a7d4b23ba7 : SUCCESS in 1h 38m 35s\n- openstack-helm-logging https://zuul.opendev.org/t/openstack/build/88404957889a43a6905c0eff0184d7a5 : SUCCESS in 22m 39s\n- openstack-helm-monitoring https://zuul.opendev.org/t/openstack/build/16860268e89741c083e7724d82d6d5fc : SUCCESS in 29m 42s","accounts_in_message":[],"_revision_number":1},{"id":"1d767a7f1eb677215c72ff53edad0f2c66d89ed8","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-19 18:47:21.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":1},{"id":"09bc04a6f19476909e6ec355a954298e2d3907e2","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-19 18:48:28.000000000","message":"Patch Set 1:\n\nBuild succeeded (promote pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/01500042e0a34d6788ef0be1aa5ff235\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/499fd85170504687bdf64cc26fe31407 : SUCCESS in 44s","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"b8a3040269bc4493e4c3548c571616a047a9f833","revisions":{"b8a3040269bc4493e4c3548c571616a047a9f833":{"kind":"REWORK","_number":1,"created":"2026-10-16 22:14:19.000000000","uploader":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"ref":"refs/changes/23/1011023/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/openstack-helm","ref":"refs/changes/23/1011023/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/openstack-helm refs/changes/23/1011023/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/openstack-helm refs/changes/23/1011023/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/openstack-helm refs/changes/23/1011023/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/openstack-helm refs/changes/23/1011023/1"}}},"commit":{"parents":[{"commit":"8ed53e5dd699718df9d78722aa940bf3e93b7ec7","subject":"fix(watcher): render the decision-engine governing service and strategy","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstack-helm/commit/8ed53e5dd699718df9d78722aa940bf3e93b7ec7"}]}],"author":{"name":"Doug Goldstein","email":"cardoe@cardoe.com","date":"2026-10-01 01:09:27.000000000","tz":-300},"committer":{"name":"Doug Goldstein","email":"cardoe@cardoe.com","date":"2026-10-16 22:13:23.000000000","tz":-300},"subject":"feat(watcher): run the applier as a StatefulSet","message":"feat(watcher): run the applier as a StatefulSet\n\noslo.messaging names the applier\u0027s per-server \u003ctopic\u003e.\u003chost\u003e queue after\nits host, which defaults to the hostname and under a Deployment is the\npod name, so it changed on every rollout. Now that the charts default to\nquorum queues, which cannot be declared auto_delete, every rollout left\nthe previous pod\u0027s queue behind.\n\nThe host matters to the applier beyond the queue. It keys its services\nheartbeat row on it, and on startup _cancel_ongoing_actionplans only\nrecovers the action plans stamped with its own host, so with a pod-name\nhost a restarted applier never recovered its predecessor\u0027s plans; only\nthe leader\u0027s service monitor did, once the old host was marked failed.\n\nReplace deployment-applier.yaml with statefulset-applier.yaml and rename\nmanifests.deployment_applier to manifests.statefulset_applier. The pod\nspec is unchanged. The old value defaulted to true, so an override that\nset it to false to disable the applier would be silently ignored after\nthe rename. Fail rendering if manifests.deployment_applier is set at all\nso such overrides are caught.\n\nRender a headless service named watcher-applier as the StatefulSet\u0027s\ngoverning service, under the same manifests.statefulset_applier value:\na serviceName that names a service which does not exist publishes no\nper-ordinal DNS, so the two are never useful apart. The applier listens\non nothing, so the service declares no ports, which Kubernetes allows\nfor a headless service. It does not publish not-ready addresses because\nthe applier has no readiness probe.\n\nThe update strategy now comes from pod.lifecycle.upgrades.statefulsets,\nwhich the chart already defines.\n\nAssisted-by: Claude Opus 5.5\nChange-Id: I193197991d0d4581d038a50e217393a8a7a699f5\nSigned-off-by: Doug Goldstein \u003ccardoe@cardoe.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstack-helm/commit/b8a3040269bc4493e4c3548c571616a047a9f833"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstack-helm/commit/b8a3040269bc4493e4c3548c571616a047a9f833"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"}},{"label":"Workflow","status":"MAY","applied_by":{"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"}}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX"],"failing_atoms":["label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX"],"failing_atoms":["label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dMAX"],"failing_atoms":["label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
