)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0098cba4bb0df6d351b0cc78707bae69f6163000","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alexander Schmidt \u003calexs@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-15 15:36:23 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"serial console: enable live migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When migrating an instance that uses serial console, the domain XML"},{"line_number":10,"context_line":"must be changed to reflect the serial console configuration of the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_95ca84a0","line":7,"updated":"2015-06-15 14:01:22.000000000","message":"please prefix this with libvirt","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"a40a8ba92d0d444a0351a6da265d87a0ef17b730","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alexander Schmidt \u003calexs@linux.vnet.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-06-15 15:36:23 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"serial console: enable live migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When migrating an instance that uses serial console, the domain XML"},{"line_number":10,"context_line":"must be changed to reflect the serial console configuration of the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa32b979_32a5a7b4","line":7,"in_reply_to":"fa32b979_95ca84a0","updated":"2015-06-16 07:52:07.000000000","message":"Done","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0098cba4bb0df6d351b0cc78707bae69f6163000","unresolved":false,"context_lines":[{"line_number":5934,"context_line":"        target_xml \u003d etree.tostring(etree.fromstring(target_xml))"},{"line_number":5935,"context_line":""},{"line_number":5936,"context_line":"        # Preparing mocks"},{"line_number":5937,"context_line":"        vdmock \u003d self.mox.CreateMock(fakelibvirt.virDomain)"},{"line_number":5938,"context_line":"        self.mox.StubOutWithMock(vdmock, \"migrateToURI2\")"},{"line_number":5939,"context_line":"        _bandwidth \u003d CONF.libvirt.live_migration_bandwidth"},{"line_number":5940,"context_line":"        vdmock.XMLDesc(flags\u003dfakelibvirt.VIR_DOMAIN_XML_MIGRATABLE).AndReturn("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_155674d2","line":5937,"updated":"2015-06-15 14:01:22.000000000","message":"can you please use mock here if possible","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"a40a8ba92d0d444a0351a6da265d87a0ef17b730","unresolved":false,"context_lines":[{"line_number":5934,"context_line":"        target_xml \u003d etree.tostring(etree.fromstring(target_xml))"},{"line_number":5935,"context_line":""},{"line_number":5936,"context_line":"        # Preparing mocks"},{"line_number":5937,"context_line":"        vdmock \u003d self.mox.CreateMock(fakelibvirt.virDomain)"},{"line_number":5938,"context_line":"        self.mox.StubOutWithMock(vdmock, \"migrateToURI2\")"},{"line_number":5939,"context_line":"        _bandwidth \u003d CONF.libvirt.live_migration_bandwidth"},{"line_number":5940,"context_line":"        vdmock.XMLDesc(flags\u003dfakelibvirt.VIR_DOMAIN_XML_MIGRATABLE).AndReturn("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_729b2f73","line":5937,"in_reply_to":"fa32b979_155674d2","updated":"2015-06-16 07:52:07.000000000","message":"Done","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0098cba4bb0df6d351b0cc78707bae69f6163000","unresolved":false,"context_lines":[{"line_number":5961,"context_line":"                       create\u003dTrue)"},{"line_number":5962,"context_line":"    def test_live_migration_fails_with_serial_console_without_migratable(self):"},{"line_number":5963,"context_line":"        self.compute \u003d importutils.import_object(CONF.compute_manager)"},{"line_number":5964,"context_line":"        instance_dict \u003d dict(self.test_instance)"},{"line_number":5965,"context_line":"        instance_dict.update({\u0027host\u0027: \u0027fake\u0027,"},{"line_number":5966,"context_line":"                              \u0027power_state\u0027: power_state.RUNNING,"},{"line_number":5967,"context_line":"                              \u0027vm_state\u0027: vm_states.ACTIVE})"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_d55ecce8","line":5964,"updated":"2015-06-15 14:01:22.000000000","message":"the instance should be an object.\nwhy no do:\nself.test_instance.host \u003d \u0027fake\u0027\n...","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"a40a8ba92d0d444a0351a6da265d87a0ef17b730","unresolved":false,"context_lines":[{"line_number":5961,"context_line":"                       create\u003dTrue)"},{"line_number":5962,"context_line":"    def test_live_migration_fails_with_serial_console_without_migratable(self):"},{"line_number":5963,"context_line":"        self.compute \u003d importutils.import_object(CONF.compute_manager)"},{"line_number":5964,"context_line":"        instance_dict \u003d dict(self.test_instance)"},{"line_number":5965,"context_line":"        instance_dict.update({\u0027host\u0027: \u0027fake\u0027,"},{"line_number":5966,"context_line":"                              \u0027power_state\u0027: power_state.RUNNING,"},{"line_number":5967,"context_line":"                              \u0027vm_state\u0027: vm_states.ACTIVE})"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_12898326","line":5964,"in_reply_to":"fa32b979_d55ecce8","updated":"2015-06-16 07:52:07.000000000","message":"Done","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"7c30cf0026f57383a6eae84fc6ce63e215cb7c78","unresolved":false,"context_lines":[{"line_number":6022,"context_line":"                    \"\u003c/devices\u003e\""},{"line_number":6023,"context_line":"                    \"\u003c/domain\u003e\")"},{"line_number":6024,"context_line":""},{"line_number":6025,"context_line":"        initial_xml \u003d xml_tmpl.format(addr\u003d\u00279.0.0.1\u0027)"},{"line_number":6026,"context_line":""},{"line_number":6027,"context_line":"        target_xml \u003d xml_tmpl.format(addr\u003d\u00279.0.0.12\u0027)"},{"line_number":6028,"context_line":"        target_xml \u003d etree.tostring(etree.fromstring(target_xml))"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_428b021f","line":6025,"range":{"start_line":6025,"start_character":44,"end_line":6025,"end_character":51},"updated":"2015-08-14 02:13:44.000000000","message":"NIT: Possibly best to stick to private addresses :)","commit_id":"6491731c9bdf12178f8533581231498c40dcf554"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"7c30cf0026f57383a6eae84fc6ce63e215cb7c78","unresolved":false,"context_lines":[{"line_number":6032,"context_line":"        mock_migrate.side_effect \u003d fakelibvirt.libvirtError(\"ERR\")"},{"line_number":6033,"context_line":""},{"line_number":6034,"context_line":"        # start test"},{"line_number":6035,"context_line":"        bandwidth \u003d CONF.libvirt.live_migration_bandwidth"},{"line_number":6036,"context_line":"        migrate_data \u003d {\u0027pre_live_migration_result\u0027:"},{"line_number":6037,"context_line":"                {\u0027graphics_listen_addrs\u0027:"},{"line_number":6038,"context_line":"                    {\u0027vnc\u0027: \u002710.0.0.1\u0027, \u0027spice\u0027: \u002710.0.0.2\u0027},"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_228d962a","line":6035,"updated":"2015-08-14 02:13:44.000000000","message":"NIT: Do you really need to look this up in the config for a test? Perhaps just pick a value.","commit_id":"6491731c9bdf12178f8533581231498c40dcf554"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"b60fe591ab6d401695d693f4de0f5a38e3689553","unresolved":false,"context_lines":[{"line_number":6285,"context_line":"        self.compute \u003d importutils.import_object(CONF.compute_manager)"},{"line_number":6286,"context_line":"        instance_ref \u003d self.test_instance"},{"line_number":6287,"context_line":""},{"line_number":6288,"context_line":"        CONF.set_override(\"enabled\", True, \"serial_console\")"},{"line_number":6289,"context_line":"        dom \u003d fakelibvirt.virDomain"},{"line_number":6290,"context_line":""},{"line_number":6291,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_3e48f686","line":6288,"updated":"2015-08-28 16:24:51.000000000","message":"nit: \"self.flags(...)\" does the same but would be more consistent with the rest of the code. No blocker for me.","commit_id":"984cc474efc6ecbeb1240f49479b6439bc9a9416"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":8574,"name":"Qin Zhao","username":"zhaoqin","inactive":true},"change_message_id":"3a6bb1aeac004b13108dda8c0e77ef6641b5c300","unresolved":false,"context_lines":[{"line_number":5495,"context_line":""},{"line_number":5496,"context_line":"            if (migratable_flag is None or"},{"line_number":5497,"context_line":"                    (listen_addrs is None and not volume and"},{"line_number":5498,"context_line":"                        not serial_listen_addr)):"},{"line_number":5499,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5500,"context_line":"                self._verify_serial_console_is_disabled()"},{"line_number":5501,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_b34d5d74","line":5498,"updated":"2015-06-15 15:16:58.000000000","message":"@Alexander, it seems that listen_addrs will never be None. Does the program enter this path, when you test your patch?","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":8574,"name":"Qin Zhao","username":"zhaoqin","inactive":true},"change_message_id":"1b4fdac203a6a274e129c341974c99fc6c395ad2","unresolved":false,"context_lines":[{"line_number":5495,"context_line":""},{"line_number":5496,"context_line":"            if (migratable_flag is None or"},{"line_number":5497,"context_line":"                    (listen_addrs is None and not volume and"},{"line_number":5498,"context_line":"                        not serial_listen_addr)):"},{"line_number":5499,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5500,"context_line":"                self._verify_serial_console_is_disabled()"},{"line_number":5501,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_de2b0b93","line":5498,"in_reply_to":"fa32b979_a2cac89f","updated":"2015-06-16 17:28:24.000000000","message":"What I hope to say is that the condition \"not serial_listen_addr\" does not take any effect here. If listen_addrs is None, serial_listen_addr should be None, either. If listen_addrs is not None, no need to check serial_listen_addr any more. However, this condition expression did confuse me yesterday.","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"a40a8ba92d0d444a0351a6da265d87a0ef17b730","unresolved":false,"context_lines":[{"line_number":5495,"context_line":""},{"line_number":5496,"context_line":"            if (migratable_flag is None or"},{"line_number":5497,"context_line":"                    (listen_addrs is None and not volume and"},{"line_number":5498,"context_line":"                        not serial_listen_addr)):"},{"line_number":5499,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5500,"context_line":"                self._verify_serial_console_is_disabled()"},{"line_number":5501,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_a2cac89f","line":5498,"in_reply_to":"fa32b979_b34d5d74","updated":"2015-06-16 07:52:07.000000000","message":"Hi,\n\nthe listen_addrs could be None when migrating to a hypervisor that does not have this patch (using an older nova release). I tried to handle the serial_listen_addr similar to the existing VNC config with this repsect.\n\nDoes this address your comment? I appreciate your review.","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"bbd34ef632d72fa25b93089399e5fec259b9ae5a","unresolved":false,"context_lines":[{"line_number":5495,"context_line":""},{"line_number":5496,"context_line":"            if (migratable_flag is None or"},{"line_number":5497,"context_line":"                    (listen_addrs is None and not volume and"},{"line_number":5498,"context_line":"                        not serial_listen_addr)):"},{"line_number":5499,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5500,"context_line":"                self._verify_serial_console_is_disabled()"},{"line_number":5501,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_df1f37b5","line":5498,"in_reply_to":"fa32b979_de2b0b93","updated":"2015-06-18 06:51:44.000000000","message":"Thanks for your explanation, I got it now and removed this code chunk in the latest patchset.","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0098cba4bb0df6d351b0cc78707bae69f6163000","unresolved":false,"context_lines":[{"line_number":5947,"context_line":""},{"line_number":5948,"context_line":"        # Store vncserver_listen and latest disk device info"},{"line_number":5949,"context_line":"        res_data \u003d {\u0027graphics_listen_addrs\u0027: {}, \u0027volume\u0027: {},"},{"line_number":5950,"context_line":"                \u0027serial_listen_addr\u0027: {}}"},{"line_number":5951,"context_line":"        res_data[\u0027graphics_listen_addrs\u0027][\u0027vnc\u0027] \u003d CONF.vncserver_listen"},{"line_number":5952,"context_line":"        res_data[\u0027graphics_listen_addrs\u0027][\u0027spice\u0027] \u003d CONF.spice.server_listen"},{"line_number":5953,"context_line":"        res_data[\u0027serial_listen_addr\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_95dda444","line":5950,"updated":"2015-06-15 14:01:22.000000000","message":"alignment is odd","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"a40a8ba92d0d444a0351a6da265d87a0ef17b730","unresolved":false,"context_lines":[{"line_number":5947,"context_line":""},{"line_number":5948,"context_line":"        # Store vncserver_listen and latest disk device info"},{"line_number":5949,"context_line":"        res_data \u003d {\u0027graphics_listen_addrs\u0027: {}, \u0027volume\u0027: {},"},{"line_number":5950,"context_line":"                \u0027serial_listen_addr\u0027: {}}"},{"line_number":5951,"context_line":"        res_data[\u0027graphics_listen_addrs\u0027][\u0027vnc\u0027] \u003d CONF.vncserver_listen"},{"line_number":5952,"context_line":"        res_data[\u0027graphics_listen_addrs\u0027][\u0027spice\u0027] \u003d CONF.spice.server_listen"},{"line_number":5953,"context_line":"        res_data[\u0027serial_listen_addr\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_32936751","line":5950,"in_reply_to":"fa32b979_95dda444","updated":"2015-06-16 07:52:07.000000000","message":"Done","commit_id":"2e245f1de0ec33cdf4c34283dc6975af12560c76"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e7df80b23f8ab0bb90253a9492b60069e862ddf8","unresolved":false,"context_lines":[{"line_number":5454,"context_line":"                    \u0027 for live migration to work properly you\u0027"},{"line_number":5455,"context_line":"                    \u0027 must either disable serial console or\u0027"},{"line_number":5456,"context_line":"                    \u0027 upgrade your libvirt version.\u0027)"},{"line_number":5457,"context_line":"            raise exception.MigrationError(reason\u003dmsg)"},{"line_number":5458,"context_line":""},{"line_number":5459,"context_line":"    def _live_migration_operation(self, context, instance, dest,"},{"line_number":5460,"context_line":"                                  block_migration, migrate_data, dom):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_8a37284c","line":5457,"updated":"2015-06-18 08:44:52.000000000","message":"If you move this check as I\u0027ve described bellow MigrationPreCheckError would be more suitable.","commit_id":"f11cf8ac70374e8c8e0667acbc680f45c9a47c8c"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e7df80b23f8ab0bb90253a9492b60069e862ddf8","unresolved":false,"context_lines":[{"line_number":5534,"context_line":"                                 instance\u003dinstance)"},{"line_number":5535,"context_line":"                        self._check_graphics_addresses_can_live_migrate("},{"line_number":5536,"context_line":"                            listen_addrs)"},{"line_number":5537,"context_line":"                        self._verify_serial_console_is_disabled()"},{"line_number":5538,"context_line":"                        dom.migrateToURI("},{"line_number":5539,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"},{"line_number":5540,"context_line":"                            logical_sum,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_0abf98aa","line":5537,"updated":"2015-06-18 08:44:52.000000000","message":"I wonder, can we move this check in check_can_live_migrate_destination/source phase","commit_id":"f11cf8ac70374e8c8e0667acbc680f45c9a47c8c"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"8d18ec3dcdf877e76a84b2e913ed2f21041729a3","unresolved":false,"context_lines":[{"line_number":5534,"context_line":"                                 instance\u003dinstance)"},{"line_number":5535,"context_line":"                        self._check_graphics_addresses_can_live_migrate("},{"line_number":5536,"context_line":"                            listen_addrs)"},{"line_number":5537,"context_line":"                        self._verify_serial_console_is_disabled()"},{"line_number":5538,"context_line":"                        dom.migrateToURI("},{"line_number":5539,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"},{"line_number":5540,"context_line":"                            logical_sum,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_b54da1c5","line":5537,"in_reply_to":"fa32b979_0abf98aa","updated":"2015-06-18 13:49:16.000000000","message":"Hi Timofey,\n\nwe only need to verify that the serial console is disabled in three cases:\n\n1) the source host does not support VIR_DOMAIN_XML_MIGRATABLE\n2) the destination did not provide the configuration for graphics listen_addrs and volume configuration\n3) the attempt to use migrateToUri2() failed and we fall back to migrateToUri()\n\nAll of these three cases require information that are only retrieved in the _live_migration_operation() path. So while I agree it would be cleaner to do the check earlier, it would require more fundamental code changes that do not fit into the scope of this changeset.\n\nLet me know your opinion, thanks.","commit_id":"f11cf8ac70374e8c8e0667acbc680f45c9a47c8c"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"364dc863f79a1ebba7f4a328e24cfca5fea0de21","unresolved":false,"context_lines":[{"line_number":5534,"context_line":"                                 instance\u003dinstance)"},{"line_number":5535,"context_line":"                        self._check_graphics_addresses_can_live_migrate("},{"line_number":5536,"context_line":"                            listen_addrs)"},{"line_number":5537,"context_line":"                        self._verify_serial_console_is_disabled()"},{"line_number":5538,"context_line":"                        dom.migrateToURI("},{"line_number":5539,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"},{"line_number":5540,"context_line":"                            logical_sum,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_c4f6715c","line":5537,"in_reply_to":"fa32b979_2925b85a","updated":"2015-06-18 15:18:12.000000000","message":"I think moving the 2 cases to the check phase would make the code less consistent and readable. With the current approach, all contents of the pre_live_migrate_data are handled and checked in _live_migration_operation(). Also the migratable_flag is only checked in _live_migration_operation().\n\nDoing the check in different code paths would also require two variants of verify_serial_console_is_disabled() that raise different exceptions.\n\nSo right now it seems to me that having these checks in _live_migration_operation() is the simpler approach.","commit_id":"f11cf8ac70374e8c8e0667acbc680f45c9a47c8c"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"fbbebf49e6529b679eda55bd01be7c7349e09252","unresolved":false,"context_lines":[{"line_number":5534,"context_line":"                                 instance\u003dinstance)"},{"line_number":5535,"context_line":"                        self._check_graphics_addresses_can_live_migrate("},{"line_number":5536,"context_line":"                            listen_addrs)"},{"line_number":5537,"context_line":"                        self._verify_serial_console_is_disabled()"},{"line_number":5538,"context_line":"                        dom.migrateToURI("},{"line_number":5539,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"},{"line_number":5540,"context_line":"                            logical_sum,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_254ffb34","line":5537,"in_reply_to":"fa32b979_86be2eac","updated":"2015-06-19 06:43:13.000000000","message":"Done, thanks for your review!","commit_id":"f11cf8ac70374e8c8e0667acbc680f45c9a47c8c"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"91ef1154bdd61b6f963482ed335f5cf71266e26b","unresolved":false,"context_lines":[{"line_number":5534,"context_line":"                                 instance\u003dinstance)"},{"line_number":5535,"context_line":"                        self._check_graphics_addresses_can_live_migrate("},{"line_number":5536,"context_line":"                            listen_addrs)"},{"line_number":5537,"context_line":"                        self._verify_serial_console_is_disabled()"},{"line_number":5538,"context_line":"                        dom.migrateToURI("},{"line_number":5539,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"},{"line_number":5540,"context_line":"                            logical_sum,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_2925b85a","line":5537,"in_reply_to":"fa32b979_b54da1c5","updated":"2015-06-18 14:54:45.000000000","message":"Alexander, checked code again, as for me, you could move first 2 cases into \u0027check\u0027 phase, while third one could be in _live_migration_operation method.","commit_id":"f11cf8ac70374e8c8e0667acbc680f45c9a47c8c"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e8519a0b9f40433a508731cd020294b8457ce36f","unresolved":false,"context_lines":[{"line_number":5534,"context_line":"                                 instance\u003dinstance)"},{"line_number":5535,"context_line":"                        self._check_graphics_addresses_can_live_migrate("},{"line_number":5536,"context_line":"                            listen_addrs)"},{"line_number":5537,"context_line":"                        self._verify_serial_console_is_disabled()"},{"line_number":5538,"context_line":"                        dom.migrateToURI("},{"line_number":5539,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"},{"line_number":5540,"context_line":"                            logical_sum,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa32b979_86be2eac","line":5537,"in_reply_to":"fa32b979_c4f6715c","updated":"2015-06-18 15:33:13.000000000","message":"Alexander, OK. leave a comment please, so we could keep in mind to separate checks from operation itself","commit_id":"f11cf8ac70374e8c8e0667acbc680f45c9a47c8c"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7c4ad4f4ffcf19b38e349cfad1f6604af69cfce1","unresolved":false,"context_lines":[{"line_number":5641,"context_line":"                                      None)"},{"line_number":5642,"context_line":""},{"line_number":5643,"context_line":"            if (migratable_flag is None or"},{"line_number":5644,"context_line":"                    (listen_addrs is None and not volume)):"},{"line_number":5645,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5646,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"},{"line_number":5647,"context_line":"                                 logical_sum,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_6272c74b","side":"PARENT","line":5644,"updated":"2015-09-01 16:00:23.000000000","message":"You may need to add check for serial_listen_addr is None here.","commit_id":"a2d5492e8a15cdc13ada61b03f6293c709160505"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"3c9a58f9a140933fe8617c7a7c82c18c95454bb5","unresolved":false,"context_lines":[{"line_number":5641,"context_line":"                                      None)"},{"line_number":5642,"context_line":""},{"line_number":5643,"context_line":"            if (migratable_flag is None or"},{"line_number":5644,"context_line":"                    (listen_addrs is None and not volume)):"},{"line_number":5645,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5646,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"},{"line_number":5647,"context_line":"                                 logical_sum,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_edf7848a","side":"PARENT","line":5644,"in_reply_to":"da20952f_6272c74b","updated":"2015-09-02 08:26:15.000000000","message":"Originally I had this check, but Qin Zhao convinced me that it is not required, see https://review.openstack.org/#/c/191035/5/nova/virt/libvirt/driver.py\n\nThe rationale: we will never have the case that listen_addrs and volume is None, but serial_listen_addr is set. If listen_addrs/volume is None, it\u0027s guaranteed that serial_listen_addr is also None as the code for adding serial_listen_addr was added later. So the check for serial_listen_addr does not have any effect.","commit_id":"a2d5492e8a15cdc13ada61b03f6293c709160505"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"3c9a58f9a140933fe8617c7a7c82c18c95454bb5","unresolved":false,"context_lines":[{"line_number":5642,"context_line":""},{"line_number":5643,"context_line":"            if (migratable_flag is None or"},{"line_number":5644,"context_line":"                    (listen_addrs is None and not volume)):"},{"line_number":5645,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5646,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"},{"line_number":5647,"context_line":"                                 logical_sum,"},{"line_number":5648,"context_line":"                                 None,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_086f4693","side":"PARENT","line":5645,"updated":"2015-09-02 08:26:15.000000000","message":"I think you meant to say \"on target host\". The check is executed on the source host with configuration data obtained from the target.","commit_id":"a2d5492e8a15cdc13ada61b03f6293c709160505"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e65f395d70d8d1b1977f389077caa3160db145dd","unresolved":false,"context_lines":[{"line_number":5642,"context_line":""},{"line_number":5643,"context_line":"            if (migratable_flag is None or"},{"line_number":5644,"context_line":"                    (listen_addrs is None and not volume)):"},{"line_number":5645,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5646,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"},{"line_number":5647,"context_line":"                                 logical_sum,"},{"line_number":5648,"context_line":"                                 None,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_53a67c54","side":"PARENT","line":5645,"updated":"2015-09-01 15:39:37.000000000","message":"So I remove my +1 I need to verify something and perhaps you can confirm me that.\n\nWhere is executed this method - on source host, right ? so how that two checks can work ?","commit_id":"a2d5492e8a15cdc13ada61b03f6293c709160505"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7c4ad4f4ffcf19b38e349cfad1f6604af69cfce1","unresolved":false,"context_lines":[{"line_number":5642,"context_line":""},{"line_number":5643,"context_line":"            if (migratable_flag is None or"},{"line_number":5644,"context_line":"                    (listen_addrs is None and not volume)):"},{"line_number":5645,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5646,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"},{"line_number":5647,"context_line":"                                 logical_sum,"},{"line_number":5648,"context_line":"                                 None,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_a20f7f2d","side":"PARENT","line":5645,"in_reply_to":"da20952f_53a67c54","updated":"2015-09-01 16:00:23.000000000","message":"Ok so method \"_check_graphics_addresses_can_live_migrate\" works because it actually use migrate_data which comes from \"pre_live_migration\" which will be executed on source host to retrieve CONF.vnc.vncserver_listen.","commit_id":"a2d5492e8a15cdc13ada61b03f6293c709160505"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7c4ad4f4ffcf19b38e349cfad1f6604af69cfce1","unresolved":false,"context_lines":[{"line_number":5674,"context_line":"                # TODO(alexs-h): These checks could be moved to the"},{"line_number":5675,"context_line":"                # check_can_live_migrate_destination/source phase"},{"line_number":5676,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5677,"context_line":"                self._verify_serial_console_is_disabled()"},{"line_number":5678,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"},{"line_number":5679,"context_line":"                                 logical_sum,"},{"line_number":5680,"context_line":"                                 None,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_02874b13","line":5677,"updated":"2015-09-01 16:00:23.000000000","message":"And here you want to ensure that serial is not used when serial_listen_addr is None so you need to add a check line 5673","commit_id":"984cc474efc6ecbeb1240f49479b6439bc9a9416"},{"author":{"_account_id":14594,"name":"Alexander Schmidt","email":"alexs@linux.vnet.ibm.com","username":"alexs"},"change_message_id":"3c9a58f9a140933fe8617c7a7c82c18c95454bb5","unresolved":false,"context_lines":[{"line_number":5674,"context_line":"                # TODO(alexs-h): These checks could be moved to the"},{"line_number":5675,"context_line":"                # check_can_live_migrate_destination/source phase"},{"line_number":5676,"context_line":"                self._check_graphics_addresses_can_live_migrate(listen_addrs)"},{"line_number":5677,"context_line":"                self._verify_serial_console_is_disabled()"},{"line_number":5678,"context_line":"                dom.migrateToURI(CONF.libvirt.live_migration_uri % dest,"},{"line_number":5679,"context_line":"                                 logical_sum,"},{"line_number":5680,"context_line":"                                 None,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_e86772e8","line":5677,"in_reply_to":"da20952f_02874b13","updated":"2015-09-02 08:26:15.000000000","message":"When we are in this code path, we can be sure that serial_listen_addr is None as listen_addrs/volume is also None and the code for listen_addrs/volume existed before adding serial_listen_addr.","commit_id":"984cc474efc6ecbeb1240f49479b6439bc9a9416"}]}
