)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"562e1b0e1913690ca192c68e7686a30d49568e34","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Block migrate with attached volumes copies volumes to themselves"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In libvirt 1.2.17 there is already implemented selective block device"},{"line_number":10,"context_line":"migration. It means possibility to define subset of block devices to be"},{"line_number":11,"context_line":"copied during migration If they are not specified - block devices won\u0027t"},{"line_number":12,"context_line":"be migrated. This patch provides check of used libvirt version."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5a2ca52d_b8bade21","line":9,"updated":"2015-10-15 13:13:05.000000000","message":"Actually, you require libvirt 1.2.16 and libvirt-python 1.2.17.","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"3789b39b792b36bcb4ba1b19daa264875f4cfd3f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Block migrate with attached volumes copies volumes to themselves"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In libvirt 1.2.17 there is already implemented selective block device"},{"line_number":10,"context_line":"migration. It means possibility to define subset of block devices to be"},{"line_number":11,"context_line":"copied during migration If they are not specified - block devices won\u0027t"},{"line_number":12,"context_line":"be migrated. This patch provides check of used libvirt version."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5a2ca52d_663c73c8","line":9,"in_reply_to":"5a2ca52d_b8bade21","updated":"2015-10-16 11:34:08.000000000","message":"Are you sure ?\n\nAccording to this link: https://libvirt.org/news.html selective block device migration is supported in libvirt 1.2.17.\n\nAnd according to this link: https://launchpad.net/ubuntu/+source/libvirt/1.2.16-2ubuntu9 this feature was backported to libvirt 1.2.16 only for ubuntu.\n\nAm I wrong ?","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"dc227e309067395f903c6de28a903abcf828da66","unresolved":false,"context_lines":[{"line_number":6047,"context_line":"        return_value \u003d drvr.check_can_live_migrate_source("},{"line_number":6048,"context_line":"            self.context, instance, dest_check_data, block_device_info\u003dbdi)"},{"line_number":6049,"context_line":""},{"line_number":6050,"context_line":"        self.assertItemsEqual(expected, return_value)"},{"line_number":6051,"context_line":""},{"line_number":6052,"context_line":"    def test_prepare_migration_params(self):"},{"line_number":6053,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_381b481d","line":6050,"updated":"2015-10-07 11:24:59.000000000","message":"on python 3 (from 3.2 if I am right) assertItemsEqual doesn\u0027t exist anymore, I think you should use six.assertCountEqual","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"fe43ab3216aece290dc9f84c54a7c247cd42a935","unresolved":false,"context_lines":[{"line_number":6047,"context_line":"        return_value \u003d drvr.check_can_live_migrate_source("},{"line_number":6048,"context_line":"            self.context, instance, dest_check_data, block_device_info\u003dbdi)"},{"line_number":6049,"context_line":""},{"line_number":6050,"context_line":"        self.assertItemsEqual(expected, return_value)"},{"line_number":6051,"context_line":""},{"line_number":6052,"context_line":"    def test_prepare_migration_params(self):"},{"line_number":6053,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_e18e4dcf","line":6050,"in_reply_to":"7a2fa921_381b481d","updated":"2015-10-08 11:31:26.000000000","message":"Thanks for pointing this out. We\u0027ll fix it in next patch set.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"dc227e309067395f903c6de28a903abcf828da66","unresolved":false,"context_lines":[{"line_number":6060,"context_line":"            \u0027migrate_disks\u0027: \u0027,\u0027.join(disks_to_migrate),"},{"line_number":6061,"context_line":"        }"},{"line_number":6062,"context_line":"        return_value \u003d drvr._prepare_migration_params(xml, disks_to_migrate)"},{"line_number":6063,"context_line":"        self.assertItemsEqual(expected, return_value)"},{"line_number":6064,"context_line":""},{"line_number":6065,"context_line":"    @mock.patch(\u0027nova.virt.driver.get_block_device_info\u0027)"},{"line_number":6066,"context_line":"    @mock.patch(\u0027nova.objects.BlockDeviceMappingList.get_by_instance_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_78e8e0e2","line":6063,"updated":"2015-10-07 11:24:59.000000000","message":"same as above","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"dc227e309067395f903c6de28a903abcf828da66","unresolved":false,"context_lines":[{"line_number":6114,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":6115,"context_line":"        expected \u003d [\u0027vda\u0027, \u0027vdb\u0027, \u0027vdc\u0027]"},{"line_number":6116,"context_line":"        return_value \u003d drvr._get_disks_to_migrate(context, instance)"},{"line_number":6117,"context_line":"        self.assertItemsEqual(expected, return_value)"},{"line_number":6118,"context_line":""},{"line_number":6119,"context_line":"    def _is_shared_block_storage_test_create_mocks(self, disks):"},{"line_number":6120,"context_line":"        # Test data"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_18be8cd4","line":6117,"updated":"2015-10-07 11:24:59.000000000","message":"same as above","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"562e1b0e1913690ca192c68e7686a30d49568e34","unresolved":false,"context_lines":[{"line_number":6652,"context_line":"        mock_new_xml.return_value \u003d \u0027\u0027"},{"line_number":6653,"context_line":"        mock_min_version.return_value \u003d True"},{"line_number":6654,"context_line":"        mock_get_disks.return_value \u003d [\u0027/dev/vda\u0027, \u0027/dev/vdb\u0027]"},{"line_number":6655,"context_line":"        mock_prepare_params.return_value \u003d {"},{"line_number":6656,"context_line":"            \u0027migrate_disks\u0027: \u0027vda,vdb\u0027,"},{"line_number":6657,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":6658,"context_line":"            \u0027destination_xml\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a2ca52d_983b629c","line":6655,"updated":"2015-10-15 13:13:05.000000000","message":"Please don\u0027t mock prepare_params here.\n\nOtherwise the whole checking has no sense -- you only check that result of prepare_params are passed as is (and `migrate_disks` are incorrectly passed as comma-separated string)","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"3789b39b792b36bcb4ba1b19daa264875f4cfd3f","unresolved":false,"context_lines":[{"line_number":6652,"context_line":"        mock_new_xml.return_value \u003d \u0027\u0027"},{"line_number":6653,"context_line":"        mock_min_version.return_value \u003d True"},{"line_number":6654,"context_line":"        mock_get_disks.return_value \u003d [\u0027/dev/vda\u0027, \u0027/dev/vdb\u0027]"},{"line_number":6655,"context_line":"        mock_prepare_params.return_value \u003d {"},{"line_number":6656,"context_line":"            \u0027migrate_disks\u0027: \u0027vda,vdb\u0027,"},{"line_number":6657,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":6658,"context_line":"            \u0027destination_xml\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a2ca52d_9dc32789","line":6655,"in_reply_to":"5a2ca52d_983b629c","updated":"2015-10-16 11:34:08.000000000","message":"I agree with you that \u0027migrate_disks\u0027 has incorrect comma-separated string. I am going to fix this, \n\nbut I don\u0027t think that mocking _prepare_migration_params is incorrect here. This test is simply checking whether _live_migration_operation method calls migrateToURI3, if libvirt is in appropriate version.\n\nLogic of _prepare_migration_params method is covered in this test:\n- def test_prepare_migration_params()\n\nAnd in this test there will be mocked _get_disks_to_migrate, because logic of _get_disks_to_migrate method is covered here:\n- def test_get_disks_to_migrate()","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7f3050fe00511cc77484d787edc309d26097d41c","unresolved":false,"context_lines":[{"line_number":5968,"context_line":"                          drvr.check_can_live_migrate_source,"},{"line_number":5969,"context_line":"                          self.context, instance, dest_check_data)"},{"line_number":5970,"context_line":""},{"line_number":5971,"context_line":"    @mock.patch.object(host.Host, \u0027has_min_version\u0027)"},{"line_number":5972,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"},{"line_number":5973,"context_line":"                \u0027_assert_dest_node_has_enough_disk\u0027)"},{"line_number":5974,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_cf341e4c","line":5971,"updated":"2015-10-18 10:53:22.000000000","message":"why not return_value\u003dFalse\nThen you do not need lime 5989","commit_id":"ba8a43fa821fdb83e9640015c1885e209493fd03"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7f3050fe00511cc77484d787edc309d26097d41c","unresolved":false,"context_lines":[{"line_number":6003,"context_line":"                          self.context, instance, dest_check_data,"},{"line_number":6004,"context_line":"                          block_device_info\u003dbdi)"},{"line_number":6005,"context_line":""},{"line_number":6006,"context_line":"    @mock.patch.object(host.Host, \u0027has_min_version\u0027)"},{"line_number":6007,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"},{"line_number":6008,"context_line":"                \u0027_assert_dest_node_has_enough_disk\u0027)"},{"line_number":6009,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_8f3f0625","line":6006,"updated":"2015-10-18 10:53:22.000000000","message":"ditto (except return_value\u003dTrue)","commit_id":"ba8a43fa821fdb83e9640015c1885e209493fd03"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7f3050fe00511cc77484d787edc309d26097d41c","unresolved":false,"context_lines":[{"line_number":6022,"context_line":"            mock_min_version):"},{"line_number":6023,"context_line":""},{"line_number":6024,"context_line":"        mock_min_version.return_value \u003d True"},{"line_number":6025,"context_line":"        mock_check.return_value \u003d False"},{"line_number":6026,"context_line":"        mock_shared_block.return_value \u003d False"},{"line_number":6027,"context_line":"        bdi \u003d {\u0027block_device_mapping\u0027: [\u0027bdm\u0027]}"},{"line_number":6028,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_af3c4230","line":6025,"updated":"2015-10-18 10:53:22.000000000","message":"same here","commit_id":"ba8a43fa821fdb83e9640015c1885e209493fd03"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7f3050fe00511cc77484d787edc309d26097d41c","unresolved":false,"context_lines":[{"line_number":6023,"context_line":""},{"line_number":6024,"context_line":"        mock_min_version.return_value \u003d True"},{"line_number":6025,"context_line":"        mock_check.return_value \u003d False"},{"line_number":6026,"context_line":"        mock_shared_block.return_value \u003d False"},{"line_number":6027,"context_line":"        bdi \u003d {\u0027block_device_mapping\u0027: [\u0027bdm\u0027]}"},{"line_number":6028,"context_line":"        instance \u003d objects.Instance(**self.test_instance)"},{"line_number":6029,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_4f49eecf","line":6026,"updated":"2015-10-18 10:53:22.000000000","message":"same here","commit_id":"ba8a43fa821fdb83e9640015c1885e209493fd03"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7f3050fe00511cc77484d787edc309d26097d41c","unresolved":false,"context_lines":[{"line_number":6641,"context_line":"                          self.context, instance_ref, \u0027dest\u0027,"},{"line_number":6642,"context_line":"                          False, migrate_data, vdmock)"},{"line_number":6643,"context_line":""},{"line_number":6644,"context_line":"    @mock.patch.object(host.Host, \u0027has_min_version\u0027)"},{"line_number":6645,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.driver.LibvirtDriver.\u0027"},{"line_number":6646,"context_line":"                \u0027_prepare_migration_params\u0027)"},{"line_number":6647,"context_line":"    @mock.patch.object(fakelibvirt.virDomain, \"migrateToURI3\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_ef10faaa","line":6644,"updated":"2015-10-18 10:53:22.000000000","message":"ditto","commit_id":"ba8a43fa821fdb83e9640015c1885e209493fd03"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7f3050fe00511cc77484d787edc309d26097d41c","unresolved":false,"context_lines":[{"line_number":6657,"context_line":"            \u0027destination_xml\u0027: \u0027\u0027,"},{"line_number":6658,"context_line":"        }"},{"line_number":6659,"context_line":""},{"line_number":6660,"context_line":"        mock_old_xml.return_value \u003d \u0027\u0027"},{"line_number":6661,"context_line":"        mock_new_xml.return_value \u003d \u0027\u0027"},{"line_number":6662,"context_line":"        mock_min_version.return_value \u003d True"},{"line_number":6663,"context_line":"        mock_prepare_params.return_value \u003d params"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_af23e204","line":6660,"updated":"2015-10-18 10:53:22.000000000","message":"ditto","commit_id":"ba8a43fa821fdb83e9640015c1885e209493fd03"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7f3050fe00511cc77484d787edc309d26097d41c","unresolved":false,"context_lines":[{"line_number":6658,"context_line":"        }"},{"line_number":6659,"context_line":""},{"line_number":6660,"context_line":"        mock_old_xml.return_value \u003d \u0027\u0027"},{"line_number":6661,"context_line":"        mock_new_xml.return_value \u003d \u0027\u0027"},{"line_number":6662,"context_line":"        mock_min_version.return_value \u003d True"},{"line_number":6663,"context_line":"        mock_prepare_params.return_value \u003d params"},{"line_number":6664,"context_line":"        mock_migrateToURI3.side_effect \u003d fakelibvirt.libvirtError(\"ERR\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_cf82dec8","line":6661,"updated":"2015-10-18 10:53:22.000000000","message":"ditto","commit_id":"ba8a43fa821fdb83e9640015c1885e209493fd03"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"dc9864b21e7e31599fc24cccb30f233384c3a809","unresolved":false,"context_lines":[{"line_number":5177,"context_line":"            # block devices to be copied during migration. If they are not"},{"line_number":5178,"context_line":"            # specified - block devices won\u0027t be migrated."},{"line_number":5179,"context_line":"            if not self._host.has_min_version("},{"line_number":5180,"context_line":"                    MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5181,"context_line":"                if block_device_info:"},{"line_number":5182,"context_line":"                    bdm \u003d block_device_info.get(\u0027block_device_mapping\u0027)"},{"line_number":5183,"context_line":"                    # NOTE(stpierre): if this instance has mapped volumes,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_48a1d4a8","line":5180,"updated":"2015-09-24 23:58:41.000000000","message":"This isn\u0027t enough.  If we\u0027re going to do this check AND we;re on the correct libvirt versions we should actually generate the list of devices to migrate.\n\nincluding config drive and allowing for images on shared storage, visible on the dest.","commit_id":"0a6dfdd87c3f2f938f01bbc59dc055bfd5b9611d"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"20edc2e83085316f97000ebcc5bc9bf71722218c","unresolved":false,"context_lines":[{"line_number":5177,"context_line":"            # block devices to be copied during migration. If they are not"},{"line_number":5178,"context_line":"            # specified - block devices won\u0027t be migrated."},{"line_number":5179,"context_line":"            if not self._host.has_min_version("},{"line_number":5180,"context_line":"                    MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5181,"context_line":"                if block_device_info:"},{"line_number":5182,"context_line":"                    bdm \u003d block_device_info.get(\u0027block_device_mapping\u0027)"},{"line_number":5183,"context_line":"                    # NOTE(stpierre): if this instance has mapped volumes,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_87e9121d","line":5180,"in_reply_to":"9a1a9d01_48a1d4a8","updated":"2015-09-25 10:56:51.000000000","message":"Ok, I am going to work on this.","commit_id":"0a6dfdd87c3f2f938f01bbc59dc055bfd5b9611d"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"dc9864b21e7e31599fc24cccb30f233384c3a809","unresolved":false,"context_lines":[{"line_number":5188,"context_line":"                        LOG.error(_LE(\u0027Cannot block migrate instance %s with \u0027"},{"line_number":5189,"context_line":"                                      \u0027mapped volumes\u0027),"},{"line_number":5190,"context_line":"                                  instance.uuid, instance\u003dinstance)"},{"line_number":5191,"context_line":"                        msg \u003d (_(\u0027Cannot block migrate instance %s with mapped\u0027"},{"line_number":5192,"context_line":"                                 \u0027volumes\u0027) % instance.uuid)"},{"line_number":5193,"context_line":"                        raise exception.MigrationPreCheckError(reason\u003dmsg)"},{"line_number":5194,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_483794b0","line":5191,"updated":"2015-09-24 23:58:41.000000000","message":"that space should be there removing will make the msg end in \u0027mappedvolumes\" rather than \"mapped volumes\"","commit_id":"0a6dfdd87c3f2f938f01bbc59dc055bfd5b9611d"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"20edc2e83085316f97000ebcc5bc9bf71722218c","unresolved":false,"context_lines":[{"line_number":5188,"context_line":"                        LOG.error(_LE(\u0027Cannot block migrate instance %s with \u0027"},{"line_number":5189,"context_line":"                                      \u0027mapped volumes\u0027),"},{"line_number":5190,"context_line":"                                  instance.uuid, instance\u003dinstance)"},{"line_number":5191,"context_line":"                        msg \u003d (_(\u0027Cannot block migrate instance %s with mapped\u0027"},{"line_number":5192,"context_line":"                                 \u0027volumes\u0027) % instance.uuid)"},{"line_number":5193,"context_line":"                        raise exception.MigrationPreCheckError(reason\u003dmsg)"},{"line_number":5194,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a1a9d01_138788b6","line":5191,"in_reply_to":"9a1a9d01_483794b0","updated":"2015-09-25 10:56:51.000000000","message":"sure","commit_id":"0a6dfdd87c3f2f938f01bbc59dc055bfd5b9611d"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"da86e85370c5578401f6ca0d8dd5c44933caf3fa","unresolved":false,"context_lines":[{"line_number":375,"context_line":"# Relative block commit \u0026 rebase (feature is detected,"},{"line_number":376,"context_line":"# this version is only used for messaging)"},{"line_number":377,"context_line":"MIN_LIBVIRT_BLOCKJOB_RELATIVE_VERSION \u003d (1, 2, 7)"},{"line_number":378,"context_line":"# Libvirt version 1.2.16 is required for successfull block live migration"},{"line_number":379,"context_line":"# of vm booted from image with attached devices"},{"line_number":380,"context_line":"MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION \u003d (1, 2, 16)"},{"line_number":381,"context_line":"# libvirt discard feature"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_322379a9","line":378,"updated":"2015-10-07 00:59:40.000000000","message":"AFAIK, libvirt 1.2.17 is required: https://libvirt.org/news.html\nBut Ubuntu backported the feature in 1.2.16-2ubuntu9","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"da86e85370c5578401f6ca0d8dd5c44933caf3fa","unresolved":false,"context_lines":[{"line_number":7244,"context_line":"        for ephemeral in ephemerals:"},{"line_number":7245,"context_line":"            if ephemeral.get(\u0027device_name\u0027):"},{"line_number":7246,"context_line":"                migrate_disks.append(ephemeral.get(\u0027device_name\u0027))"},{"line_number":7247,"context_line":"        if swap is not None:"},{"line_number":7248,"context_line":"            migrate_disks.append(swap.get(\u0027device_name\u0027))"},{"line_number":7249,"context_line":""},{"line_number":7250,"context_line":"        # NOTE(bfic): get_block_device_info returns device names in format:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_345e0577","line":7247,"updated":"2015-10-07 00:59:40.000000000","message":"My instance uses a local root disk + an attached volume (from Cinder) and doesn\u0027t have any swap. The value of swap is: swap: {\u0027swap_size\u0027: 0, \u0027device_name\u0027: None}\n\nThis should check for swap.get(\u0027device_name\u0027) and maybe its size.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"c63df1d59ac9e29bdcbdf00eeaee35d5f5436608","unresolved":false,"context_lines":[{"line_number":7244,"context_line":"        for ephemeral in ephemerals:"},{"line_number":7245,"context_line":"            if ephemeral.get(\u0027device_name\u0027):"},{"line_number":7246,"context_line":"                migrate_disks.append(ephemeral.get(\u0027device_name\u0027))"},{"line_number":7247,"context_line":"        if swap is not None:"},{"line_number":7248,"context_line":"            migrate_disks.append(swap.get(\u0027device_name\u0027))"},{"line_number":7249,"context_line":""},{"line_number":7250,"context_line":"        # NOTE(bfic): get_block_device_info returns device names in format:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_d5cd48b8","line":7247,"in_reply_to":"7a2fa921_345e0577","updated":"2015-10-07 05:52:06.000000000","message":"Thanks, we didn\u0027t catch this.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"c5e452b6806259c0c9bcf3ee8288a087271404b5","unresolved":false,"context_lines":[{"line_number":7252,"context_line":"        # names instead of full path"},{"line_number":7253,"context_line":"        migrate_disks \u003d [d[5:] for d in migrate_disks]"},{"line_number":7254,"context_line":""},{"line_number":7255,"context_line":"        return migrate_disks"},{"line_number":7256,"context_line":""},{"line_number":7257,"context_line":"    def _prepare_migration_params(self, xml, disks_to_migrate):"},{"line_number":7258,"context_line":"        params \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_5dae5d2f","line":7255,"updated":"2015-10-06 15:40:57.000000000","message":"we are returning all the disks here, and that is not going to fix the original issue. I thought we want allow the user to choose the device he wants to include in the migration so he can excludes some of them, like the cinder volumes.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"8ac3a8f97a10c8294cc5f9afb33f5d17b0460b32","unresolved":false,"context_lines":[{"line_number":7252,"context_line":"        # names instead of full path"},{"line_number":7253,"context_line":"        migrate_disks \u003d [d[5:] for d in migrate_disks]"},{"line_number":7254,"context_line":""},{"line_number":7255,"context_line":"        return migrate_disks"},{"line_number":7256,"context_line":""},{"line_number":7257,"context_line":"    def _prepare_migration_params(self, xml, disks_to_migrate):"},{"line_number":7258,"context_line":"        params \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_4fcc6089","line":7255,"in_reply_to":"7a2fa921_2fc5648d","updated":"2015-10-06 15:55:28.000000000","message":"yes you are right I misread the code.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"c68455f9558e3563219dda70448c695a09cd4a1f","unresolved":false,"context_lines":[{"line_number":7252,"context_line":"        # names instead of full path"},{"line_number":7253,"context_line":"        migrate_disks \u003d [d[5:] for d in migrate_disks]"},{"line_number":7254,"context_line":""},{"line_number":7255,"context_line":"        return migrate_disks"},{"line_number":7256,"context_line":""},{"line_number":7257,"context_line":"    def _prepare_migration_params(self, xml, disks_to_migrate):"},{"line_number":7258,"context_line":"        params \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_2fc5648d","line":7255,"in_reply_to":"7a2fa921_5dae5d2f","updated":"2015-10-06 15:43:59.000000000","message":"It does not return cinder volumes here.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"3c27f7f4b4c791d7d64856707461183011a68a8c","unresolved":false,"context_lines":[{"line_number":7258,"context_line":"        params \u003d {"},{"line_number":7259,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7260,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7261,"context_line":"            \u0027migrate_disks\u0027: \u0027,\u0027.join(disks_to_migrate),"},{"line_number":7262,"context_line":"        }"},{"line_number":7263,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_af195e7b","line":7261,"updated":"2015-10-07 01:16:03.000000000","message":"This should be a list, not a CSV.\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2015-October/076115.html","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"45ebf58bffc4a659aae8c0b5504c9c93296025ae","unresolved":false,"context_lines":[{"line_number":7258,"context_line":"        params \u003d {"},{"line_number":7259,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7260,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7261,"context_line":"            \u0027migrate_disks\u0027: \u0027,\u0027.join(disks_to_migrate),"},{"line_number":7262,"context_line":"        }"},{"line_number":7263,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_7971b1df","line":7261,"in_reply_to":"7a2fa921_4cf3ea9e","updated":"2015-10-07 17:26:36.000000000","message":"I tested against 1.2.20.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"fe43ab3216aece290dc9f84c54a7c247cd42a935","unresolved":false,"context_lines":[{"line_number":7258,"context_line":"        params \u003d {"},{"line_number":7259,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7260,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7261,"context_line":"            \u0027migrate_disks\u0027: \u0027,\u0027.join(disks_to_migrate),"},{"line_number":7262,"context_line":"        }"},{"line_number":7263,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_01b34999","line":7261,"in_reply_to":"7a2fa921_7971b1df","updated":"2015-10-08 11:31:26.000000000","message":"Got it. We will give it a shot.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"7088e512c0261563b73c1588ba3845257228f465","unresolved":false,"context_lines":[{"line_number":7258,"context_line":"        params \u003d {"},{"line_number":7259,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7260,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7261,"context_line":"            \u0027migrate_disks\u0027: \u0027,\u0027.join(disks_to_migrate),"},{"line_number":7262,"context_line":"        }"},{"line_number":7263,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_4cf3ea9e","line":7261,"in_reply_to":"7a2fa921_a950705f","updated":"2015-10-07 09:42:54.000000000","message":"I wouldn\u0027t call it luck/accident. In this case it\u0027s a bug in libvirt.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":7156,"name":"Mathieu Gagné","email":"mgagne@calavera.ca","username":"mgagne"},"change_message_id":"385248445e40b699f789f37e6aed70a0ed6f3c9f","unresolved":false,"context_lines":[{"line_number":7258,"context_line":"        params \u003d {"},{"line_number":7259,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7260,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7261,"context_line":"            \u0027migrate_disks\u0027: \u0027,\u0027.join(disks_to_migrate),"},{"line_number":7262,"context_line":"        }"},{"line_number":7263,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_ef3d16bc","line":7261,"in_reply_to":"7a2fa921_af195e7b","updated":"2015-10-07 01:19:12.000000000","message":"I also had to cast all disks to string using str() or libvirt complains:\n\n  Live Migration failure: Unknown type of \"migrate_disks\" field\n\nBefore casting, values were:\n\n  migrate_disks: [u\u0027vda\u0027]","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5ea8ed1ee17271a36e681fab1083b47330cdbe25","unresolved":false,"context_lines":[{"line_number":7258,"context_line":"        params \u003d {"},{"line_number":7259,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7260,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7261,"context_line":"            \u0027migrate_disks\u0027: \u0027,\u0027.join(disks_to_migrate),"},{"line_number":7262,"context_line":"        }"},{"line_number":7263,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_a950705f","line":7261,"in_reply_to":"7a2fa921_d55b08f5","updated":"2015-10-07 09:27:01.000000000","message":"I\u0027m not sure how it works - perhaps by accident/luck - it is *not* supposed to work \u0026 there\u0027s no guarantee it will in the future. We expect the \u0027migrate_disks\u0027 parameter to be a python list of strings, not a comma-separated string.","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"c63df1d59ac9e29bdcbdf00eeaee35d5f5436608","unresolved":false,"context_lines":[{"line_number":7258,"context_line":"        params \u003d {"},{"line_number":7259,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7260,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7261,"context_line":"            \u0027migrate_disks\u0027: \u0027,\u0027.join(disks_to_migrate),"},{"line_number":7262,"context_line":"        }"},{"line_number":7263,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_d55b08f5","line":7261,"in_reply_to":"7a2fa921_ef3d16bc","updated":"2015-10-07 05:52:06.000000000","message":"CSV works in our environment (libvirt-python 1.2.19). Do you mean that you need to cast list to string?","commit_id":"44a4f6af6b1c8740a2fd014614cb159fe9c94ce8"},{"author":{"_account_id":14027,"name":"Michal Rostecki","email":"mrostecki@suse.de","username":"mrostecki"},"change_message_id":"f9600776d894ebd1993ec66da29369c1263913bb","unresolved":false,"context_lines":[{"line_number":5176,"context_line":"                                    block_device_info)"},{"line_number":5177,"context_line":"            if block_device_info:"},{"line_number":5178,"context_line":"                bdm \u003d block_device_info.get(\u0027block_device_mapping\u0027)"},{"line_number":5179,"context_line":"                if bdm and len(bdm):"},{"line_number":5180,"context_line":"                    # NOTE(bfic): In libvirt 1.2.16 there is implemented"},{"line_number":5181,"context_line":"                    # selective block device migration. It means possibility"},{"line_number":5182,"context_line":"                    # to define subset of block devices to be copied during"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a2fa921_60a649af","line":5179,"updated":"2015-10-10 22:02:10.000000000","message":"Why are you checking it like this? If len of bdm is 0, then bdm itself should be False.\nAm I missing something?\n\nThe other thing is that you can merge these two if statements. something like\n\n if bdm and not self._host.has_min_version([...]):","commit_id":"50dfe127cf034e6b9ad3edea8cbfbce06190c7ab"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"a2257e94fa4ade01dfa4ee72157818fcbea26e18","unresolved":false,"context_lines":[{"line_number":5190,"context_line":"                        # result in volumes being copied from themselves to"},{"line_number":5191,"context_line":"                        # themselves, which is a recipe for disaster."},{"line_number":5192,"context_line":"                        LOG.error(_LE(\u0027Cannot block migrate instance %s with \u0027"},{"line_number":5193,"context_line":"                                      \u0027mapped volumes\u0027),"},{"line_number":5194,"context_line":"                                  instance.uuid, instance\u003dinstance)"},{"line_number":5195,"context_line":"                        msg \u003d (_(\u0027Cannot block migrate instance %s with mapped\u0027"},{"line_number":5196,"context_line":"                                 \u0027 volumes\u0027) % instance.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a2fa921_40921ff8","line":5193,"updated":"2015-10-12 08:58:23.000000000","message":"I think it would be very useful to report in the message that the 1.2.16 version supports the selective block device migration feature.","commit_id":"50dfe127cf034e6b9ad3edea8cbfbce06190c7ab"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"898ffe8f88ecd6a333bf09549b60e4a40b16db04","unresolved":false,"context_lines":[{"line_number":5177,"context_line":"            if block_device_info:"},{"line_number":5178,"context_line":"                bdm \u003d block_device_info.get(\u0027block_device_mapping\u0027)"},{"line_number":5179,"context_line":"                # NOTE(bfic): In libvirt 1.2.17 there is implemented selective"},{"line_number":5180,"context_line":"                # block device migration. It means possibility o define subset"},{"line_number":5181,"context_line":"                # of block devices to be copied during migration. If they are"},{"line_number":5182,"context_line":"                # not specified - block devices won\u0027t be migrated."},{"line_number":5183,"context_line":"                if bdm and not self._host.has_min_version("}],"source_content_type":"text/x-python","patch_set":7,"id":"5a2ca52d_15a435a4","line":5180,"updated":"2015-10-14 12:08:05.000000000","message":"o define \u003d\u003e to define","commit_id":"7a34a8adc6f9976c89373467359e26b6b302b129"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"e2e047e421ed18638ddd2cfc1961983b0e0a08ed","unresolved":false,"context_lines":[{"line_number":5177,"context_line":"            if block_device_info:"},{"line_number":5178,"context_line":"                bdm \u003d block_device_info.get(\u0027block_device_mapping\u0027)"},{"line_number":5179,"context_line":"                # NOTE(bfic): In libvirt 1.2.17 there is implemented selective"},{"line_number":5180,"context_line":"                # block device migration. It means possibility o define subset"},{"line_number":5181,"context_line":"                # of block devices to be copied during migration. If they are"},{"line_number":5182,"context_line":"                # not specified - block devices won\u0027t be migrated."},{"line_number":5183,"context_line":"                if bdm and not self._host.has_min_version("}],"source_content_type":"text/x-python","patch_set":7,"id":"5a2ca52d_e468b289","line":5180,"in_reply_to":"5a2ca52d_15a435a4","updated":"2015-10-15 12:58:04.000000000","message":"Done","commit_id":"7a34a8adc6f9976c89373467359e26b6b302b129"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"898ffe8f88ecd6a333bf09549b60e4a40b16db04","unresolved":false,"context_lines":[{"line_number":7248,"context_line":"        swap \u003d driver.block_device_info_get_swap(block_device_info)"},{"line_number":7249,"context_line":""},{"line_number":7250,"context_line":"        migrate_disks \u003d []"},{"line_number":7251,"context_line":"        migrate_disks.append(root)"},{"line_number":7252,"context_line":"        for ephemeral in ephemerals:"},{"line_number":7253,"context_line":"            if ephemeral.get(\u0027device_name\u0027):"},{"line_number":7254,"context_line":"                migrate_disks.append(ephemeral.get(\u0027device_name\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a2ca52d_95dda516","line":7251,"updated":"2015-10-14 12:08:05.000000000","message":"could root be None?","commit_id":"7a34a8adc6f9976c89373467359e26b6b302b129"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"e2e047e421ed18638ddd2cfc1961983b0e0a08ed","unresolved":false,"context_lines":[{"line_number":7248,"context_line":"        swap \u003d driver.block_device_info_get_swap(block_device_info)"},{"line_number":7249,"context_line":""},{"line_number":7250,"context_line":"        migrate_disks \u003d []"},{"line_number":7251,"context_line":"        migrate_disks.append(root)"},{"line_number":7252,"context_line":"        for ephemeral in ephemerals:"},{"line_number":7253,"context_line":"            if ephemeral.get(\u0027device_name\u0027):"},{"line_number":7254,"context_line":"                migrate_disks.append(ephemeral.get(\u0027device_name\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a2ca52d_845f7ee4","line":7251,"in_reply_to":"5a2ca52d_95dda516","updated":"2015-10-15 12:58:04.000000000","message":"Done","commit_id":"7a34a8adc6f9976c89373467359e26b6b302b129"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"562e1b0e1913690ca192c68e7686a30d49568e34","unresolved":false,"context_lines":[{"line_number":377,"context_line":"MIN_LIBVIRT_BLOCKJOB_RELATIVE_VERSION \u003d (1, 2, 7)"},{"line_number":378,"context_line":"# Libvirt version 1.2.17 is required for successfull block live migration"},{"line_number":379,"context_line":"# of vm booted from image with attached devices"},{"line_number":380,"context_line":"MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION \u003d (1, 2, 17)"},{"line_number":381,"context_line":"# libvirt discard feature"},{"line_number":382,"context_line":"MIN_LIBVIRT_DISCARD_VERSION \u003d (1, 0, 6)"},{"line_number":383,"context_line":"MIN_QEMU_DISCARD_VERSION \u003d (1, 6, 0)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a2ca52d_d8ed5af0","line":380,"updated":"2015-10-15 13:13:05.000000000","message":"This is out of the scope but I have no idea why don\u0027t we convert these into feature-list instead of versions list.","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"562e1b0e1913690ca192c68e7686a30d49568e34","unresolved":false,"context_lines":[{"line_number":7256,"context_line":"        swap_device_name \u003d swap.get(\u0027device_name\u0027)"},{"line_number":7257,"context_line":"        swap_size \u003d swap.get(\u0027swap_size\u0027)"},{"line_number":7258,"context_line":"        if swap_device_name is not None and swap_size \u003e 0:"},{"line_number":7259,"context_line":"            migrate_disks.append(swap.get(\u0027device_name\u0027))"},{"line_number":7260,"context_line":""},{"line_number":7261,"context_line":"        # NOTE(bfic): get_block_device_info returns device names in format:"},{"line_number":7262,"context_line":"        # /dev/\u003cdevice\u003e, however, migrate_disks in libvirt expects only device"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a2ca52d_d8c47a60","line":7259,"updated":"2015-10-15 13:13:05.000000000","message":"Please use already fetched `swap_device_name` here.","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"3789b39b792b36bcb4ba1b19daa264875f4cfd3f","unresolved":false,"context_lines":[{"line_number":7256,"context_line":"        swap_device_name \u003d swap.get(\u0027device_name\u0027)"},{"line_number":7257,"context_line":"        swap_size \u003d swap.get(\u0027swap_size\u0027)"},{"line_number":7258,"context_line":"        if swap_device_name is not None and swap_size \u003e 0:"},{"line_number":7259,"context_line":"            migrate_disks.append(swap.get(\u0027device_name\u0027))"},{"line_number":7260,"context_line":""},{"line_number":7261,"context_line":"        # NOTE(bfic): get_block_device_info returns device names in format:"},{"line_number":7262,"context_line":"        # /dev/\u003cdevice\u003e, however, migrate_disks in libvirt expects only device"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a2ca52d_6ce9bfe5","line":7259,"in_reply_to":"5a2ca52d_d8c47a60","updated":"2015-10-16 11:34:08.000000000","message":"ok","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"562e1b0e1913690ca192c68e7686a30d49568e34","unresolved":false,"context_lines":[{"line_number":7261,"context_line":"        # NOTE(bfic): get_block_device_info returns device names in format:"},{"line_number":7262,"context_line":"        # /dev/\u003cdevice\u003e, however, migrate_disks in libvirt expects only device"},{"line_number":7263,"context_line":"        # names instead of full path"},{"line_number":7264,"context_line":"        migrate_disks \u003d [str(d[5:]) for d in migrate_disks]"},{"line_number":7265,"context_line":""},{"line_number":7266,"context_line":"        return migrate_disks"},{"line_number":7267,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a2ca52d_1892f257","line":7264,"updated":"2015-10-15 13:13:05.000000000","message":"Please use d.rsplit(\"/\", 1)[0] here.","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"3789b39b792b36bcb4ba1b19daa264875f4cfd3f","unresolved":false,"context_lines":[{"line_number":7261,"context_line":"        # NOTE(bfic): get_block_device_info returns device names in format:"},{"line_number":7262,"context_line":"        # /dev/\u003cdevice\u003e, however, migrate_disks in libvirt expects only device"},{"line_number":7263,"context_line":"        # names instead of full path"},{"line_number":7264,"context_line":"        migrate_disks \u003d [str(d[5:]) for d in migrate_disks]"},{"line_number":7265,"context_line":""},{"line_number":7266,"context_line":"        return migrate_disks"},{"line_number":7267,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a2ca52d_8ce69b13","line":7264,"in_reply_to":"5a2ca52d_1892f257","updated":"2015-10-16 11:34:08.000000000","message":"d.rsplit(\"/\", 1)[1] instead of d.rsplit(\"/\", 1)[0]  is correct in this case","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"562e1b0e1913690ca192c68e7686a30d49568e34","unresolved":false,"context_lines":[{"line_number":7265,"context_line":""},{"line_number":7266,"context_line":"        return migrate_disks"},{"line_number":7267,"context_line":""},{"line_number":7268,"context_line":"    def _prepare_migration_params(self, xml, disks_to_migrate):"},{"line_number":7269,"context_line":"        params \u003d {"},{"line_number":7270,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7271,"context_line":"            \u0027destination_xml\u0027: xml,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a2ca52d_58862a14","line":7268,"updated":"2015-10-15 13:13:05.000000000","message":"I think it makes sense for prepare-migration_params to call _get_disks_to_migrate itself.","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"3789b39b792b36bcb4ba1b19daa264875f4cfd3f","unresolved":false,"context_lines":[{"line_number":7265,"context_line":""},{"line_number":7266,"context_line":"        return migrate_disks"},{"line_number":7267,"context_line":""},{"line_number":7268,"context_line":"    def _prepare_migration_params(self, xml, disks_to_migrate):"},{"line_number":7269,"context_line":"        params \u003d {"},{"line_number":7270,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7271,"context_line":"            \u0027destination_xml\u0027: xml,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a2ca52d_2cef47ea","line":7268,"in_reply_to":"5a2ca52d_58862a14","updated":"2015-10-16 11:34:08.000000000","message":"ok","commit_id":"f5bb3213da3d836a78df4fd2fcf50eec17ba226f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7f3050fe00511cc77484d787edc309d26097d41c","unresolved":false,"context_lines":[{"line_number":5187,"context_line":"                    # in volumes being copied from themselves to themselves,"},{"line_number":5188,"context_line":"                    # which is a recipe for disaster."},{"line_number":5189,"context_line":"                    LOG.error(_LE(\u0027Cannot block migrate instance %(uuid)s with\u0027"},{"line_number":5190,"context_line":"                                  \u0027 mapped volumes. Selective block device \u0027"},{"line_number":5191,"context_line":"                                  \u0027migration feature requires libvirt version \u0027"},{"line_number":5192,"context_line":"                                  \u0027%(libvirt_ver)s\u0027),"},{"line_number":5193,"context_line":"                              {\u0027uuid\u0027: instance.uuid, \u0027libvirt_ver\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a29b11f_ef879ad5","line":5190,"updated":"2015-10-18 10:53:22.000000000","message":"minor nit - please either have all spaces at the beginning of a line or at the end","commit_id":"ba8a43fa821fdb83e9640015c1885e209493fd03"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"fd7b6d1cf14d8577fd43956bc0f371945593f78c","unresolved":false,"context_lines":[{"line_number":7253,"context_line":"                migrate_disks.append(ephemeral.get(\u0027device_name\u0027))"},{"line_number":7254,"context_line":"        swap_device_name \u003d swap.get(\u0027device_name\u0027)"},{"line_number":7255,"context_line":"        swap_size \u003d swap.get(\u0027swap_size\u0027)"},{"line_number":7256,"context_line":"        if swap_device_name is not None and swap_size \u003e 0:"},{"line_number":7257,"context_line":"            migrate_disks.append(swap_device_name)"},{"line_number":7258,"context_line":""},{"line_number":7259,"context_line":"        # NOTE(bfic): get_block_device_info returns device names in format:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_18524968","line":7256,"updated":"2015-10-19 10:04:44.000000000","message":"nit: if swap_device_name and swap_size \u003e 0","commit_id":"1a47fb12661c8e91efa1c812b64649471942b4f8"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"d982edd074f41da734fe02ea3c5fbfcb9fa73ee7","unresolved":false,"context_lines":[{"line_number":5181,"context_line":"                # of block devices to be copied during migration. If they are"},{"line_number":5182,"context_line":"                # not specified - block devices won\u0027t be migrated."},{"line_number":5183,"context_line":"                if bdm and not self._host.has_min_version("},{"line_number":5184,"context_line":"                        MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5185,"context_line":"                    # NOTE(stpierre): if this instance has mapped volumes,"},{"line_number":5186,"context_line":"                    # we can\u0027t do a block migration, since that will result"},{"line_number":5187,"context_line":"                    # in volumes being copied from themselves to themselves,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_f8798230","line":5184,"updated":"2015-10-19 13:37:18.000000000","message":"Did you already check that this is available on all platforms (e.g. s390x) or is this x86 only?","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"cc3e34e686a22e7851a0465ab8fc28254f584d83","unresolved":false,"context_lines":[{"line_number":5181,"context_line":"                # of block devices to be copied during migration. If they are"},{"line_number":5182,"context_line":"                # not specified - block devices won\u0027t be migrated."},{"line_number":5183,"context_line":"                if bdm and not self._host.has_min_version("},{"line_number":5184,"context_line":"                        MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5185,"context_line":"                    # NOTE(stpierre): if this instance has mapped volumes,"},{"line_number":5186,"context_line":"                    # we can\u0027t do a block migration, since that will result"},{"line_number":5187,"context_line":"                    # in volumes being copied from themselves to themselves,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_8e17e8a2","line":5184,"in_reply_to":"3a29b11f_4e87900f","updated":"2015-10-19 14:10:49.000000000","message":"@Pavel: Cool, even better, thanks!","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"5f75cd89bff401dbcd6f292cadb8b3462c3dfaa0","unresolved":false,"context_lines":[{"line_number":5181,"context_line":"                # of block devices to be copied during migration. If they are"},{"line_number":5182,"context_line":"                # not specified - block devices won\u0027t be migrated."},{"line_number":5183,"context_line":"                if bdm and not self._host.has_min_version("},{"line_number":5184,"context_line":"                        MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5185,"context_line":"                    # NOTE(stpierre): if this instance has mapped volumes,"},{"line_number":5186,"context_line":"                    # we can\u0027t do a block migration, since that will result"},{"line_number":5187,"context_line":"                    # in volumes being copied from themselves to themselves,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_4e87900f","line":5184,"in_reply_to":"3a29b11f_6e37ecb0","updated":"2015-10-19 14:07:56.000000000","message":"Appropriate libvirt code has no dependencies on a machine arch.","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"884b7e8ee4afe68f7eb7d1f53b770e6e9b1b282e","unresolved":false,"context_lines":[{"line_number":5181,"context_line":"                # of block devices to be copied during migration. If they are"},{"line_number":5182,"context_line":"                # not specified - block devices won\u0027t be migrated."},{"line_number":5183,"context_line":"                if bdm and not self._host.has_min_version("},{"line_number":5184,"context_line":"                        MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5185,"context_line":"                    # NOTE(stpierre): if this instance has mapped volumes,"},{"line_number":5186,"context_line":"                    # we can\u0027t do a block migration, since that will result"},{"line_number":5187,"context_line":"                    # in volumes being copied from themselves to themselves,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_6e37ecb0","line":5184,"in_reply_to":"3a29b11f_78f33274","updated":"2015-10-19 14:05:11.000000000","message":"OK, I try to get a statement for \"s390x\" (z systems) and try to ping folks from \"Power\". Since libvirt is available on these platforms it is useful to check these things to avoid a regression on these platforms. I\u0027ll keep you in the loop.","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"0e6a98865586118644d4f4457401b601e2a491f5","unresolved":false,"context_lines":[{"line_number":5181,"context_line":"                # of block devices to be copied during migration. If they are"},{"line_number":5182,"context_line":"                # not specified - block devices won\u0027t be migrated."},{"line_number":5183,"context_line":"                if bdm and not self._host.has_min_version("},{"line_number":5184,"context_line":"                        MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5185,"context_line":"                    # NOTE(stpierre): if this instance has mapped volumes,"},{"line_number":5186,"context_line":"                    # we can\u0027t do a block migration, since that will result"},{"line_number":5187,"context_line":"                    # in volumes being copied from themselves to themselves,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_78f33274","line":5184,"in_reply_to":"3a29b11f_f8798230","updated":"2015-10-19 13:53:48.000000000","message":"I\u0027ve tested it only on x86_64 platforms.","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"53a2a0e8c0ff9ac789ba550ca48bc827f38fa78a","unresolved":false,"context_lines":[{"line_number":7266,"context_line":"    def _prepare_migration_params(self, context, instance, xml):"},{"line_number":7267,"context_line":"        disks_to_migrate \u003d self._get_disks_to_migrate(context, instance)"},{"line_number":7268,"context_line":"        params \u003d {"},{"line_number":7269,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7270,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7271,"context_line":"            \u0027migrate_disks\u0027: disks_to_migrate,"},{"line_number":7272,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_e8d4df20","line":7269,"updated":"2015-10-21 13:17:37.000000000","message":"Probably a stupid question: Is it safe to push the value of the conf variable unchecked to libvirt?","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"b711ca69f974d9cdbda981f9692c7a0a99489bca","unresolved":false,"context_lines":[{"line_number":7266,"context_line":"    def _prepare_migration_params(self, context, instance, xml):"},{"line_number":7267,"context_line":"        disks_to_migrate \u003d self._get_disks_to_migrate(context, instance)"},{"line_number":7268,"context_line":"        params \u003d {"},{"line_number":7269,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7270,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7271,"context_line":"            \u0027migrate_disks\u0027: disks_to_migrate,"},{"line_number":7272,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_ffe3ac03","line":7269,"in_reply_to":"3a29b11f_e8d4df20","updated":"2015-10-26 09:13:48.000000000","message":"For each version of migrateToURI method, bandwidth is passed directly from conf varaible.\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L5625\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L5612","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"a32b9f21f5cea2e2695a00a015a2be08f3e47757","unresolved":false,"context_lines":[{"line_number":7266,"context_line":"    def _prepare_migration_params(self, context, instance, xml):"},{"line_number":7267,"context_line":"        disks_to_migrate \u003d self._get_disks_to_migrate(context, instance)"},{"line_number":7268,"context_line":"        params \u003d {"},{"line_number":7269,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7270,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7271,"context_line":"            \u0027migrate_disks\u0027: disks_to_migrate,"},{"line_number":7272,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_330b9b7f","line":7269,"in_reply_to":"3a29b11f_ffe3ac03","updated":"2015-10-26 11:31:12.000000000","message":"ok, so were are consistent here. And on a second thaught, it\u0027s an operator provided value, should be sane then.","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"53a2a0e8c0ff9ac789ba550ca48bc827f38fa78a","unresolved":false,"context_lines":[{"line_number":7269,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7270,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7271,"context_line":"            \u0027migrate_disks\u0027: disks_to_migrate,"},{"line_number":7272,"context_line":"        }"},{"line_number":7273,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_684d2f3d","line":7272,"updated":"2015-10-21 13:17:37.000000000","message":"nit: Maybe we could use a small class (with inline doc) instead of the dictionary?","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"a32b9f21f5cea2e2695a00a015a2be08f3e47757","unresolved":false,"context_lines":[{"line_number":7269,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7270,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7271,"context_line":"            \u0027migrate_disks\u0027: disks_to_migrate,"},{"line_number":7272,"context_line":"        }"},{"line_number":7273,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_b31fabb6","line":7272,"in_reply_to":"3a29b11f_6225c3ac","updated":"2015-10-26 11:31:12.000000000","message":"Nice pointer, thanks!","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":12814,"name":"Bartosz Fic","email":"bartosz.fic@intel.com","username":"bartosz-fic"},"change_message_id":"b711ca69f974d9cdbda981f9692c7a0a99489bca","unresolved":false,"context_lines":[{"line_number":7269,"context_line":"            \u0027bandwidth\u0027: CONF.libvirt.live_migration_bandwidth,"},{"line_number":7270,"context_line":"            \u0027destination_xml\u0027: xml,"},{"line_number":7271,"context_line":"            \u0027migrate_disks\u0027: disks_to_migrate,"},{"line_number":7272,"context_line":"        }"},{"line_number":7273,"context_line":"        return params"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_6225c3ac","line":7272,"in_reply_to":"3a29b11f_684d2f3d","updated":"2015-10-26 09:13:48.000000000","message":"According to libvirt-python binding:\n\nhttps://gitlab.com/libvirt/libvirt-python/blob/master/libvirt-override-api.xml\n\n    \u003cfunction name\u003d\u0027virDomainMigrateToURI3\u0027 file\u003d\u0027python\u0027\u003e\n      \u003cinfo\u003eMigrate the domain object from its current host to the destination host\n            given by URI.\u003c/info\u003e\n      \u003carg name\u003d\u0027domain\u0027 type\u003d\u0027virDomainPtr\u0027 info\u003d\u0027a domain object\u0027/\u003e\n      \u003carg name\u003d\u0027dconnuri\u0027 type\u003d\u0027char *\u0027 info\u003d\u0027URI for target libvirtd if @flags includes VIR_MIGRATE_PEER2PEER\u0027/\u003e\n      \u003carg name\u003d\u0027params\u0027 type\u003d\u0027char *\u0027 info\u003d\u0027dictionary with migration parameters\u0027/\u003e\n      \u003carg name\u003d\u0027flags\u0027 type\u003d\u0027unsigned int\u0027 info\u003d\u0027an OR\u0026apos;ed set of virDomainMigrateFlags\u0027/\u003e\n      \u003creturn type\u003d\u0027int\u0027 info\u003d\u00270 in case of success, -1 in case of failure.\u0027/\u003e\n    \u003c/function\u003e\n\nI still believe that we should use dictionary here.","commit_id":"668260408a44c0770d0c5f92c39c2f023f637b68"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"7a18d020e6c4f094cfbddbd7c9650f6505af7659","unresolved":false,"context_lines":[{"line_number":5257,"context_line":"                             \u0027 migration feature requires libvirt version\u0027"},{"line_number":5258,"context_line":"                             \u0027 %(libvirt_ver)s\u0027) %"},{"line_number":5259,"context_line":"                           {\u0027uuid\u0027: instance.uuid, \u0027libvirt_ver\u0027:"},{"line_number":5260,"context_line":"                               MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION})"},{"line_number":5261,"context_line":"                    raise exception.MigrationPreCheckError(reason\u003dmsg)"},{"line_number":5262,"context_line":"        elif not (dest_check_data[\u0027is_shared_block_storage\u0027] or"},{"line_number":5263,"context_line":"                  dest_check_data[\u0027is_shared_instance_path\u0027] or"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_d6869fda","line":5260,"updated":"2015-11-10 05:43:48.000000000","message":"According to: http://docs.openstack.org/developer/oslo.i18n/guidelines.html#choosing-a-marker-function\n\nYou should do:\n\n msg \u003d (_() .....)\n LOG.error(msg)\n raise exception.MigrationPreCheckError(reason\u003dmsg)\n\nTo avoid double translating (at the human level) the string","commit_id":"28d9a9b655e62230877cf9d3021b23ba71996c76"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"8eaf733f23c8f96d9e3ca3a5f5ab72ef19ea4232","unresolved":false,"context_lines":[{"line_number":5257,"context_line":"                             \u0027 migration feature requires libvirt version\u0027"},{"line_number":5258,"context_line":"                             \u0027 %(libvirt_ver)s\u0027) %"},{"line_number":5259,"context_line":"                           {\u0027uuid\u0027: instance.uuid, \u0027libvirt_ver\u0027:"},{"line_number":5260,"context_line":"                               MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION})"},{"line_number":5261,"context_line":"                    raise exception.MigrationPreCheckError(reason\u003dmsg)"},{"line_number":5262,"context_line":"        elif not (dest_check_data[\u0027is_shared_block_storage\u0027] or"},{"line_number":5263,"context_line":"                  dest_check_data[\u0027is_shared_instance_path\u0027] or"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_3e68f0b8","line":5260,"in_reply_to":"da85f559_8ff47687","updated":"2015-11-10 22:30:40.000000000","message":"Thanks.","commit_id":"28d9a9b655e62230877cf9d3021b23ba71996c76"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"07465d5e5f8a913e8508e3382ff977f3e155c23c","unresolved":false,"context_lines":[{"line_number":5257,"context_line":"                             \u0027 migration feature requires libvirt version\u0027"},{"line_number":5258,"context_line":"                             \u0027 %(libvirt_ver)s\u0027) %"},{"line_number":5259,"context_line":"                           {\u0027uuid\u0027: instance.uuid, \u0027libvirt_ver\u0027:"},{"line_number":5260,"context_line":"                               MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION})"},{"line_number":5261,"context_line":"                    raise exception.MigrationPreCheckError(reason\u003dmsg)"},{"line_number":5262,"context_line":"        elif not (dest_check_data[\u0027is_shared_block_storage\u0027] or"},{"line_number":5263,"context_line":"                  dest_check_data[\u0027is_shared_instance_path\u0027] or"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_8ff47687","line":5260,"in_reply_to":"da85f559_d6869fda","updated":"2015-11-10 07:13:56.000000000","message":"Done","commit_id":"28d9a9b655e62230877cf9d3021b23ba71996c76"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"7a18d020e6c4f094cfbddbd7c9650f6505af7659","unresolved":false,"context_lines":[{"line_number":5701,"context_line":"                        dom.migrateToURI3("},{"line_number":5702,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"},{"line_number":5703,"context_line":"                            params,"},{"line_number":5704,"context_line":"                            logical_sum)"},{"line_number":5705,"context_line":"                    else:"},{"line_number":5706,"context_line":"                        dom.migrateToURI2("},{"line_number":5707,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_b9e74ce3","line":5704,"updated":"2015-11-10 05:43:48.000000000","message":"My gut tells me we need testing of this code path (ie ensure that we call dom.migrateToURI3() with the right args.","commit_id":"28d9a9b655e62230877cf9d3021b23ba71996c76"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"8eaf733f23c8f96d9e3ca3a5f5ab72ef19ea4232","unresolved":false,"context_lines":[{"line_number":5701,"context_line":"                        dom.migrateToURI3("},{"line_number":5702,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"},{"line_number":5703,"context_line":"                            params,"},{"line_number":5704,"context_line":"                            logical_sum)"},{"line_number":5705,"context_line":"                    else:"},{"line_number":5706,"context_line":"                        dom.migrateToURI2("},{"line_number":5707,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_1e6bacb8","line":5704,"in_reply_to":"da85f559_2fa0ea9e","updated":"2015-11-10 22:30:40.000000000","message":"Hmm okay.\n\nI don\u0027t pretend to understand it but the gerrit UI didn\u0027t show me those tests but it does today.  I\u0027ll look over them","commit_id":"28d9a9b655e62230877cf9d3021b23ba71996c76"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"07465d5e5f8a913e8508e3382ff977f3e155c23c","unresolved":false,"context_lines":[{"line_number":5701,"context_line":"                        dom.migrateToURI3("},{"line_number":5702,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"},{"line_number":5703,"context_line":"                            params,"},{"line_number":5704,"context_line":"                            logical_sum)"},{"line_number":5705,"context_line":"                    else:"},{"line_number":5706,"context_line":"                        dom.migrateToURI2("},{"line_number":5707,"context_line":"                            CONF.libvirt.live_migration_uri % dest,"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_2fa0ea9e","line":5704,"in_reply_to":"da85f559_b9e74ce3","updated":"2015-11-10 07:13:56.000000000","message":"There is a test which checks this code path - test_live_migration_uses_migrateToURI3","commit_id":"28d9a9b655e62230877cf9d3021b23ba71996c76"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"7a18d020e6c4f094cfbddbd7c9650f6505af7659","unresolved":false,"context_lines":[{"line_number":7295,"context_line":"        return fs_type in [disk.FS_FORMAT_EXT2, disk.FS_FORMAT_EXT3,"},{"line_number":7296,"context_line":"                           disk.FS_FORMAT_EXT4, disk.FS_FORMAT_XFS]"},{"line_number":7297,"context_line":""},{"line_number":7298,"context_line":"    def _get_disks_to_migrate(self, context, instance):"},{"line_number":7299,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":7300,"context_line":"            context, instance.uuid)"},{"line_number":7301,"context_line":"        block_device_info \u003d driver.get_block_device_info(instance, bdms)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_d9ea50ac","line":7298,"updated":"2015-11-10 05:43:48.000000000","message":"I think we need some trivial tests here.","commit_id":"28d9a9b655e62230877cf9d3021b23ba71996c76"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"07465d5e5f8a913e8508e3382ff977f3e155c23c","unresolved":false,"context_lines":[{"line_number":7295,"context_line":"        return fs_type in [disk.FS_FORMAT_EXT2, disk.FS_FORMAT_EXT3,"},{"line_number":7296,"context_line":"                           disk.FS_FORMAT_EXT4, disk.FS_FORMAT_XFS]"},{"line_number":7297,"context_line":""},{"line_number":7298,"context_line":"    def _get_disks_to_migrate(self, context, instance):"},{"line_number":7299,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":7300,"context_line":"            context, instance.uuid)"},{"line_number":7301,"context_line":"        block_device_info \u003d driver.get_block_device_info(instance, bdms)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da85f559_0f8c0634","line":7298,"in_reply_to":"da85f559_d9ea50ac","updated":"2015-11-10 07:13:56.000000000","message":"There is test_get_disks_to_migrate which tests this method.","commit_id":"28d9a9b655e62230877cf9d3021b23ba71996c76"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"563a2572d7b92a59244741398c45353c6071dcc5","unresolved":false,"context_lines":[{"line_number":5851,"context_line":"            # if it is a non-cinder volume which is not backed"},{"line_number":5852,"context_line":"            # by shared storage. eg it may be an LVM block dev,"},{"line_number":5853,"context_line":"            # or a raw/qcow2 file on a local filesystem. We"},{"line_number":5854,"context_line":"            # never want to copy disks on NFS, or RBD or any"},{"line_number":5855,"context_line":"            # cinder volume"},{"line_number":5856,"context_line":"            if dev.readonly or dev.shareable:"},{"line_number":5857,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_e2312f5b","line":5854,"updated":"2015-11-19 13:31:20.000000000","message":"You need to update this method to match the logic you\u0027re implementing in get_disk_to_migrate. In fact we\u0027d really best have only one method to get list of disks to migrate instead of two.","commit_id":"652bb02c533859150acf7d8281a14ed82b1bb48b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"3552283452161fe5af25c0967c47e506b4c4c646","unresolved":false,"context_lines":[{"line_number":5851,"context_line":"            # if it is a non-cinder volume which is not backed"},{"line_number":5852,"context_line":"            # by shared storage. eg it may be an LVM block dev,"},{"line_number":5853,"context_line":"            # or a raw/qcow2 file on a local filesystem. We"},{"line_number":5854,"context_line":"            # never want to copy disks on NFS, or RBD or any"},{"line_number":5855,"context_line":"            # cinder volume"},{"line_number":5856,"context_line":"            if dev.readonly or dev.shareable:"},{"line_number":5857,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_9828d234","line":5854,"in_reply_to":"ba8a016a_e2312f5b","updated":"2015-11-19 13:54:16.000000000","message":"Got it, agree that it will be better to have only one method. Will do.","commit_id":"652bb02c533859150acf7d8281a14ed82b1bb48b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"940bae7818dc12bcb71094fee8381f2f924acd07","unresolved":false,"context_lines":[{"line_number":5849,"context_line":"    def _live_migration_copy_disk_paths(self, context, instance, guest\u003dNone):"},{"line_number":5850,"context_line":"        \u0027\u0027\u0027Get list of disks to copy during migration"},{"line_number":5851,"context_line":""},{"line_number":5852,"context_line":"        :param guest: the Guest instance being migrated"},{"line_number":5853,"context_line":""},{"line_number":5854,"context_line":"        Get the list of disks to copy during migration."},{"line_number":5855,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5a710552_4269b6bd","line":5852,"updated":"2015-12-15 12:28:52.000000000","message":"I need to update parameters there...","commit_id":"1384367501b58a61f2aae5ce3eeb09fd7f6ba405"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"b0180e24dd7892665ce6e0fc587230e4117fd3e7","unresolved":false,"context_lines":[{"line_number":5227,"context_line":"                    msg \u003d (_(\u0027Cannot block migrate instance %(uuid)s with\u0027"},{"line_number":5228,"context_line":"                             \u0027 mapped volumes. Selective block device\u0027"},{"line_number":5229,"context_line":"                             \u0027 migration feature requires libvirt version\u0027"},{"line_number":5230,"context_line":"                             \u0027 %(libvirt_ver)s\u0027) %"},{"line_number":5231,"context_line":"                           {\u0027uuid\u0027: instance.uuid, \u0027libvirt_ver\u0027:"},{"line_number":5232,"context_line":"                               MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION})"},{"line_number":5233,"context_line":"                    LOG.error(msg, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa69d971_a464f721","line":5230,"updated":"2016-01-04 15:06:01.000000000","message":"Conversion of tuple MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION} to a string is not automatic here.","commit_id":"0b2cf321bc78e9dddc5bcdd02e6cd53010bd2c64"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"941a7ed2dc957828a5758404da2c73f8851c57c1","unresolved":false,"context_lines":[{"line_number":5622,"context_line":"        :param migrate_data: implementation specific params"},{"line_number":5623,"context_line":"        :param dom: the libvirt domain object"},{"line_number":5624,"context_line":"        :param disk_paths: list of disk paths that are being migrated with"},{"line_number":5625,"context_line":"        instance"},{"line_number":5626,"context_line":""},{"line_number":5627,"context_line":"        This method is intended to be run in a background thread and will"},{"line_number":5628,"context_line":"        block that thread until the migration is finished or failed."}],"source_content_type":"text/x-python","patch_set":24,"id":"fa69d971_bab74bf4","line":5625,"updated":"2016-01-04 01:11:23.000000000","message":"Your indent is wrong here.","commit_id":"0b2cf321bc78e9dddc5bcdd02e6cd53010bd2c64"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"b0180e24dd7892665ce6e0fc587230e4117fd3e7","unresolved":false,"context_lines":[{"line_number":7292,"context_line":"                           disk.FS_FORMAT_EXT4, disk.FS_FORMAT_XFS]"},{"line_number":7293,"context_line":""},{"line_number":7294,"context_line":"    def _prepare_migration_params(self, disk_paths, xml):"},{"line_number":7295,"context_line":"        # NOTE(pkoniszewski): _live_migration_copy_disk_paths returns disk"},{"line_number":7296,"context_line":"        # paths, but, migrate_disks in libvirt expects only a device name"},{"line_number":7297,"context_line":"        # instead of a full path"},{"line_number":7298,"context_line":"        disks \u003d [str(d.rsplit(\u0027/\u0027, 1)[1]) for d in disk_paths]"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa69d971_ff303cea","line":7295,"updated":"2016-01-04 15:06:01.000000000","message":"s/NOTE(pkoniszewski): //","commit_id":"0b2cf321bc78e9dddc5bcdd02e6cd53010bd2c64"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"53e94b1a66d475355685bca6c69b059125651600","unresolved":false,"context_lines":[{"line_number":5232,"context_line":"                # is possible to define subset of block devices to be copied"},{"line_number":5233,"context_line":"                # during migration. If they are not specified - block devices"},{"line_number":5234,"context_line":"                # won\u0027t be migrated. However, it does not work when live"},{"line_number":5235,"context_line":"                # migration is tunnelled through libvirt."},{"line_number":5236,"context_line":"                if bdm and not self._host.has_min_version("},{"line_number":5237,"context_line":"                        MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5238,"context_line":"                    # NOTE(stpierre): if this instance has mapped volumes,"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa69d971_bca3d69d","line":5235,"range":{"start_line":5235,"start_character":31,"end_line":5235,"end_character":57},"updated":"2016-01-08 07:44:20.000000000","message":"s/tunnelled/tunneled\n\nSo if we use tunneled flag,  live-migration with bdm not work?\n\nWhat will happened if the admin adds tunneled flag and do a live-migratinon with bdm. it should be an error right ? should we prevent this scenario?","commit_id":"a033d14db03ebe43b9be2c5fd9d7cd975ab8d302"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"8951aa174c330081026bcb7f6b713fd63e80f748","unresolved":false,"context_lines":[{"line_number":5232,"context_line":"                # is possible to define subset of block devices to be copied"},{"line_number":5233,"context_line":"                # during migration. If they are not specified - block devices"},{"line_number":5234,"context_line":"                # won\u0027t be migrated. However, it does not work when live"},{"line_number":5235,"context_line":"                # migration is tunnelled through libvirt."},{"line_number":5236,"context_line":"                if bdm and not self._host.has_min_version("},{"line_number":5237,"context_line":"                        MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5238,"context_line":"                    # NOTE(stpierre): if this instance has mapped volumes,"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa69d971_23c81a74","line":5235,"range":{"start_line":5235,"start_character":31,"end_line":5235,"end_character":57},"in_reply_to":"fa69d971_bca3d69d","updated":"2016-01-08 09:35:48.000000000","message":"After talked with Pawel, libvirt will refuse if tunneled flag with bdm and nova will do the recover things.","commit_id":"a033d14db03ebe43b9be2c5fd9d7cd975ab8d302"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"53e94b1a66d475355685bca6c69b059125651600","unresolved":false,"context_lines":[{"line_number":5834,"context_line":"        \u0027\u0027\u0027"},{"line_number":5835,"context_line":""},{"line_number":5836,"context_line":"        disks \u003d []"},{"line_number":5837,"context_line":"        if self._host.has_min_version("},{"line_number":5838,"context_line":"                MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION):"},{"line_number":5839,"context_line":"            bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":5840,"context_line":"                context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa69d971_e61f7e59","line":5837,"range":{"start_line":5837,"start_character":11,"end_line":5837,"end_character":37},"updated":"2016-01-08 07:44:20.000000000","message":"This function `has_min_version` need to get libvirt connection every time we call it.\nso what I am thinking is we can move it when we do init_host() and set some flag variables\nto tell what features does libvirt supports.\n\nIt is true that we use `has_min_version` every where such as \"snapshot\" after chekcing libvirt driver,\nbut I don\u0027t think this is a good idea, and I am not going to -1 for this.\n\nJust some thinking.","commit_id":"a033d14db03ebe43b9be2c5fd9d7cd975ab8d302"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"53e94b1a66d475355685bca6c69b059125651600","unresolved":false,"context_lines":[{"line_number":5857,"context_line":"        else:"},{"line_number":5858,"context_line":"            # TODO(pkoniszewski): remove this logic when we raise min libvirt"},{"line_number":5859,"context_line":"            # version to \u003e\u003d 1.2.17"},{"line_number":5860,"context_line":"            for dev in guest.get_all_disks():"},{"line_number":5861,"context_line":"                if dev.readonly or dev.shareable:"},{"line_number":5862,"context_line":"                    continue"},{"line_number":5863,"context_line":"                if dev.source_type not in [\"file\", \"block\"]:"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa69d971_f8596136","line":5860,"range":{"start_line":5860,"start_character":23,"end_line":5860,"end_character":28},"updated":"2016-01-08 07:44:20.000000000","message":"hi Pawel, you change guest\u003dNone as a default value, but you don\u0027t verify it before using.\nthis may cause exception if some one forget to pass guest.","commit_id":"a033d14db03ebe43b9be2c5fd9d7cd975ab8d302"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5b6c8fcaaba9a78b9d712d5525131dd246d9031e","unresolved":false,"context_lines":[{"line_number":5925,"context_line":"            swap_device_name \u003d swap.get(\u0027device_name\u0027)"},{"line_number":5926,"context_line":"            swap_size \u003d swap.get(\u0027swap_size\u0027)"},{"line_number":5927,"context_line":"            if swap_device_name and swap_size \u003e 0:"},{"line_number":5928,"context_line":"                disks.append(swap_device_name)"},{"line_number":5929,"context_line":"        else:"},{"line_number":5930,"context_line":"            # TODO(pkoniszewski): remove this logic when we raise min libvirt"},{"line_number":5931,"context_line":"            # version to \u003e\u003d 1.2.17"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_03418f0b","line":5928,"range":{"start_line":5928,"start_character":45,"end_line":5928,"end_character":46},"updated":"2016-01-12 10:36:34.000000000","message":"This method is declared to return a list of local host disk paths. AFAICT, in this branch you are adding guest device names instead which is not going to work for existing callers.","commit_id":"9c5cb27f4857fbb23eb87651706961be84506d1b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"6167270f90ca743f23fe0a862b7c1c64fd85eb18","unresolved":false,"context_lines":[{"line_number":5925,"context_line":"            swap_device_name \u003d swap.get(\u0027device_name\u0027)"},{"line_number":5926,"context_line":"            swap_size \u003d swap.get(\u0027swap_size\u0027)"},{"line_number":5927,"context_line":"            if swap_device_name and swap_size \u003e 0:"},{"line_number":5928,"context_line":"                disks.append(swap_device_name)"},{"line_number":5929,"context_line":"        else:"},{"line_number":5930,"context_line":"            # TODO(pkoniszewski): remove this logic when we raise min libvirt"},{"line_number":5931,"context_line":"            # version to \u003e\u003d 1.2.17"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_19c24934","line":5928,"range":{"start_line":5928,"start_character":45,"end_line":5928,"end_character":46},"in_reply_to":"da6ed579_03418f0b","updated":"2016-01-12 17:07:33.000000000","message":"Daniel, this old naming in BDM dicts does not help me there. This is only a naming issue and I can\u0027t really do anything about it in this patch. What actually is under these keys:\n\nephemeral:  [{\u0027guest_format\u0027: None, \u0027device_name\u0027: u\u0027/dev/vdb\u0027, \u0027disk_bus\u0027: u\u0027virtio\u0027, \u0027device_type\u0027: u\u0027disk\u0027, \u0027size\u0027: 1}]\n\nswap: {\u0027disk_bus\u0027: u\u0027virtio\u0027, \u0027swap_size\u0027: 2, \u0027device_name\u0027: u\u0027/dev/vdc\u0027}\n\nDevice name in each of our dicts in BDM contains full path to a device instead of a device name only.\n\nThis is also why there is another method, _prepare_migration_params, that strips full paths to a device names.","commit_id":"9c5cb27f4857fbb23eb87651706961be84506d1b"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"96e2c4e21325adca095c43982571323a766a0a78","unresolved":false,"context_lines":[{"line_number":5925,"context_line":"            swap_device_name \u003d swap.get(\u0027device_name\u0027)"},{"line_number":5926,"context_line":"            swap_size \u003d swap.get(\u0027swap_size\u0027)"},{"line_number":5927,"context_line":"            if swap_device_name and swap_size \u003e 0:"},{"line_number":5928,"context_line":"                disks.append(swap_device_name)"},{"line_number":5929,"context_line":"        else:"},{"line_number":5930,"context_line":"            # TODO(pkoniszewski): remove this logic when we raise min libvirt"},{"line_number":5931,"context_line":"            # version to \u003e\u003d 1.2.17"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_adbad3df","line":5928,"range":{"start_line":5928,"start_character":45,"end_line":5928,"end_character":46},"in_reply_to":"da6ed579_19c24934","updated":"2016-01-12 18:04:15.000000000","message":"No, this is not merely a naming issue, this is a functional issue.\n\nThe list of paths returned by this method are ultimately passed into the \u0027_live_migration_data_gb\u0027 method, which then calls \u0027os.stat\u0027 on each path to get the disk size. At best your code change is causing this to query random host devices, as worst it will throw exceptions for devices that don\u0027t exist\n\nI would suggest you ignore the BDM dict entirely. The XML is the canonical source of what disks are currently attached to a VM instance. This provides you both the host path (needed to get disk sizes) and the guest path (neeeded to pass to the migrate API).","commit_id":"9c5cb27f4857fbb23eb87651706961be84506d1b"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"78d57705e725a93d187b19fee16e4b6d1d04d3b7","unresolved":false,"context_lines":[{"line_number":5926,"context_line":"            swap_size \u003d swap.get(\u0027swap_size\u0027)"},{"line_number":5927,"context_line":"            if swap_device_name and swap_size \u003e 0:"},{"line_number":5928,"context_line":"                disks.append(swap_device_name)"},{"line_number":5929,"context_line":"        else:"},{"line_number":5930,"context_line":"            # TODO(pkoniszewski): remove this logic when we raise min libvirt"},{"line_number":5931,"context_line":"            # version to \u003e\u003d 1.2.17"},{"line_number":5932,"context_line":"            for dev in guest.get_all_disks():"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_995dd9eb","line":5929,"updated":"2016-01-12 17:19:51.000000000","message":"nit: I\u0027d like to keep some of the explanation reported by the original berrange\u0027s comment. It is useful for ppl reading the code which are not aware of the \"stupid default logic in libvirt\".","commit_id":"9c5cb27f4857fbb23eb87651706961be84506d1b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"85347074e41e5cf6d4e2776800b7a21c3c13c847","unresolved":false,"context_lines":[{"line_number":5926,"context_line":"            swap_size \u003d swap.get(\u0027swap_size\u0027)"},{"line_number":5927,"context_line":"            if swap_device_name and swap_size \u003e 0:"},{"line_number":5928,"context_line":"                disks.append(swap_device_name)"},{"line_number":5929,"context_line":"        else:"},{"line_number":5930,"context_line":"            # TODO(pkoniszewski): remove this logic when we raise min libvirt"},{"line_number":5931,"context_line":"            # version to \u003e\u003d 1.2.17"},{"line_number":5932,"context_line":"            for dev in guest.get_all_disks():"}],"source_content_type":"text/x-python","patch_set":26,"id":"da6ed579_e7930cf9","line":5929,"in_reply_to":"da6ed579_995dd9eb","updated":"2016-01-12 17:42:12.000000000","message":"Comment is back there!","commit_id":"9c5cb27f4857fbb23eb87651706961be84506d1b"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"402eb47c512470e1e7fc6d16c48038c83469b60a","unresolved":false,"context_lines":[{"line_number":5310,"context_line":"                             \u0027 migration feature requires libvirt version\u0027"},{"line_number":5311,"context_line":"                             \u0027 %(libvirt_ver)s\u0027) %"},{"line_number":5312,"context_line":"                           {\u0027uuid\u0027: instance.uuid, \u0027libvirt_ver\u0027: ver})"},{"line_number":5313,"context_line":"                    LOG.error(msg, instance\u003dinstance)"},{"line_number":5314,"context_line":"                    raise exception.MigrationPreCheckError(reason\u003dmsg)"},{"line_number":5315,"context_line":"        elif not (dest_check_data.is_shared_block_storage or"},{"line_number":5316,"context_line":"                  dest_check_data.is_shared_instance_path or"}],"source_content_type":"text/x-python","patch_set":27,"id":"da6ed579_ff6139a9","line":5313,"range":{"start_line":5313,"start_character":35,"end_line":5313,"end_character":43},"updated":"2016-01-13 06:25:06.000000000","message":"compare to the base code, you are removing the log translation separate marker functions.\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#log-translation","commit_id":"10a5aaa7c1f73996c48678a9db697e1b056cdd0f"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"b81367fc5d1b59c910b3e1f1d144f5610ad12a18","unresolved":false,"context_lines":[{"line_number":5377,"context_line":"                    # in volumes being copied from themselves to themselves,"},{"line_number":5378,"context_line":"                    # which is a recipe for disaster."},{"line_number":5379,"context_line":"                    ver \u003d \".\".join([str(x) for x in"},{"line_number":5380,"context_line":"                                    MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION])"},{"line_number":5381,"context_line":"                    msg \u003d (_(\u0027Cannot block migrate instance %(uuid)s with\u0027"},{"line_number":5382,"context_line":"                             \u0027 mapped volumes. Selective block device\u0027"},{"line_number":5383,"context_line":"                             \u0027 migration feature requires libvirt version\u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a68dd71_7b05cb11","line":5380,"range":{"start_line":5380,"start_character":36,"end_line":5380,"end_character":77},"updated":"2016-01-27 04:03:26.000000000","message":"how about map, the python build-in function?\n\".\".join(map(str, MIN_LIBVIRT_BLOCK_LM_WITH_VOLUMES_VERSION))","commit_id":"9414b8a7ad5396a3d0512272878f98017fb8a83d"},{"author":{"_account_id":14131,"name":"shaohef","email":"shaohe.feng@intel.com","username":"shaohefeng"},"change_message_id":"b81367fc5d1b59c910b3e1f1d144f5610ad12a18","unresolved":false,"context_lines":[{"line_number":5991,"context_line":"                block_device_info)"},{"line_number":5992,"context_line":"            for bdm in block_device_mappings:"},{"line_number":5993,"context_line":"                device_name \u003d str(bdm[\u0027mount_device\u0027].rsplit(\u0027/\u0027, 1)[1])"},{"line_number":5994,"context_line":"                block_devices.append(device_name)"},{"line_number":5995,"context_line":""},{"line_number":5996,"context_line":"        for dev in guest.get_all_disks():"},{"line_number":5997,"context_line":"            if dev.readonly or dev.shareable:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a68dd71_94bb5775","line":5994,"range":{"start_line":5994,"start_character":48,"end_line":5994,"end_character":49},"updated":"2016-01-27 04:03:26.000000000","message":"above logic is used to get the eligible devices.  \n\nDoes it need to convert bdm_list to block_device_info, and then convert to block_device_mappings? \n\nI will look into these code.","commit_id":"9414b8a7ad5396a3d0512272878f98017fb8a83d"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"f0e867fe0a937ee6183979be940e0b8b2eef6fc3","unresolved":false,"context_lines":[{"line_number":5795,"context_line":""},{"line_number":5796,"context_line":"    def _live_migration_operation(self, context, instance, dest,"},{"line_number":5797,"context_line":"                                  block_migration, migrate_data, dom,"},{"line_number":5798,"context_line":"                                  device_names):"},{"line_number":5799,"context_line":"        \"\"\"Invoke the live migration operation"},{"line_number":5800,"context_line":""},{"line_number":5801,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a5de9d1_da11275f","line":5798,"range":{"start_line":5798,"start_character":46,"end_line":5798,"end_character":47},"updated":"2016-01-27 15:09:25.000000000","message":"what about moving device names into migrate_data object specific to libvirt?","commit_id":"584824427b43eddc3f3c0e5ebe539a46471f6121"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"b0174205685f522a0fabe37f67cdd63673a413fd","unresolved":false,"context_lines":[{"line_number":5795,"context_line":""},{"line_number":5796,"context_line":"    def _live_migration_operation(self, context, instance, dest,"},{"line_number":5797,"context_line":"                                  block_migration, migrate_data, dom,"},{"line_number":5798,"context_line":"                                  device_names):"},{"line_number":5799,"context_line":"        \"\"\"Invoke the live migration operation"},{"line_number":5800,"context_line":""},{"line_number":5801,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a5de9d1_fd165d54","line":5798,"range":{"start_line":5798,"start_character":46,"end_line":5798,"end_character":47},"in_reply_to":"7a5de9d1_1d5ed9e9","updated":"2016-01-27 15:25:33.000000000","message":"if you init this field with data after line 6298, there will be no data transfer over rpc. Could you highlight if I miss something? 7 params in the method is imo to much, and this should be avoided if possible. As we already have specific object for this, I believe could will be more readable.","commit_id":"584824427b43eddc3f3c0e5ebe539a46471f6121"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4bfae9f037ff6ee36306fc576c096915e7c6eb1d","unresolved":false,"context_lines":[{"line_number":5795,"context_line":""},{"line_number":5796,"context_line":"    def _live_migration_operation(self, context, instance, dest,"},{"line_number":5797,"context_line":"                                  block_migration, migrate_data, dom,"},{"line_number":5798,"context_line":"                                  device_names):"},{"line_number":5799,"context_line":"        \"\"\"Invoke the live migration operation"},{"line_number":5800,"context_line":""},{"line_number":5801,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a5de9d1_c3813efd","line":5798,"range":{"start_line":5798,"start_character":46,"end_line":5798,"end_character":47},"in_reply_to":"7a5de9d1_28a031f4","updated":"2016-01-27 15:48:14.000000000","message":"ok","commit_id":"584824427b43eddc3f3c0e5ebe539a46471f6121"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"9667360f698a5a90dffc593b7175e80643419503","unresolved":false,"context_lines":[{"line_number":5795,"context_line":""},{"line_number":5796,"context_line":"    def _live_migration_operation(self, context, instance, dest,"},{"line_number":5797,"context_line":"                                  block_migration, migrate_data, dom,"},{"line_number":5798,"context_line":"                                  device_names):"},{"line_number":5799,"context_line":"        \"\"\"Invoke the live migration operation"},{"line_number":5800,"context_line":""},{"line_number":5801,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a5de9d1_1d5ed9e9","line":5798,"range":{"start_line":5798,"start_character":46,"end_line":5798,"end_character":47},"in_reply_to":"7a5de9d1_da11275f","updated":"2016-01-27 15:17:59.000000000","message":"I\u0027ve already tried it in another patch, but is there really a need to send disks and devices over RPC when live migration ends?\n\nPlease refer to https://review.openstack.org/#/c/252506/1/nova/virt/libvirt/driver.py","commit_id":"584824427b43eddc3f3c0e5ebe539a46471f6121"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"64ec0261a1a0e1f7d58f42610bdc86c44a024732","unresolved":false,"context_lines":[{"line_number":5795,"context_line":""},{"line_number":5796,"context_line":"    def _live_migration_operation(self, context, instance, dest,"},{"line_number":5797,"context_line":"                                  block_migration, migrate_data, dom,"},{"line_number":5798,"context_line":"                                  device_names):"},{"line_number":5799,"context_line":"        \"\"\"Invoke the live migration operation"},{"line_number":5800,"context_line":""},{"line_number":5801,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a5de9d1_28a031f4","line":5798,"range":{"start_line":5798,"start_character":46,"end_line":5798,"end_character":47},"in_reply_to":"7a5de9d1_fd165d54","updated":"2016-01-27 15:27:37.000000000","message":"It will go through RPC in post live migration","commit_id":"584824427b43eddc3f3c0e5ebe539a46471f6121"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d3052a96030818be1a730dde94439d9f2e4dfb05","unresolved":false,"context_lines":[{"line_number":5447,"context_line":"                                    dest_check_data.disk_over_commit,"},{"line_number":5448,"context_line":"                                    block_device_info)"},{"line_number":5449,"context_line":"            if block_device_info:"},{"line_number":5450,"context_line":"                bdm \u003d block_device_info.get(\u0027block_device_mapping\u0027)"},{"line_number":5451,"context_line":"                # NOTE(stpierre): if this instance has mapped volumes,"},{"line_number":5452,"context_line":"                # we can\u0027t do a block migration, since that will"},{"line_number":5453,"context_line":"                # result in volumes being copied from themselves to"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a57f1b5_0f9f6a04","side":"PARENT","line":5450,"range":{"start_line":5450,"start_character":40,"end_line":5450,"end_character":43},"updated":"2016-02-10 11:16:28.000000000","message":"Doing driver.block_device_info_get_mapping here would be a bit safer as it always gets a list.","commit_id":"6c885805342de64d447f11f795c442413657b1b8"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d3052a96030818be1a730dde94439d9f2e4dfb05","unresolved":false,"context_lines":[{"line_number":5452,"context_line":"                # we can\u0027t do a block migration, since that will"},{"line_number":5453,"context_line":"                # result in volumes being copied from themselves to"},{"line_number":5454,"context_line":"                # themselves, which is a recipe for disaster."},{"line_number":5455,"context_line":"                if bdm and len(bdm):"},{"line_number":5456,"context_line":"                    LOG.error(_LE(\u0027Cannot block migrate instance %s with \u0027"},{"line_number":5457,"context_line":"                                  \u0027mapped volumes\u0027),"},{"line_number":5458,"context_line":"                              instance.uuid, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a57f1b5_0fe76ae5","side":"PARENT","line":5455,"range":{"start_line":5455,"start_character":19,"end_line":5455,"end_character":35},"updated":"2016-02-10 11:16:28.000000000","message":"I am guessing we don\u0027t need this double check - it was wrong even before this patch - so it\u0027s fine that it\u0027s gone.","commit_id":"6c885805342de64d447f11f795c442413657b1b8"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"dad942f6199d00d023dcd3623e659c4892c67350","unresolved":false,"context_lines":[{"line_number":6082,"context_line":""},{"line_number":6083,"context_line":"        for dev in guest.get_all_disks():"},{"line_number":6084,"context_line":"            if dev.readonly or dev.shareable:"},{"line_number":6085,"context_line":"                continue"},{"line_number":6086,"context_line":"            if dev.source_type not in [\"file\", \"block\"]:"},{"line_number":6087,"context_line":"                continue"},{"line_number":6088,"context_line":"            if dev.target_dev in block_devices:"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_35cd0e31","line":6085,"range":{"start_line":6085,"start_character":16,"end_line":6085,"end_character":24},"updated":"2016-02-08 17:50:36.000000000","message":"I\u0027m not sure this check is still appropriate for case where we have libvirt \u003e\u003d 1.2.17.\n\nIIUC, we want to migrate *all* disks which are not cinder volumes, this may include disks which are readonly. For example, the config drive ISO image will be a readonly disk.\n\nSo I think you need this check to be conditional.","commit_id":"dca217dbf28cba18cbe30a603815658568282473"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"ca23c9f5762d274894e9801d98749842d7d4cb0c","unresolved":false,"context_lines":[{"line_number":6082,"context_line":""},{"line_number":6083,"context_line":"        for dev in guest.get_all_disks():"},{"line_number":6084,"context_line":"            if dev.readonly or dev.shareable:"},{"line_number":6085,"context_line":"                continue"},{"line_number":6086,"context_line":"            if dev.source_type not in [\"file\", \"block\"]:"},{"line_number":6087,"context_line":"                continue"},{"line_number":6088,"context_line":"            if dev.target_dev in block_devices:"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_fe4f5368","line":6085,"range":{"start_line":6085,"start_character":16,"end_line":6085,"end_character":24},"in_reply_to":"5a5ae5dd_35cd0e31","updated":"2016-02-08 18:39:58.000000000","message":"Good catch. I didn\u0027t notice that.\n\nI\u0027m thinking of approach where I fix it in a patch where I actually want to enable block live migration with ISO drive (patch that depends on this one).\n\nIn this patch we do not allow block live migration with ISO so it won\u0027t break anything at this point. What do you think about that?\n\nI\u0027m talking about fixing it in this patch  https://review.openstack.org/#/c/234659 which enables live migration with ISO.","commit_id":"dca217dbf28cba18cbe30a603815658568282473"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"859cd51cb9b8b7ec1adb1f24a6b7609925dfd6f5","unresolved":false,"context_lines":[{"line_number":6082,"context_line":""},{"line_number":6083,"context_line":"        for dev in guest.get_all_disks():"},{"line_number":6084,"context_line":"            if dev.readonly or dev.shareable:"},{"line_number":6085,"context_line":"                continue"},{"line_number":6086,"context_line":"            if dev.source_type not in [\"file\", \"block\"]:"},{"line_number":6087,"context_line":"                continue"},{"line_number":6088,"context_line":"            if dev.target_dev in block_devices:"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_0680bd45","line":6085,"range":{"start_line":6085,"start_character":16,"end_line":6085,"end_character":24},"in_reply_to":"5a5ae5dd_50e18fcf","updated":"2016-02-09 10:32:51.000000000","message":"ok","commit_id":"dca217dbf28cba18cbe30a603815658568282473"},{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"502ea641c567bf92b4b0fb18492f3bb25f1b583a","unresolved":false,"context_lines":[{"line_number":6082,"context_line":""},{"line_number":6083,"context_line":"        for dev in guest.get_all_disks():"},{"line_number":6084,"context_line":"            if dev.readonly or dev.shareable:"},{"line_number":6085,"context_line":"                continue"},{"line_number":6086,"context_line":"            if dev.source_type not in [\"file\", \"block\"]:"},{"line_number":6087,"context_line":"                continue"},{"line_number":6088,"context_line":"            if dev.target_dev in block_devices:"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_50e18fcf","line":6085,"range":{"start_line":6085,"start_character":16,"end_line":6085,"end_character":24},"in_reply_to":"5a5ae5dd_fe4f5368","updated":"2016-02-09 10:03:38.000000000","message":"I think that makes sense. That second patch could probably have been done in this one but its ok to be split out.","commit_id":"dca217dbf28cba18cbe30a603815658568282473"}]}
