)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"34560b86f9e572bfc0814d308aed116472066fc4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"19561526_0f859c20","updated":"2026-02-02 02:43:33.000000000","message":"this lgtm. Considering Workflow -1, not sure if more things you are planning in this otherwise I will upgrade my vote to +2","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f16f406b5f5bcf0d6d6ad278a54bb4c266c21c8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"4e86cbb5_1479df30","updated":"2026-02-04 19:38:10.000000000","message":"lgtm, waiting for gate to be fixed before +W","commit_id":"8017b721fda5b0a3e6383d730f7017a0f407b419"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"034a5128c7b5f3d6dad758c71ec9af88e74d2a05","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"db5e10e3_51cc16c2","updated":"2026-02-05 01:15:51.000000000","message":"recheck and +W as nova-next job fix is merged now","commit_id":"8017b721fda5b0a3e6383d730f7017a0f407b419"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7c4b835f0dfb87de9592581a4440944037d67d23","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"22b91d1f_add4b51c","updated":"2026-02-18 05:04:28.000000000","message":"recheck gate is green now","commit_id":"8017b721fda5b0a3e6383d730f7017a0f407b419"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"515dec9a1680b29735bd33a659c489a3ed587f0f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"143b221a_eba89360","updated":"2026-02-18 08:58:28.000000000","message":"recheck guest kernel crash\n```\ncurrently loaded modules: 8021q 8139cp 8390 9pnet 9pnet_virtio ahci cec dca drm drm_kms_helper e1000 e1000e failover fb_sys_fops garp hid hid_generic i2c_algo_bit igb igbvf ip6_udp_tunnel ip_tables isofs libahci libcrc32c llc mii mrp ne2k_pci net_failover nls_ascii nls_iso8859_1 nls_utf8 pcnet32 qemu_fw_cfg rc_core sctp stp syscopyarea sysfillrect sysimgblt udp_tunnel usbhid virtio_blk virtio_dma_buf virtio_gpu virtio_input virtio_net virtio_rng virtio_scsi virtiofs x_tables \ninfo: initramfs loading root from /dev/vda1\n/sbin/init: can\u0027t load library \u0027libtirpc.so.3\u0027\n[    6.066494] Kernel panic - not syncing: Attempted to kill init! exitcode\u003d0x00001000\n[    6.067126] CPU: 0 PID: 1 Comm: init Not tainted 5.15.0-117-generic #127-Ubuntu\n[    6.067432] Hardware name: OpenStack Foundation OpenStack Nova, BIOS 1.16.3-debian-1.16.3-2 04/01/2014\n[    6.067918] Call Trace:\n[    6.068393]  \u003cTASK\u003e\n[    6.068591]  show_stack+0x52/0x5c\n[    6.069018]  dump_stack_lvl+0x4a/0x63\n[    6.069176]  dump_stack+0x10/0x16\n[    6.069311]  panic+0x15c/0x33b\n[    6.069442]  ? x64_sys_call+0x1e07/0x1fa0\n[    6.069605]  do_exit.cold+0x15/0xa0\n[    6.069839]  __x64_sys_exit+0x1b/0x20\n[    6.070004]  x64_sys_call+0x1f30/0x1fa0\n[    6.070574]  do_syscall_64+0x56/0xb0\n[    6.070775]  ? vfs_write+0x1d5/0x270\n[    6.070924]  ? ksys_write+0x67/0xf0\n[    6.071076]  ? exit_to_user_mode_prepare+0x37/0xb0\n[    6.071257]  ? syscall_exit_to_user_mode+0x2c/0x50\n[    6.071446]  ? x64_sys_call+0x47c/0x1fa0\n[    6.071597]  ? do_syscall_64+0x63/0xb0\n[    6.071954]  ? exit_to_user_mode_prepare+0x37/0xb0\n[    6.072156]  ? syscall_exit_to_user_mode+0x2c/0x50\n[    6.072338]  ? x64_sys_call+0x47c/0x1fa0\n[    6.072573]  ? do_syscall_64+0x63/0xb0\n[    6.075620]  ? vfs_write+0x1d5/0x270\n[    6.077360]  ? ksys_write+0x67/0xf0\n[    6.079017]  ? exit_to_user_mode_prepare+0x37/0xb0\n[    6.080708]  ? syscall_exit_to_user_mode+0x2c/0x50\n[    6.082368]  ? x64_sys_call+0x47c/0x1fa0\n[    6.084020]  ? do_syscall_64+0x63/0xb0\n[    6.085603]  ? handle_mm_fault+0xd8/0x2c0\n[    6.088054]  ? do_user_addr_fault+0x1e7/0x670\n[    6.089638]  ? exit_to_user_mode_prepare+0x37/0xb0\n[    6.091301]  ? irqentry_exit_to_user_mode+0xe/0x20\n[    6.093078]  ? irqentry_exit+0x1d/0x30\n[    6.094674]  ? exc_page_fault+0x89/0x170\n[    6.096243]  entry_SYSCALL_64_after_hwframe+0x6c/0xd6\n[    6.097997] RIP: 0033:0x7f28b56db55e\n[    6.099913] Code: 05 d7 2a 00 00 4c 89 f9 bf 02 00 00 00 48 8d 35 fb 0d 00 00 48 8b 10 31 c0 e8 50 d2 ff ff bf 10 00 00 00 b8 3c 00 00 00 0f 05 \u003c48\u003e 8d 15 f3 2a 00 00 f7 d8 89 02 48 83 ec 20 49 8b 8c 24 b8 00 00\n[    6.103989] RSP: 002b:00007fffac81dbd0 EFLAGS: 00000207 ORIG_RAX: 000000000000003c\n[    6.105874] RAX: ffffffffffffffda RBX: 00007fffac81ee80 RCX: 00007f28b56db55e\n[    6.107738] RDX: 0000000000000002 RSI: 0000000000001000 RDI: 0000000000000010\n[    6.110540] RBP: 00007fffac81ee60 R08: 00007f28b56d4000 R09: 00007f28b56d401a\n[    6.112351] R10: 0000000000000001 R11: 0000000000000207 R12: 00007f28b56d5040\n[    6.114209] R13: 00000000004bae50 R14: 0000000000000000 R15: 0000000000403d66\n[    6.116033]  \u003c/TASK\u003e\n[    6.118273] Kernel Offset: 0x30e00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)\n[    6.120420] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode\u003d0x00001000 ]---\n```","commit_id":"8017b721fda5b0a3e6383d730f7017a0f407b419"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ff40ad57f3d981dfe60ec767a002891daf39a1ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"5a0a0a1e_707ccd98","updated":"2026-02-06 20:27:17.000000000","message":"recheck requeue","commit_id":"8017b721fda5b0a3e6383d730f7017a0f407b419"}],"nova/tests/fixtures/nova.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0f275f13c81cab4093c0d635bb61b2fa6f1d8915","unresolved":true,"context_lines":[{"line_number":2225,"context_line":"        def wrapped_init("},{"line_number":2226,"context_line":"    executor_wrapper: utils.StaticallyDelayingCancellableTaskExecutorWrapper,"},{"line_number":2227,"context_line":"    delay: int,"},{"line_number":2228,"context_line":"     executor):"},{"line_number":2229,"context_line":"            stack \u003d \"\".join(traceback.format_stack())"},{"line_number":2230,"context_line":"            self.addCleanup("},{"line_number":2231,"context_line":"                self._check_wrapper_stopped, executor_wrapper, stack)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8cb05352_0685a487","line":2228,"updated":"2026-01-29 10:30:37.000000000","message":"autopep8","commit_id":"3848433db61a13f9f5c37f0ece7593483e3cf71f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b71b351c77ef11974b8c9df8b167ef7bd647efcf","unresolved":false,"context_lines":[{"line_number":2225,"context_line":"        def wrapped_init("},{"line_number":2226,"context_line":"    executor_wrapper: utils.StaticallyDelayingCancellableTaskExecutorWrapper,"},{"line_number":2227,"context_line":"    delay: int,"},{"line_number":2228,"context_line":"     executor):"},{"line_number":2229,"context_line":"            stack \u003d \"\".join(traceback.format_stack())"},{"line_number":2230,"context_line":"            self.addCleanup("},{"line_number":2231,"context_line":"                self._check_wrapper_stopped, executor_wrapper, stack)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b07c9e6e_eee5df12","line":2228,"in_reply_to":"8cb05352_0685a487","updated":"2026-01-29 10:36:07.000000000","message":"Done","commit_id":"3848433db61a13f9f5c37f0ece7593483e3cf71f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"34560b86f9e572bfc0814d308aed116472066fc4","unresolved":false,"context_lines":[{"line_number":2239,"context_line":"        stack: str,"},{"line_number":2240,"context_line":"    ):"},{"line_number":2241,"context_line":"        if wrapper.is_alive:"},{"line_number":2242,"context_line":"            raise RuntimeError("},{"line_number":2243,"context_line":"                \u0027The test case leaked an active \u0027"},{"line_number":2244,"context_line":"                \u0027nova.utils.StaticallyDelayingCancellableTaskExecutorWrapper\u0027"},{"line_number":2245,"context_line":"                \u0027instance. This can lead to unexpected failures in later test \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"b1c8cdaf_e0c82040","line":2242,"range":{"start_line":2242,"start_character":11,"end_line":2242,"end_character":31},"updated":"2026-02-02 02:43:33.000000000","message":"++","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ed4632623b3a9be05fc277306bae948d4a34b181","unresolved":false,"context_lines":[{"line_number":2216,"context_line":"                \u0027following place:\\n%s\u0027 % stack)"},{"line_number":2217,"context_line":""},{"line_number":2218,"context_line":""},{"line_number":2219,"context_line":"class DelayingExecutorWrapperCleanupFixture(fixtures.Fixture):"},{"line_number":2220,"context_line":"    def setUp(self):"},{"line_number":2221,"context_line":"        super().setUp()"},{"line_number":2222,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dbf667cf_7121f94e","line":2219,"updated":"2026-02-03 15:11:45.000000000","message":"great fixture FTW.","commit_id":"ba2c79089e55f11d4fee2e1810bb7725417c84ae"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d0ae4a50d3e1373e46504a9b8e958145d88418e7","unresolved":true,"context_lines":[{"line_number":2246,"context_line":"                \u0027case. Please ensure that shutdown(wait\u003dtrue) is called on \u0027"},{"line_number":2247,"context_line":"                \u0027the wrapper before the end of the test case e.g. by using \u0027"},{"line_number":2248,"context_line":"                \u0027self.addCleanup(...). The test instantiated the wrapper at \u0027"},{"line_number":2249,"context_line":"                \u0027the following place:\\n%s\u0027 % stack)"}],"source_content_type":"text/x-python","patch_set":10,"id":"94915246_727de4f2","line":2249,"updated":"2026-02-04 20:56:51.000000000","message":"oh nice +1","commit_id":"8017b721fda5b0a3e6383d730f7017a0f407b419"}],"nova/virt/driver.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ed4632623b3a9be05fc277306bae948d4a34b181","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        \"\"\"Clean up anything that is necessary for the driver gracefully stop,"},{"line_number":370,"context_line":"        including ending remote sessions. This is optional."},{"line_number":371,"context_line":"        \"\"\""},{"line_number":372,"context_line":"        pass"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def get_info(self, instance, use_cache\u003dTrue):"},{"line_number":375,"context_line":"        \"\"\"Get the current status of an instance."}],"source_content_type":"text/x-python","patch_set":9,"id":"c35310b2_403ad629","line":372,"updated":"2026-02-03 15:11:45.000000000","message":"yeepeekay, we were already have this API interface 🎉","commit_id":"ba2c79089e55f11d4fee2e1810bb7725417c84ae"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"34560b86f9e572bfc0814d308aed116472066fc4","unresolved":false,"context_lines":[{"line_number":1489,"context_line":"        # conversion which will return value of type unicode."},{"line_number":1490,"context_line":"        return uri and str(uri)"},{"line_number":1491,"context_line":""},{"line_number":1492,"context_line":"    def cleanup_host(self, host):"},{"line_number":1493,"context_line":"        \"\"\"Clean up anything that is necessary for the driver gracefully stop."},{"line_number":1494,"context_line":"        \"\"\""},{"line_number":1495,"context_line":"        self._host.cleanup()"}],"source_content_type":"text/x-python","patch_set":4,"id":"448fd3d6_6e2a778a","line":1492,"range":{"start_line":1492,"start_character":0,"end_line":1492,"end_character":33},"updated":"2026-02-02 02:43:33.000000000","message":"++, compute manager call this during shutdown - https://github.com/openstack/nova/blob/59a7093915298973c72b6d1749a6acd27e0045a9/nova/compute/manager.py#L1818","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"}],"nova/virt/libvirt/host.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"34560b86f9e572bfc0814d308aed116472066fc4","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        \"\"\""},{"line_number":578,"context_line":"        self._delayed_executor \u003d ("},{"line_number":579,"context_line":"            utils.StaticallyDelayingCancellableTaskExecutorWrapper("},{"line_number":580,"context_line":"                delay\u003d15, executor\u003dutils._get_default_executor()))"},{"line_number":581,"context_line":"        self._event_handler.start()"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        # This thread is just for async connection closed event handling."}],"source_content_type":"text/x-python","patch_set":4,"id":"6650c07d_8087f694","line":580,"range":{"start_line":580,"start_character":26,"end_line":580,"end_character":64},"updated":"2026-02-02 02:43:33.000000000","message":"it is using default executor which is shared in compute services so shuting down that should be part of global cleanup in utils.","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38e06444b7265d962b8c5b59db455f1dd46d074c","unresolved":true,"context_lines":[{"line_number":709,"context_line":"    def cleanup(self):"},{"line_number":710,"context_line":"        # TODO(gibi): We might want to stop the _event_handler here as well"},{"line_number":711,"context_line":"        # as the _conn_event_thread loop to have a fully graceful and clean"},{"line_number":712,"context_line":"        # shutdown"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        # If domain STOPPED events are delayed then the executor shutdown can"},{"line_number":715,"context_line":"        # take up to 15 seconds. Also as nova-compute is shutting down not"}],"source_content_type":"text/x-python","patch_set":4,"id":"1969da22_641af7c2","line":712,"updated":"2026-01-29 11:00:32.000000000","message":"@gmaan@ghanshyammann.com this is related to graceful shutdown","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1878e8338199b377cc61805c807d1f9a6dca3159","unresolved":false,"context_lines":[{"line_number":709,"context_line":"    def cleanup(self):"},{"line_number":710,"context_line":"        # TODO(gibi): We might want to stop the _event_handler here as well"},{"line_number":711,"context_line":"        # as the _conn_event_thread loop to have a fully graceful and clean"},{"line_number":712,"context_line":"        # shutdown"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        # If domain STOPPED events are delayed then the executor shutdown can"},{"line_number":715,"context_line":"        # take up to 15 seconds. Also as nova-compute is shutting down not"}],"source_content_type":"text/x-python","patch_set":4,"id":"70399d4c_a2030645","line":712,"in_reply_to":"0606b7cd_2e2a858f","updated":"2026-02-02 19:00:23.000000000","message":"ack and noted in my list","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"34560b86f9e572bfc0814d308aed116472066fc4","unresolved":true,"context_lines":[{"line_number":709,"context_line":"    def cleanup(self):"},{"line_number":710,"context_line":"        # TODO(gibi): We might want to stop the _event_handler here as well"},{"line_number":711,"context_line":"        # as the _conn_event_thread loop to have a fully graceful and clean"},{"line_number":712,"context_line":"        # shutdown"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        # If domain STOPPED events are delayed then the executor shutdown can"},{"line_number":715,"context_line":"        # take up to 15 seconds. Also as nova-compute is shutting down not"}],"source_content_type":"text/x-python","patch_set":4,"id":"42048020_9ded4135","line":712,"in_reply_to":"1969da22_641af7c2","updated":"2026-02-02 02:43:33.000000000","message":"yeah, that we should do so that we stop the libvirt event first and then shutdown the executor.\n\nFor that, we can close the libvirt connection by calling the self._connection_closed() here.\n\nAlso as libvirt.virEventRunDefaultImpl calling thread is daemon, that will stop the virEventRunDefaultImpl when main process exit.\n\nThanks for adding TODO here, If you want do in this change its fine otherwise, I will implement it during graceful shutdown series.","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"69eab74f60d8f6230ba7b76898721a2e5ad3e66c","unresolved":true,"context_lines":[{"line_number":709,"context_line":"    def cleanup(self):"},{"line_number":710,"context_line":"        # TODO(gibi): We might want to stop the _event_handler here as well"},{"line_number":711,"context_line":"        # as the _conn_event_thread loop to have a fully graceful and clean"},{"line_number":712,"context_line":"        # shutdown"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        # If domain STOPPED events are delayed then the executor shutdown can"},{"line_number":715,"context_line":"        # take up to 15 seconds. Also as nova-compute is shutting down not"}],"source_content_type":"text/x-python","patch_set":4,"id":"0606b7cd_2e2a858f","line":712,"in_reply_to":"42048020_9ded4135","updated":"2026-02-02 15:51:53.000000000","message":"I will let you handle it separately.","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"34560b86f9e572bfc0814d308aed116472066fc4","unresolved":false,"context_lines":[{"line_number":717,"context_line":"        # the next nova-compute startup the power states are synced anyhow. So"},{"line_number":718,"context_line":"        # lets cancel all the outstanding delayed events instead of waiting a"},{"line_number":719,"context_line":"        # lot."},{"line_number":720,"context_line":"        for future in list(self._events_delayed.values()):"},{"line_number":721,"context_line":"            future.cancel()"},{"line_number":722,"context_line":"        print(\"host.cleanup shutting down wrapper with wait\")"},{"line_number":723,"context_line":"        if self._delayed_executor:"},{"line_number":724,"context_line":"            self._delayed_executor.shutdown(wait\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f2b5f44_6542c3c3","line":721,"range":{"start_line":720,"start_character":0,"end_line":721,"end_character":27},"updated":"2026-02-02 02:43:33.000000000","message":"yeah, is fine either way, if we keep the already received events then also fine but canceling the one not started is ok as syncup will happen on compute start.","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"36beb5f5d6d70a6566238cd6adef403aa1a20de0","unresolved":true,"context_lines":[{"line_number":721,"context_line":"            future.cancel()"},{"line_number":722,"context_line":"        print(\"host.cleanup shutting down wrapper with wait\")"},{"line_number":723,"context_line":"        if self._delayed_executor:"},{"line_number":724,"context_line":"            self._delayed_executor.shutdown(wait\u003dTrue)"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    def _version_check(self, lv_ver\u003dNone, hv_ver\u003dNone, hv_type\u003dNone,"},{"line_number":727,"context_line":"                       op\u003doperator.lt):"}],"source_content_type":"text/x-python","patch_set":4,"id":"2d3de452_4e9bd221","line":724,"updated":"2026-01-30 15:53:26.000000000","message":"I tested in devstack, it works nicely in eventlet mode during service stop. It still need to wait for deadline of the currently waited event but not any further events queued up. This means a maximum of 15 seconds wait here. We can discuss if we need smarter logic that during shutdown wakes up the task scheduler thread to recheck for cancellation. That can be done with a bit of complexity.\n\n\nI also tried to test this in native threading mode. But stop signal make nova-compute exit immediately. This is probably due to missing signal handling that is being added https://review.opendev.org/c/openstack/oslo.service/+/974024 I will retest this case with that patch included.","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1878e8338199b377cc61805c807d1f9a6dca3159","unresolved":false,"context_lines":[{"line_number":721,"context_line":"            future.cancel()"},{"line_number":722,"context_line":"        print(\"host.cleanup shutting down wrapper with wait\")"},{"line_number":723,"context_line":"        if self._delayed_executor:"},{"line_number":724,"context_line":"            self._delayed_executor.shutdown(wait\u003dTrue)"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    def _version_check(self, lv_ver\u003dNone, hv_ver\u003dNone, hv_type\u003dNone,"},{"line_number":727,"context_line":"                       op\u003doperator.lt):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bbf8ac3e_2bb33bea","line":724,"in_reply_to":"21d93517_3ef85339","updated":"2026-02-02 19:00:23.000000000","message":"++, looks perfect.","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"52010b5ed769963c0c879e01ecce12c37e808b24","unresolved":true,"context_lines":[{"line_number":721,"context_line":"            future.cancel()"},{"line_number":722,"context_line":"        print(\"host.cleanup shutting down wrapper with wait\")"},{"line_number":723,"context_line":"        if self._delayed_executor:"},{"line_number":724,"context_line":"            self._delayed_executor.shutdown(wait\u003dTrue)"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    def _version_check(self, lv_ver\u003dNone, hv_ver\u003dNone, hv_type\u003dNone,"},{"line_number":727,"context_line":"                       op\u003doperator.lt):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5e279dbd_e351f8c6","line":724,"in_reply_to":"2d3de452_4e9bd221","updated":"2026-01-30 16:01:02.000000000","message":"OK. After applying the oslo.service signal patch the native threaded mode start behaving the same was the eventlet mode. So all good here. \n\nWe can still discuss the improvement on the executor.shutdown","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"34560b86f9e572bfc0814d308aed116472066fc4","unresolved":false,"context_lines":[{"line_number":721,"context_line":"            future.cancel()"},{"line_number":722,"context_line":"        print(\"host.cleanup shutting down wrapper with wait\")"},{"line_number":723,"context_line":"        if self._delayed_executor:"},{"line_number":724,"context_line":"            self._delayed_executor.shutdown(wait\u003dTrue)"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    def _version_check(self, lv_ver\u003dNone, hv_ver\u003dNone, hv_type\u003dNone,"},{"line_number":727,"context_line":"                       op\u003doperator.lt):"}],"source_content_type":"text/x-python","patch_set":4,"id":"add4ebc6_3639a990","line":724,"in_reply_to":"5e279dbd_e351f8c6","updated":"2026-02-02 02:43:33.000000000","message":"that is fine as executoer wrapper still check the canceled event before actually submit them so _delayed_executor.shutdown will be faster and will not wait for 15 sec.\n\n- https://review.opendev.org/c/openstack/nova/+/974445/9/nova/utils.py#1508","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ecd33d8eb502b443dfb08fdcc7ee5a5c30d9d7fd","unresolved":true,"context_lines":[{"line_number":721,"context_line":"            future.cancel()"},{"line_number":722,"context_line":"        print(\"host.cleanup shutting down wrapper with wait\")"},{"line_number":723,"context_line":"        if self._delayed_executor:"},{"line_number":724,"context_line":"            self._delayed_executor.shutdown(wait\u003dTrue)"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"    def _version_check(self, lv_ver\u003dNone, hv_ver\u003dNone, hv_type\u003dNone,"},{"line_number":727,"context_line":"                       op\u003doperator.lt):"}],"source_content_type":"text/x-python","patch_set":4,"id":"21d93517_3ef85339","line":724,"in_reply_to":"add4ebc6_3639a990","updated":"2026-02-02 12:48:14.000000000","message":"\u003e It still need to wait for deadline of the currently waited event but not any further events queued up. This means a maximum of 15 seconds wait here. We can discuss if we need smarter logic that during shutdown wakes up the task scheduler thread to recheck for cancellation. That can be done with a bit of\n\nI improved on this in the last PR of the parent patch. The shutdown of the wrapper wakes the scheduler thread even if it is waiting for a task deadline so the scheduler thread can check if the future is cancelled (then skip it) or not cancelled (go back to waiting for its deadline). This means that here where libvirt first cancels all the futures, then requests the shutdown, the shutdown will be immediate as the scheduler thread will see that the current task (if any) is already cancelled, so no further waiting for that task will happen.","commit_id":"b6d5d494851e2e2333fc80f7bbb0bb656698e0c8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ed4632623b3a9be05fc277306bae948d4a34b181","unresolved":false,"context_lines":[{"line_number":558,"context_line":"            event.transition \u003d\u003d virtevent.EVENT_LIFECYCLE_STOPPED):"},{"line_number":559,"context_line":"            # Delay STOPPED event, as they may be followed by a STARTED"},{"line_number":560,"context_line":"            # event in case the instance is rebooting"},{"line_number":561,"context_line":"            future \u003d self._delayed_executor.submit_with_delay(  # type: ignore"},{"line_number":562,"context_line":"                self._event_emit, event)"},{"line_number":563,"context_line":"            self._events_delayed[event.uuid] \u003d future"},{"line_number":564,"context_line":"            # add callback to cleanup self._events_delayed dict after"}],"source_content_type":"text/x-python","patch_set":9,"id":"260221da_e0d22ba2","line":561,"range":{"start_line":561,"start_character":63,"end_line":561,"end_character":78},"updated":"2026-02-03 15:11:45.000000000","message":"I so much enjoy static typing...\n\nNote for others: that\u0027s b/c mypy cries about the fact _delayed_executor *could* be None but there is actually no possibility for this b/c of the fact we call _init_events() before always.","commit_id":"ba2c79089e55f11d4fee2e1810bb7725417c84ae"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ed4632623b3a9be05fc277306bae948d4a34b181","unresolved":true,"context_lines":[{"line_number":709,"context_line":"    def cleanup(self):"},{"line_number":710,"context_line":"        # TODO(gibi): We might want to stop the _event_handler here as well"},{"line_number":711,"context_line":"        # as the _conn_event_thread loop to have a fully graceful and clean"},{"line_number":712,"context_line":"        # shutdown"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"        # If domain STOPPED events are delayed then the executor shutdown can"},{"line_number":715,"context_line":"        # take up to 15 seconds. Also as nova-compute is shutting down not"}],"source_content_type":"text/x-python","patch_set":9,"id":"d5995eb6_d92258d0","line":712,"updated":"2026-02-03 15:11:45.000000000","message":"yeah I see some possibility where we could race when calling cleanup() if another task would arrive before we shutdown the executor at L724, but let\u0027s fix this with the graceful shutdown feature.","commit_id":"ba2c79089e55f11d4fee2e1810bb7725417c84ae"}]}
