)]}'
{"id":"openstack%2Fopenstack-helm~1011389","triplet_id":"openstack%2Fopenstack-helm~master~I9e0947e1ce99911172038d3272144ff7fd19769b","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-20 18:42:54.000000000","reason":"Change was submitted"}},"hashtags":[],"change_id":"I9e0947e1ce99911172038d3272144ff7fd19769b","subject":"feat(heat): always run the engine as a StatefulSet","status":"MERGED","created":"2026-10-19 19:55:32.000000000","updated":"2026-10-20 18:42:54.000000000","submitted":"2026-10-20 18:42:54.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":"1011389","meta_rev_id":"b4ff315fa8ba7ab280da3de755826f1642c1206a","_number":1011389,"virtual_id_number":1011389,"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-20 18:42:54.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-20 16:48:10.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 20:52:21.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-20 16:48:10.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-19 20:52:21.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 21:58:06.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-20 16:48:10.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":"5be99dba73e51371ef02548818cc977005112c9a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"date":"2026-10-19 19:55:32.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"aa90edf3d151fda8babebf257006a5f189a66c90","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"date":"2026-10-19 20:06:00.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"1120e61fc4d2d446ac514e39862e70af3b9cef75","author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"date":"2026-10-19 20:52:21.000000000","message":"Patch Set 2: Code-Review+2","accounts_in_message":[],"_revision_number":2},{"id":"fbbf7f7225175c11460a0415591d4cf5847d5731","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-19 21:58:06.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/a9028dbf1f10457b88162f4066f90b61\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/377484387b0a4431912cb9a3e8b40c3e : SUCCESS in 3m 43s\n- openstack-helm-linter https://zuul.opendev.org/t/openstack/build/f2790281c1314d329264760034eb2c16 : SUCCESS in 3m 40s\n- openstack-helm-pre-commit https://zuul.opendev.org/t/openstack/build/d6e120c389174ebb822b02a7d8b2cac4 : SUCCESS in 4m 08s\n- openstack-helm-release-notes https://zuul.opendev.org/t/openstack/build/a8912cef6b734d529cb314a166b309b7 : SUCCESS in 1m 43s\n- openstack-helm-build-charts https://zuul.opendev.org/t/openstack/build/893d69dde7e346daacbce02101e4f018 : SUCCESS in 2m 01s\n- openstack-helm-compute-kit-2025-2-ubuntu_noble https://zuul.opendev.org/t/openstack/build/18873349ade0493fa43d103c910753cd : SUCCESS in 1h 40m 33s\n- openstack-helm-compute-kit-2026-1-ubuntu_noble https://zuul.opendev.org/t/openstack/build/8ec104fca8b645d3897b14e6877a1e0b : SUCCESS in 1h 42m 45s\n- openstack-helm-tls-2026-1-ubuntu_noble https://zuul.opendev.org/t/openstack/build/bee45265d47a4c3c8c5dc8e1416c9fa2 : SUCCESS in 1h 46m 23s\n- openstack-helm-crd-2026-1-ubuntu_noble https://zuul.opendev.org/t/openstack/build/5c82f91cef2a4b3ab7281f02810ab11b : SUCCESS in 1h 32m 58s\n- openstack-helm-operators-2026-1-ubuntu_noble https://zuul.opendev.org/t/openstack/build/1b22ce1570594ede930f5d9b73d6a959 : SUCCESS in 1h 41m 18s\n- openstack-helm-compute-kit-2026-2-ubuntu_resolute https://zuul.opendev.org/t/openstack/build/f15b122e44d640a8b480b0f6fcc9c4e3 : SUCCESS in 1h 12m 39s","accounts_in_message":[],"_revision_number":2},{"id":"cd01ec5a3ed6d922b966a122125ec70b3260d130","author":{"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},"date":"2026-10-20 16:48:10.000000000","message":"Patch Set 2: Code-Review+2 Workflow+1","accounts_in_message":[],"_revision_number":2},{"id":"d74980ff7b0b8e3151bca2b8aeadb80e8935065e","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-20 16:51:54.000000000","message":"Patch Set 2: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":2},{"id":"007eaa068a5431e0d5987b574df9d4bc9e64931e","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-20 18:42:54.000000000","message":"Patch Set 2: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/c7c0fd35d87e42dcb5584e99c95d7408\n\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/4fd69734209841e5982d20182a018da6 : SUCCESS in 3m 49s\n- openstack-helm-linter https://zuul.opendev.org/t/openstack/build/06e71db9c54745c3af0bcfdbd9d0b079 : SUCCESS in 3m 44s\n- openstack-helm-release-notes https://zuul.opendev.org/t/openstack/build/601dd641413c4dfdaf22c0f65d66112c : SUCCESS in 2m 50s\n- openstack-helm-compute-kit-2026-1-ubuntu_noble https://zuul.opendev.org/t/openstack/build/dd4b0fc639eb4bb8b0d3691f0aa17aac : SUCCESS in 1h 06m 48s\n- openstack-helm-logging https://zuul.opendev.org/t/openstack/build/dba39af043c240728efcc73a5d43984b : SUCCESS in 42m 35s\n- openstack-helm-monitoring https://zuul.opendev.org/t/openstack/build/dae058d7261c4ceba6fc16a2d7666f61 : SUCCESS in 24m 41s","accounts_in_message":[],"_revision_number":2},{"id":"b4ff315fa8ba7ab280da3de755826f1642c1206a","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-10-20 18:42:54.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"191935afff516f10a76f7edf210b17bfb524d28e","revisions":{"527d6af4330fb835230a84989e2ce28f55889beb":{"kind":"REWORK","_number":1,"created":"2026-10-19 19:55:32.000000000","uploader":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"ref":"refs/changes/89/1011389/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/openstack-helm","ref":"refs/changes/89/1011389/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/openstack-helm refs/changes/89/1011389/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/openstack-helm refs/changes/89/1011389/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/openstack-helm refs/changes/89/1011389/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/openstack-helm refs/changes/89/1011389/1"}}},"commit":{"parents":[{"commit":"9b56b9eba04c4bf34b53c3213f8051f50f3c2e54","subject":"fix(heat): render the heat-engine governing service","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstack-helm/commit/9b56b9eba04c4bf34b53c3213f8051f50f3c2e54"}]}],"author":{"name":"Doug Goldstein","email":"cardoe@cardoe.com","date":"2026-10-01 01:11:33.000000000","tz":-300},"committer":{"name":"Doug Goldstein","email":"cardoe@cardoe.com","date":"2026-10-19 19:54:33.000000000","tz":-300},"subject":"feat(heat): always run the engine as a StatefulSet","message":"feat(heat): always run the engine as a StatefulSet\n\nheat-engine records socket.gethostname() in its services row, and at\nstartup service_manage_cleanup only removes stale rows whose host,\nbinary and hostname all match its own. Under a Deployment the hostname\nis the pod name, which changes on every rollout, so no engine ever\ncleaned up after its predecessor and the rows were left for the engine\ncleaner cron job. A StatefulSet gives each pod a stable hostname.\n\nThis does not stabilise any queue. conf.heat.DEFAULT.host is fixed, so\nthe engine.\u003chost\u003e queue never depended on the pod name, and the\nheat-engine-listener and engine_worker queues are named after the\nper-process uuid4 engine_id, so they are still left behind on every\nrestart. Fixing that needs a change in heat.\n\nThe chart already offered the StatefulSet as an opt-in, with the\nDeployment winning when both were enabled. Drop the Deployment branch,\nrename the template to statefulset-engine.yaml, make\nmanifests.statefulset_engine default to true and remove\nmanifests.deployment_engine. Because the old value defaulted to true,\nan override setting it to false would be silently ignored, so fail\nrendering if it is set at all. Releases that opted in by setting it to\nfalse must remove it.\n\nThe pod annotations (configmap hashes, release uuid, custom and\nAppArmor annotations) were only rendered on the Deployment branch, so\nthe opt-in StatefulSet dropped them and did not restart on config\nchanges. They are now always rendered. The governing service is gated\non manifests.statefulset_engine alone.\n\nUnlike the neutron conversions this does not set podManagementPolicy:\nParallel. The field cannot be changed on an existing StatefulSet, so it\nwould fail the upgrade of releases that had already opted in.\n\nAssisted-by: Claude Opus 5.5\nChange-Id: I9e0947e1ce99911172038d3272144ff7fd19769b\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/527d6af4330fb835230a84989e2ce28f55889beb"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstack-helm/commit/527d6af4330fb835230a84989e2ce28f55889beb"}]},"branch":"refs/heads/master"},"191935afff516f10a76f7edf210b17bfb524d28e":{"kind":"REWORK","_number":2,"created":"2026-10-19 20:06:00.000000000","uploader":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"ref":"refs/changes/89/1011389/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/openstack-helm","ref":"refs/changes/89/1011389/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/openstack-helm refs/changes/89/1011389/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/openstack-helm refs/changes/89/1011389/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/openstack-helm refs/changes/89/1011389/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/openstack-helm refs/changes/89/1011389/2"}}},"commit":{"parents":[{"commit":"9b56b9eba04c4bf34b53c3213f8051f50f3c2e54","subject":"fix(heat): render the heat-engine governing service","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstack-helm/commit/9b56b9eba04c4bf34b53c3213f8051f50f3c2e54"}]}],"author":{"name":"Doug Goldstein","email":"cardoe@cardoe.com","date":"2026-10-01 01:11:33.000000000","tz":-300},"committer":{"name":"Doug Goldstein","email":"cardoe@cardoe.com","date":"2026-10-19 20:05:53.000000000","tz":-300},"subject":"feat(heat): always run the engine as a StatefulSet","message":"feat(heat): always run the engine as a StatefulSet\n\nheat-engine records socket.gethostname() in its services row, and at\nstartup service_manage_cleanup only removes stale rows whose host,\nbinary and hostname all match its own. Under a Deployment the hostname\nis the pod name, which changes on every rollout, so no engine ever\ncleaned up after its predecessor and the rows were left for the engine\ncleaner cron job. A StatefulSet gives each pod a stable hostname.\n\nThis does not stabilise any queue. conf.heat.DEFAULT.host is fixed, so\nthe engine.\u003chost\u003e queue never depended on the pod name, and the\nheat-engine-listener and engine_worker queues are named after the\nper-process uuid4 engine_id, so they are still left behind on every\nrestart. Fixing that needs a change in heat.\n\nThe chart already offered the StatefulSet as an opt-in, with the\nDeployment winning when both were enabled. Drop the Deployment branch,\nrename the template to statefulset-engine.yaml, make\nmanifests.statefulset_engine default to true and remove\nmanifests.deployment_engine. Because the old value defaulted to true,\nan override setting it to false would be silently ignored, so fail\nrendering if it is set at all. Releases that opted in by setting it to\nfalse must remove it.\n\nThe pod annotations (configmap hashes, release uuid, custom and\nAppArmor annotations) were only rendered on the Deployment branch, so\nthe opt-in StatefulSet dropped them and did not restart on config\nchanges. They are now always rendered. The governing service is gated\non manifests.statefulset_engine alone.\n\nUnlike the neutron conversions this does not set podManagementPolicy:\nParallel. The field cannot be changed on an existing StatefulSet, so it\nwould fail the upgrade of releases that had already opted in.\n\nAssisted-by: Claude Opus 5.5\nChange-Id: I9e0947e1ce99911172038d3272144ff7fd19769b\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/191935afff516f10a76f7edf210b17bfb524d28e"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/openstack-helm/commit/191935afff516f10a76f7edf210b17bfb524d28e"}]},"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":""}}}]}
