)]}'
{"nova/compute/api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4f1e2c18ac94be2c3f96958f5fd0eb566d093674","unresolved":false,"context_lines":[{"line_number":3668,"context_line":"            # guard against going over quota during a race at this time because"},{"line_number":3669,"context_line":"            # the resource consumption for this operation is written to the"},{"line_number":3670,"context_line":"            # database by compute."},{"line_number":3671,"context_line":"            self.compute_rpcapi.revert_resize(context, instance,"},{"line_number":3672,"context_line":"                                              migration,"},{"line_number":3673,"context_line":"                                              migration.dest_compute,"},{"line_number":3674,"context_line":"                                              reqspec)"},{"line_number":3675,"context_line":""},{"line_number":3676,"context_line":"    @check_instance_lock"},{"line_number":3677,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.RESIZED])"}],"source_content_type":"text/x-python","patch_set":56,"id":"3fa7e38b_47ac1a87","line":3674,"range":{"start_line":3671,"start_character":46,"end_line":3674,"end_character":54},"updated":"2019-12-13 11:49:53.000000000","message":"could\u0027ve rewrapped","commit_id":"216640115c80723b676ab290d99fc1549526214f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"19ef1f40775b92b936c863adc4fd234f8f7ebf5c","unresolved":false,"context_lines":[{"line_number":3668,"context_line":"            # guard against going over quota during a race at this time because"},{"line_number":3669,"context_line":"            # the resource consumption for this operation is written to the"},{"line_number":3670,"context_line":"            # database by compute."},{"line_number":3671,"context_line":"            self.compute_rpcapi.revert_resize(context, instance,"},{"line_number":3672,"context_line":"                                              migration,"},{"line_number":3673,"context_line":"                                              migration.dest_compute,"},{"line_number":3674,"context_line":"                                              reqspec)"},{"line_number":3675,"context_line":""},{"line_number":3676,"context_line":"    @check_instance_lock"},{"line_number":3677,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.RESIZED])"}],"source_content_type":"text/x-python","patch_set":56,"id":"3fa7e38b_0f1b981b","line":3674,"range":{"start_line":3671,"start_character":46,"end_line":3674,"end_character":54},"in_reply_to":"3fa7e38b_47ac1a87","updated":"2019-12-13 14:59:33.000000000","message":"But that would be an unrelated change young Stephen.","commit_id":"216640115c80723b676ab290d99fc1549526214f"}],"nova/tests/functional/test_cross_cell_migrate.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"472db54f86c64e0d12ea9ddf93088f3bc9aca854","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        ).body[\u0027instanceAction\u0027]"},{"line_number":417,"context_line":"        events_by_name \u003d {event[\u0027event\u0027]: event for event in detail[\u0027events\u0027]}"},{"line_number":418,"context_line":"        # There are two events:"},{"line_number":419,"context_line":"        # - conductor_revert_snapshot_based_resize which is copied from the"},{"line_number":420,"context_line":"        #   target cell database and record in conductor"},{"line_number":421,"context_line":"        # - compute_finish_revert_snapshot_based_resize_at_source which is from"},{"line_number":422,"context_line":"        #   the source compute service method"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_3c31aaa3","line":419,"range":{"start_line":419,"start_character":12,"end_line":419,"end_character":50},"updated":"2019-02-20 20:08:32.000000000","message":"Maybe we should remove this. I\u0027m curious as to why conductor_confirm_snapshot_based_resize doesn\u0027t show up for the confirm scenario...","commit_id":"08b33c5d67bee384b75efa59bd8c2eafefbedf41"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1346ec39786aadb90715ea065b319a1ba7141caf","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        ).body[\u0027instanceAction\u0027]"},{"line_number":417,"context_line":"        events_by_name \u003d {event[\u0027event\u0027]: event for event in detail[\u0027events\u0027]}"},{"line_number":418,"context_line":"        # There are two events:"},{"line_number":419,"context_line":"        # - conductor_revert_snapshot_based_resize which is copied from the"},{"line_number":420,"context_line":"        #   target cell database and record in conductor"},{"line_number":421,"context_line":"        # - compute_finish_revert_snapshot_based_resize_at_source which is from"},{"line_number":422,"context_line":"        #   the source compute service method"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_44231059","line":419,"range":{"start_line":419,"start_character":12,"end_line":419,"end_character":50},"in_reply_to":"9fdfeff1_3c31aaa3","updated":"2019-02-26 15:36:28.000000000","message":"Left a TODO.","commit_id":"08b33c5d67bee384b75efa59bd8c2eafefbedf41"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"472db54f86c64e0d12ea9ddf93088f3bc9aca854","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        self.assert_resize_revert_actions(server, source_host)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        # Make sure the guest is on the source node hypervisor and not on the"},{"line_number":499,"context_line":"        # target node hypervisor."},{"line_number":500,"context_line":"        source_guest_uuids \u003d ("},{"line_number":501,"context_line":"            self.computes[source_host].manager.driver.list_instance_uuids())"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_3cbf6ad1","line":498,"updated":"2019-02-20 20:08:32.000000000","message":"Should probably do this in the confirm test also.","commit_id":"08b33c5d67bee384b75efa59bd8c2eafefbedf41"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1346ec39786aadb90715ea065b319a1ba7141caf","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"        self.assert_resize_revert_actions(server, source_host)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"        # Make sure the guest is on the source node hypervisor and not on the"},{"line_number":499,"context_line":"        # target node hypervisor."},{"line_number":500,"context_line":"        source_guest_uuids \u003d ("},{"line_number":501,"context_line":"            self.computes[source_host].manager.driver.list_instance_uuids())"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_e46564b0","line":498,"in_reply_to":"9fdfeff1_3cbf6ad1","updated":"2019-02-26 15:36:28.000000000","message":"Done","commit_id":"08b33c5d67bee384b75efa59bd8c2eafefbedf41"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"472db54f86c64e0d12ea9ddf93088f3bc9aca854","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        self.assertNotIn(server[\u0027id\u0027], target_guest_uuids,"},{"line_number":507,"context_line":"                         \u0027Guest is still running on the target hypervisor.\u0027)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        # Assert the target host hypervisor usage is back to 0 and the source"},{"line_number":510,"context_line":"        # is back to using the old flavor."},{"line_number":511,"context_line":"        no_usage \u003d {\u0027vcpus\u0027: 0, \u0027disk\u0027: 0, \u0027ram\u0027: 0}"},{"line_number":512,"context_line":"        self.assert_hypervisor_usage("}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_9ccd3688","line":509,"updated":"2019-02-20 20:08:32.000000000","message":"And this.","commit_id":"08b33c5d67bee384b75efa59bd8c2eafefbedf41"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1346ec39786aadb90715ea065b319a1ba7141caf","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        self.assertNotIn(server[\u0027id\u0027], target_guest_uuids,"},{"line_number":507,"context_line":"                         \u0027Guest is still running on the target hypervisor.\u0027)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        # Assert the target host hypervisor usage is back to 0 and the source"},{"line_number":510,"context_line":"        # is back to using the old flavor."},{"line_number":511,"context_line":"        no_usage \u003d {\u0027vcpus\u0027: 0, \u0027disk\u0027: 0, \u0027ram\u0027: 0}"},{"line_number":512,"context_line":"        self.assert_hypervisor_usage("}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_c4686089","line":509,"in_reply_to":"9fdfeff1_9ccd3688","updated":"2019-02-26 15:36:28.000000000","message":"Done","commit_id":"08b33c5d67bee384b75efa59bd8c2eafefbedf41"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3036c7a70ffd3be04bdc86e188993ef73b4ea36b","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        server \u003d self._wait_for_state_change(self.api, server, \u0027SHUTOFF\u0027)"},{"line_number":745,"context_line":"        self.assertEqual(4, server[\u0027OS-EXT-STS:power_state\u0027],"},{"line_number":746,"context_line":"                         \"Unexpected power state after revertResize.\")"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def test_finish_snapshot_based_resize_at_dest_spawn_fails(self):"},{"line_number":749,"context_line":"        \"\"\"Negative test where the driver spawn fails on the dest host during"},{"line_number":750,"context_line":"        finish_snapshot_based_resize_at_dest which triggers a rollback of the"}],"source_content_type":"text/x-python","patch_set":9,"id":"5fc1f717_4e070f1a","line":747,"updated":"2019-04-03 01:50:49.000000000","message":"Need to test resizing across cells and then resizing again back to the source cell (or resize, revert, then resize again), because I\u0027m hitting a DBDuplicateEntry error in devstack when trying to resize twice:\n\nApr 03 01:46:11 crosscell nova-conductor[14058]: WARNING nova.scheduler.utils [None req-099b5f0b-027d-4fd8-8f0c-bb14e7f53e47 admin admin] Failed to compute_task_migrate_server: (pymysql.err.IntegrityError) (1062, u\"Duplicate entry \u002730156867-3307-43fb-a22f-f11691dbb9e4\u0027 for key \u0027uuid\u0027\") [SQL: u\u0027INSERT INTO instances (created_at, updated_at, dele\n\nThis is likely because we only soft delete the instance in one of the cells (I remember this coming up in the rebuild from cell0 code series as well...).","commit_id":"d2f9ef0bc6aa50b1f04b4250941e75eb3dc64e1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1ce15fb286334eb8dcfc134bfb8b72ea1b36fb35","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        server \u003d self._wait_for_state_change(self.api, server, \u0027SHUTOFF\u0027)"},{"line_number":745,"context_line":"        self.assertEqual(4, server[\u0027OS-EXT-STS:power_state\u0027],"},{"line_number":746,"context_line":"                         \"Unexpected power state after revertResize.\")"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def test_finish_snapshot_based_resize_at_dest_spawn_fails(self):"},{"line_number":749,"context_line":"        \"\"\"Negative test where the driver spawn fails on the dest host during"},{"line_number":750,"context_line":"        finish_snapshot_based_resize_at_dest which triggers a rollback of the"}],"source_content_type":"text/x-python","patch_set":9,"id":"5fc1f717_a266b6ba","line":747,"in_reply_to":"5fc1f717_4e070f1a","updated":"2019-04-03 19:12:00.000000000","message":"Added a TODO.","commit_id":"d2f9ef0bc6aa50b1f04b4250941e75eb3dc64e1f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1f08cbc32b56bd83c6cdd1b5758b3eaaf562c8e9","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        #   target cell database record in conductor"},{"line_number":588,"context_line":"        # - compute_finish_revert_snapshot_based_resize_at_source which is from"},{"line_number":589,"context_line":"        #   the source compute service method"},{"line_number":590,"context_line":"        # FIXME(mriedem): There should really be three events since we need to"},{"line_number":591,"context_line":"        # copy compute_revert_snapshot_based_resize_at_dest to the source cell."},{"line_number":592,"context_line":"        self.assertEqual(2, len(events_by_name), detail)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        self.assertIn(\u0027conductor_revert_snapshot_based_resize\u0027, events_by_name)"},{"line_number":595,"context_line":"        conductor_event \u003d events_by_name["}],"source_content_type":"text/x-python","patch_set":24,"id":"bfb3d3c7_2454e7fe","line":592,"range":{"start_line":590,"start_character":8,"end_line":592,"end_character":56},"updated":"2019-05-24 20:24:56.000000000","message":"Yup I think we hit this in the gate job in a revert test:\n\nhttp://paste.openstack.org/show/752056/","commit_id":"17e9e02c24f37ee5169596ed1ec4d8b866724cc5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4f1e2c18ac94be2c3f96958f5fd0eb566d093674","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        self.assertEqual(\u0027instance.resize_revert.end\u0027, end)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def assert_resize_revert_actions(self, server, source_host, dest_host):"},{"line_number":568,"context_line":"        actions \u003d self.api.api_get("},{"line_number":569,"context_line":"            \u0027/servers/%s/os-instance-actions\u0027 % server[\u0027id\u0027]"},{"line_number":570,"context_line":"        ).body[\u0027instanceActions\u0027]"},{"line_number":571,"context_line":"        # The revert instance action should have been copied from the target"},{"line_number":572,"context_line":"        # cell to the source cell and \"completed\" there, i.e. an event"},{"line_number":573,"context_line":"        # should show up under that revert action."}],"source_content_type":"text/x-python","patch_set":56,"id":"3fa7e38b_c7bfaaa8","line":570,"range":{"start_line":568,"start_character":0,"end_line":570,"end_character":33},"updated":"2019-12-13 11:49:53.000000000","message":"nit:\n\n  actions \u003d self.api.get_instance_actions(server[\u0027id\u0027])\n\nThere\u0027s a good few of these throughout the series that might be worth a follow-up patch","commit_id":"216640115c80723b676ab290d99fc1549526214f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"19ef1f40775b92b936c863adc4fd234f8f7ebf5c","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        self.assertEqual(\u0027instance.resize_revert.end\u0027, end)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def assert_resize_revert_actions(self, server, source_host, dest_host):"},{"line_number":568,"context_line":"        actions \u003d self.api.api_get("},{"line_number":569,"context_line":"            \u0027/servers/%s/os-instance-actions\u0027 % server[\u0027id\u0027]"},{"line_number":570,"context_line":"        ).body[\u0027instanceActions\u0027]"},{"line_number":571,"context_line":"        # The revert instance action should have been copied from the target"},{"line_number":572,"context_line":"        # cell to the source cell and \"completed\" there, i.e. an event"},{"line_number":573,"context_line":"        # should show up under that revert action."}],"source_content_type":"text/x-python","patch_set":56,"id":"3fa7e38b_cf1020f7","line":570,"range":{"start_line":568,"start_character":0,"end_line":570,"end_character":33},"in_reply_to":"3fa7e38b_c7bfaaa8","updated":"2019-12-13 14:59:33.000000000","message":"Ah didn\u0027t realize get_instance_actions existed.\n\n(later)\n\nHeh looks like I added it:\n\nI948b149239f01cca2d4156611bb883580a216a83","commit_id":"216640115c80723b676ab290d99fc1549526214f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"706a4829b4fb298a19f50c9bbac1bcce811fc2b3","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        self.assertIn(\u0027conductor_revert_snapshot_based_resize\u0027, events_by_name)"},{"line_number":591,"context_line":"        conductor_event \u003d events_by_name["},{"line_number":592,"context_line":"            \u0027conductor_revert_snapshot_based_resize\u0027]"},{"line_number":593,"context_line":"        # The result is None because the actual update for this to set the"},{"line_number":594,"context_line":"        # result\u003dSuccess is made on the action event in the target cell"},{"line_number":595,"context_line":"        # database and not reflected back in the source cell. Do we care?"},{"line_number":596,"context_line":"        self.assertIsNone(conductor_event[\u0027result\u0027])"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        self.assertIn(\u0027compute_revert_snapshot_based_resize_at_dest\u0027,"}],"source_content_type":"text/x-python","patch_set":56,"id":"3fa7e38b_3a355ef7","line":595,"range":{"start_line":593,"start_character":1,"end_line":595,"end_character":73},"updated":"2019-12-16 08:55:49.000000000","message":"Is this missing due to the fixup comment in https://review.opendev.org/#/c/638047/56/nova/conductor/manager.py@1883 ?","commit_id":"216640115c80723b676ab290d99fc1549526214f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4fef1971973babdd377bf78da92f8eed106720a6","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        self.assertIn(\u0027conductor_revert_snapshot_based_resize\u0027, events_by_name)"},{"line_number":591,"context_line":"        conductor_event \u003d events_by_name["},{"line_number":592,"context_line":"            \u0027conductor_revert_snapshot_based_resize\u0027]"},{"line_number":593,"context_line":"        # The result is None because the actual update for this to set the"},{"line_number":594,"context_line":"        # result\u003dSuccess is made on the action event in the target cell"},{"line_number":595,"context_line":"        # database and not reflected back in the source cell. Do we care?"},{"line_number":596,"context_line":"        self.assertIsNone(conductor_event[\u0027result\u0027])"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        self.assertIn(\u0027compute_revert_snapshot_based_resize_at_dest\u0027,"}],"source_content_type":"text/x-python","patch_set":56,"id":"3fa7e38b_9f0ebd8d","line":595,"range":{"start_line":593,"start_character":1,"end_line":595,"end_character":73},"in_reply_to":"3fa7e38b_3a355ef7","updated":"2019-12-16 14:16:28.000000000","message":"Yes, and this to an extent:\n\nhttps://review.opendev.org/#/c/638046/56/nova/conductor/tasks/cross_cell_migrate.py@1268\n\nIn ^ we create the action/event back in the source cell but don\u0027t \"finish\" it.\n\nWhen I resolve the FIXME you linked to I can also look at finishing that event in the source cell upon successful revert.","commit_id":"216640115c80723b676ab290d99fc1549526214f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b554251a81ac8659e842a791fb27071009b7842e","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        self.assertIn(\u0027conductor_revert_snapshot_based_resize\u0027, events_by_name)"},{"line_number":591,"context_line":"        conductor_event \u003d events_by_name["},{"line_number":592,"context_line":"            \u0027conductor_revert_snapshot_based_resize\u0027]"},{"line_number":593,"context_line":"        # The result is None because the actual update for this to set the"},{"line_number":594,"context_line":"        # result\u003dSuccess is made on the action event in the target cell"},{"line_number":595,"context_line":"        # database and not reflected back in the source cell. Do we care?"},{"line_number":596,"context_line":"        self.assertIsNone(conductor_event[\u0027result\u0027])"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        self.assertIn(\u0027compute_revert_snapshot_based_resize_at_dest\u0027,"}],"source_content_type":"text/x-python","patch_set":56,"id":"3fa7e38b_9000ea6b","line":595,"range":{"start_line":593,"start_character":1,"end_line":595,"end_character":73},"in_reply_to":"3fa7e38b_9f0ebd8d","updated":"2019-12-16 16:26:06.000000000","message":"Done: https://review.opendev.org/699238","commit_id":"216640115c80723b676ab290d99fc1549526214f"}]}
