)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5cbf5a0ca0793d3ef2efec285904d713c58c9c27","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Huan Xie \u003chuan.xie@citrix.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-05 10:59:43 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Resolve Nova/Neutron race condition"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When booting an instance, nova and neutron has race condition because"},{"line_number":10,"context_line":"nova don\u0027t know whether vif(port) is ready in neutron. There is a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa80f949_30792130","line":7,"updated":"2015-11-05 13:49:21.000000000","message":"Please add the prefix XenApi here","commit_id":"bde2999fd686411fee7db592639bf02ace6aca8e"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"8500c7ed6b59967669c5bb7fb5072fed1066482f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Huan Xie \u003chuan.xie@citrix.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-05 10:59:43 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Resolve Nova/Neutron race condition"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When booting an instance, nova and neutron has race condition because"},{"line_number":10,"context_line":"nova don\u0027t know whether vif(port) is ready in neutron. There is a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa80f949_363900f3","line":7,"in_reply_to":"fa80f949_30792130","updated":"2015-11-06 07:45:26.000000000","message":"Got it, will add this","commit_id":"bde2999fd686411fee7db592639bf02ace6aca8e"}],"nova/tests/unit/virt/xenapi/test_vmops.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5cbf5a0ca0793d3ef2efec285904d713c58c9c27","unresolved":false,"context_lines":[{"line_number":724,"context_line":"                        {\"active\": False, \"id\": 3},"},{"line_number":725,"context_line":"                        {\"id\": 4}]"},{"line_number":726,"context_line":"        events \u003d self.vmops._get_neutron_events(network_info)"},{"line_number":727,"context_line":"        self.assertEqual(events[0][0], \"network-vif-plugged\")"},{"line_number":728,"context_line":"        self.assertEqual(events[0][1], 1)"},{"line_number":729,"context_line":"        self.assertEqual(events[1][0], \"network-vif-plugged\")"},{"line_number":730,"context_line":"        self.assertEqual(events[1][1], 3)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_f0a9597c","line":727,"updated":"2015-11-05 13:49:21.000000000","message":"minor nit but the expected result should be first","commit_id":"bde2999fd686411fee7db592639bf02ace6aca8e"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"8500c7ed6b59967669c5bb7fb5072fed1066482f","unresolved":false,"context_lines":[{"line_number":724,"context_line":"                        {\"active\": False, \"id\": 3},"},{"line_number":725,"context_line":"                        {\"id\": 4}]"},{"line_number":726,"context_line":"        events \u003d self.vmops._get_neutron_events(network_info)"},{"line_number":727,"context_line":"        self.assertEqual(events[0][0], \"network-vif-plugged\")"},{"line_number":728,"context_line":"        self.assertEqual(events[0][1], 1)"},{"line_number":729,"context_line":"        self.assertEqual(events[1][0], \"network-vif-plugged\")"},{"line_number":730,"context_line":"        self.assertEqual(events[1][1], 3)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_f76ff228","line":727,"in_reply_to":"fa80f949_f0a9597c","updated":"2015-11-06 07:45:26.000000000","message":"ah, yes, will change this","commit_id":"bde2999fd686411fee7db592639bf02ace6aca8e"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"67df83415f82f0cd506666089eef81ff58f4be77","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        step +\u003d 1"},{"line_number":446,"context_line":"        self.vmops._update_instance_progress(context, instance,"},{"line_number":447,"context_line":"                                            step, steps)"},{"line_number":448,"context_line":"        self.mox.StubOutWithMock(self.vmops._session, \u0027call_xenapi\u0027)"},{"line_number":449,"context_line":"        self.vmops._session.call_xenapi(\u0027VM.unpause\u0027, vm_ref)"},{"line_number":450,"context_line":"        self.vmops._wait_for_instance_to_start(instance, vm_ref)"},{"line_number":451,"context_line":"        last_call \u003d self.vmops._update_last_dom_id(vm_ref)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_11337a63","line":448,"updated":"2015-11-11 16:37:00.000000000","message":"This stub shouldn\u0027t be here; stubs should be set in _stub_out_common above.","commit_id":"94941932e38f54762ce9a9882ecf8c4c9c56dfbe"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ffca10399772cc2b16228cd9db311337d44d4c40","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        step +\u003d 1"},{"line_number":446,"context_line":"        self.vmops._update_instance_progress(context, instance,"},{"line_number":447,"context_line":"                                            step, steps)"},{"line_number":448,"context_line":"        self.mox.StubOutWithMock(self.vmops._session, \u0027call_xenapi\u0027)"},{"line_number":449,"context_line":"        self.vmops._session.call_xenapi(\u0027VM.unpause\u0027, vm_ref)"},{"line_number":450,"context_line":"        self.vmops._wait_for_instance_to_start(instance, vm_ref)"},{"line_number":451,"context_line":"        last_call \u003d self.vmops._update_last_dom_id(vm_ref)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_11f11fcd","line":448,"in_reply_to":"da85f559_11337a63","updated":"2015-11-12 02:41:21.000000000","message":"Yes, I will move it to \"_stub_out_common above\"","commit_id":"94941932e38f54762ce9a9882ecf8c4c9c56dfbe"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"67df83415f82f0cd506666089eef81ff58f4be77","unresolved":false,"context_lines":[{"line_number":500,"context_line":"            network_info, power_on, first_boot).AndReturn(events)"},{"line_number":501,"context_line":"        self.mox.StubOutWithMock(self.vmops,"},{"line_number":502,"context_line":"                                 \u0027_neutron_failed_callback\u0027)"},{"line_number":503,"context_line":"        self.assertRaises(TestingTimeoutException, self._test_spawn,"},{"line_number":504,"context_line":"                          throw_exception\u003dTestingTimeoutException())"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    def _test_finish_migration(self, power_on\u003dTrue, resize_instance\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_f13ef626","line":503,"updated":"2015-11-11 16:37:00.000000000","message":"I don\u0027t understand how the previous test does not raise an exception from test_spawn yet this one does?","commit_id":"94941932e38f54762ce9a9882ecf8c4c9c56dfbe"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ffca10399772cc2b16228cd9db311337d44d4c40","unresolved":false,"context_lines":[{"line_number":500,"context_line":"            network_info, power_on, first_boot).AndReturn(events)"},{"line_number":501,"context_line":"        self.mox.StubOutWithMock(self.vmops,"},{"line_number":502,"context_line":"                                 \u0027_neutron_failed_callback\u0027)"},{"line_number":503,"context_line":"        self.assertRaises(TestingTimeoutException, self._test_spawn,"},{"line_number":504,"context_line":"                          throw_exception\u003dTestingTimeoutException())"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    def _test_finish_migration(self, power_on\u003dTrue, resize_instance\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_b6004967","line":503,"in_reply_to":"da85f559_f13ef626","updated":"2015-11-12 02:41:21.000000000","message":"In previous test \"test_spawn_with_neutron\", I prepared the proper pre-condition, I mean I had stubed internal function \"_get_neutron_events\" and set its returning events, so previous test should be a normal case that uses neutron network and have expected events notification from neutron.","commit_id":"94941932e38f54762ce9a9882ecf8c4c9c56dfbe"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"fc4a6d82e63e6da96e555d60214fcabdcd646a00","unresolved":false,"context_lines":[{"line_number":508,"context_line":"    def test_spawn_with_neutron_exception(self):"},{"line_number":509,"context_line":"        self.mox.StubOutWithMock(self.vmops, \u0027_get_neutron_events\u0027)"},{"line_number":510,"context_line":"        self.assertRaises(TestingTimeoutException,"},{"line_number":511,"context_line":"                          self._test_spawn, neutron_exception\u003dTrue)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def _test_finish_migration(self, power_on\u003dTrue, resize_instance\u003dTrue,"},{"line_number":514,"context_line":"                               throw_exception\u003dNone, booted_from_volume\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_0e0e508b","line":511,"updated":"2016-02-24 12:32:34.000000000","message":"To be clear - these are using the spawn framework which is currently mox based.  As such, they can continue using mox for now (although we need to look at updating these to Mock soon)","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":508,"context_line":"    def test_spawn_with_neutron_exception(self):"},{"line_number":509,"context_line":"        self.mox.StubOutWithMock(self.vmops, \u0027_get_neutron_events\u0027)"},{"line_number":510,"context_line":"        self.assertRaises(TestingTimeoutException,"},{"line_number":511,"context_line":"                          self._test_spawn, neutron_exception\u003dTrue)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def _test_finish_migration(self, power_on\u003dTrue, resize_instance\u003dTrue,"},{"line_number":514,"context_line":"                               throw_exception\u003dNone, booted_from_volume\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_acf18a03","line":511,"in_reply_to":"bae84128_0e0e508b","updated":"2016-02-29 09:15:30.000000000","message":"got it, but if we are updating to Mock, this should also be changed accordingly, right?","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c27fce26f3e705f5820434d4a8c248c01bdb693a","unresolved":false,"context_lines":[{"line_number":753,"context_line":"                        {\"id\": 4}]"},{"line_number":754,"context_line":"        power_on \u003d True"},{"line_number":755,"context_line":"        first_boot \u003d True"},{"line_number":756,"context_line":"        self.mox.StubOutWithMock(utils, \u0027is_neutron\u0027)"},{"line_number":757,"context_line":"        utils.is_neutron().AndReturn(True)"},{"line_number":758,"context_line":"        self.mox.ReplayAll()"},{"line_number":759,"context_line":"        events \u003d self.vmops._get_neutron_events(network_info,"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_06580155","line":756,"updated":"2016-02-24 10:15:08.000000000","message":"as mox does not work with py34, we are blocking ANY new mox tests, they should all be written with mock.\n\nThere is a blueprint to convert all existing mox tests into mock, which will take some time. Lets not make this worse.","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"fc4a6d82e63e6da96e555d60214fcabdcd646a00","unresolved":false,"context_lines":[{"line_number":753,"context_line":"                        {\"id\": 4}]"},{"line_number":754,"context_line":"        power_on \u003d True"},{"line_number":755,"context_line":"        first_boot \u003d True"},{"line_number":756,"context_line":"        self.mox.StubOutWithMock(utils, \u0027is_neutron\u0027)"},{"line_number":757,"context_line":"        utils.is_neutron().AndReturn(True)"},{"line_number":758,"context_line":"        self.mox.ReplayAll()"},{"line_number":759,"context_line":"        events \u003d self.vmops._get_neutron_events(network_info,"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_debd3903","line":756,"in_reply_to":"bae84128_06580155","updated":"2016-02-24 12:32:34.000000000","message":"Also, to be clear, these new tests do not use spawn or any other existing frameworks, so must be written in Mock.","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":753,"context_line":"                        {\"id\": 4}]"},{"line_number":754,"context_line":"        power_on \u003d True"},{"line_number":755,"context_line":"        first_boot \u003d True"},{"line_number":756,"context_line":"        self.mox.StubOutWithMock(utils, \u0027is_neutron\u0027)"},{"line_number":757,"context_line":"        utils.is_neutron().AndReturn(True)"},{"line_number":758,"context_line":"        self.mox.ReplayAll()"},{"line_number":759,"context_line":"        events \u003d self.vmops._get_neutron_events(network_info,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_4c0c3eed","line":756,"in_reply_to":"bae84128_06580155","updated":"2016-02-29 09:15:30.000000000","message":"I see, Will first change the tests which are not related with existing spawn","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":753,"context_line":"                        {\"id\": 4}]"},{"line_number":754,"context_line":"        power_on \u003d True"},{"line_number":755,"context_line":"        first_boot \u003d True"},{"line_number":756,"context_line":"        self.mox.StubOutWithMock(utils, \u0027is_neutron\u0027)"},{"line_number":757,"context_line":"        utils.is_neutron().AndReturn(True)"},{"line_number":758,"context_line":"        self.mox.ReplayAll()"},{"line_number":759,"context_line":"        events \u003d self.vmops._get_neutron_events(network_info,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_4c655eb3","line":756,"in_reply_to":"bae84128_debd3903","updated":"2016-02-29 09:15:30.000000000","message":"I see, will re-write these tests","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5cbf5a0ca0793d3ef2efec285904d713c58c9c27","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        except eventlet.timeout.Timeout:"},{"line_number":621,"context_line":"            # We never get callback from Neutron"},{"line_number":622,"context_line":"            LOG.warn(_LW(\u0027Timeout waiting for vif plugging callback for \u0027"},{"line_number":623,"context_line":"                         \u0027instance %(uuid)s\u0027), {\u0027uuid\u0027: instance.uuid},"},{"line_number":624,"context_line":"                     instance\u003dinstance)"},{"line_number":625,"context_line":"            if CONF.vif_plugging_is_fatal:"},{"line_number":626,"context_line":"                msg \u003d _(\"Failed to spawn, rolling back\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_f0ee39b3","line":623,"updated":"2015-11-05 13:49:21.000000000","message":"you already have the instance so you do not need the instance uuid. You do instance\u003dinstance","commit_id":"bde2999fd686411fee7db592639bf02ace6aca8e"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"8500c7ed6b59967669c5bb7fb5072fed1066482f","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        except eventlet.timeout.Timeout:"},{"line_number":621,"context_line":"            # We never get callback from Neutron"},{"line_number":622,"context_line":"            LOG.warn(_LW(\u0027Timeout waiting for vif plugging callback for \u0027"},{"line_number":623,"context_line":"                         \u0027instance %(uuid)s\u0027), {\u0027uuid\u0027: instance.uuid},"},{"line_number":624,"context_line":"                     instance\u003dinstance)"},{"line_number":625,"context_line":"            if CONF.vif_plugging_is_fatal:"},{"line_number":626,"context_line":"                msg \u003d _(\"Failed to spawn, rolling back\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_dd476cba","line":623,"in_reply_to":"fa80f949_f0ee39b3","updated":"2015-11-06 07:45:26.000000000","message":"got it, but it will be lot of instance\u0027s information exposed when using instance\u003dinstance, I am a little concern about this.","commit_id":"bde2999fd686411fee7db592639bf02ace6aca8e"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"5cbf5a0ca0793d3ef2efec285904d713c58c9c27","unresolved":false,"context_lines":[{"line_number":633,"context_line":"    def _neutron_failed_callback(self, event_name, instance):"},{"line_number":634,"context_line":"        LOG.error(_LE(\u0027Neutron Reported failure on event \u0027"},{"line_number":635,"context_line":"                  \u0027%(event)s for instance %(uuid)s\u0027),"},{"line_number":636,"context_line":"              {\u0027event\u0027: event_name, \u0027uuid\u0027: instance.uuid},"},{"line_number":637,"context_line":"              instance\u003dinstance)"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def _get_neutron_events(self, network_info):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_d04a15c5","line":636,"updated":"2015-11-05 13:49:21.000000000","message":"ditto","commit_id":"bde2999fd686411fee7db592639bf02ace6aca8e"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"8500c7ed6b59967669c5bb7fb5072fed1066482f","unresolved":false,"context_lines":[{"line_number":633,"context_line":"    def _neutron_failed_callback(self, event_name, instance):"},{"line_number":634,"context_line":"        LOG.error(_LE(\u0027Neutron Reported failure on event \u0027"},{"line_number":635,"context_line":"                  \u0027%(event)s for instance %(uuid)s\u0027),"},{"line_number":636,"context_line":"              {\u0027event\u0027: event_name, \u0027uuid\u0027: instance.uuid},"},{"line_number":637,"context_line":"              instance\u003dinstance)"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def _get_neutron_events(self, network_info):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_fd44b0b7","line":636,"in_reply_to":"fa80f949_d04a15c5","updated":"2015-11-06 07:45:26.000000000","message":"got it","commit_id":"bde2999fd686411fee7db592639bf02ace6aca8e"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"ce587e1d5bbec0294c00e2b980fb3591c9908bd1","unresolved":false,"context_lines":[{"line_number":613,"context_line":"            undo_mgr.rollback_and_reraise(msg\u003dmsg, instance\u003dinstance)"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def _handle_neutron_event_timeout(self, instance, undo_mgr):"},{"line_number":616,"context_line":"        # We never get callback from Neutron"},{"line_number":617,"context_line":"        LOG.warn(_LW(\u0027Timeout waiting for vif plugging callback\u0027),"},{"line_number":618,"context_line":"                 instance\u003dinstance)"},{"line_number":619,"context_line":"        if CONF.vif_plugging_is_fatal:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_38f7f6d4","line":616,"updated":"2015-11-09 16:43:53.000000000","message":"\"We didn\u0027t get\" or \"We never got\"","commit_id":"f1fcfa983a6a4fff5af4f8693ff3b80990bc6eb5"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"4cbf8aef24ce95e83d92bcc60c4b525c4a52cea8","unresolved":false,"context_lines":[{"line_number":613,"context_line":"            undo_mgr.rollback_and_reraise(msg\u003dmsg, instance\u003dinstance)"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def _handle_neutron_event_timeout(self, instance, undo_mgr):"},{"line_number":616,"context_line":"        # We never get callback from Neutron"},{"line_number":617,"context_line":"        LOG.warn(_LW(\u0027Timeout waiting for vif plugging callback\u0027),"},{"line_number":618,"context_line":"                 instance\u003dinstance)"},{"line_number":619,"context_line":"        if CONF.vif_plugging_is_fatal:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_31729a4a","line":616,"in_reply_to":"da85f559_38f7f6d4","updated":"2015-11-10 02:05:57.000000000","message":"We didn\u0027t get callback within given time.\nI will modify this to make it clear","commit_id":"f1fcfa983a6a4fff5af4f8693ff3b80990bc6eb5"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"ce587e1d5bbec0294c00e2b980fb3591c9908bd1","unresolved":false,"context_lines":[{"line_number":626,"context_line":"            self._wait_for_instance_to_start(instance, vm_ref)"},{"line_number":627,"context_line":"            self._update_last_dom_id(vm_ref)"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def _neutron_failed_callback(self, event_name, instance):"},{"line_number":630,"context_line":"        LOG.error(_LE(\u0027Neutron Reported failure on event %(event)s\u0027),"},{"line_number":631,"context_line":"                {\u0027event\u0027: event_name}, instance\u003dinstance)"},{"line_number":632,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_98baa2e0","line":629,"updated":"2015-11-09 16:43:53.000000000","message":"This implies to me that if Neutron fails, all we do is log it.\nHow does this get translated into a failure to spawn the instance?","commit_id":"f1fcfa983a6a4fff5af4f8693ff3b80990bc6eb5"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"4cbf8aef24ce95e83d92bcc60c4b525c4a52cea8","unresolved":false,"context_lines":[{"line_number":626,"context_line":"            self._wait_for_instance_to_start(instance, vm_ref)"},{"line_number":627,"context_line":"            self._update_last_dom_id(vm_ref)"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def _neutron_failed_callback(self, event_name, instance):"},{"line_number":630,"context_line":"        LOG.error(_LE(\u0027Neutron Reported failure on event %(event)s\u0027),"},{"line_number":631,"context_line":"                {\u0027event\u0027: event_name}, instance\u003dinstance)"},{"line_number":632,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_91b6e688","line":629,"in_reply_to":"da85f559_98baa2e0","updated":"2015-11-10 02:05:57.000000000","message":"yes, I will change this. There is a _default_error_callback() in compute/manager.py which will raise an exception. if we don\u0027t set the callback function, the default will be used. I will test using the default callback and then change our own callback to make sure neutron failure can be captured in spawn()","commit_id":"f1fcfa983a6a4fff5af4f8693ff3b80990bc6eb5"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"ce587e1d5bbec0294c00e2b980fb3591c9908bd1","unresolved":false,"context_lines":[{"line_number":633,"context_line":"    def _get_neutron_events(self, network_info, power_on, first_boot):"},{"line_number":634,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":635,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":636,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":637,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":638,"context_line":"        else:"},{"line_number":639,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_58b0badd","line":636,"updated":"2015-11-09 16:43:53.000000000","message":"Perhaps a comment here that we are waiting for all VIFs on this VM to be plugged?","commit_id":"f1fcfa983a6a4fff5af4f8693ff3b80990bc6eb5"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"4cbf8aef24ce95e83d92bcc60c4b525c4a52cea8","unresolved":false,"context_lines":[{"line_number":633,"context_line":"    def _get_neutron_events(self, network_info, power_on, first_boot):"},{"line_number":634,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":635,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":636,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":637,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":638,"context_line":"        else:"},{"line_number":639,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_11dc3611","line":636,"in_reply_to":"da85f559_58b0badd","updated":"2015-11-10 02:05:57.000000000","message":"If the VIFs are already in active status, maybe neutron will not notify the events. Will double check this.","commit_id":"f1fcfa983a6a4fff5af4f8693ff3b80990bc6eb5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c27fce26f3e705f5820434d4a8c248c01bdb693a","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        @step"},{"line_number":553,"context_line":"        def boot_instance_step(undo_mgr, vm_ref):"},{"line_number":554,"context_line":"            if power_on:"},{"line_number":555,"context_line":"                self._start(instance, vm_ref, start_pause\u003dTrue)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        @step"},{"line_number":558,"context_line":"        def configure_booted_instance_step(undo_mgr, vm_ref):"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_a67af521","line":555,"updated":"2016-02-24 10:15:08.000000000","message":"Note this change make a big different on how the progress reporting works, and kinda changes the REST API. But I don\u0027t think we can avoid it here.\n\nThe @step decorator deals with the progress reporting.","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        @step"},{"line_number":553,"context_line":"        def boot_instance_step(undo_mgr, vm_ref):"},{"line_number":554,"context_line":"            if power_on:"},{"line_number":555,"context_line":"                self._start(instance, vm_ref, start_pause\u003dTrue)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        @step"},{"line_number":558,"context_line":"        def configure_booted_instance_step(undo_mgr, vm_ref):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_9b55defb","line":555,"in_reply_to":"bae84128_2af507ec","updated":"2016-02-29 09:15:30.000000000","message":"yes, change from 80%-90% won\u0027t be long and will make changes according to the below comments","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"6659bfc5217084e3447b3f09b07190706ee3d23a","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        @step"},{"line_number":553,"context_line":"        def boot_instance_step(undo_mgr, vm_ref):"},{"line_number":554,"context_line":"            if power_on:"},{"line_number":555,"context_line":"                self._start(instance, vm_ref, start_pause\u003dTrue)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        @step"},{"line_number":558,"context_line":"        def configure_booted_instance_step(undo_mgr, vm_ref):"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_2af507ec","line":555,"in_reply_to":"bae84128_a67af521","updated":"2016-02-24 10:48:48.000000000","message":"The main difference will be when the VM is actually accessible, but I think it\u0027s OK?  Previously the VM was accessible at 80%, but now it will be at 90% (since apply_security_group_filters step must run first).  The length of time to apply the security group filters is very short based on my experience of watching the boot process, so the change from 80%-90% should be very quick?","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        @step"},{"line_number":553,"context_line":"        def boot_instance_step(undo_mgr, vm_ref):"},{"line_number":554,"context_line":"            if power_on:"},{"line_number":555,"context_line":"                self._start(instance, vm_ref, start_pause\u003dTrue)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        @step"},{"line_number":558,"context_line":"        def configure_booted_instance_step(undo_mgr, vm_ref):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_114d2fc4","line":555,"in_reply_to":"bae84128_a67af521","updated":"2016-02-29 09:15:30.000000000","message":"yes, we can only set VM to start_pause status here, so cannot avoid the progress reporting here","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c27fce26f3e705f5820434d4a8c248c01bdb693a","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            timeout \u003d CONF.vif_plugging_timeout"},{"line_number":589,"context_line":"            events \u003d self._get_neutron_events(network_info,"},{"line_number":590,"context_line":"                                              power_on, first_boot)"},{"line_number":591,"context_line":"            with self._virtapi.wait_for_instance_event("},{"line_number":592,"context_line":"                    instance, events, deadline\u003dtimeout,"},{"line_number":593,"context_line":"                    error_callback\u003dself._neutron_failed_callback):"},{"line_number":594,"context_line":"                LOG.debug(\"wait for instance event:%s\", events)"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_c698d97a","line":591,"updated":"2016-02-24 10:15:08.000000000","message":"I think you actually need to wrap this block with the timeout exception handling.\n\nThat means you can use CONF.vif_plugging_is_fatal to either raise the exception, or only log the problem as a warning.","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            timeout \u003d CONF.vif_plugging_timeout"},{"line_number":589,"context_line":"            events \u003d self._get_neutron_events(network_info,"},{"line_number":590,"context_line":"                                              power_on, first_boot)"},{"line_number":591,"context_line":"            with self._virtapi.wait_for_instance_event("},{"line_number":592,"context_line":"                    instance, events, deadline\u003dtimeout,"},{"line_number":593,"context_line":"                    error_callback\u003dself._neutron_failed_callback):"},{"line_number":594,"context_line":"                LOG.debug(\"wait for instance event:%s\", events)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_51dfb70c","line":591,"in_reply_to":"bae84128_2ab6a7f8","updated":"2016-02-29 09:15:30.000000000","message":"yes, this is the problem, I will change the ways of processing wait_for_neutron_event()","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"6659bfc5217084e3447b3f09b07190706ee3d23a","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            timeout \u003d CONF.vif_plugging_timeout"},{"line_number":589,"context_line":"            events \u003d self._get_neutron_events(network_info,"},{"line_number":590,"context_line":"                                              power_on, first_boot)"},{"line_number":591,"context_line":"            with self._virtapi.wait_for_instance_event("},{"line_number":592,"context_line":"                    instance, events, deadline\u003dtimeout,"},{"line_number":593,"context_line":"                    error_callback\u003dself._neutron_failed_callback):"},{"line_number":594,"context_line":"                LOG.debug(\"wait for instance event:%s\", events)"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_2ab6a7f8","line":591,"in_reply_to":"bae84128_c698d97a","updated":"2016-02-24 10:48:48.000000000","message":"Actually I think we may need to move the steps out of this block entirely?\nIf we get a timeout, and vif_plugging_is_fatal\u003dfalse then we still want to do the attach_orig_disks_step and boot_instance_step; but the current indentation suggests these will not happen?","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            timeout \u003d CONF.vif_plugging_timeout"},{"line_number":589,"context_line":"            events \u003d self._get_neutron_events(network_info,"},{"line_number":590,"context_line":"                                              power_on, first_boot)"},{"line_number":591,"context_line":"            with self._virtapi.wait_for_instance_event("},{"line_number":592,"context_line":"                    instance, events, deadline\u003dtimeout,"},{"line_number":593,"context_line":"                    error_callback\u003dself._neutron_failed_callback):"},{"line_number":594,"context_line":"                LOG.debug(\"wait for instance event:%s\", events)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_91ae5f7f","line":591,"in_reply_to":"bae84128_c698d97a","updated":"2016-02-29 09:15:30.000000000","message":"I got what you concerned about, I will change the processing of wait_for_neutron_event()","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c27fce26f3e705f5820434d4a8c248c01bdb693a","unresolved":false,"context_lines":[{"line_number":602,"context_line":""},{"line_number":603,"context_line":"            configure_booted_instance_step(undo_mgr, vm_ref)"},{"line_number":604,"context_line":"            apply_security_group_filters_step(undo_mgr)"},{"line_number":605,"context_line":"            self._update_instance_with_power_on(vm_ref, instance, power_on)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"            if completed_callback:"},{"line_number":608,"context_line":"                completed_callback()"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_06e76140","line":605,"updated":"2016-02-24 10:15:08.000000000","message":"So I think not starting the VM before ln603 will stop the XenAPI agent from working.\n\nI think the best fix is to move ln 605 to before the current ln603.\n\nNow this last step will likely take some time, but it is not covered by any of the progress steps. The above move should actually fix that issue, and maintain the same progress step for the agent.\n\nIn fact, I would consider calling _update_instance_with_power_on inside the configure_booted_instance_step, so its covered by its progress counting. Possibly renaming the step in the process?","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"6659bfc5217084e3447b3f09b07190706ee3d23a","unresolved":false,"context_lines":[{"line_number":602,"context_line":""},{"line_number":603,"context_line":"            configure_booted_instance_step(undo_mgr, vm_ref)"},{"line_number":604,"context_line":"            apply_security_group_filters_step(undo_mgr)"},{"line_number":605,"context_line":"            self._update_instance_with_power_on(vm_ref, instance, power_on)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"            if completed_callback:"},{"line_number":608,"context_line":"                completed_callback()"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_0a7763a0","line":605,"in_reply_to":"bae84128_06e76140","updated":"2016-02-24 10:48:48.000000000","message":"Of course - so actually what we should do here is move configure_booted_instance_step to the last thing we do.\nThe security group filters should be applied before we actually start the VM after pause, and we need to power on before we can configure the booted instance.\n\nTherefore the steps need to be:\napply_security_group_filters\nupdate_instance_with_power_on\nconfigure_booted_instance_step\n\nQuite happy to move it inside the configure_booted_instance_step - let\u0027s rename it to \"boot_and_configure_instance_step\"?","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":602,"context_line":""},{"line_number":603,"context_line":"            configure_booted_instance_step(undo_mgr, vm_ref)"},{"line_number":604,"context_line":"            apply_security_group_filters_step(undo_mgr)"},{"line_number":605,"context_line":"            self._update_instance_with_power_on(vm_ref, instance, power_on)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"            if completed_callback:"},{"line_number":608,"context_line":"                completed_callback()"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_112ecfa4","line":605,"in_reply_to":"bae84128_06e76140","updated":"2016-02-29 09:15:30.000000000","message":"yes, agree","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":602,"context_line":""},{"line_number":603,"context_line":"            configure_booted_instance_step(undo_mgr, vm_ref)"},{"line_number":604,"context_line":"            apply_security_group_filters_step(undo_mgr)"},{"line_number":605,"context_line":"            self._update_instance_with_power_on(vm_ref, instance, power_on)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"            if completed_callback:"},{"line_number":608,"context_line":"                completed_callback()"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_91101f5b","line":605,"in_reply_to":"bae84128_0a7763a0","updated":"2016-02-29 09:15:30.000000000","message":"agree with you, will take changes","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c27fce26f3e705f5820434d4a8c248c01bdb693a","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        # We didn\u0027t get callback from Neutron within given time"},{"line_number":618,"context_line":"        LOG.warn(_LW(\u0027Timeout waiting for vif plugging callback\u0027),"},{"line_number":619,"context_line":"                 instance\u003dinstance)"},{"line_number":620,"context_line":"        if CONF.vif_plugging_is_fatal:"},{"line_number":621,"context_line":"            msg \u003d _(\"Failed to spawn, rolling back\")"},{"line_number":622,"context_line":"            undo_mgr.rollback_and_reraise(msg\u003dmsg, instance\u003dinstance)"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_e6fd1db2","line":620,"updated":"2016-02-24 10:15:08.000000000","message":"we can\u0027t do this here, because when vif_plugging_is_fatal \u003d False, we end up skipping half of the instance creation.\n\nSee line 591 for a possible fix.","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        # We didn\u0027t get callback from Neutron within given time"},{"line_number":618,"context_line":"        LOG.warn(_LW(\u0027Timeout waiting for vif plugging callback\u0027),"},{"line_number":619,"context_line":"                 instance\u003dinstance)"},{"line_number":620,"context_line":"        if CONF.vif_plugging_is_fatal:"},{"line_number":621,"context_line":"            msg \u003d _(\"Failed to spawn, rolling back\")"},{"line_number":622,"context_line":"            undo_mgr.rollback_and_reraise(msg\u003dmsg, instance\u003dinstance)"},{"line_number":623,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_719c7b5d","line":620,"in_reply_to":"bae84128_e6fd1db2","updated":"2016-02-29 09:15:30.000000000","message":"yes, I got your point here, thanks a lot. I will change the processing of wait_for_neutron_event together with Line:591","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c27fce26f3e705f5820434d4a8c248c01bdb693a","unresolved":false,"context_lines":[{"line_number":824,"context_line":"            LOG.debug(\"Skip agent setup, not enabled.\", instance\u003dinstance)"},{"line_number":825,"context_line":"            return"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"        agent \u003d self._get_agent(instance, vm_ref)"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"        version \u003d agent.get_version()"},{"line_number":830,"context_line":"        if not version:"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_a63835d4","line":827,"updated":"2016-02-24 10:15:08.000000000","message":"please note this requires the VM to be running.","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"01e008dbd32a290d7a232804f1e9f94967ac750c","unresolved":false,"context_lines":[{"line_number":824,"context_line":"            LOG.debug(\"Skip agent setup, not enabled.\", instance\u003dinstance)"},{"line_number":825,"context_line":"            return"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"        agent \u003d self._get_agent(instance, vm_ref)"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"        version \u003d agent.get_version()"},{"line_number":830,"context_line":"        if not version:"}],"source_content_type":"text/x-python","patch_set":25,"id":"9aed3d3a_ecb1d248","line":827,"in_reply_to":"bae84128_a63835d4","updated":"2016-02-29 09:15:30.000000000","message":"got it now, will change the steps order to make sure VM is running when executing this function","commit_id":"7847f75eb293c0d31f5c5a0147aa15d5c631136c"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"9708545fc465b1636bdc06da73c6e6e20fd40749","unresolved":false,"context_lines":[{"line_number":555,"context_line":"                self._start(instance, vm_ref, start_pause\u003dTrue)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        @step"},{"line_number":558,"context_line":"        def boot_and_configure_instance_step(undo_mgr, vm_ref):"},{"line_number":559,"context_line":"            self._update_instance_with_power_on(vm_ref, instance, power_on)"},{"line_number":560,"context_line":"            if first_boot:"},{"line_number":561,"context_line":"                self._configure_new_instance_with_agent(instance, vm_ref,"}],"source_content_type":"text/x-python","patch_set":26,"id":"7af24918_0d454f6f","line":558,"updated":"2016-03-02 12:08:23.000000000","message":"I think we need to rename these steps; it\u0027s confusing to have a step called \"boot_instance_step\" and another \"boot_and_configure\"...\nPerhaps the first one (line 553) should be \"start_paused_step\"?","commit_id":"ba15c18ae99b6ea05c5313c541c022aba72cdb29"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"6757fe3e8d28e1ded93c1dd92eb6794768fb2cd9","unresolved":false,"context_lines":[{"line_number":555,"context_line":"                self._start(instance, vm_ref, start_pause\u003dTrue)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        @step"},{"line_number":558,"context_line":"        def boot_and_configure_instance_step(undo_mgr, vm_ref):"},{"line_number":559,"context_line":"            self._update_instance_with_power_on(vm_ref, instance, power_on)"},{"line_number":560,"context_line":"            if first_boot:"},{"line_number":561,"context_line":"                self._configure_new_instance_with_agent(instance, vm_ref,"}],"source_content_type":"text/x-python","patch_set":26,"id":"7af24918_c901623a","line":558,"in_reply_to":"7af24918_0d454f6f","updated":"2016-03-03 03:33:38.000000000","message":"yes, make sense, I will rename this step","commit_id":"ba15c18ae99b6ea05c5313c541c022aba72cdb29"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"9708545fc465b1636bdc06da73c6e6e20fd40749","unresolved":false,"context_lines":[{"line_number":619,"context_line":"    def _update_instance_with_power_on(self, vm_ref, instance, power_on):"},{"line_number":620,"context_line":"        if power_on:"},{"line_number":621,"context_line":"            LOG.debug(\"Update instance when power on\", instance\u003dinstance)"},{"line_number":622,"context_line":"            self._session.call_xenapi(\u0027VM.unpause\u0027, vm_ref)"},{"line_number":623,"context_line":"            self._wait_for_instance_to_start(instance, vm_ref)"},{"line_number":624,"context_line":"            self._update_last_dom_id(vm_ref)"},{"line_number":625,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"7af24918_38f96b81","line":622,"updated":"2016-03-02 12:08:23.000000000","message":"As there is a new change needed to rename the step, could this be self._session.VM.unpause(vm_ref)","commit_id":"ba15c18ae99b6ea05c5313c541c022aba72cdb29"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"6757fe3e8d28e1ded93c1dd92eb6794768fb2cd9","unresolved":false,"context_lines":[{"line_number":619,"context_line":"    def _update_instance_with_power_on(self, vm_ref, instance, power_on):"},{"line_number":620,"context_line":"        if power_on:"},{"line_number":621,"context_line":"            LOG.debug(\"Update instance when power on\", instance\u003dinstance)"},{"line_number":622,"context_line":"            self._session.call_xenapi(\u0027VM.unpause\u0027, vm_ref)"},{"line_number":623,"context_line":"            self._wait_for_instance_to_start(instance, vm_ref)"},{"line_number":624,"context_line":"            self._update_last_dom_id(vm_ref)"},{"line_number":625,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"7af24918_1a054a13","line":622,"in_reply_to":"7af24918_38f96b81","updated":"2016-03-03 03:33:38.000000000","message":"yes, I will change this in next patchset","commit_id":"ba15c18ae99b6ea05c5313c541c022aba72cdb29"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c20e09673a58b31860714eeaa2af15bcf39efb47","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                                           total_steps\u003dRESIZE_TOTAL_STEPS)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        self._spawn(context, instance, image_meta, null_step_decorator,"},{"line_number":319,"context_line":"                    create_disks_step, first_boot\u003dFalse, injected_files\u003dNone,"},{"line_number":320,"context_line":"                    admin_password\u003dNone, network_info\u003dnetwork_info,"},{"line_number":321,"context_line":"                    block_device_info\u003dblock_device_info, name_label\u003dNone,"},{"line_number":322,"context_line":"                    rescue\u003dFalse, power_on\u003dpower_on, resize\u003dresize_instance,"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_00a1d2a9","line":319,"range":{"start_line":319,"start_character":39,"end_line":319,"end_character":55},"updated":"2016-03-07 14:47:51.000000000","message":"it was totally hiding here.\n\nThis is where during a migration, the power state is kept the same as the original power state of the server (hence power_on), but we don\u0027t want the agent to both injecting networking and stuff this time around, as its not required, hence first_boot\u003dFalse.\n\nHowever, in this case, we do want to wait for the VIF plug events, as this is on a new server. At least I think we need to wait for the neutron events in this case?","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6148e18a8e07c12afd3ee1687312d4efde4ad9a5","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            self._prepare_instance_filter(instance, network_info)"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        @step"},{"line_number":553,"context_line":"        def start_paused_instance_step(undo_mgr, vm_ref):"},{"line_number":554,"context_line":"            if power_on:"},{"line_number":555,"context_line":"                self._start(instance, vm_ref, start_pause\u003dTrue)"},{"line_number":556,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_25aa20d5","line":553,"updated":"2016-03-07 14:30:26.000000000","message":"Nit: start_paused_step reads slightly nicer maybe, but this is fine I think.","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"7250b5779824dd233160c27e8a94471d4c09ea67","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            self._prepare_instance_filter(instance, network_info)"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        @step"},{"line_number":553,"context_line":"        def start_paused_instance_step(undo_mgr, vm_ref):"},{"line_number":554,"context_line":"            if power_on:"},{"line_number":555,"context_line":"                self._start(instance, vm_ref, start_pause\u003dTrue)"},{"line_number":556,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_9d11a4af","line":553,"in_reply_to":"5aef4532_25aa20d5","updated":"2016-03-08 06:50:47.000000000","message":"sure, will change the step name","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6148e18a8e07c12afd3ee1687312d4efde4ad9a5","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        if CONF.vif_plugging_is_fatal:"},{"line_number":617,"context_line":"            raise exception.VirtualInterfaceCreateException()"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def _update_instance_with_power_on(self, vm_ref, instance, power_on):"},{"line_number":620,"context_line":"        if power_on:"},{"line_number":621,"context_line":"            LOG.debug(\"Update instance when power on\", instance\u003dinstance)"},{"line_number":622,"context_line":"            self._session.VM.unpause(vm_ref)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_c54b7c58","line":619,"updated":"2016-03-07 14:30:26.000000000","message":"Nit: not totally sure about the name of this one, maybe _unpause_and_wait? unsure.","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"7250b5779824dd233160c27e8a94471d4c09ea67","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        if CONF.vif_plugging_is_fatal:"},{"line_number":617,"context_line":"            raise exception.VirtualInterfaceCreateException()"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def _update_instance_with_power_on(self, vm_ref, instance, power_on):"},{"line_number":620,"context_line":"        if power_on:"},{"line_number":621,"context_line":"            LOG.debug(\"Update instance when power on\", instance\u003dinstance)"},{"line_number":622,"context_line":"            self._session.VM.unpause(vm_ref)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_9d5fe471","line":619,"in_reply_to":"5aef4532_c54b7c58","updated":"2016-03-08 06:50:47.000000000","message":"OK, will change the name to be more clear on what it does","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6148e18a8e07c12afd3ee1687312d4efde4ad9a5","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        # Only get network-vif-plugged events with VIF\u0027s status is not active."},{"line_number":634,"context_line":"        # With VIF whose status is active, neutron may not notify such event."},{"line_number":635,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":636,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":637,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":638,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":639,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_c5ad3c8a","line":636,"range":{"start_line":636,"start_character":60,"end_line":636,"end_character":70},"updated":"2016-03-07 14:30:26.000000000","message":"I am not sure first_boot gives us all the correct information here. I have a feeling this is false when its the first_boot on a new host.\n\nWhat you really want here is something like, is_new_vifs, or similar?","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6148e18a8e07c12afd3ee1687312d4efde4ad9a5","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        # Only get network-vif-plugged events with VIF\u0027s status is not active."},{"line_number":634,"context_line":"        # With VIF whose status is active, neutron may not notify such event."},{"line_number":635,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":636,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":637,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":638,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":639,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_052ba4ec","line":636,"range":{"start_line":636,"start_character":35,"end_line":636,"end_character":43},"updated":"2016-03-07 14:30:26.000000000","message":"Similar comment for first_boot, I think on certain resize operations, we might still want to wait for the VIF events, but thats an edge case we can look at later.","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"7250b5779824dd233160c27e8a94471d4c09ea67","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        # Only get network-vif-plugged events with VIF\u0027s status is not active."},{"line_number":634,"context_line":"        # With VIF whose status is active, neutron may not notify such event."},{"line_number":635,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":636,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":637,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":638,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":639,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_8dc7d644","line":636,"range":{"start_line":636,"start_character":35,"end_line":636,"end_character":43},"in_reply_to":"5aef4532_052ba4ec","updated":"2016-03-08 06:50:47.000000000","message":"yes, currently we cannot identify whether it resized to the same host or different host, so some resize scenario doesn\u0027t need waiting for VIF event, some resize scenario need waiting for VIF event.","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"7250b5779824dd233160c27e8a94471d4c09ea67","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        # Only get network-vif-plugged events with VIF\u0027s status is not active."},{"line_number":634,"context_line":"        # With VIF whose status is active, neutron may not notify such event."},{"line_number":635,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":636,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":637,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":638,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":639,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_d5e024cf","line":636,"range":{"start_line":636,"start_character":60,"end_line":636,"end_character":70},"in_reply_to":"5aef4532_20b5eecc","updated":"2016-03-08 06:50:47.000000000","message":"If we ignore first_boot, then with some resize scenario (resize to the same host), we will still wait for the event but the event will not get from neutron since neutron actually even not notice such VIF changes.\nAnd I found libvirt currently also doesn\u0027t deal with migration, seehttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L7325\nSo, I still want to use firt_boot to different the normal boot instance and the migration scenario","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c20e09673a58b31860714eeaa2af15bcf39efb47","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        # Only get network-vif-plugged events with VIF\u0027s status is not active."},{"line_number":634,"context_line":"        # With VIF whose status is active, neutron may not notify such event."},{"line_number":635,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":636,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":637,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":638,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":639,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_20b5eecc","line":636,"range":{"start_line":636,"start_character":60,"end_line":636,"end_character":70},"in_reply_to":"5aef4532_c5ad3c8a","updated":"2016-03-07 14:47:51.000000000","message":"So added a note above, I think we should ignore first_boot here, its not really relevant in the way you think it might me.","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"7250b5779824dd233160c27e8a94471d4c09ea67","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        # Only get network-vif-plugged events with VIF\u0027s status is not active."},{"line_number":634,"context_line":"        # With VIF whose status is active, neutron may not notify such event."},{"line_number":635,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":636,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":637,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":638,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":639,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_2dd3223a","line":636,"range":{"start_line":636,"start_character":60,"end_line":636,"end_character":70},"in_reply_to":"5aef4532_c5ad3c8a","updated":"2016-03-08 06:50:47.000000000","message":"yes, I want to know whether it\u0027s a new VIFs on the host as we only need to deal with new VIFs.\nMabey change the name first_boot in this function  to is_new_vif or is_vif_plugged which gives the exact meaning","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"da218f118165600e3f4bdb5c019220ad978608c4","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        # Only get network-vif-plugged events with VIF\u0027s status is not active."},{"line_number":634,"context_line":"        # With VIF whose status is active, neutron may not notify such event."},{"line_number":635,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":636,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":637,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":638,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":639,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5aef4532_9b1e7e5d","line":636,"range":{"start_line":636,"start_character":60,"end_line":636,"end_character":70},"in_reply_to":"5aef4532_d5e024cf","updated":"2016-03-09 13:01:46.000000000","message":"Hmm, OK.\n\nWe should come back an look at this one more. I believe with same host resize, you get a new set of VIFs, so I would have expected to see those events from Neutron.\n\nLets try this for size, and come back to migrate, I guess?","commit_id":"845ef289ec3388b75ed2cc6b4db3724a0b91dd5b"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7bda26d510475314917c8f2001225fda5523e9a9","unresolved":false,"context_lines":[{"line_number":593,"context_line":"            # port status may not changed in neutron side and we"},{"line_number":594,"context_line":"            # cannot get the vif plug event from neturon"},{"line_number":595,"context_line":"            timeout \u003d CONF.vif_plugging_timeout"},{"line_number":596,"context_line":"            events \u003d self._get_neutron_events(network_info,"},{"line_number":597,"context_line":"                                              power_on, first_boot)"},{"line_number":598,"context_line":"            try:"},{"line_number":599,"context_line":"                with self._virtapi.wait_for_instance_event("}],"source_content_type":"text/x-python","patch_set":30,"id":"5aef4532_5daad785","line":596,"updated":"2016-03-10 16:26:35.000000000","message":"At this point you know if there are events or not, why not conditionally start paused based on this?","commit_id":"ecd3eb7c945a7b7939c29617c2000a30a48c55dd"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"1ae21ca72ee0946bf594f8af087d341713052caf","unresolved":false,"context_lines":[{"line_number":593,"context_line":"            # port status may not changed in neutron side and we"},{"line_number":594,"context_line":"            # cannot get the vif plug event from neturon"},{"line_number":595,"context_line":"            timeout \u003d CONF.vif_plugging_timeout"},{"line_number":596,"context_line":"            events \u003d self._get_neutron_events(network_info,"},{"line_number":597,"context_line":"                                              power_on, first_boot)"},{"line_number":598,"context_line":"            try:"},{"line_number":599,"context_line":"                with self._virtapi.wait_for_instance_event("}],"source_content_type":"text/x-python","patch_set":30,"id":"5aef4532_039bce18","line":596,"in_reply_to":"5aef4532_5daad785","updated":"2016-03-10 17:04:13.000000000","message":"There are benefits to starting paused anyway; specifically it gives an opportunity to apply security groups before the VM is active.\nAll XS releases support start paused, so there is little drawback to always doing it.","commit_id":"ecd3eb7c945a7b7939c29617c2000a30a48c55dd"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7bda26d510475314917c8f2001225fda5523e9a9","unresolved":false,"context_lines":[{"line_number":625,"context_line":"    def _unpause_and_wait(self, vm_ref, instance, power_on):"},{"line_number":626,"context_line":"        if power_on:"},{"line_number":627,"context_line":"            LOG.debug(\"Update instance when power on\", instance\u003dinstance)"},{"line_number":628,"context_line":"            self._session.VM.unpause(vm_ref)"},{"line_number":629,"context_line":"            self._wait_for_instance_to_start(instance, vm_ref)"},{"line_number":630,"context_line":"            self._update_last_dom_id(vm_ref)"},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"5aef4532_3db6ebf8","line":628,"updated":"2016-03-10 16:26:35.000000000","message":"So now the instance is started in a paused state every time? That seems less than optimal. Why not only start paused if there are events to wait for?","commit_id":"ecd3eb7c945a7b7939c29617c2000a30a48c55dd"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"1ae21ca72ee0946bf594f8af087d341713052caf","unresolved":false,"context_lines":[{"line_number":625,"context_line":"    def _unpause_and_wait(self, vm_ref, instance, power_on):"},{"line_number":626,"context_line":"        if power_on:"},{"line_number":627,"context_line":"            LOG.debug(\"Update instance when power on\", instance\u003dinstance)"},{"line_number":628,"context_line":"            self._session.VM.unpause(vm_ref)"},{"line_number":629,"context_line":"            self._wait_for_instance_to_start(instance, vm_ref)"},{"line_number":630,"context_line":"            self._update_last_dom_id(vm_ref)"},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"5aef4532_a3b3fa96","line":628,"in_reply_to":"5aef4532_3db6ebf8","updated":"2016-03-10 17:04:13.000000000","message":"XS internally always starts paused, then normally unpauses before returning from the start method.\nThe impact of starting paused each time is minimal.","commit_id":"ecd3eb7c945a7b7939c29617c2000a30a48c55dd"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"8eaee5e8b3dab4b99f6a8f52f9e2c839b51e7d49","unresolved":false,"context_lines":[{"line_number":625,"context_line":"    def _unpause_and_wait(self, vm_ref, instance, power_on):"},{"line_number":626,"context_line":"        if power_on:"},{"line_number":627,"context_line":"            LOG.debug(\"Update instance when power on\", instance\u003dinstance)"},{"line_number":628,"context_line":"            self._session.VM.unpause(vm_ref)"},{"line_number":629,"context_line":"            self._wait_for_instance_to_start(instance, vm_ref)"},{"line_number":630,"context_line":"            self._update_last_dom_id(vm_ref)"},{"line_number":631,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"5aef4532_e862fa3c","line":628,"in_reply_to":"5aef4532_a3b3fa96","updated":"2016-03-10 18:11:13.000000000","message":"Good to know, thanks.","commit_id":"ecd3eb7c945a7b7939c29617c2000a30a48c55dd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d632588fd548b269fb6666660fe8c8888f7dc2f8","unresolved":false,"context_lines":[{"line_number":639,"context_line":"        # Only get network-vif-plugged events with VIF\u0027s status is not active."},{"line_number":640,"context_line":"        # With VIF whose status is active, neutron may not notify such event."},{"line_number":641,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":642,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":643,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":644,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":645,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"5aef4532_7ba3b1b2","line":642,"range":{"start_line":642,"start_character":60,"end_line":642,"end_character":70},"updated":"2016-03-09 13:25:31.000000000","message":"So this clearly helps boot, and at worst is the same as before for migrate, so lets try this out.","commit_id":"ecd3eb7c945a7b7939c29617c2000a30a48c55dd"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"67f618327687ca46584007052a83c36d2bb64b77","unresolved":false,"context_lines":[{"line_number":639,"context_line":"        # Only get network-vif-plugged events with VIF\u0027s status is not active."},{"line_number":640,"context_line":"        # With VIF whose status is active, neutron may not notify such event."},{"line_number":641,"context_line":"        timeout \u003d CONF.vif_plugging_timeout"},{"line_number":642,"context_line":"        if (utils.is_neutron() and power_on and timeout and first_boot):"},{"line_number":643,"context_line":"            return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027])"},{"line_number":644,"context_line":"                for vif in network_info if vif.get(\u0027active\u0027, True) is False]"},{"line_number":645,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"5aef4532_c43f8285","line":642,"range":{"start_line":642,"start_character":60,"end_line":642,"end_character":70},"in_reply_to":"5aef4532_7ba3b1b2","updated":"2016-03-09 14:02:29.000000000","message":"yes, thanks a lot. We first let boot scenario work properly and we will try to fix the migration scenario later","commit_id":"ecd3eb7c945a7b7939c29617c2000a30a48c55dd"}]}
