)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"9f59a177b4809a34fbf2b24cd028f7582a242608","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e5daf8f2_fce1a796","updated":"2026-05-20 13:53:26.000000000","message":"According to me, the test is correct, well structured, and covers a real gap in functional coverage for bug #2112808. The mocks are well explained. This patch looks good to me.","commit_id":"ee85b651eeec07720438ba8771b68b1ee135d26b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"4b77b801ea21af5209615d74b7abc9e26b20b94b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a5c1fd6e_d5de38c8","updated":"2026-05-15 23:14:22.000000000","message":"This looks good to me","commit_id":"ee85b651eeec07720438ba8771b68b1ee135d26b"}],"nova/tests/functional/libvirt/test_live_migration.py":[{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"9f59a177b4809a34fbf2b24cd028f7582a242608","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        # Unlike the API abort path, cleanup_host only sets the migration"},{"line_number":255,"context_line":"        # status to \u0027cancelled\u0027 without reverting the instance task_state."},{"line_number":256,"context_line":"        #"},{"line_number":257,"context_line":"        # Two mocks are required to avoid test-environment deadlocks:"},{"line_number":258,"context_line":"        # 1. driver.cleanup_host calls _host.cleanup() which blocks for up to"},{"line_number":259,"context_line":"        #    150 s draining the delayed-event executor — skip it."},{"line_number":260,"context_line":"        # 2. The test fixture force live_migration_executor.shutdown(wait\u003dTrue)"},{"line_number":261,"context_line":"        #    globally; waiting here would block because server_a\u0027s greenlet is"},{"line_number":262,"context_line":"        #    still running (it holds self.lock_live_migration). Override the"},{"line_number":263,"context_line":"        #    instance-level shutdown so the fixture\u0027s class-level patch is"},{"line_number":264,"context_line":"        #    bypassed, letting _cleanup_live_migrations_in_pool() cancel the"},{"line_number":265,"context_line":"        #    queued futures without waiting for the running one."},{"line_number":266,"context_line":"        with mock.patch.object(self.src.driver, \u0027cleanup_host\u0027), \\"},{"line_number":267,"context_line":"             mock.patch.object("},{"line_number":268,"context_line":"                 self.src.manager._live_migration_executor,"}],"source_content_type":"text/x-python","patch_set":1,"id":"d1eff8ad_83a59da4","line":265,"range":{"start_line":257,"start_character":0,"end_line":265,"end_character":64},"updated":"2026-05-20 13:53:26.000000000","message":"Cool to have explained the mocks. 👍","commit_id":"ee85b651eeec07720438ba8771b68b1ee135d26b"}]}
