)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdef5b13d2ffb223c4a92de59cec6ba4a9b99118","unresolved":false,"context_lines":[{"line_number":15,"context_line":"understand it."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partially implements: blueprint making-live-migration-api-friendly"},{"line_number":18,"context_line":"Co-authored-by: Alex Xu \u003chejie.xu@intel.com\u003e"},{"line_number":19,"context_line":"Change-Id: I85047d44e388c89938f80ad8be1724bd11ed0225"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"fa69d971_806e912d","line":18,"updated":"2016-01-04 06:58:43.000000000","message":"Same as another patch, you needn\u0027t write my name, as I didn\u0027t help on coding. :)","commit_id":"a652aa7e34817ecf5a7caa965759351733722d15"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"283f37fb057b02399eae3b15a70a72e32895b710","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def check_can_live_migrate_destination(self, ctxt, instance, destination,"},{"line_number":431,"context_line":"                                           block_migration, disk_over_commit):"},{"line_number":432,"context_line":"        if block_migration is None or disk_over_commit is None:"},{"line_number":433,"context_line":"            version \u003d \u00274.7\u0027"},{"line_number":434,"context_line":"        else:"},{"line_number":435,"context_line":"            version \u003d \u00274.0\u0027"},{"line_number":436,"context_line":"        cctxt \u003d self.client.prepare(server\u003ddestination, version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_a5491c33","line":433,"range":{"start_line":433,"start_character":12,"end_line":433,"end_character":27},"updated":"2016-01-11 12:15:54.000000000","message":"I thought we should check whether we can send 4.7 request, if not, we should return fault.","commit_id":"9ee1fe77aafe5ee317e63d2850e09a675247f979"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"5e49dfbb57cf75853819b431d0ec4b819306b35f","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    def check_can_live_migrate_destination(self, ctxt, instance, destination,"},{"line_number":431,"context_line":"                                           block_migration, disk_over_commit):"},{"line_number":432,"context_line":"        if block_migration is None or disk_over_commit is None:"},{"line_number":433,"context_line":"            version \u003d \u00274.7\u0027"},{"line_number":434,"context_line":"        else:"},{"line_number":435,"context_line":"            version \u003d \u00274.0\u0027"},{"line_number":436,"context_line":"        cctxt \u003d self.client.prepare(server\u003ddestination, version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_431d5abc","line":433,"range":{"start_line":433,"start_character":12,"end_line":433,"end_character":27},"in_reply_to":"fa69d971_a5491c33","updated":"2016-01-12 01:34:50.000000000","message":"hi alex, thanks for your comments.\nI assume that rpc api will return fault it by this:\nhttps://github.com/openstack/nova/blob/master/nova/compute/rpcapi.py#L343\n\nPlease point me out if am wrong, thanks.\n\nIf I am in the wrong way, what\u0027s your suggestion?\ndefine a new exception and raise it out like this:\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/rpcapi.py#L992\n\n- Eli.","commit_id":"9ee1fe77aafe5ee317e63d2850e09a675247f979"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"283f37fb057b02399eae3b15a70a72e32895b710","unresolved":false,"context_lines":[{"line_number":444,"context_line":"            and dest_check_data[\u0027block_migration\u0027] is None) or"},{"line_number":445,"context_line":"           (\u0027disk_over_commit\u0027 in dest_check_data"},{"line_number":446,"context_line":"            and dest_check_data[\u0027disk_over_commit\u0027] is None)):"},{"line_number":447,"context_line":"            version \u003d \u00274.7\u0027"},{"line_number":448,"context_line":"        else:"},{"line_number":449,"context_line":"            version \u003d \u00274.0\u0027"},{"line_number":450,"context_line":"        source \u003d _compute_host(None, instance)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_85cf387e","line":447,"range":{"start_line":447,"start_character":11,"end_line":447,"end_character":26},"updated":"2016-01-11 12:15:54.000000000","message":"ditto","commit_id":"9ee1fe77aafe5ee317e63d2850e09a675247f979"}],"nova/objects/migrate_data.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"22892de4914829e4d49824aeb0de2ba77060cb72","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        # FIXME: image_type should be enum?"},{"line_number":101,"context_line":"        \u0027image_type\u0027: fields.StringField(),"},{"line_number":102,"context_line":"        \u0027block_migration\u0027: fields.BooleanField(nullable\u003dTrue),"},{"line_number":103,"context_line":"        \u0027disk_over_commit\u0027: fields.BooleanField(nullable\u003dTrue),"},{"line_number":104,"context_line":"        \u0027disk_available_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":105,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"},{"line_number":106,"context_line":"        \u0027is_shared_block_storage\u0027: fields.BooleanField(),"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_65bf06fc","line":103,"updated":"2016-01-12 23:47:58.000000000","message":"This is not a compatible change. We won\u0027t be able to talk to older clients that won\u0027t tolerate None here.\n\nA better way to do what you\u0027re shooting for is to just not pass those properties (i.e. leave them unset). Then we can calculate them for 1.0 backports if needed, otherwise we just don\u0027t pass them. Then we can more easily deprecate and remove those fields later because we\u0027re already tolerant of them not being on the wire.","commit_id":"537ebac6902fcfa383e6133685c33ffad025d800"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"1fa8e1b94038b37ba8a494e4a2d17574a07f172d","unresolved":false,"context_lines":[{"line_number":6163,"context_line":"            block_migration\u003dNone,"},{"line_number":6164,"context_line":"            disk_over_commit\u003dFalse,"},{"line_number":6165,"context_line":"            disk_available_mb\u003d100)"},{"line_number":6166,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":6167,"context_line":"        dest_check_data_ret \u003d drvr.check_can_live_migrate_source("},{"line_number":6168,"context_line":"                          self.context, instance, dest_check_data)"},{"line_number":6169,"context_line":"        self.assertEqual(block_migrate, dest_check_data_ret.block_migration)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_ec605837","line":6166,"updated":"2016-01-11 14:47:05.000000000","message":"You have driver initialization doubled there","commit_id":"9ee1fe77aafe5ee317e63d2850e09a675247f979"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"5e49dfbb57cf75853819b431d0ec4b819306b35f","unresolved":false,"context_lines":[{"line_number":6163,"context_line":"            block_migration\u003dNone,"},{"line_number":6164,"context_line":"            disk_over_commit\u003dFalse,"},{"line_number":6165,"context_line":"            disk_available_mb\u003d100)"},{"line_number":6166,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":6167,"context_line":"        dest_check_data_ret \u003d drvr.check_can_live_migrate_source("},{"line_number":6168,"context_line":"                          self.context, instance, dest_check_data)"},{"line_number":6169,"context_line":"        self.assertEqual(block_migrate, dest_check_data_ret.block_migration)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_4369da8a","line":6166,"in_reply_to":"fa69d971_ec605837","updated":"2016-01-12 01:34:50.000000000","message":"Thanks Pawel, ops, good catch!","commit_id":"9ee1fe77aafe5ee317e63d2850e09a675247f979"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"1fa8e1b94038b37ba8a494e4a2d17574a07f172d","unresolved":false,"context_lines":[{"line_number":6213,"context_line":"            disk_over_commit\u003dNone,"},{"line_number":6214,"context_line":"            disk_available_mb\u003d100)"},{"line_number":6215,"context_line":""},{"line_number":6216,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":6217,"context_line":"        drvr.check_can_live_migrate_source("},{"line_number":6218,"context_line":"            self.context, instance, dest_check_data)"},{"line_number":6219,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_4c4884b3","line":6216,"range":{"start_line":6216,"start_character":30,"end_line":6216,"end_character":43},"updated":"2016-01-11 14:47:05.000000000","message":"ditto","commit_id":"9ee1fe77aafe5ee317e63d2850e09a675247f979"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"5e49dfbb57cf75853819b431d0ec4b819306b35f","unresolved":false,"context_lines":[{"line_number":6213,"context_line":"            disk_over_commit\u003dNone,"},{"line_number":6214,"context_line":"            disk_available_mb\u003d100)"},{"line_number":6215,"context_line":""},{"line_number":6216,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":6217,"context_line":"        drvr.check_can_live_migrate_source("},{"line_number":6218,"context_line":"            self.context, instance, dest_check_data)"},{"line_number":6219,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_e3048ec7","line":6216,"range":{"start_line":6216,"start_character":30,"end_line":6216,"end_character":43},"in_reply_to":"fa69d971_4c4884b3","updated":"2016-01-12 01:34:50.000000000","message":"Thanks Pawel, ops, good catch!","commit_id":"9ee1fe77aafe5ee317e63d2850e09a675247f979"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acec70e7100b29a1faf310dd894def3501431bb7","unresolved":false,"context_lines":[{"line_number":6593,"context_line":"        self.assertEqual(block_migrate, dest_check_data_ret.block_migration)"},{"line_number":6594,"context_line":""},{"line_number":6595,"context_line":"    def test_check_can_live_migrate_source_block_migration_none_shared1(self):"},{"line_number":6596,"context_line":"        self._test_check_can_live_migrate_source_block_migration_none(False,"},{"line_number":6597,"context_line":"                                                                      True,"},{"line_number":6598,"context_line":"                                                                      False)"},{"line_number":6599,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_98097c34","line":6596,"updated":"2016-02-03 08:48:33.000000000","message":"I think using named args would result in more readable code. e.g.:\n\nself._test_check_can_live_migrate_source_block_migration_non(\n    block_migrate\u003dFalse,\n    is_shared_instance_path\u003dTrue,\n    is_shared_block\u003dFalse)","commit_id":"ac35e56f9b1f0ddc0de16f94f454515110a0c7e0"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"473e16059245cea349874495249b08f0b333d94a","unresolved":false,"context_lines":[{"line_number":6593,"context_line":"        self.assertEqual(block_migrate, dest_check_data_ret.block_migration)"},{"line_number":6594,"context_line":""},{"line_number":6595,"context_line":"    def test_check_can_live_migrate_source_block_migration_none_shared1(self):"},{"line_number":6596,"context_line":"        self._test_check_can_live_migrate_source_block_migration_none(False,"},{"line_number":6597,"context_line":"                                                                      True,"},{"line_number":6598,"context_line":"                                                                      False)"},{"line_number":6599,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_f3e0a0fc","line":6596,"in_reply_to":"5a5ae5dd_3952c914","updated":"2016-02-04 01:24:52.000000000","message":"File \"nova/tests/unit/virt/libvirt/test_driver.py\", line 6652, in test_check_can_live_migrate_source_block_migration_none_shared2\n        is_share_block\u003dTrue)\n      File \"/home/taget/nova/.tox/py27/local/lib/python2.7/site-packages/mock/mock.py\", line 1305, in patched\n        return func(*args, **keywargs)\n    TypeError: _test_check_can_live_migrate_source_block_migration_none() got multiple values for keyword argument \u0027block_migrate\u0027","commit_id":"ac35e56f9b1f0ddc0de16f94f454515110a0c7e0"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"cf79d8c2dc6f34b5e762083b6ea67b767ca05a7d","unresolved":false,"context_lines":[{"line_number":6593,"context_line":"        self.assertEqual(block_migrate, dest_check_data_ret.block_migration)"},{"line_number":6594,"context_line":""},{"line_number":6595,"context_line":"    def test_check_can_live_migrate_source_block_migration_none_shared1(self):"},{"line_number":6596,"context_line":"        self._test_check_can_live_migrate_source_block_migration_none(False,"},{"line_number":6597,"context_line":"                                                                      True,"},{"line_number":6598,"context_line":"                                                                      False)"},{"line_number":6599,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_3952c914","line":6596,"in_reply_to":"5a5ae5dd_98097c34","updated":"2016-02-04 01:22:28.000000000","message":"these won\u0027t work because if since we have lots of mock object, if use kwargs, the parameter sequence will be changes.","commit_id":"ac35e56f9b1f0ddc0de16f94f454515110a0c7e0"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"5044131bad6de4b378e8170e816ffb9be4d85a18","unresolved":false,"context_lines":[{"line_number":5225,"context_line":"             :disk_over_commit: disk-over-commit factor on dest host"},{"line_number":5226,"context_line":"             :disk_available_mb: available disk space on dest host"},{"line_number":5227,"context_line":"        \"\"\""},{"line_number":5228,"context_line":"        disk_available_mb \u003d None"},{"line_number":5229,"context_line":"        disk_available_gb \u003d dst_compute_info[\u0027disk_available_least\u0027]"},{"line_number":5230,"context_line":"        disk_available_mb \u003d \\"},{"line_number":5231,"context_line":"                (disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb"}],"source_content_type":"text/x-python","patch_set":11,"id":"da6ed579_8b8b2968","line":5228,"updated":"2016-01-18 13:57:33.000000000","message":"This line is redundant when there is no if condition","commit_id":"ce49dad08f7a288aec636863df6da7a9b2959057"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a1510ef70f450561b3ba097d8228d513434de727","unresolved":false,"context_lines":[{"line_number":5225,"context_line":"             :disk_over_commit: disk-over-commit factor on dest host"},{"line_number":5226,"context_line":"             :disk_available_mb: available disk space on dest host"},{"line_number":5227,"context_line":"        \"\"\""},{"line_number":5228,"context_line":"        disk_available_mb \u003d None"},{"line_number":5229,"context_line":"        disk_available_gb \u003d dst_compute_info[\u0027disk_available_least\u0027]"},{"line_number":5230,"context_line":"        disk_available_mb \u003d \\"},{"line_number":5231,"context_line":"                (disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba63e191_e9c08e2c","line":5228,"in_reply_to":"da6ed579_8b8b2968","updated":"2016-01-20 09:14:52.000000000","message":"Done","commit_id":"ce49dad08f7a288aec636863df6da7a9b2959057"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"f808cac2694edfa3091eee9d2982d2c31edde55c","unresolved":false,"context_lines":[{"line_number":5225,"context_line":"             :disk_over_commit: disk-over-commit factor on dest host"},{"line_number":5226,"context_line":"             :disk_available_mb: available disk space on dest host"},{"line_number":5227,"context_line":"        \"\"\""},{"line_number":5228,"context_line":"        disk_available_mb \u003d None"},{"line_number":5229,"context_line":"        disk_available_gb \u003d dst_compute_info[\u0027disk_available_least\u0027]"},{"line_number":5230,"context_line":"        disk_available_mb \u003d \\"},{"line_number":5231,"context_line":"                (disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba63e191_e948e389","line":5228,"in_reply_to":"da6ed579_8b8b2968","updated":"2016-01-19 01:10:53.000000000","message":"Good catch, Pawel.\nI will remove it if I do another reversion.\n\nThanks ^_^","commit_id":"ce49dad08f7a288aec636863df6da7a9b2959057"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"1dd5fbfea01b995ce9dd14dcc6bcea722fe8de5d","unresolved":false,"context_lines":[{"line_number":5310,"context_line":"                    dest_check_data.is_shared_instance_path):"},{"line_number":5311,"context_line":"                reason \u003d _(\"Block migration can not be used \""},{"line_number":5312,"context_line":"                           \"with shared storage.\")"},{"line_number":5313,"context_line":"                raise exception.InvalidLocalStorage(reason\u003dreason, path\u003dsource)"},{"line_number":5314,"context_line":"            if \u0027disk_over_commit\u0027 in dest_check_data:"},{"line_number":5315,"context_line":"                self._assert_dest_node_has_enough_disk(context, instance,"},{"line_number":5316,"context_line":"                                        dest_check_data.disk_available_mb,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba63e191_b6bbffc3","line":5313,"updated":"2016-01-19 15:13:46.000000000","message":"it seems to me that this code is never executed.\nthe condition we check at line # 5309 is the same we check at line #5302 which set the dest_chec_data.block_migration \u003d False and therefore we don\u0027t run into the if at line #5308\n\nWhat about raising the exception in the line #5304 and default the value for dest_check_data.block_migration to True?","commit_id":"ce49dad08f7a288aec636863df6da7a9b2959057"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a1510ef70f450561b3ba097d8228d513434de727","unresolved":false,"context_lines":[{"line_number":5310,"context_line":"                    dest_check_data.is_shared_instance_path):"},{"line_number":5311,"context_line":"                reason \u003d _(\"Block migration can not be used \""},{"line_number":5312,"context_line":"                           \"with shared storage.\")"},{"line_number":5313,"context_line":"                raise exception.InvalidLocalStorage(reason\u003dreason, path\u003dsource)"},{"line_number":5314,"context_line":"            if \u0027disk_over_commit\u0027 in dest_check_data:"},{"line_number":5315,"context_line":"                self._assert_dest_node_has_enough_disk(context, instance,"},{"line_number":5316,"context_line":"                                        dest_check_data.disk_available_mb,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba63e191_29cea65a","line":5313,"in_reply_to":"ba63e191_627381b2","updated":"2016-01-20 09:14:52.000000000","message":"Added a TODO message in next PS.","commit_id":"ce49dad08f7a288aec636863df6da7a9b2959057"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"d2eddb9ae99164af6a6f310e23b830ff27f47c15","unresolved":false,"context_lines":[{"line_number":5310,"context_line":"                    dest_check_data.is_shared_instance_path):"},{"line_number":5311,"context_line":"                reason \u003d _(\"Block migration can not be used \""},{"line_number":5312,"context_line":"                           \"with shared storage.\")"},{"line_number":5313,"context_line":"                raise exception.InvalidLocalStorage(reason\u003dreason, path\u003dsource)"},{"line_number":5314,"context_line":"            if \u0027disk_over_commit\u0027 in dest_check_data:"},{"line_number":5315,"context_line":"                self._assert_dest_node_has_enough_disk(context, instance,"},{"line_number":5316,"context_line":"                                        dest_check_data.disk_available_mb,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba63e191_ca859fad","line":5313,"in_reply_to":"ba63e191_627381b2","updated":"2016-01-19 17:57:41.000000000","message":"Okay, so let me explain it because all this stuff isn\u0027t clear enough and require a note in code. Checks at lines 5309-5313 are there only to verify that user do not try to trigger incorrect live migration type.\n\nCurrently operator can trigger live migration and can specify \u0027--block-migration\u0027 to force block live migration. In this case block migration property will be set in dest_check_data so condition at line #5301 will be False. When operator triggers block live migration on an instance which is shared the code will raise an exception because check at line #5309 will be True.\n\nWith all these patches operator will be able to trigger live migration and expect that nova will start correct migration - true live or block. In this case dest_check_data will not have \u0027block_migration\u0027 property set, so check at line #5301 will be True. Then at lines 5302-5306 we try to calculate correct migration type so for sure we want check at line #5309 to be False and we don\u0027t want to raise an exception, because we already checked, e.g., that nothing is shared and because of that we\u0027ve chosen block live migration.\n\nThese lines of code (5309-5313) should be removed when we remove block live migration flag from the API, because we will calculate correct migration type. So we won\u0027t need to verify user decision anymore.","commit_id":"ce49dad08f7a288aec636863df6da7a9b2959057"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"205ccae4f8ce4af06608c65048004571048d9b88","unresolved":false,"context_lines":[{"line_number":5310,"context_line":"                    dest_check_data.is_shared_instance_path):"},{"line_number":5311,"context_line":"                reason \u003d _(\"Block migration can not be used \""},{"line_number":5312,"context_line":"                           \"with shared storage.\")"},{"line_number":5313,"context_line":"                raise exception.InvalidLocalStorage(reason\u003dreason, path\u003dsource)"},{"line_number":5314,"context_line":"            if \u0027disk_over_commit\u0027 in dest_check_data:"},{"line_number":5315,"context_line":"                self._assert_dest_node_has_enough_disk(context, instance,"},{"line_number":5316,"context_line":"                                        dest_check_data.disk_available_mb,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba63e191_f155011d","line":5313,"in_reply_to":"ba63e191_b6bbffc3","updated":"2016-01-19 15:31:18.000000000","message":"Andrea, my understanding is that when we merge these patches operator will still be able to trigger block live migration by himself. In such case if statement from line #5301 will not be executed (because \u0027block_migration\u0027 will be a part of dest_check_data) and if condition from line #5309 will raise an exception.","commit_id":"ce49dad08f7a288aec636863df6da7a9b2959057"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"c83a03fff71d4fc172517d683cdca0a742f335b4","unresolved":false,"context_lines":[{"line_number":5310,"context_line":"                    dest_check_data.is_shared_instance_path):"},{"line_number":5311,"context_line":"                reason \u003d _(\"Block migration can not be used \""},{"line_number":5312,"context_line":"                           \"with shared storage.\")"},{"line_number":5313,"context_line":"                raise exception.InvalidLocalStorage(reason\u003dreason, path\u003dsource)"},{"line_number":5314,"context_line":"            if \u0027disk_over_commit\u0027 in dest_check_data:"},{"line_number":5315,"context_line":"                self._assert_dest_node_has_enough_disk(context, instance,"},{"line_number":5316,"context_line":"                                        dest_check_data.disk_available_mb,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba63e191_aeb4e6f1","line":5313,"in_reply_to":"ba63e191_ca859fad","updated":"2016-01-20 03:12:33.000000000","message":"Thanks Pawel for the detail explanation!\n\nyeah, After these patch get merged, \u0027block_migration\u0027 can be None, True of False(True and False are passed from REST API which is input by admin), so we need to consider all cases. If it is None which means dest_check_data object has no \u0027block_migration\u0027 (it is not set so it is None), we calculate it, if they are T of F, we do the validation #5308-5313, these checks will be remove if REST API won\u0027t pass block_migration any more.\n\nThanks Eli.","commit_id":"ce49dad08f7a288aec636863df6da7a9b2959057"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"45db51fd111284a735826e64c83c8a7ef79edf0d","unresolved":false,"context_lines":[{"line_number":5310,"context_line":"                    dest_check_data.is_shared_instance_path):"},{"line_number":5311,"context_line":"                reason \u003d _(\"Block migration can not be used \""},{"line_number":5312,"context_line":"                           \"with shared storage.\")"},{"line_number":5313,"context_line":"                raise exception.InvalidLocalStorage(reason\u003dreason, path\u003dsource)"},{"line_number":5314,"context_line":"            if \u0027disk_over_commit\u0027 in dest_check_data:"},{"line_number":5315,"context_line":"                self._assert_dest_node_has_enough_disk(context, instance,"},{"line_number":5316,"context_line":"                                        dest_check_data.disk_available_mb,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba63e191_627381b2","line":5313,"in_reply_to":"ba63e191_f155011d","updated":"2016-01-19 16:09:17.000000000","message":"Hi Pawel thanks for your answer, a question:\n1) is it possible that, at the same time, the if at line #5301 is false and the condition at #5308 is True?\nthey are not referring to the same thing?\nProbably I am confused by the object vs the dict, I do not understand how a property in the object could be not in the dict.","commit_id":"ce49dad08f7a288aec636863df6da7a9b2959057"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"f67445ed6fb67d2642fadfc8668029c8ec5fd020","unresolved":false,"context_lines":[{"line_number":5435,"context_line":"        has_local_disk \u003d self._has_local_disk(instance, disk_info_text)"},{"line_number":5436,"context_line":""},{"line_number":5437,"context_line":"        if \u0027block_migration\u0027 not in dest_check_data:"},{"line_number":5438,"context_line":"            if (dest_check_data.is_shared_block_storage or"},{"line_number":5439,"context_line":"                    dest_check_data.is_shared_instance_path):"},{"line_number":5440,"context_line":"                dest_check_data.block_migration \u003d False"},{"line_number":5441,"context_line":"            else:"},{"line_number":5442,"context_line":"                dest_check_data.block_migration \u003d True"},{"line_number":5443,"context_line":""},{"line_number":5444,"context_line":"        if dest_check_data.block_migration:"},{"line_number":5445,"context_line":"            # TODO(eliqiao): Once block_migration flag is removed from the API"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_f43661e6","line":5442,"range":{"start_line":5438,"start_character":12,"end_line":5442,"end_character":54},"updated":"2016-02-02 21:28:19.000000000","message":"this could be rewritten:\ndest_check_data.block_migration \u003d not dest_check_data.is_shared_block_storage and not dest_check_data.is_shared_instance_path\nBut what I really would like to see is smth like a method in migrate data object: is_shared_storage() that encapsulates this logic","commit_id":"db8d55bde8127fb9d9e7d1918c1689b8e22c1b3a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acec70e7100b29a1faf310dd894def3501431bb7","unresolved":false,"context_lines":[{"line_number":5373,"context_line":"        :returns: a LibvirtLiveMigrateData object"},{"line_number":5374,"context_line":"        \"\"\""},{"line_number":5375,"context_line":"        disk_available_gb \u003d dst_compute_info[\u0027disk_available_least\u0027]"},{"line_number":5376,"context_line":"        disk_available_mb \u003d \\"},{"line_number":5377,"context_line":"                (disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb"},{"line_number":5378,"context_line":""},{"line_number":5379,"context_line":"        # Compare CPU"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_133c8f92","line":5376,"updated":"2016-02-03 08:48:33.000000000","message":"you can avoid \u0027\\\u0027 if you put a \u0027(\u0027 \u0027)\u0027 around the whole expression and split the line after the multiplication.","commit_id":"ac35e56f9b1f0ddc0de16f94f454515110a0c7e0"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"660e71625bc6bcde8108e438b2c1707bf596aa99","unresolved":false,"context_lines":[{"line_number":5373,"context_line":"        :returns: a LibvirtLiveMigrateData object"},{"line_number":5374,"context_line":"        \"\"\""},{"line_number":5375,"context_line":"        disk_available_gb \u003d dst_compute_info[\u0027disk_available_least\u0027]"},{"line_number":5376,"context_line":"        disk_available_mb \u003d \\"},{"line_number":5377,"context_line":"                (disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb"},{"line_number":5378,"context_line":""},{"line_number":5379,"context_line":"        # Compare CPU"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_96db8ced","line":5376,"in_reply_to":"5a5ae5dd_133c8f92","updated":"2016-02-03 08:57:43.000000000","message":"yeah, I just don\u0027t want to touch extra code, but okay I will cleanup it in next PS.","commit_id":"ac35e56f9b1f0ddc0de16f94f454515110a0c7e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acec70e7100b29a1faf310dd894def3501431bb7","unresolved":false,"context_lines":[{"line_number":5390,"context_line":"        data.filename \u003d filename"},{"line_number":5391,"context_line":"        data.image_type \u003d CONF.libvirt.images_type"},{"line_number":5392,"context_line":"        # Notes(eliqiao): block_migration and disk_over_commit is not"},{"line_number":5393,"context_line":"        # nullable, so just don\u0027t set them if they are None"},{"line_number":5394,"context_line":"        if block_migration is not None:"},{"line_number":5395,"context_line":"            data.block_migration \u003d block_migration"},{"line_number":5396,"context_line":"        if disk_over_commit is not None:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_f348d289","line":5393,"updated":"2016-02-03 08:48:33.000000000","message":"It might be ask a stupid question but what will be the value of these fields if we are not setting them?","commit_id":"ac35e56f9b1f0ddc0de16f94f454515110a0c7e0"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"660e71625bc6bcde8108e438b2c1707bf596aa99","unresolved":false,"context_lines":[{"line_number":5390,"context_line":"        data.filename \u003d filename"},{"line_number":5391,"context_line":"        data.image_type \u003d CONF.libvirt.images_type"},{"line_number":5392,"context_line":"        # Notes(eliqiao): block_migration and disk_over_commit is not"},{"line_number":5393,"context_line":"        # nullable, so just don\u0027t set them if they are None"},{"line_number":5394,"context_line":"        if block_migration is not None:"},{"line_number":5395,"context_line":"            data.block_migration \u003d block_migration"},{"line_number":5396,"context_line":"        if disk_over_commit is not None:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a5ae5dd_76a7f04f","line":5393,"in_reply_to":"5a5ae5dd_f348d289","updated":"2016-02-03 08:57:43.000000000","message":"if you check block_migration and disk_over_commit field in objects.LibvirtLiveMigrateData, you will find out that they are restricted as not null, so we can not set to None to them. if we don\u0027t set the value, this LibvirtLiveMigrateData won\u0027t have that filed, so you can just check if \u0027block_migration\u0027 in LibvirtLiveMigrateData to test if that filed have value or not, in this way we get to know that user pass a None from API layer and we need to calculate it.\n\nfor why it is not nullable(I meant why these fields can\u0027t be None, that is because we want back-ward compatible)","commit_id":"ac35e56f9b1f0ddc0de16f94f454515110a0c7e0"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"005010e7cf3e01914dd438f5755d7633758db0ae","unresolved":false,"context_lines":[{"line_number":5389,"context_line":"        data \u003d objects.LibvirtLiveMigrateData()"},{"line_number":5390,"context_line":"        data.filename \u003d filename"},{"line_number":5391,"context_line":"        data.image_type \u003d CONF.libvirt.images_type"},{"line_number":5392,"context_line":"        # Notes(eliqiao): block_migration and disk_over_commit is not"},{"line_number":5393,"context_line":"        # nullable, so just don\u0027t set them if they are None"},{"line_number":5394,"context_line":"        if block_migration is not None:"},{"line_number":5395,"context_line":"            data.block_migration \u003d block_migration"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a5ae5dd_95bb790e","line":5392,"range":{"start_line":5392,"start_character":63,"end_line":5392,"end_character":65},"updated":"2016-02-03 12:03:23.000000000","message":"supernit: are","commit_id":"0433e8f675e7abbdb342593c25f3787259c8ad19"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"005010e7cf3e01914dd438f5755d7633758db0ae","unresolved":false,"context_lines":[{"line_number":5450,"context_line":"        if dest_check_data.block_migration:"},{"line_number":5451,"context_line":"            # TODO(eliqiao): Once block_migration flag is removed from the API"},{"line_number":5452,"context_line":"            # we can safely remove the if condition"},{"line_number":5453,"context_line":"            if (dest_check_data.is_shared_block_storage or"},{"line_number":5454,"context_line":"                    dest_check_data.is_shared_instance_path):"},{"line_number":5455,"context_line":"                reason \u003d _(\"Block migration can not be used \""},{"line_number":5456,"context_line":"                           \"with shared storage.\")"},{"line_number":5457,"context_line":"                raise exception.InvalidLocalStorage(reason\u003dreason, path\u003dsource)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a5ae5dd_b57c7521","line":5454,"range":{"start_line":5453,"start_character":16,"end_line":5454,"end_character":59},"updated":"2016-02-03 12:03:23.000000000","message":"this check is pretty similar to one in determine_block_migration method,\nwhat if refactor it too? rename method to, say, is_on_shared_storage and then use it in both cases, this will make this code a bit clearer","commit_id":"0433e8f675e7abbdb342593c25f3787259c8ad19"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4bf95892516810d417edf71998bd455537a36103","unresolved":false,"context_lines":[{"line_number":2151,"context_line":"            try:"},{"line_number":2152,"context_line":"                self._ensure_host_in_aggregate(ctxt, src)"},{"line_number":2153,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2154,"context_line":"                block_migration \u003d False"},{"line_number":2155,"context_line":"            else:"},{"line_number":2156,"context_line":"                block_migration \u003d True"},{"line_number":2157,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a68dd71_db682abd","line":2154,"range":{"start_line":2154,"start_character":16,"end_line":2154,"end_character":39},"updated":"2016-01-21 02:13:21.000000000","message":"-1 on me , this should be True.\nif they are not in same aggregate, LM should be block migration.","commit_id":"98d81081a9e26139a39b0a3545c581b0b3191f32"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"d5571b7d9b5f9f80fe11339f6f95922645137902","unresolved":false,"context_lines":[{"line_number":2154,"context_line":"                block_migration \u003d False"},{"line_number":2155,"context_line":"            else:"},{"line_number":2156,"context_line":"                block_migration \u003d True"},{"line_number":2157,"context_line":""},{"line_number":2158,"context_line":"        if block_migration:"},{"line_number":2159,"context_line":"            dest_check_data.block_migration \u003d True"},{"line_number":2160,"context_line":"            dest_check_data.migrate_send_data \u003d self._migrate_receive(ctxt)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_3e27b365","line":2157,"updated":"2016-01-20 10:59:32.000000000","message":"nit: This logic is not immediately clear to the reader it\u0027d be nice to add a note/comment to better explain why you added that code","commit_id":"98d81081a9e26139a39b0a3545c581b0b3191f32"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"ad3204750d62bdf935809b4047e903dc9c7118e0","unresolved":false,"context_lines":[{"line_number":2154,"context_line":"                block_migration \u003d False"},{"line_number":2155,"context_line":"            else:"},{"line_number":2156,"context_line":"                block_migration \u003d True"},{"line_number":2157,"context_line":""},{"line_number":2158,"context_line":"        if block_migration:"},{"line_number":2159,"context_line":"            dest_check_data.block_migration \u003d True"},{"line_number":2160,"context_line":"            dest_check_data.migrate_send_data \u003d self._migrate_receive(ctxt)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a68dd71_e53791e1","line":2157,"in_reply_to":"ba63e191_3e27b365","updated":"2016-01-21 01:10:23.000000000","message":"yeah, I though it is clear already that I have the comments in the functional param explanation (#2144), okay, I will leave a note here.","commit_id":"98d81081a9e26139a39b0a3545c581b0b3191f32"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"a91e77b26146b7be8dfb76d96fb65c42abe0e878","unresolved":false,"context_lines":[{"line_number":2168,"context_line":"            src \u003d instance_ref[\u0027host\u0027]"},{"line_number":2169,"context_line":"            # TDDO(eilqiao): There is still one case that block_migration is"},{"line_number":2170,"context_line":"            # passed from admin user, so we need this check until"},{"line_number":2171,"context_line":"            # block_migration flag is removed from API"},{"line_number":2172,"context_line":"            self._ensure_host_in_aggregate(ctxt, src)"},{"line_number":2173,"context_line":"            # TODO(johngarbutt) we currently assume"},{"line_number":2174,"context_line":"            # instance is on a SR shared with other destination"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_2d7a5e25","line":2171,"updated":"2016-01-21 10:29:01.000000000","message":"+1 for the explanation","commit_id":"c26c5737774195f790143895a8b902bce8de3735"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"f67445ed6fb67d2642fadfc8668029c8ec5fd020","unresolved":false,"context_lines":[{"line_number":2166,"context_line":"        else:"},{"line_number":2167,"context_line":"            dest_check_data.block_migration \u003d False"},{"line_number":2168,"context_line":"            src \u003d instance_ref[\u0027host\u0027]"},{"line_number":2169,"context_line":"            # TDDO(eilqiao): There is still one case that block_migration is"},{"line_number":2170,"context_line":"            # passed from admin user, so we need this check until"},{"line_number":2171,"context_line":"            # block_migration flag is removed from API"},{"line_number":2172,"context_line":"            self._ensure_host_in_aggregate(ctxt, src)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_74783190","line":2169,"range":{"start_line":2169,"start_character":14,"end_line":2169,"end_character":18},"updated":"2016-02-02 21:28:19.000000000","message":"nit: s/TDDO/TODO","commit_id":"db8d55bde8127fb9d9e7d1918c1689b8e22c1b3a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2cdf00fe772f969c0d8e001e29c07f762917652d","unresolved":false,"context_lines":[{"line_number":2152,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2153,"context_line":"                block_migration \u003d True"},{"line_number":2154,"context_line":"            else:"},{"line_number":2155,"context_line":"                block_migration \u003d False"},{"line_number":2156,"context_line":""},{"line_number":2157,"context_line":"        if block_migration:"},{"line_number":2158,"context_line":"            dest_check_data.block_migration \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a5ae5dd_1c601b35","line":2155,"updated":"2016-02-03 09:31:20.000000000","message":"This should work, actually.","commit_id":"0433e8f675e7abbdb342593c25f3787259c8ad19"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d73ebe25f822968a0dbf6c86fc51e730ac1eaad3","unresolved":false,"context_lines":[{"line_number":2150,"context_line":"            try:"},{"line_number":2151,"context_line":"                self._ensure_host_in_aggregate(ctxt, src)"},{"line_number":2152,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2153,"context_line":"                block_migration \u003d True"},{"line_number":2154,"context_line":"            else:"},{"line_number":2155,"context_line":"                block_migration \u003d False"},{"line_number":2156,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_7722c5a4","line":2153,"updated":"2016-02-08 10:31:41.000000000","message":"I just realised, this isn\u0027t quite good enough.\n\nI think we should really double check if the default SR is shared\u003dtrue:\nhttp://docs.vmd.citrix.com/XenServer/6.5.0/1.0/en_gb/api/?c\u003dSR","commit_id":"316a2f5fe5a586b27fff6b46f24d0f7cad790e66"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"29f4fc46d94c23c004dfedad10bd133b6d8377ef","unresolved":false,"context_lines":[{"line_number":2150,"context_line":"            try:"},{"line_number":2151,"context_line":"                self._ensure_host_in_aggregate(ctxt, src)"},{"line_number":2152,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2153,"context_line":"                block_migration \u003d True"},{"line_number":2154,"context_line":"            else:"},{"line_number":2155,"context_line":"                block_migration \u003d False"},{"line_number":2156,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_6af5f8ea","line":2153,"in_reply_to":"5a5ae5dd_17a7d1aa","updated":"2016-02-08 10:54:52.000000000","message":"I think we don\u0027t need to check here; if we are not in the same aggregate then the SR cannot be shared and therefore block_migration must be true.","commit_id":"316a2f5fe5a586b27fff6b46f24d0f7cad790e66"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"50e97b4b37e0bda61286a75f2431eb9f7c5a1e40","unresolved":false,"context_lines":[{"line_number":2150,"context_line":"            try:"},{"line_number":2151,"context_line":"                self._ensure_host_in_aggregate(ctxt, src)"},{"line_number":2152,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2153,"context_line":"                block_migration \u003d True"},{"line_number":2154,"context_line":"            else:"},{"line_number":2155,"context_line":"                block_migration \u003d False"},{"line_number":2156,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"dae33548_e45e39e8","line":2153,"in_reply_to":"5a5ae5dd_6af5f8ea","updated":"2016-02-16 13:34:34.000000000","message":"Yeah, this side is OK.","commit_id":"316a2f5fe5a586b27fff6b46f24d0f7cad790e66"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a014c104926455caa7a8c8b86f71c047f7e2a340","unresolved":false,"context_lines":[{"line_number":2150,"context_line":"            try:"},{"line_number":2151,"context_line":"                self._ensure_host_in_aggregate(ctxt, src)"},{"line_number":2152,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2153,"context_line":"                block_migration \u003d True"},{"line_number":2154,"context_line":"            else:"},{"line_number":2155,"context_line":"                block_migration \u003d False"},{"line_number":2156,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_17a7d1aa","line":2153,"in_reply_to":"5a5ae5dd_7722c5a4","updated":"2016-02-08 10:40:40.000000000","message":"I think the logic you need is something like:\n\n  sr_ref \u003d vm_utils.safe_find_sr(session)\n  sr_rec \u003d session.SR.get_rec(sr_ref)\n  block_migration \u003d sr_rec[\"shared\"]","commit_id":"316a2f5fe5a586b27fff6b46f24d0f7cad790e66"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d3fb5c2cba761478eb521e604cb6c79a1a3cd416","unresolved":false,"context_lines":[{"line_number":2150,"context_line":"            try:"},{"line_number":2151,"context_line":"                self._ensure_host_in_aggregate(ctxt, src)"},{"line_number":2152,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2153,"context_line":"                block_migration \u003d True"},{"line_number":2154,"context_line":"            else:"},{"line_number":2155,"context_line":"                block_migration \u003d False"},{"line_number":2156,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"bae84128_b4a9fce1","line":2153,"in_reply_to":"dae33548_e45e39e8","updated":"2016-02-22 07:53:36.000000000","message":"thanks John and Bob, I update the patch, please help to take a look at if I am on the right direction.\n\nThank you again.\n\nEli.","commit_id":"316a2f5fe5a586b27fff6b46f24d0f7cad790e66"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d73ebe25f822968a0dbf6c86fc51e730ac1eaad3","unresolved":false,"context_lines":[{"line_number":2152,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2153,"context_line":"                block_migration \u003d True"},{"line_number":2154,"context_line":"            else:"},{"line_number":2155,"context_line":"                block_migration \u003d False"},{"line_number":2156,"context_line":""},{"line_number":2157,"context_line":"        if block_migration:"},{"line_number":2158,"context_line":"            dest_check_data.block_migration \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_173ef1c0","line":2155,"updated":"2016-02-08 10:31:41.000000000","message":"I think this side is OK, I believe.","commit_id":"316a2f5fe5a586b27fff6b46f24d0f7cad790e66"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"29f4fc46d94c23c004dfedad10bd133b6d8377ef","unresolved":false,"context_lines":[{"line_number":2152,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2153,"context_line":"                block_migration \u003d True"},{"line_number":2154,"context_line":"            else:"},{"line_number":2155,"context_line":"                block_migration \u003d False"},{"line_number":2156,"context_line":""},{"line_number":2157,"context_line":"        if block_migration:"},{"line_number":2158,"context_line":"            dest_check_data.block_migration \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a5ae5dd_eab3284b","line":2155,"in_reply_to":"5a5ae5dd_173ef1c0","updated":"2016-02-08 10:54:52.000000000","message":"Isn\u0027t this the side that\u0027s wrong? If we are in a pool then we don\u0027t have to do block migration if we are using shared storage.\nIf we are not using shared storage, then we will have to migrate across the storage?","commit_id":"316a2f5fe5a586b27fff6b46f24d0f7cad790e66"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"50e97b4b37e0bda61286a75f2431eb9f7c5a1e40","unresolved":false,"context_lines":[{"line_number":2152,"context_line":"            except exception.MigrationPreCheckError:"},{"line_number":2153,"context_line":"                block_migration \u003d True"},{"line_number":2154,"context_line":"            else:"},{"line_number":2155,"context_line":"                block_migration \u003d False"},{"line_number":2156,"context_line":""},{"line_number":2157,"context_line":"        if block_migration:"},{"line_number":2158,"context_line":"            dest_check_data.block_migration \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"dae33548_4447251d","line":2155,"in_reply_to":"5a5ae5dd_eab3284b","updated":"2016-02-16 13:34:34.000000000","message":"Yeah, my bad, I mean the way around BobBall is saying.","commit_id":"316a2f5fe5a586b27fff6b46f24d0f7cad790e66"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1682d21b285eb0c45f8b3ab0a34dc6c8c86f82fe","unresolved":false,"context_lines":[{"line_number":2166,"context_line":"            src \u003d instance_ref[\u0027host\u0027]"},{"line_number":2167,"context_line":"            # TODO(eilqiao): There is still one case that block_migration is"},{"line_number":2168,"context_line":"            # passed from admin user, so we need this check until"},{"line_number":2169,"context_line":"            # block_migration flag is removed from API"},{"line_number":2170,"context_line":"            self._ensure_host_in_aggregate(ctxt, src)"},{"line_number":2171,"context_line":"            # TODO(johngarbutt) we currently assume"},{"line_number":2172,"context_line":"            # instance is on a SR shared with other destination"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_6e239c56","line":2169,"updated":"2016-02-24 12:37:28.000000000","message":"Nit: we can\u0027t actually ever remove that flag sadly, as its in the API, it stays for ever, basically.","commit_id":"9479d7a133cf1bcfd49ccd468bdf64d055ff2bb4"}]}
