)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"03b2345357b431618ee6f027adb102e381244672","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add functional tests to reproduce bug #1994983"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If user issues an API call to stop a libvirt"},{"line_number":10,"context_line":"instance when its compute node (source compute) is is offline and"},{"line_number":11,"context_line":"then evacuates this instance, then evacuated instance would be"},{"line_number":12,"context_line":"stopped when source compute node will come back online."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7fcd1801_7e4db18c","line":10,"range":{"start_line":10,"start_character":51,"end_line":10,"end_character":53},"updated":"2023-06-22 09:24:09.000000000","message":"nit* double is","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"2e92ba079bc685f3eea0e228c1bf9dfaf406635b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add functional tests to reproduce bug #1994983"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If user issues an API call to stop a libvirt"},{"line_number":10,"context_line":"instance when its compute node (source compute) is is offline and"},{"line_number":11,"context_line":"then evacuates this instance, then evacuated instance would be"},{"line_number":12,"context_line":"stopped when source compute node will come back online."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"059197e2_741e97e1","line":10,"range":{"start_line":10,"start_character":51,"end_line":10,"end_character":53},"in_reply_to":"7fcd1801_7e4db18c","updated":"2023-06-29 16:47:28.000000000","message":"Thank you :-)","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fd2e51092243d65e21c50545b6b8e182cb5154b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"09ede061_ca42c71e","updated":"2023-06-05 22:12:55.000000000","message":"-1 more for question visibility than anything else. Also, what\u0027s the value in reproducing this with the fake virt driver? I have to admit being more confused by it than gaining any improved understanding (which the libvirt driver test definitely gives).","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c654449157edf223af0a6c1964f1dd1b45132b5d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"d0aed04b_a2505703","updated":"2023-06-30 14:24:04.000000000","message":"Way better, clear and concise reproducer. Small nit inline.","commit_id":"4e3fd2ab64556d5977da3cd68fb5448b5f557fb4"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8c89850ae0416b68cb184195e0d18df284d5a69e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1569947a_3d8e0149","updated":"2023-07-01 08:35:34.000000000","message":"reproducer works for me","commit_id":"4e3fd2ab64556d5977da3cd68fb5448b5f557fb4"}],"nova/tests/functional/integrated_helpers.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fd2e51092243d65e21c50545b6b8e182cb5154b2","unresolved":true,"context_lines":[{"line_number":1226,"context_line":"        super(_IntegratedTestBase, self).setUp()"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"        # Traditionally Nova functional tests used CastAsCallFixture to"},{"line_number":1229,"context_line":"        # replace RPC calls (and wait for reply) with RPC casts. This"},{"line_number":1230,"context_line":"        # was very useful for many test cases, but some functional tests"},{"line_number":1231,"context_line":"        # need to use RPC casts. RPC casts would be used if"},{"line_number":1232,"context_line":"        # RPC_CAST_AS_A_CALL flag is set to False"}],"source_content_type":"text/x-python","patch_set":5,"id":"11bc9ad5_e810a2de","line":1229,"updated":"2023-06-05 22:12:55.000000000","message":"Other way around, replace casts with calls :)","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"2e92ba079bc685f3eea0e228c1bf9dfaf406635b","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"        super(_IntegratedTestBase, self).setUp()"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"        # Traditionally Nova functional tests used CastAsCallFixture to"},{"line_number":1229,"context_line":"        # replace RPC calls (and wait for reply) with RPC casts. This"},{"line_number":1230,"context_line":"        # was very useful for many test cases, but some functional tests"},{"line_number":1231,"context_line":"        # need to use RPC casts. RPC casts would be used if"},{"line_number":1232,"context_line":"        # RPC_CAST_AS_A_CALL flag is set to False"}],"source_content_type":"text/x-python","patch_set":5,"id":"bcc71dbb_642b9c06","line":1229,"in_reply_to":"11bc9ad5_e810a2de","updated":"2023-06-29 16:47:28.000000000","message":"Done","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"}],"nova/tests/functional/regressions/test_bug_1994983.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fd2e51092243d65e21c50545b6b8e182cb5154b2","unresolved":true,"context_lines":[{"line_number":176,"context_line":"            mock_power_off, mock_load_driver"},{"line_number":177,"context_line":"        ):"},{"line_number":178,"context_line":"            mock_load_driver.return_value \u003d old_driver"},{"line_number":179,"context_line":"            self.src_new \u003d self.start_service("},{"line_number":180,"context_line":"                \u0027compute\u0027, host\u003dself.src.host, cell_name\u003dcell_name)"},{"line_number":181,"context_line":"            # FIXME(astupnikov). nova-compute should\u0027t ask driver to"},{"line_number":182,"context_line":"            # stop an instance after RPC cast call is received for"}],"source_content_type":"text/x-python","patch_set":5,"id":"3d1d7621_0526743b","line":179,"updated":"2023-06-05 22:12:55.000000000","message":"Really, we have to jump through the old_driver hoops, we can\u0027t just start the service here and then patch its driver\u0027s power_off method?","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"2e92ba079bc685f3eea0e228c1bf9dfaf406635b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            mock_power_off, mock_load_driver"},{"line_number":177,"context_line":"        ):"},{"line_number":178,"context_line":"            mock_load_driver.return_value \u003d old_driver"},{"line_number":179,"context_line":"            self.src_new \u003d self.start_service("},{"line_number":180,"context_line":"                \u0027compute\u0027, host\u003dself.src.host, cell_name\u003dcell_name)"},{"line_number":181,"context_line":"            # FIXME(astupnikov). nova-compute should\u0027t ask driver to"},{"line_number":182,"context_line":"            # stop an instance after RPC cast call is received for"}],"source_content_type":"text/x-python","patch_set":5,"id":"0e3605af_2039c0d7","line":179,"in_reply_to":"3d1d7621_0526743b","updated":"2023-06-29 16:47:28.000000000","message":"Done","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fd2e51092243d65e21c50545b6b8e182cb5154b2","unresolved":true,"context_lines":[{"line_number":190,"context_line":"        # by nova-compute if instance is no longer hosted by it and"},{"line_number":191,"context_line":"        # RPC cast call to stop an instance was received."},{"line_number":192,"context_line":"        mock_power_off.assert_called_once()"},{"line_number":193,"context_line":"        self._wait_for_state_change(server, expected_status\u003d\u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"55f874e4_cff45c30","line":193,"updated":"2023-06-05 22:12:55.000000000","message":"Hold on, this is weird. It seems to be implying that despite the compute manager calling power_off(), the instance remains active because... why exactly?","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"2e92ba079bc685f3eea0e228c1bf9dfaf406635b","unresolved":true,"context_lines":[{"line_number":190,"context_line":"        # by nova-compute if instance is no longer hosted by it and"},{"line_number":191,"context_line":"        # RPC cast call to stop an instance was received."},{"line_number":192,"context_line":"        mock_power_off.assert_called_once()"},{"line_number":193,"context_line":"        self._wait_for_state_change(server, expected_status\u003d\u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"f3ce397e_121a7b80","line":193,"in_reply_to":"55f874e4_cff45c30","updated":"2023-06-29 16:47:28.000000000","message":"Fake virt driver returns exception for power off call if instance is not running locally (same as powervm, vmwareapi and xenapi). So stop call is interrupted and instance\u0027s state is not changed.\n\nAfter conversation with Dan it looks like we will not change this behavior (we will not drop RPC casts if host is no longer running an instance) and we will focus on tuning libvirt driver to return exception if instance wasn\u0027t found (first test). I still think that it is good to have this test for Fake virt driver because it could be useful as a reference. But I am also OK to remove it if it is a must. Please let me know.","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"fb454e2f9b5392b7f0fd3658c9c44361c74ed0bc","unresolved":true,"context_lines":[{"line_number":190,"context_line":"        # by nova-compute if instance is no longer hosted by it and"},{"line_number":191,"context_line":"        # RPC cast call to stop an instance was received."},{"line_number":192,"context_line":"        mock_power_off.assert_called_once()"},{"line_number":193,"context_line":"        self._wait_for_state_change(server, expected_status\u003d\u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fc0c2b23_c5f733d8","line":193,"in_reply_to":"f3ce397e_121a7b80","updated":"2023-06-29 16:48:26.000000000","message":"Forgot to mention this: I have improved comments, so it will be clear what is the purpose of this test.","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"853969741d61c7b6365e3edddae1b787d2326c97","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        # by nova-compute if instance is no longer hosted by it and"},{"line_number":191,"context_line":"        # RPC cast call to stop an instance was received."},{"line_number":192,"context_line":"        mock_power_off.assert_called_once()"},{"line_number":193,"context_line":"        self._wait_for_state_change(server, expected_status\u003d\u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"2f20f37e_63f7c7f2","line":193,"in_reply_to":"fc0c2b23_c5f733d8","updated":"2023-06-30 12:10:20.000000000","message":"Removed it after thinking again.","commit_id":"436337dc76c20b61f71406b8220491e3c502df1d"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8c89850ae0416b68cb184195e0d18df284d5a69e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.src_hostname \u003d self.start_compute(hostname\u003d\u0027src\u0027)"},{"line_number":44,"context_line":"        self.dest_hostname \u003d self.start_compute(hostname\u003d\u0027dest\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.src \u003d self.computes[self.src_hostname]"},{"line_number":47,"context_line":"        self.dest \u003d self.computes[self.dest_hostname]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def test_evacuate_instance(self):"},{"line_number":50,"context_line":"        # Start an instance on source compute"}],"source_content_type":"text/x-python","patch_set":9,"id":"7163f5a8_9d3a932a","line":47,"range":{"start_line":46,"start_character":8,"end_line":47,"end_character":53},"updated":"2023-07-01 08:35:34.000000000","message":"these will have nova service object i.e ability to call compute manager.\n\nthats why later we can just do self.src.stop()","commit_id":"4e3fd2ab64556d5977da3cd68fb5448b5f557fb4"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c654449157edf223af0a6c1964f1dd1b45132b5d","unresolved":true,"context_lines":[{"line_number":78,"context_line":"        # it. Blueprint: bp/allowing-target-state-for-evacuate"},{"line_number":79,"context_line":"        self._wait_for_state_change(self.server, expected_status\u003d\u0027SHUTOFF\u0027)"},{"line_number":80,"context_line":"        self.server \u003d self._start_server(self.server)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # Start source compute service."},{"line_number":83,"context_line":"        # Again, it is impossible to realistically stop and start"},{"line_number":84,"context_line":"        # compute service in this environment, so some code was taken"}],"source_content_type":"text/x-python","patch_set":9,"id":"a0f8041e_4206cb28","line":81,"updated":"2023-06-30 14:24:04.000000000","message":"Can you add a wait for ACTIVE here? Otherwise the assertion at the very end is just repeating what\u0027s on L79, so we don\u0027t know if the server was started correctly and then SHUTOFF because of the bug, or if it just remained SHUTOFF the entire time.","commit_id":"4e3fd2ab64556d5977da3cd68fb5448b5f557fb4"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"4773a51d5e020b365b049ac7bb8df15dee639b91","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # it. Blueprint: bp/allowing-target-state-for-evacuate"},{"line_number":79,"context_line":"        self._wait_for_state_change(self.server, expected_status\u003d\u0027SHUTOFF\u0027)"},{"line_number":80,"context_line":"        self.server \u003d self._start_server(self.server)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # Start source compute service."},{"line_number":83,"context_line":"        # Again, it is impossible to realistically stop and start"},{"line_number":84,"context_line":"        # compute service in this environment, so some code was taken"}],"source_content_type":"text/x-python","patch_set":9,"id":"2b5a59a8_e37d3ac5","line":81,"in_reply_to":"50ec7878_f1d34547","updated":"2023-10-17 19:57:48.000000000","message":"Yep, this _start_server() method will wait till server will become active :-)","commit_id":"4e3fd2ab64556d5977da3cd68fb5448b5f557fb4"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"8c89850ae0416b68cb184195e0d18df284d5a69e","unresolved":true,"context_lines":[{"line_number":78,"context_line":"        # it. Blueprint: bp/allowing-target-state-for-evacuate"},{"line_number":79,"context_line":"        self._wait_for_state_change(self.server, expected_status\u003d\u0027SHUTOFF\u0027)"},{"line_number":80,"context_line":"        self.server \u003d self._start_server(self.server)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # Start source compute service."},{"line_number":83,"context_line":"        # Again, it is impossible to realistically stop and start"},{"line_number":84,"context_line":"        # compute service in this environment, so some code was taken"}],"source_content_type":"text/x-python","patch_set":9,"id":"50ec7878_f1d34547","line":81,"in_reply_to":"a0f8041e_4206cb28","updated":"2023-07-01 08:35:34.000000000","message":"_start_server itself waiting for server to become active.\n\nI believe this will call this https://review.opendev.org/c/openstack/nova/+/863416/9/nova/tests/functional/integrated_helpers.py#626","commit_id":"4e3fd2ab64556d5977da3cd68fb5448b5f557fb4"}]}
