)]}'
{"doc/notification_samples/instance-snapshot-end.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7969646b6f7b0d9a6304993bac10205dc978ee65","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    \"priority\":\"INFO\","},{"line_number":61,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":62,"context_line":"}"},{"line_number":63,"context_line":""}],"source_content_type":"application/json","patch_set":20,"id":"1a95cdbc_eb226251","line":63,"updated":"2016-10-07 11:51:47.000000000","message":"Unnecessary empty line","commit_id":"3d5d93fa026cd3f676fa1c91554e59d6e3f73570"}],"doc/notification_samples/instance-snapshot-start.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7969646b6f7b0d9a6304993bac10205dc978ee65","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    \"priority\":\"INFO\","},{"line_number":61,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":62,"context_line":"}"},{"line_number":63,"context_line":""}],"source_content_type":"application/json","patch_set":20,"id":"1a95cdbc_0b206e47","line":63,"updated":"2016-10-07 11:51:47.000000000","message":"unnecessary empty line","commit_id":"3d5d93fa026cd3f676fa1c91554e59d6e3f73570"}],"nova/objects/fields.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eee47bb6d728c4f058f6eee9ba76ed8eec82ae08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"ba5da102_fdf1bfce","updated":"2016-10-27 12:18:48.000000000","message":"I think the changes in this file is not related to the patch.","commit_id":"e309de0e5fa3ceeb7f8572e407d242408afe7bc0"}],"nova/tests/functional/notification_sample_tests/notification_sample_base.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eee47bb6d728c4f058f6eee9ba76ed8eec82ae08","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        found_server[\u0027reservation_id\u0027] \u003d reservation_id"},{"line_number":173,"context_line":"        return found_server"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _wait_for_versioned_notifications(self, min_count, retries\u003d10):"},{"line_number":176,"context_line":"        for i in range(retries):"},{"line_number":177,"context_line":"            if len(fake_notifier.VERSIONED_NOTIFICATIONS) \u003e\u003d min_count:"},{"line_number":178,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5da102_fdad3f89","line":175,"updated":"2016-10-27 12:18:48.000000000","message":"We could wait for a specific event_type, that way the test would be a bit more readable and the failure message could be a bit more specific and helpful.","commit_id":"e309de0e5fa3ceeb7f8572e407d242408afe7bc0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6db15a7bd1351bb8fb5c8d962117fcc5bbfef2ff","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        found_server[\u0027reservation_id\u0027] \u003d reservation_id"},{"line_number":173,"context_line":"        return found_server"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _wait_for_versioned_notifications(self, min_count, retries\u003d10):"},{"line_number":176,"context_line":"        for i in range(retries):"},{"line_number":177,"context_line":"            if len(fake_notifier.VERSIONED_NOTIFICATIONS) \u003e\u003d min_count:"},{"line_number":178,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_b4e4b90d","line":175,"updated":"2016-10-27 15:43:01.000000000","message":"What do you think about my suggestion in PS24 about this wait function?","commit_id":"39f45da392b9bcd1d9ae7dc241704ede53f260b8"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"ace79ed85412135ef34a8ea9d6f800f1b12dc655","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        found_server[\u0027reservation_id\u0027] \u003d reservation_id"},{"line_number":173,"context_line":"        return found_server"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _wait_for_versioned_notifications(self, min_count, retries\u003d10):"},{"line_number":176,"context_line":"        for i in range(retries):"},{"line_number":177,"context_line":"            if len(fake_notifier.VERSIONED_NOTIFICATIONS) \u003e\u003d min_count:"},{"line_number":178,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba5da102_db63fcda","line":175,"in_reply_to":"ba5da102_b4e4b90d","updated":"2016-10-28 19:22:12.000000000","message":"Yes that sounds better. I put it in the latest patch","commit_id":"39f45da392b9bcd1d9ae7dc241704ede53f260b8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"da7c92ed60647628dd48e501dc7881f43633854b","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        return found_server"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _wait_for_versioned_notifications(self, event_types, retries\u003d10):"},{"line_number":176,"context_line":"        expected_ets \u003d event_types"},{"line_number":177,"context_line":"        for _ in range(retries):"},{"line_number":178,"context_line":"            recv_ets \u003d [str(n[\u0027event_type\u0027]) for n in"},{"line_number":179,"context_line":"                    fake_notifier.VERSIONED_NOTIFICATIONS]"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba5da102_e4fdb809","line":176,"range":{"start_line":176,"start_character":8,"end_line":176,"end_character":34},"updated":"2016-11-04 16:25:53.000000000","message":"If you want to avoid modifying the parameter passed in then you need to copy the list with copy.copy(event_types).\nIf you just want to rename the list then you can name the parameter of the function directly to something like \u0027expected_event_types\u0027","commit_id":"5311dd744f039d03b3e785ce735f9662b01d7f91"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"e98a55de6346affee95b8b6e79f74d942aac7b30","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        return found_server"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _wait_for_versioned_notifications(self, event_types, retries\u003d10):"},{"line_number":176,"context_line":"        expected_ets \u003d event_types"},{"line_number":177,"context_line":"        for _ in range(retries):"},{"line_number":178,"context_line":"            recv_ets \u003d [str(n[\u0027event_type\u0027]) for n in"},{"line_number":179,"context_line":"                    fake_notifier.VERSIONED_NOTIFICATIONS]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a629dbe_06a1cda9","line":176,"range":{"start_line":176,"start_character":8,"end_line":176,"end_character":34},"in_reply_to":"ba5da102_e4fdb809","updated":"2016-11-07 18:00:55.000000000","message":"changed to use copy method","commit_id":"5311dd744f039d03b3e785ce735f9662b01d7f91"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":20217,"name":"Anusha Unnam","email":"anusha.unnam25@gmail.com","username":"aunnam"},"change_message_id":"773e3272e4ff1fdecd716ec3bdb39e961d03a645","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_create_snapshot_server(self):"},{"line_number":139,"context_line":"        server \u003d self._boot_a_server()"},{"line_number":140,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027snapshot\u0027: {}})"},{"line_number":141,"context_line":"        self._wait_for_state_change(server, \u0027SNAPSHOT\u0027)"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_a0e102d3","line":139,"range":{"start_line":139,"start_character":36,"end_line":139,"end_character":38},"updated":"2016-06-21 17:24:03.000000000","message":"add these parameters here then the functional tests will pass. \nextra_params\u003d{\u0027networks\u0027:  [{\u0027port\u0027: NeutronFixture.port_1[\u0027id\u0027]}]})","commit_id":"b13c061b0929b2fe299d7fe8c30ef01fba7e92cd"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"fdbd82928d72415075c969a4cd0f8144c2edaa09","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_create_snapshot_server(self):"},{"line_number":139,"context_line":"        server \u003d self._boot_a_server()"},{"line_number":140,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027snapshot\u0027: {}})"},{"line_number":141,"context_line":"        self._wait_for_state_change(server, \u0027SNAPSHOT\u0027)"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_fb3a9be6","line":139,"range":{"start_line":139,"start_character":36,"end_line":139,"end_character":38},"in_reply_to":"3aaa91ec_a0e102d3","updated":"2016-06-21 17:54:19.000000000","message":"will do. thanks!","commit_id":"b13c061b0929b2fe299d7fe8c30ef01fba7e92cd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cb432002b04fa945f2e2222967c63b9619505512","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    def test_create_snapshot_server(self):"},{"line_number":139,"context_line":"        server \u003d self._boot_a_server("},{"line_number":140,"context_line":"            extra_params\u003d{\u0027networks\u0027: [{\u0027port\u0027: NeutronFixture.port_1[\u0027id\u0027]}]})"},{"line_number":141,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027createImage\u0027: {}})"},{"line_number":142,"context_line":"        self._wait_for_state_change(server, \u0027SNAPSHOT\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_240faae2","line":141,"range":{"start_line":141,"start_character":66,"end_line":141,"end_character":68},"updated":"2016-06-28 11:42:02.000000000","message":"I think you need to specify a name here, you are getting a 400 error from the API.\n\nSee the docs for an example (docs are not fully updated it seems):\nhttp://developer.openstack.org/api-ref/compute/?expanded\u003dcreate-image-createimage-action-detail,lock-server-lock-action-detail,rebuild-server-rebuild-action-detail#create-image-createimage-action\n\nYou can see the json schema here:\nhttps://git.openstack.org/cgit/openstack/nova/tree/nova/api/openstack/compute/schemas/servers.py#n147\n\nJust double checking you know how to run these functional tests locally using tox? tox -efunctional or similar?","commit_id":"be76d9688172b4983e6e62a5e8288cb6ddbd2d79"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3fb63dbcf524ae441cbe105fe1fc6b7e0958be2a","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    def test_create_snapshot_server(self):"},{"line_number":139,"context_line":"        server \u003d self._boot_a_server("},{"line_number":140,"context_line":"            extra_params\u003d{\u0027networks\u0027: [{\u0027port\u0027: NeutronFixture.port_1[\u0027id\u0027]}]})"},{"line_number":141,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027createImage\u0027: {}})"},{"line_number":142,"context_line":"        self._wait_for_state_change(server, \u0027SNAPSHOT\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_a4c8ba75","line":141,"range":{"start_line":141,"start_character":66,"end_line":141,"end_character":68},"in_reply_to":"3aaa91ec_240faae2","updated":"2016-06-28 11:43:06.000000000","message":"just to be clear, I think you need:\n\n  self.api.post_server_action(server[\u0027id\u0027],\n      {\u0027createImage\u0027: {\u0027name\u0027: \u0027test-snap\u0027}})","commit_id":"be76d9688172b4983e6e62a5e8288cb6ddbd2d79"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7558f67ce6d1dea74a8fdb9174a404c12af8ae93","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":255,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":256,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        post \u003d {\u0027unshelve\u0027: None}"},{"line_number":259,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":260,"context_line":"        self._wait_for_state_change(self.admin_api, server, \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a98d1f4_ff0f5034","side":"PARENT","line":257,"updated":"2016-10-03 11:52:30.000000000","message":"I think this lot of removal caused by a wrong conflict resolution during rebase. Could you check it please?","commit_id":"a25c2b2768dd0abb85b8293b4ed862fabb7504c2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7969646b6f7b0d9a6304993bac10205dc978ee65","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def _test_snapshot_server(self, server):"},{"line_number":265,"context_line":"        post \u003d {\u0027createImage\u0027: {\u0027name\u0027: \u0027test-snap\u0027}}"},{"line_number":266,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":267,"context_line":"        time.sleep(3)"},{"line_number":268,"context_line":"        self._wait_for_state_change(self.api, server,"},{"line_number":269,"context_line":"                                    expected_status\u003d\u0027ACTIVE\u0027)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1a95cdbc_ab585a8b","line":267,"updated":"2016-10-07 11:51:47.000000000","message":"I assume you added this sleep to wait until the snapshot is finished as there is no specific server state we can wait for. \n\nI think it would be better to wait for the snapshot-end notification to arrive instead of waiting arbitrary number of seconds.","commit_id":"3d5d93fa026cd3f676fa1c91554e59d6e3f73570"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"857edf61a29209dd3a986df1a97e617e8459779e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from nova.tests.functional.notification_sample_tests \\"},{"line_number":15,"context_line":"    import notification_sample_base"},{"line_number":16,"context_line":"from nova.tests.unit import fake_notifier"},{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TestInstanceNotificationSample("}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_95e92c83","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":11},"updated":"2016-10-13 01:36:24.000000000","message":"It should be before \"from nova import context\".\nSee http://docs.openstack.org/developer/hacking/#import-order-template .","commit_id":"901d4b3e9de2a47fc04601e1640ed4811fb70729"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"857edf61a29209dd3a986df1a97e617e8459779e","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            \u0027instance-snapshot-start\u0027,"},{"line_number":276,"context_line":"            replacements\u003d{"},{"line_number":277,"context_line":"                \u0027reservation_id\u0027:"},{"line_number":278,"context_line":"                    notification_sample_base.NotificationSampleTestBase.ANY,"},{"line_number":279,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":280,"context_line":"                    actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"},{"line_number":281,"context_line":"        self._verify_notification("}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_f58508ad","line":278,"range":{"start_line":278,"start_character":20,"end_line":278,"end_character":75},"updated":"2016-10-13 01:36:24.000000000","message":"It should be \"server[\u0027reservation_id\u0027]\" like line 298.","commit_id":"901d4b3e9de2a47fc04601e1640ed4811fb70729"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"857edf61a29209dd3a986df1a97e617e8459779e","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            \u0027instance-snapshot-end\u0027,"},{"line_number":283,"context_line":"            replacements\u003d{"},{"line_number":284,"context_line":"                \u0027reservation_id\u0027:"},{"line_number":285,"context_line":"                    notification_sample_base.NotificationSampleTestBase.ANY,"},{"line_number":286,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":287,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_15951cdd","line":285,"range":{"start_line":285,"start_character":20,"end_line":285,"end_character":75},"updated":"2016-10-13 01:36:24.000000000","message":"ditto","commit_id":"901d4b3e9de2a47fc04601e1640ed4811fb70729"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"857edf61a29209dd3a986df1a97e617e8459779e","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self._verify_notification("},{"line_number":296,"context_line":"            \u0027instance-suspend-start\u0027,"},{"line_number":297,"context_line":"            replacements\u003d{"},{"line_number":298,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":299,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":300,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"},{"line_number":301,"context_line":"        self._verify_notification("}],"source_content_type":"text/x-python","patch_set":21,"id":"fa6399be_359060ec","line":298,"range":{"start_line":298,"start_character":16,"end_line":298,"end_character":58},"updated":"2016-10-13 01:36:24.000000000","message":"Here","commit_id":"901d4b3e9de2a47fc04601e1640ed4811fb70729"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"7c8f93fdd4e2f8c8bdbefc3f263377375a3eec70","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    def _test_snapshot_server(self, server):"},{"line_number":266,"context_line":"        post \u003d {\u0027createImage\u0027: {\u0027name\u0027: \u0027test-snap\u0027}}"},{"line_number":267,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":268,"context_line":"        retry_count \u003d 0"},{"line_number":269,"context_line":"        while len(fake_notifier.VERSIONED_NOTIFICATIONS) \u003c 2:"},{"line_number":270,"context_line":"            retry_count +\u003d 1"},{"line_number":271,"context_line":"            if retry_count \u003d\u003d 10:"},{"line_number":272,"context_line":"                self.fail(\"Notifications not received for snapshot\")"},{"line_number":273,"context_line":"            time.sleep(0.5)"},{"line_number":274,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":275,"context_line":"        self._verify_notification("},{"line_number":276,"context_line":"            \u0027instance-snapshot-start\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa6399be_bf57ca58","line":273,"range":{"start_line":268,"start_character":0,"end_line":273,"end_character":27},"updated":"2016-10-20 16:31:28.000000000","message":"I think that this code snippet should be extracted as a\nseparate method (it can be useful in the future). Also, I would prefer the version which is\nalready used at some places, that is more readable I think:\n\n    for i in range(10):\n        if len(fake_notifier.VERSIONED_NOTIFICATIONS) \u003e\u003d 2:\n            return\n        time.sleep(0.5)\n    self.fail(\"Notifications not received for snapshot\")","commit_id":"b6cee174e70904bbf229ea77837500119c7ba915"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"da7c92ed60647628dd48e501dc7881f43633854b","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":562,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    def _test_snapshot_server(self, server):"},{"line_number":565,"context_line":"        post \u003d {\u0027createImage\u0027: {\u0027name\u0027: \u0027test-snap\u0027}}"},{"line_number":566,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":567,"context_line":"        self._wait_for_versioned_notifications("}],"source_content_type":"text/x-python","patch_set":29,"id":"ba5da102_3f489987","line":564,"updated":"2016-11-04 16:25:53.000000000","message":"the test fails telling that the instance you try to snapshoot is not active. This message is coming from the FakeVirt driver used in the test that tries to maintain a list of running instances in a simple list and checks if the instance you try to snapshot is in that list. Unfortunately the FakeVirt driver does not handle resize-revert action properly. During resize revert the resized instance is destroyed and the old instance is powered on by finish_revert_migration driver call. FakeVirt driver doesn\u0027t add the instance back to its internal list at that call. Therefore after the resize step in this test case your snapshot step fails in the FakeVirt driver.\n\nThe below change in the FakeVirt make your test pass.\n\ndiff --git a/nova/virt/fake.py b/nova/virt/fake.py\nindex 5b73789..cfbfdb2 100644\n--- a/nova/virt/fake.py\n+++ b/nova/virt/fake.py\n@@ -225,7 +225,8 @@ class FakeDriver(driver.ComputeDriver):\n \n     def finish_revert_migration(self, context, instance, network_info,\n                                 block_device_info\u003dNone, power_on\u003dTrue):\n-        pass\n+        self.instances[instance.uuid] \u003d FakeInstance(\n+            instance.name, power_state.RUNNING, instance.uuid)\n \n     def post_live_migration_at_destination(self, context, instance,\n                                            network_info,","commit_id":"5311dd744f039d03b3e785ce735f9662b01d7f91"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"e98a55de6346affee95b8b6e79f74d942aac7b30","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":562,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"    def _test_snapshot_server(self, server):"},{"line_number":565,"context_line":"        post \u003d {\u0027createImage\u0027: {\u0027name\u0027: \u0027test-snap\u0027}}"},{"line_number":566,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":567,"context_line":"        self._wait_for_versioned_notifications("}],"source_content_type":"text/x-python","patch_set":29,"id":"9a629dbe_a6790132","line":564,"in_reply_to":"ba5da102_3f489987","updated":"2016-11-07 18:00:55.000000000","message":"thank you for the review gibi.\n\nadded the change","commit_id":"5311dd744f039d03b3e785ce735f9662b01d7f91"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5c7bda14d59c40588494a67a373a90f097d438df","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            self._test_shelve_offload_server,"},{"line_number":73,"context_line":"            self._test_unshelve_server,"},{"line_number":74,"context_line":"            self._test_resize_server,"},{"line_number":75,"context_line":"            self._test_snapshot_server,"},{"line_number":76,"context_line":"        ]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        for action in actions:"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a74a57a_a5ce4581","line":75,"updated":"2016-11-23 16:44:58.000000000","message":"I think the implementation of this function is lost in the rebase.","commit_id":"52af236df557c5ee198781caea3d43aa198690f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bf0575ff2099b0596af56aecd1fa4d8b273adee4","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":585,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[3])"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def _test_snapshot_server(self, server):"},{"line_number":588,"context_line":"        post \u003d {\u0027createImage\u0027: {\u0027name\u0027: \u0027test-snap\u0027}}"},{"line_number":589,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":590,"context_line":"        self._wait_for_versioned_notifications("}],"source_content_type":"text/x-python","patch_set":34,"id":"5a74a57a_f459a88f","line":587,"updated":"2016-12-01 01:34:32.000000000","message":"nit: would be nice if this came after _test_resize_server given those tests are all run in a specific order and they re-use the same server.","commit_id":"44b24c37d09ce8215ffef0b73aa0d90301a86459"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"c5b9406d359cb2866c8efcebe58b624d8c0aa532","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":585,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[3])"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def _test_snapshot_server(self, server):"},{"line_number":588,"context_line":"        post \u003d {\u0027createImage\u0027: {\u0027name\u0027: \u0027test-snap\u0027}}"},{"line_number":589,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":590,"context_line":"        self._wait_for_versioned_notifications("}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_6ff983c8","line":587,"in_reply_to":"5a74a57a_f459a88f","updated":"2016-12-01 13:43:33.000000000","message":"Done","commit_id":"44b24c37d09ce8215ffef0b73aa0d90301a86459"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bf0575ff2099b0596af56aecd1fa4d8b273adee4","unresolved":false,"context_lines":[{"line_number":3173,"context_line":"            return_value\u003dmock_context) as mock_context_elevated:"},{"line_number":3174,"context_line":"            self.compute.snapshot_instance(self.context, image_id\u003d\u0027fakesnap\u0027,"},{"line_number":3175,"context_line":"                                           instance\u003dinst_obj)"},{"line_number":3176,"context_line":"            mock_context_elevated.assert_called_with()"},{"line_number":3177,"context_line":"            mock_notify_action.assert_has_calls(["},{"line_number":3178,"context_line":"                mock.call(mock_context, inst_obj, \u0027fake-mini\u0027,"},{"line_number":3179,"context_line":"                          action\u003d\u0027snapshot\u0027, phase\u003d\u0027start\u0027),"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a74a57a_3402403f","line":3176,"range":{"start_line":3176,"start_character":34,"end_line":3176,"end_character":52},"updated":"2016-12-01 01:34:32.000000000","message":"nit: assert_called_once_with() is a bit more accurate, but not a big deal.","commit_id":"44b24c37d09ce8215ffef0b73aa0d90301a86459"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"c5b9406d359cb2866c8efcebe58b624d8c0aa532","unresolved":false,"context_lines":[{"line_number":3173,"context_line":"            return_value\u003dmock_context) as mock_context_elevated:"},{"line_number":3174,"context_line":"            self.compute.snapshot_instance(self.context, image_id\u003d\u0027fakesnap\u0027,"},{"line_number":3175,"context_line":"                                           instance\u003dinst_obj)"},{"line_number":3176,"context_line":"            mock_context_elevated.assert_called_with()"},{"line_number":3177,"context_line":"            mock_notify_action.assert_has_calls(["},{"line_number":3178,"context_line":"                mock.call(mock_context, inst_obj, \u0027fake-mini\u0027,"},{"line_number":3179,"context_line":"                          action\u003d\u0027snapshot\u0027, phase\u003d\u0027start\u0027),"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_af039bb7","line":3176,"range":{"start_line":3176,"start_character":34,"end_line":3176,"end_character":52},"in_reply_to":"5a74a57a_3402403f","updated":"2016-12-01 13:43:33.000000000","message":"Done","commit_id":"44b24c37d09ce8215ffef0b73aa0d90301a86459"}],"nova/tests/unit/objects/test_fields.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eee47bb6d728c4f058f6eee9ba76ed8eec82ae08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"ba5da102_8841630e","updated":"2016-10-27 12:18:48.000000000","message":"This changes seems unrelated","commit_id":"e309de0e5fa3ceeb7f8572e407d242408afe7bc0"}],"nova/virt/fake.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bf0575ff2099b0596af56aecd1fa4d8b273adee4","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def finish_revert_migration(self, context, instance, network_info,"},{"line_number":227,"context_line":"                                block_device_info\u003dNone, power_on\u003dTrue):"},{"line_number":228,"context_line":"        self.instances[instance.uuid] \u003d FakeInstance("},{"line_number":229,"context_line":"            instance.name, power_state.RUNNING, instance.uuid)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def post_live_migration_at_destination(self, context, instance,"},{"line_number":232,"context_line":"                                           network_info,"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a74a57a_f49e0806","line":229,"range":{"start_line":228,"start_character":8,"end_line":229,"end_character":62},"updated":"2016-12-01 01:34:32.000000000","message":"Why is this change needed in here for snapshot related changes?","commit_id":"44b24c37d09ce8215ffef0b73aa0d90301a86459"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"02c482fe148338af621338a2935b1593401f5239","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def finish_revert_migration(self, context, instance, network_info,"},{"line_number":227,"context_line":"                                block_device_info\u003dNone, power_on\u003dTrue):"},{"line_number":228,"context_line":"        self.instances[instance.uuid] \u003d FakeInstance("},{"line_number":229,"context_line":"            instance.name, power_state.RUNNING, instance.uuid)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def post_live_migration_at_destination(self, context, instance,"},{"line_number":232,"context_line":"                                           network_info,"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_12055979","line":229,"range":{"start_line":228,"start_character":8,"end_line":229,"end_character":62},"in_reply_to":"3a71b18c_af9f1b5e","updated":"2016-12-02 11:25:06.000000000","message":"Yeah, this more related to the resize_revert action the resize test does. As the resize patch already merged we either fix this here or in a separate patch.","commit_id":"44b24c37d09ce8215ffef0b73aa0d90301a86459"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"c5b9406d359cb2866c8efcebe58b624d8c0aa532","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def finish_revert_migration(self, context, instance, network_info,"},{"line_number":227,"context_line":"                                block_device_info\u003dNone, power_on\u003dTrue):"},{"line_number":228,"context_line":"        self.instances[instance.uuid] \u003d FakeInstance("},{"line_number":229,"context_line":"            instance.name, power_state.RUNNING, instance.uuid)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def post_live_migration_at_destination(self, context, instance,"},{"line_number":232,"context_line":"                                           network_info,"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_af9f1b5e","line":229,"range":{"start_line":228,"start_character":8,"end_line":229,"end_character":62},"in_reply_to":"5a74a57a_f49e0806","updated":"2016-12-01 13:43:33.000000000","message":"There seems to be an issue with the resize revert where the original instance isn\u0027t added back to the FakeVirt\u0027s list of running instances.\nSince the resize test happens before snapshot test, the snapshot test gets affected.","commit_id":"44b24c37d09ce8215ffef0b73aa0d90301a86459"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"83fcc6b262a7f50fd01039ec19f043042c7519af","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def finish_revert_migration(self, context, instance, network_info,"},{"line_number":228,"context_line":"                                block_device_info\u003dNone, power_on\u003dTrue):"},{"line_number":229,"context_line":"        self.instances[instance.uuid] \u003d FakeInstance("},{"line_number":230,"context_line":"            instance.name, power_state.RUNNING, instance.uuid)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def post_live_migration_at_destination(self, context, instance,"},{"line_number":233,"context_line":"                                           network_info,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_0548c72c","line":230,"range":{"start_line":229,"start_character":8,"end_line":230,"end_character":62},"updated":"2016-12-08 13:42:04.000000000","message":"This is the kind of thing you should call out in the commit message because it\u0027s weird to see in the snapshot patch, but you\u0027ve already explained it\u0027s triggered by the resize test that\u0027s run before the snapshot test, which is why it\u0027s only noticed here. So I\u0027ll +2 this change but if you need to respin I\u0027d add a note in the commit message about this.","commit_id":"2d92ab701943c57b1b5c98466f32353b9a42b53b"},{"author":{"_account_id":20411,"name":"Julian","email":"julian.sy@att.com","username":"syjulian"},"change_message_id":"a1c33af3820fda2de9415b0c1541bccc35d322eb","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def finish_revert_migration(self, context, instance, network_info,"},{"line_number":228,"context_line":"                                block_device_info\u003dNone, power_on\u003dTrue):"},{"line_number":229,"context_line":"        self.instances[instance.uuid] \u003d FakeInstance("},{"line_number":230,"context_line":"            instance.name, power_state.RUNNING, instance.uuid)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def post_live_migration_at_destination(self, context, instance,"},{"line_number":233,"context_line":"                                           network_info,"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a71b18c_a0d0e1ca","line":230,"range":{"start_line":229,"start_character":8,"end_line":230,"end_character":62},"in_reply_to":"3a71b18c_0548c72c","updated":"2016-12-08 14:12:24.000000000","message":"will do. thanks for the review","commit_id":"2d92ab701943c57b1b5c98466f32353b9a42b53b"}],"requirements.txt":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eee47bb6d728c4f058f6eee9ba76ed8eec82ae08","unresolved":false,"context_lines":[{"line_number":51,"context_line":"rfc3986\u003e\u003d0.2.2 # Apache-2.0"},{"line_number":52,"context_line":"oslo.middleware\u003e\u003d3.0.0 # Apache-2.0"},{"line_number":53,"context_line":"psutil\u003c2.0.0,\u003e\u003d1.1.1 # BSD"},{"line_number":54,"context_line":"oslo.versionedobjects\u003e\u003d1.18.0 # Apache-2.0"},{"line_number":55,"context_line":"os-brick\u003e\u003d1.6.1 # Apache-2.0"},{"line_number":56,"context_line":"os-vif\u003e\u003d1.1.0 # Apache-2.0"},{"line_number":57,"context_line":"os-win\u003e\u003d0.2.3 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":24,"id":"ba5da102_2853f7e2","line":54,"updated":"2016-10-27 12:18:48.000000000","message":"I guess it is unrelated","commit_id":"e309de0e5fa3ceeb7f8572e407d242408afe7bc0"}]}
