)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7049179b3ef4a8e002e51b81b503f3859392c5c5","unresolved":true,"context_lines":[{"line_number":21,"context_line":"try/except, and the COMPUTE_STATUS_DISABLED trait is synced by the"},{"line_number":22,"context_line":"update_available_resource periodic task as a fallback. The deprecated"},{"line_number":23,"context_line":"os-hosts API path continues using call (default)."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Test Plan:"},{"line_number":26,"context_line":"PASS - Build nova image with fix."},{"line_number":27,"context_line":"PASS - Reproduce original bug scenario: freeze nova-compute process"},{"line_number":28,"context_line":"       on a dedicated compute node, run \"openstack compute service"},{"line_number":29,"context_line":"       set --disable\", then send SIGTERM to nova-api pod. Before fix"},{"line_number":30,"context_line":"       the pod crashes with a segfault; after fix the pod shuts down"},{"line_number":31,"context_line":"       gracefully with no crash."},{"line_number":32,"context_line":"PASS - Disable and re-enable a nova-compute service on a compute node."},{"line_number":33,"context_line":"       Command returns in under 2 seconds and the service status updates"},{"line_number":34,"context_line":"       correctly."},{"line_number":35,"context_line":"PASS - After the compute node recovers, confirm the"},{"line_number":36,"context_line":"       COMPUTE_STATUS_DISABLED trait is synchronized automatically"},{"line_number":37,"context_line":"       by the periodic resource update task."},{"line_number":38,"context_line":"PASS - Run multiple disable/enable cycles while sending SIGTERM to"},{"line_number":39,"context_line":"       the nova-api pod between operations. No API outage, no pod"},{"line_number":40,"context_line":"       restarts observed."},{"line_number":41,"context_line":"PASS - Unit tests updated and passing (test_host_api validates the"},{"line_number":42,"context_line":"       new cast\u003dTrue parameter)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Closes-Bug: #2156927"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5df5776f_42e75d76","line":42,"range":{"start_line":24,"start_character":1,"end_line":42,"end_character":32},"updated":"2026-07-30 18:46:28.000000000","message":"this should not be in the commit message\n\nwith that siad norally we woudl perfer to see a functionl regression test added as a prior command if you can  repoduce it deterministically.","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"f71d22a7873dabf8e4768b2dcb4bbad90b819aef","unresolved":false,"context_lines":[{"line_number":21,"context_line":"try/except, and the COMPUTE_STATUS_DISABLED trait is synced by the"},{"line_number":22,"context_line":"update_available_resource periodic task as a fallback. The deprecated"},{"line_number":23,"context_line":"os-hosts API path continues using call (default)."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Test Plan:"},{"line_number":26,"context_line":"PASS - Build nova image with fix."},{"line_number":27,"context_line":"PASS - Reproduce original bug scenario: freeze nova-compute process"},{"line_number":28,"context_line":"       on a dedicated compute node, run \"openstack compute service"},{"line_number":29,"context_line":"       set --disable\", then send SIGTERM to nova-api pod. Before fix"},{"line_number":30,"context_line":"       the pod crashes with a segfault; after fix the pod shuts down"},{"line_number":31,"context_line":"       gracefully with no crash."},{"line_number":32,"context_line":"PASS - Disable and re-enable a nova-compute service on a compute node."},{"line_number":33,"context_line":"       Command returns in under 2 seconds and the service status updates"},{"line_number":34,"context_line":"       correctly."},{"line_number":35,"context_line":"PASS - After the compute node recovers, confirm the"},{"line_number":36,"context_line":"       COMPUTE_STATUS_DISABLED trait is synchronized automatically"},{"line_number":37,"context_line":"       by the periodic resource update task."},{"line_number":38,"context_line":"PASS - Run multiple disable/enable cycles while sending SIGTERM to"},{"line_number":39,"context_line":"       the nova-api pod between operations. No API outage, no pod"},{"line_number":40,"context_line":"       restarts observed."},{"line_number":41,"context_line":"PASS - Unit tests updated and passing (test_host_api validates the"},{"line_number":42,"context_line":"       new cast\u003dTrue parameter)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Closes-Bug: #2156927"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"52a73f75_b032dea2","line":42,"range":{"start_line":24,"start_character":1,"end_line":42,"end_character":32},"in_reply_to":"5df5776f_42e75d76","updated":"2026-08-11 18:38:27.000000000","message":"Done","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6ba56bb9bb816c0cbc9a63060b8d0e7f96bf689e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a24271a0_6a2474e0","updated":"2026-07-23 15:09:52.000000000","message":"The functional test failures on this patch are legit -- the particular test(s) are asserting about compute traits and if the trait sync is made into a cast rather than a call, tests that want to assert the COMPUTE_STATUS_DISABLED trait will need to do a wait of some sort for the trait to appear in Placement.\n\n-1 for the functional test failures. Other reviewers might have a different opinion than me regarding the \"cast\" keyword arg use.","commit_id":"fb67b8dbecde04427de0555c1065088aa3f25eae"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"896ad73c1797311b5dd748567bd7134e4415fb10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6b404ca5_0a6db741","in_reply_to":"a24271a0_6a2474e0","updated":"2026-07-28 11:26:53.000000000","message":"Done","commit_id":"fb67b8dbecde04427de0555c1065088aa3f25eae"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"8ed315901bd59826acb1656ea12a4bd3424e7ecd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"18228ec1_872cb2e3","updated":"2026-07-25 00:06:52.000000000","message":"This looks good to me. +1 for now to get additional reviewers input about the change of set_host_enabled from a call to a cast.","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"77b6a1afc3ade6456f9fe9f27c9d61dd952d3eab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"39bbe0d9_45b38c63","updated":"2026-07-24 23:59:48.000000000","message":"recheck bug 2161769","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6230344293416d6ca7fc1c9eded09efd5f0dcc01","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"46a379b2_3f8ea42b","in_reply_to":"18228ec1_872cb2e3","updated":"2026-07-30 18:53:49.000000000","message":"i think thi sis ok, the external api bevhior remains blocking\nbut internally we will use a cast in _update_compute_provider_status\n\nchanging the api to a cast woudl change ti form blockign to asyc and that would require a microverison and change of the return code.\n\nbut i think the current approch is ok","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"214162b51da1bb817847a6cccce97ae942c2b54b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ca5bef74_94da1432","in_reply_to":"46a379b2_3f8ea42b","updated":"2026-08-11 13:47:50.000000000","message":"Acknowledged","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ba038bb716f0b4aa90df3dfdddd6611f0052196e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"747e78c6_7cfb08ee","updated":"2026-08-11 16:50:52.000000000","message":"Updates look good to me","commit_id":"457eaeef7acf01566eb1ac2a1e100299639f59d7"}],"nova/compute/api.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6230344293416d6ca7fc1c9eded09efd5f0dcc01","unresolved":true,"context_lines":[{"line_number":6203,"context_line":"        compute_utils.notify_about_host_update(context,"},{"line_number":6204,"context_line":"                                               \u0027set_enabled.start\u0027,"},{"line_number":6205,"context_line":"                                               payload)"},{"line_number":6206,"context_line":"        result \u003d self.rpcapi.set_host_enabled_call(context, enabled\u003denabled,"},{"line_number":6207,"context_line":"                host\u003dhost_name)"},{"line_number":6208,"context_line":"        compute_utils.notify_about_host_update(context,"},{"line_number":6209,"context_line":"                                               \u0027set_enabled.end\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"31059eba_a606c018","line":6206,"range":{"start_line":6206,"start_character":29,"end_line":6206,"end_character":50},"updated":"2026-07-30 18:53:49.000000000","message":"oh its used here missed this the last tiem\n\nok os the api remains syncronus\n\nbut _update_compute_provider_status becomes a cast.","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"214162b51da1bb817847a6cccce97ae942c2b54b","unresolved":false,"context_lines":[{"line_number":6203,"context_line":"        compute_utils.notify_about_host_update(context,"},{"line_number":6204,"context_line":"                                               \u0027set_enabled.start\u0027,"},{"line_number":6205,"context_line":"                                               payload)"},{"line_number":6206,"context_line":"        result \u003d self.rpcapi.set_host_enabled_call(context, enabled\u003denabled,"},{"line_number":6207,"context_line":"                host\u003dhost_name)"},{"line_number":6208,"context_line":"        compute_utils.notify_about_host_update(context,"},{"line_number":6209,"context_line":"                                               \u0027set_enabled.end\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ee6b4d31_6515e119","line":6206,"range":{"start_line":6206,"start_character":29,"end_line":6206,"end_character":50},"in_reply_to":"31059eba_a606c018","updated":"2026-08-11 13:47:50.000000000","message":"Acknowledged","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7049179b3ef4a8e002e51b81b503f3859392c5c5","unresolved":true,"context_lines":[{"line_number":6378,"context_line":"        try:"},{"line_number":6379,"context_line":"            LOG.debug(\u0027Calling the compute service on host %s to sync the \u0027"},{"line_number":6380,"context_line":"                      \u0027COMPUTE_STATUS_DISABLED trait.\u0027, service.host)"},{"line_number":6381,"context_line":"            # Use cast (fire-and-forget) to avoid blocking the API worker"},{"line_number":6382,"context_line":"            # when the compute is unreachable. The trait syncs via periodic"},{"line_number":6383,"context_line":"            # task as fallback."},{"line_number":6384,"context_line":"            self.rpcapi.set_host_enabled(context, service.host, enabled)"},{"line_number":6385,"context_line":"        except Exception:"},{"line_number":6386,"context_line":"            LOG.exception(\u0027An error occurred while updating the \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"dcdc93ae_4f647ac8","line":6383,"range":{"start_line":6381,"start_character":12,"end_line":6383,"end_character":31},"updated":"2026-07-30 18:46:28.000000000","message":"this comment is not relevent here","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"033a8d3ef0cbb42215f0e70dcd5e360107cac2fb","unresolved":false,"context_lines":[{"line_number":6378,"context_line":"        try:"},{"line_number":6379,"context_line":"            LOG.debug(\u0027Calling the compute service on host %s to sync the \u0027"},{"line_number":6380,"context_line":"                      \u0027COMPUTE_STATUS_DISABLED trait.\u0027, service.host)"},{"line_number":6381,"context_line":"            # Use cast (fire-and-forget) to avoid blocking the API worker"},{"line_number":6382,"context_line":"            # when the compute is unreachable. The trait syncs via periodic"},{"line_number":6383,"context_line":"            # task as fallback."},{"line_number":6384,"context_line":"            self.rpcapi.set_host_enabled(context, service.host, enabled)"},{"line_number":6385,"context_line":"        except Exception:"},{"line_number":6386,"context_line":"            LOG.exception(\u0027An error occurred while updating the \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"2fe8d035_6e32108b","line":6383,"range":{"start_line":6381,"start_character":12,"end_line":6383,"end_character":31},"in_reply_to":"a47e81a5_f8860991","updated":"2026-07-30 19:17:41.000000000","message":"It was my suggestion to have the two functions separated and change the name of the \"old/legacy\" one rather than the new/future behavior one. If the intention is that from now on, set_host_enabled should be a cast and we keep the call version for the HostAPI.","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"be58a92c767985974df616f679a4a23639c13b45","unresolved":false,"context_lines":[{"line_number":6378,"context_line":"        try:"},{"line_number":6379,"context_line":"            LOG.debug(\u0027Calling the compute service on host %s to sync the \u0027"},{"line_number":6380,"context_line":"                      \u0027COMPUTE_STATUS_DISABLED trait.\u0027, service.host)"},{"line_number":6381,"context_line":"            # Use cast (fire-and-forget) to avoid blocking the API worker"},{"line_number":6382,"context_line":"            # when the compute is unreachable. The trait syncs via periodic"},{"line_number":6383,"context_line":"            # task as fallback."},{"line_number":6384,"context_line":"            self.rpcapi.set_host_enabled(context, service.host, enabled)"},{"line_number":6385,"context_line":"        except Exception:"},{"line_number":6386,"context_line":"            LOG.exception(\u0027An error occurred while updating the \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"a47e81a5_f8860991","line":6383,"range":{"start_line":6381,"start_character":12,"end_line":6383,"end_character":31},"in_reply_to":"dcdc93ae_4f647ac8","updated":"2026-07-30 18:58:11.000000000","message":"i guess you addtin gthis to diffrencate since you added set_host_enabled_call\n\nand you not endoing this in the fucntion name to avoid aht rpcapi impact of that changeing to \n\nset_host_enabled_cast","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6ba56bb9bb816c0cbc9a63060b8d0e7f96bf689e","unresolved":true,"context_lines":[{"line_number":1434,"context_line":"        return cctxt.call(ctxt, \u0027set_admin_password\u0027,"},{"line_number":1435,"context_line":"                          instance\u003dinstance, new_pass\u003dnew_pass)"},{"line_number":1436,"context_line":""},{"line_number":1437,"context_line":"    def set_host_enabled(self, ctxt, host, enabled, cast\u003dFalse):"},{"line_number":1438,"context_line":"        version \u003d self._ver(ctxt, \u00275.0\u0027)"},{"line_number":1439,"context_line":"        cctxt \u003d self.router.client(ctxt).prepare("},{"line_number":1440,"context_line":"                server\u003dhost, version\u003dversion,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6ea461_5e6d4b99","line":1437,"updated":"2026-07-23 15:09:52.000000000","message":"I think this kwarg to control cast vs call is a bit strange pattern for Nova RPC -- I would prefer personally to add another method such as set_host_enabled_call (given that call will be only in the deprecated host API path) and let set_host_enabled be a cast. IMHO.\n\nAlso for the cast, the call_monitor_timeout and timeout kwargs should be omitted from prepare() as they only apply to calls not casts.","commit_id":"fb67b8dbecde04427de0555c1065088aa3f25eae"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"896ad73c1797311b5dd748567bd7134e4415fb10","unresolved":false,"context_lines":[{"line_number":1434,"context_line":"        return cctxt.call(ctxt, \u0027set_admin_password\u0027,"},{"line_number":1435,"context_line":"                          instance\u003dinstance, new_pass\u003dnew_pass)"},{"line_number":1436,"context_line":""},{"line_number":1437,"context_line":"    def set_host_enabled(self, ctxt, host, enabled, cast\u003dFalse):"},{"line_number":1438,"context_line":"        version \u003d self._ver(ctxt, \u00275.0\u0027)"},{"line_number":1439,"context_line":"        cctxt \u003d self.router.client(ctxt).prepare("},{"line_number":1440,"context_line":"                server\u003dhost, version\u003dversion,"}],"source_content_type":"text/x-python","patch_set":1,"id":"4e39dc40_0300dff5","line":1437,"in_reply_to":"9f6ea461_5e6d4b99","updated":"2026-07-28 11:26:53.000000000","message":"Done","commit_id":"fb67b8dbecde04427de0555c1065088aa3f25eae"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7049179b3ef4a8e002e51b81b503f3859392c5c5","unresolved":true,"context_lines":[{"line_number":1445,"context_line":"                server\u003dhost, version\u003dversion)"},{"line_number":1446,"context_line":"        cctxt.cast(ctxt, \u0027set_host_enabled\u0027, enabled\u003denabled)"},{"line_number":1447,"context_line":""},{"line_number":1448,"context_line":"    def set_host_enabled_call(self, ctxt, host, enabled):"},{"line_number":1449,"context_line":"        \"\"\"Synchronous RPC call to set_host_enabled."},{"line_number":1450,"context_line":""},{"line_number":1451,"context_line":"        Used by the deprecated os-hosts API path which needs a return value."}],"source_content_type":"text/x-python","patch_set":3,"id":"9a487d10_ded86e6e","line":1448,"range":{"start_line":1448,"start_character":3,"end_line":1448,"end_character":57},"updated":"2026-07-30 18:46:28.000000000","message":"this is only used in tests so it shoudl be deleted\n\nin test we have the CAST_AS_CALLL fixture to emulate this when needed","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6230344293416d6ca7fc1c9eded09efd5f0dcc01","unresolved":false,"context_lines":[{"line_number":1445,"context_line":"                server\u003dhost, version\u003dversion)"},{"line_number":1446,"context_line":"        cctxt.cast(ctxt, \u0027set_host_enabled\u0027, enabled\u003denabled)"},{"line_number":1447,"context_line":""},{"line_number":1448,"context_line":"    def set_host_enabled_call(self, ctxt, host, enabled):"},{"line_number":1449,"context_line":"        \"\"\"Synchronous RPC call to set_host_enabled."},{"line_number":1450,"context_line":""},{"line_number":1451,"context_line":"        Used by the deprecated os-hosts API path which needs a return value."}],"source_content_type":"text/x-python","patch_set":3,"id":"8a79aec3_490d4b8e","line":1448,"range":{"start_line":1448,"start_character":3,"end_line":1448,"end_character":57},"in_reply_to":"9a487d10_ded86e6e","updated":"2026-07-30 18:53:49.000000000","message":"its used in the api as well","commit_id":"9741c78d6e9a533ff8d65ddfd772b048901bb124"}]}
