)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"557705417362c6634a3b8db20b1d45119992a1c7","unresolved":false,"context_lines":[{"line_number":5196,"context_line":"        # type, at this point block_migration can be None, while"},{"line_number":5197,"context_line":"        # migrate_data.block_migration is True. Because we use these two"},{"line_number":5198,"context_line":"        # alternately, we need to be sure that both are equal."},{"line_number":5199,"context_line":"        if block_migration is None:"},{"line_number":5200,"context_line":"            if isinstance(migrate_data,"},{"line_number":5201,"context_line":"                          migrate_data_obj.LibvirtLiveMigrateData):"},{"line_number":5202,"context_line":"                block_migration \u003d migrate_data.block_migration"},{"line_number":5203,"context_line":"            elif (isinstance(migrate_data,"},{"line_number":5204,"context_line":"                             migrate_data_obj.XenapiLiveMigrateData) and"},{"line_number":5205,"context_line":"                  migrate_data.obj_attr_is_set(\u0027block_migration\u0027)):"},{"line_number":5206,"context_line":"                block_migration \u003d migrate_data.block_migration"},{"line_number":5207,"context_line":""},{"line_number":5208,"context_line":"        try:"},{"line_number":5209,"context_line":"            if block_migration:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_fcdfbb66","line":5206,"range":{"start_line":5199,"start_character":0,"end_line":5206,"end_character":62},"updated":"2016-03-03 03:40:13.000000000","message":"hi Pawel, I don\u0027t think this is the best solution here.\nthe root cause is that we do the calculation in conductor but forget to check if self.block_migration is equal to self.migrate_data.\n\nhow about do this:\n\nif self.block_migration is None:\n    if self.migrate_data.obj_attr_is_set(\u0027block_migration\u0027)\n        self.block_migration \u003d self.migrate_data.block_miration\n\nbefore we cast live_migration to compute node.\n\nhttps://github.com/openstack/nova/blob/master/nova/conductor/tasks/live_migrate.py#L72","commit_id":"eb45939c68d93f1d27c96762338287aff6acacaf"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"77eb9c8a6cdff6729717a8d5df2fff7ad05fa2b2","unresolved":false,"context_lines":[{"line_number":5196,"context_line":"        # type, at this point block_migration can be None, while"},{"line_number":5197,"context_line":"        # migrate_data.block_migration is True. Because we use these two"},{"line_number":5198,"context_line":"        # alternately, we need to be sure that both are equal."},{"line_number":5199,"context_line":"        if block_migration is None:"},{"line_number":5200,"context_line":"            if isinstance(migrate_data,"},{"line_number":5201,"context_line":"                          migrate_data_obj.LibvirtLiveMigrateData):"},{"line_number":5202,"context_line":"                block_migration \u003d migrate_data.block_migration"},{"line_number":5203,"context_line":"            elif (isinstance(migrate_data,"},{"line_number":5204,"context_line":"                             migrate_data_obj.XenapiLiveMigrateData) and"},{"line_number":5205,"context_line":"                  migrate_data.obj_attr_is_set(\u0027block_migration\u0027)):"},{"line_number":5206,"context_line":"                block_migration \u003d migrate_data.block_migration"},{"line_number":5207,"context_line":""},{"line_number":5208,"context_line":"        try:"},{"line_number":5209,"context_line":"            if block_migration:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_233d77c4","line":5206,"range":{"start_line":5199,"start_character":0,"end_line":5206,"end_character":62},"in_reply_to":"7af24918_6b8abb1c","updated":"2016-03-03 07:35:58.000000000","message":"Not really, this will not work because we can\u0027t treat object as a dict anymore.\n\nAlso, I don\u0027t like idea to move this up to conductor, because we will expose driver specific checks up to orchestration layer. I need to keep all this checks in place and they really don\u0027t fit into orchestration layer, conductor should not be aware whether there is libvirt or xen or something else below.","commit_id":"eb45939c68d93f1d27c96762338287aff6acacaf"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"e3d58e73130fcdff4e6c556792ee484d37e91695","unresolved":false,"context_lines":[{"line_number":5196,"context_line":"        # type, at this point block_migration can be None, while"},{"line_number":5197,"context_line":"        # migrate_data.block_migration is True. Because we use these two"},{"line_number":5198,"context_line":"        # alternately, we need to be sure that both are equal."},{"line_number":5199,"context_line":"        if block_migration is None:"},{"line_number":5200,"context_line":"            if isinstance(migrate_data,"},{"line_number":5201,"context_line":"                          migrate_data_obj.LibvirtLiveMigrateData):"},{"line_number":5202,"context_line":"                block_migration \u003d migrate_data.block_migration"},{"line_number":5203,"context_line":"            elif (isinstance(migrate_data,"},{"line_number":5204,"context_line":"                             migrate_data_obj.XenapiLiveMigrateData) and"},{"line_number":5205,"context_line":"                  migrate_data.obj_attr_is_set(\u0027block_migration\u0027)):"},{"line_number":5206,"context_line":"                block_migration \u003d migrate_data.block_migration"},{"line_number":5207,"context_line":""},{"line_number":5208,"context_line":"        try:"},{"line_number":5209,"context_line":"            if block_migration:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_6b8abb1c","line":5206,"range":{"start_line":5199,"start_character":0,"end_line":5206,"end_character":62},"in_reply_to":"7af24918_fcdfbb66","updated":"2016-03-03 06:41:13.000000000","message":"\u003e We can\u0027t just pass migrate_data.block_migration because it \n\u003e might not be set in case of hyperv or vmware.\n\nyes, we can\u0027t, we can do is as:\n\n\nif self.block_migration is None:\n    if \u0027block_migration\u0027 in self.migrate_data:\n         self.block_migration \u003d self.migrate_data.block_migration","commit_id":"eb45939c68d93f1d27c96762338287aff6acacaf"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ba873f6f8c2596de5c393a4893ae1f4d60240981","unresolved":false,"context_lines":[{"line_number":5194,"context_line":""},{"line_number":5195,"context_line":"        try:"},{"line_number":5196,"context_line":"            if (\u0027block_migration\u0027 in migrate_data and"},{"line_number":5197,"context_line":"                    migrate_data.block_migration):"},{"line_number":5198,"context_line":"                block_device_info \u003d self._get_instance_block_device_info("},{"line_number":5199,"context_line":"                    context, instance)"},{"line_number":5200,"context_line":"                disk \u003d self.driver.get_instance_disk_info("}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_5e83b6cc","line":5197,"updated":"2016-03-07 16:34:00.000000000","message":"What happens if block_migration is True and \u0027block_migration\u0027 is not in migrate_data? Previously, this code would have grabbed the block_device_info but now it won\u0027t.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"13001d017035f8397234cfd1013d8205d460b044","unresolved":false,"context_lines":[{"line_number":5194,"context_line":""},{"line_number":5195,"context_line":"        try:"},{"line_number":5196,"context_line":"            if (\u0027block_migration\u0027 in migrate_data and"},{"line_number":5197,"context_line":"                    migrate_data.block_migration):"},{"line_number":5198,"context_line":"                block_device_info \u003d self._get_instance_block_device_info("},{"line_number":5199,"context_line":"                    context, instance)"},{"line_number":5200,"context_line":"                disk \u003d self.driver.get_instance_disk_info("}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_f7ca72a0","line":5197,"in_reply_to":"5aef4532_01ed2525","updated":"2016-03-08 14:47:53.000000000","message":"In case of live migrations between mitaka computes there won\u0027t be such case. Both drivers that support block live migration set this property inside migrate_data object during prechecks.\n\nOn the other hand in case of upgrades, we support old-\u003enew live migrations only, so the old code will be executed where this condition looks like:\n\nif block_migration:\n    do_the_job()\n\nSo IMO it is okay there.\n\nI really should leave a TODO that block_migration is not used anymore and should be removed in the future.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d2be1a8df9ba6d904c4951613197fb55f8b4c408","unresolved":false,"context_lines":[{"line_number":5194,"context_line":""},{"line_number":5195,"context_line":"        try:"},{"line_number":5196,"context_line":"            if (\u0027block_migration\u0027 in migrate_data and"},{"line_number":5197,"context_line":"                    migrate_data.block_migration):"},{"line_number":5198,"context_line":"                block_device_info \u003d self._get_instance_block_device_info("},{"line_number":5199,"context_line":"                    context, instance)"},{"line_number":5200,"context_line":"                disk \u003d self.driver.get_instance_disk_info("}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_01ed2525","line":5197,"in_reply_to":"5aef4532_5e83b6cc","updated":"2016-03-08 10:30:16.000000000","message":"I missed this, but this is actually only returns something other than None for the libvirt driver, so I think we are safe.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"acc0b643325975b4b256b385ae836250a4e1e932","unresolved":false,"context_lines":[{"line_number":5325,"context_line":"        # migrate_data objects for drivers that support block live migrations"},{"line_number":5326,"context_line":"        # (i.e. Libvirt and Xenapi). For other drivers cleanup is not needed."},{"line_number":5327,"context_line":"        is_shared_block_storage \u003d True"},{"line_number":5328,"context_line":"        is_shared_instance_path \u003d True"},{"line_number":5329,"context_line":"        if isinstance(migrate_data, migrate_data_obj.LibvirtLiveMigrateData):"},{"line_number":5330,"context_line":"            is_shared_block_storage \u003d migrate_data.is_shared_block_storage"},{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_0208d526","line":5328,"updated":"2016-03-04 15:25:51.000000000","message":"It seems like hyper-v implements rollback_live_migration_at_destination by destroying the instance. Its maybe good that isn\u0027t called. Cleanup is a noop.\n\nVMware doesn\u0027t implement rollback_live_migration_at_destination and cleanup is a noop.\n\nSo I think this works too.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e37a7208df8a2100b4c2ce360a70d600cb9b6467","unresolved":false,"context_lines":[{"line_number":5325,"context_line":"        # migrate_data objects for drivers that support block live migrations"},{"line_number":5326,"context_line":"        # (i.e. Libvirt and Xenapi). For other drivers cleanup is not needed."},{"line_number":5327,"context_line":"        is_shared_block_storage \u003d True"},{"line_number":5328,"context_line":"        is_shared_instance_path \u003d True"},{"line_number":5329,"context_line":"        if isinstance(migrate_data, migrate_data_obj.LibvirtLiveMigrateData):"},{"line_number":5330,"context_line":"            is_shared_block_storage \u003d migrate_data.is_shared_block_storage"},{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_800b242b","line":5328,"in_reply_to":"7af24918_0208d526","updated":"2016-03-05 01:50:08.000000000","message":"Emm....A little confuse for hyper-v. It implements rollback_live_migration_at_destination, the implements includes destroying the instance and destroying the disk. With this code, there never get a chance to execute.\n\n@John, why those code isn\u0027t called sounds ok?","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"423fe1f6e71e08c39050a57c1e153469502ad6a1","unresolved":false,"context_lines":[{"line_number":5325,"context_line":"        # migrate_data objects for drivers that support block live migrations"},{"line_number":5326,"context_line":"        # (i.e. Libvirt and Xenapi). For other drivers cleanup is not needed."},{"line_number":5327,"context_line":"        is_shared_block_storage \u003d True"},{"line_number":5328,"context_line":"        is_shared_instance_path \u003d True"},{"line_number":5329,"context_line":"        if isinstance(migrate_data, migrate_data_obj.LibvirtLiveMigrateData):"},{"line_number":5330,"context_line":"            is_shared_block_storage \u003d migrate_data.is_shared_block_storage"},{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_a7cd8f88","line":5328,"in_reply_to":"7af24918_800b242b","updated":"2016-03-05 14:14:14.000000000","message":"Yeah, it is confusing. Looks like we never called rollback_on_destination in case of hyperv:\n\nOld Liberty code before objectifying migrate_data:\nhttps://github.com/openstack/nova/blob/stable/liberty/nova/compute/manager.py\n\nIt always have block_migration equal to False, so it is never called. Added Claudiu to review, maybe he can say a word there.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"746c5f31718e8219a750aea84475aef0b71d2768","unresolved":false,"context_lines":[{"line_number":5325,"context_line":"        # migrate_data objects for drivers that support block live migrations"},{"line_number":5326,"context_line":"        # (i.e. Libvirt and Xenapi). For other drivers cleanup is not needed."},{"line_number":5327,"context_line":"        is_shared_block_storage \u003d True"},{"line_number":5328,"context_line":"        is_shared_instance_path \u003d True"},{"line_number":5329,"context_line":"        if isinstance(migrate_data, migrate_data_obj.LibvirtLiveMigrateData):"},{"line_number":5330,"context_line":"            is_shared_block_storage \u003d migrate_data.is_shared_block_storage"},{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_e8c48841","line":5328,"in_reply_to":"7af24918_a7cd8f88","updated":"2016-03-07 16:06:39.000000000","message":"Sorry, yeah, its more it was never called, and thats correct here.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e408d60a49bd9ec2573c756390cfcbdca3a52d42","unresolved":false,"context_lines":[{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"},{"line_number":5332,"context_line":"        elif isinstance(migrate_data, migrate_data_obj.XenapiLiveMigrateData):"},{"line_number":5333,"context_line":"            is_shared_block_storage \u003d not migrate_data.block_migration"},{"line_number":5334,"context_line":"            is_shared_instance_path \u003d not migrate_data.block_migration"},{"line_number":5335,"context_line":""},{"line_number":5336,"context_line":"        # No instance booting at source host, but instance dir"},{"line_number":5337,"context_line":"        # must be deleted for preparing next block migration"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_ad659745","line":5334,"updated":"2016-03-04 15:08:11.000000000","message":"I am not sure that is correct, I need to dig into that.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"5e664e0b8eecbfa3638cf7b64580903708372c01","unresolved":false,"context_lines":[{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"},{"line_number":5332,"context_line":"        elif isinstance(migrate_data, migrate_data_obj.XenapiLiveMigrateData):"},{"line_number":5333,"context_line":"            is_shared_block_storage \u003d not migrate_data.block_migration"},{"line_number":5334,"context_line":"            is_shared_instance_path \u003d not migrate_data.block_migration"},{"line_number":5335,"context_line":""},{"line_number":5336,"context_line":"        # No instance booting at source host, but instance dir"},{"line_number":5337,"context_line":"        # must be deleted for preparing next block migration"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_e685e059","line":5334,"in_reply_to":"7af24918_3b56c506","updated":"2016-03-05 02:21:42.000000000","message":"yeah, +1 for move all logic to virt layer.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"acc0b643325975b4b256b385ae836250a4e1e932","unresolved":false,"context_lines":[{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"},{"line_number":5332,"context_line":"        elif isinstance(migrate_data, migrate_data_obj.XenapiLiveMigrateData):"},{"line_number":5333,"context_line":"            is_shared_block_storage \u003d not migrate_data.block_migration"},{"line_number":5334,"context_line":"            is_shared_instance_path \u003d not migrate_data.block_migration"},{"line_number":5335,"context_line":""},{"line_number":5336,"context_line":"        # No instance booting at source host, but instance dir"},{"line_number":5337,"context_line":"        # must be deleted for preparing next block migration"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_ffb46682","line":5334,"in_reply_to":"7af24918_ad659745","updated":"2016-03-04 15:25:51.000000000","message":"OK, so this is confusing, but I think driver.rollback_live_migration_at_destination should always be called for XenAPI, really, and driver.cleanup is a NoOp, so it not a problem calling it.\n\nSo this should work out OK for the moment.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"423fe1f6e71e08c39050a57c1e153469502ad6a1","unresolved":false,"context_lines":[{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"},{"line_number":5332,"context_line":"        elif isinstance(migrate_data, migrate_data_obj.XenapiLiveMigrateData):"},{"line_number":5333,"context_line":"            is_shared_block_storage \u003d not migrate_data.block_migration"},{"line_number":5334,"context_line":"            is_shared_instance_path \u003d not migrate_data.block_migration"},{"line_number":5335,"context_line":""},{"line_number":5336,"context_line":"        # No instance booting at source host, but instance dir"},{"line_number":5337,"context_line":"        # must be deleted for preparing next block migration"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_ec549ecb","line":5334,"in_reply_to":"7af24918_e685e059","updated":"2016-03-05 14:14:14.000000000","message":"@Alex \u0026 Eli: There is a patch to move this to virt drivers, I didn\u0027t want to reimplement this there, but yes, I completely agree with you. If you want me to move it from there then I will...\n\nhttps://review.openstack.org/#/c/216329/\n\n@John: this actually does not change logic, so it should be ok. Also, it is the same logic that was in Liberty:\n\nhttps://github.com/openstack/nova/blob/stable/liberty/nova/compute/manager.py#L5169","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"746c5f31718e8219a750aea84475aef0b71d2768","unresolved":false,"context_lines":[{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"},{"line_number":5332,"context_line":"        elif isinstance(migrate_data, migrate_data_obj.XenapiLiveMigrateData):"},{"line_number":5333,"context_line":"            is_shared_block_storage \u003d not migrate_data.block_migration"},{"line_number":5334,"context_line":"            is_shared_instance_path \u003d not migrate_data.block_migration"},{"line_number":5335,"context_line":""},{"line_number":5336,"context_line":"        # No instance booting at source host, but instance dir"},{"line_number":5337,"context_line":"        # must be deleted for preparing next block migration"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_88234405","line":5334,"in_reply_to":"7af24918_ec549ecb","updated":"2016-03-07 16:06:39.000000000","message":"Yeah, this is good, agreed about the long term clean up, I got tdurakov to work on that for us based on some issues in another related patch.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e37a7208df8a2100b4c2ce360a70d600cb9b6467","unresolved":false,"context_lines":[{"line_number":5331,"context_line":"            is_shared_instance_path \u003d migrate_data.is_shared_instance_path"},{"line_number":5332,"context_line":"        elif isinstance(migrate_data, migrate_data_obj.XenapiLiveMigrateData):"},{"line_number":5333,"context_line":"            is_shared_block_storage \u003d not migrate_data.block_migration"},{"line_number":5334,"context_line":"            is_shared_instance_path \u003d not migrate_data.block_migration"},{"line_number":5335,"context_line":""},{"line_number":5336,"context_line":"        # No instance booting at source host, but instance dir"},{"line_number":5337,"context_line":"        # must be deleted for preparing next block migration"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_3b56c506","line":5334,"in_reply_to":"7af24918_ffb46682","updated":"2016-03-05 01:50:08.000000000","message":"Emm...this totally expose virt driver thing at compute manager layer, we may cleanup this in the future.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"84dc752411e6049344dad4f096db415cc5b69c54","unresolved":false,"context_lines":[{"line_number":5233,"context_line":"                    migrate_data)"},{"line_number":5234,"context_line":""},{"line_number":5235,"context_line":"        try:"},{"line_number":5236,"context_line":"            if (\u0027block_migration\u0027 in migrate_data and"},{"line_number":5237,"context_line":"                    migrate_data.block_migration):"},{"line_number":5238,"context_line":"                block_device_info \u003d self._get_instance_block_device_info("},{"line_number":5239,"context_line":"                    context, instance)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_047cc51d","line":5236,"range":{"start_line":5236,"start_character":16,"end_line":5236,"end_character":50},"updated":"2016-03-09 16:04:28.000000000","message":"Nice, I was using the old pattern (obj_attr_is_set) before but it seems that o.vo objects are now containers by default since a very short period of time.","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"84dc752411e6049344dad4f096db415cc5b69c54","unresolved":false,"context_lines":[{"line_number":5362,"context_line":"        :returns: (bool, bool) -- do_cleanup, destroy_disks"},{"line_number":5363,"context_line":"        \"\"\""},{"line_number":5364,"context_line":"        # NOTE(pkoniszewski): block migration specific params are set inside"},{"line_number":5365,"context_line":"        # migrate_data objects for drivers that support block live migrations"},{"line_number":5366,"context_line":"        # (i.e. Libvirt and Xenapi). For other drivers cleanup is not needed."},{"line_number":5367,"context_line":"        is_shared_block_storage \u003d True"},{"line_number":5368,"context_line":"        is_shared_instance_path \u003d True"},{"line_number":5369,"context_line":"        if isinstance(migrate_data, migrate_data_obj.LibvirtLiveMigrateData):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_58750e30","line":5366,"range":{"start_line":5365,"start_character":48,"end_line":5366,"end_character":35},"updated":"2016-03-09 16:04:28.000000000","message":"so, given the discussion with the Hyper-v folks, maybe mentioning rather \u0027for drivers that expose the block migration information in the migrate_data object\" but that\u0027s yakshaving","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"ee2ae8e2dca5d47586a6d8d1b1a21370125701a5","unresolved":false,"context_lines":[{"line_number":5362,"context_line":"        :returns: (bool, bool) -- do_cleanup, destroy_disks"},{"line_number":5363,"context_line":"        \"\"\""},{"line_number":5364,"context_line":"        # NOTE(pkoniszewski): block migration specific params are set inside"},{"line_number":5365,"context_line":"        # migrate_data objects for drivers that support block live migrations"},{"line_number":5366,"context_line":"        # (i.e. Libvirt and Xenapi). For other drivers cleanup is not needed."},{"line_number":5367,"context_line":"        is_shared_block_storage \u003d True"},{"line_number":5368,"context_line":"        is_shared_instance_path \u003d True"},{"line_number":5369,"context_line":"        if isinstance(migrate_data, migrate_data_obj.LibvirtLiveMigrateData):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_101fd108","line":5366,"range":{"start_line":5365,"start_character":48,"end_line":5366,"end_character":35},"in_reply_to":"5aef4532_58750e30","updated":"2016-03-09 18:49:22.000000000","message":"This is good point, I will change it","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"}],"nova/conductor/tasks/live_migrate.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"08bbdde1eb237bfc89e65ec601ffbd3fb9f8d11b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            self._check_requested_destination()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        # NOTE(pkoniszewski): Since we can calculate correct live migration"},{"line_number":67,"context_line":"        # type, at this point block_migration can be None, while"},{"line_number":68,"context_line":"        # migrate_data.block_migration is True. Because we use these two"},{"line_number":69,"context_line":"        # alternately, we need to be sure that both are equal."},{"line_number":70,"context_line":"        if self.migrate_data and \u0027block_migration\u0027 in self.migrate_data:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_b25d4f7b","line":67,"updated":"2016-03-03 09:35:09.000000000","message":"block_migration \u003d None means auto-detect block migrate, right?\n\nI think we need the driver code to understand that, rather than do this.","commit_id":"3f6f9fd66b1d4af306d1534e0c9b19349903010f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ff6157510cc36f56f9861e17770e8e06413852be","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        # type, at this point block_migration can be None, while"},{"line_number":68,"context_line":"        # migrate_data.block_migration is True. Because we use these two"},{"line_number":69,"context_line":"        # alternately, we need to be sure that both are equal."},{"line_number":70,"context_line":"        if self.migrate_data and \u0027block_migration\u0027 in self.migrate_data:"},{"line_number":71,"context_line":"            self.block_migration \u003d self.migrate_data.block_migration"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # TODO(johngarbutt) need to move complexity out of compute manager"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_b72381a6","line":70,"range":{"start_line":70,"start_character":11,"end_line":70,"end_character":28},"updated":"2016-03-03 09:04:22.000000000","message":"I didn\u0027t find out any chance self.migration_data can be None at here.","commit_id":"3f6f9fd66b1d4af306d1534e0c9b19349903010f"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"acc0b643325975b4b256b385ae836250a4e1e932","unresolved":false,"context_lines":[{"line_number":5546,"context_line":"                         \u0027destination_type\u0027: \u0027volume\u0027}))"},{"line_number":5547,"context_line":"        ]"},{"line_number":5548,"context_line":"        migrate_data \u003d migrate_data_obj.XenapiLiveMigrateData("},{"line_number":5549,"context_line":"            block_migration\u003dTrue)"},{"line_number":5550,"context_line":""},{"line_number":5551,"context_line":"        # creating mocks"},{"line_number":5552,"context_line":"        self.mox.StubOutWithMock(self.compute.driver,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_62455941","line":5549,"updated":"2016-03-04 15:25:51.000000000","message":"hmm, why did this change type? I guess thats OK given the other coverage we have now.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"423fe1f6e71e08c39050a57c1e153469502ad6a1","unresolved":false,"context_lines":[{"line_number":5546,"context_line":"                         \u0027destination_type\u0027: \u0027volume\u0027}))"},{"line_number":5547,"context_line":"        ]"},{"line_number":5548,"context_line":"        migrate_data \u003d migrate_data_obj.XenapiLiveMigrateData("},{"line_number":5549,"context_line":"            block_migration\u003dTrue)"},{"line_number":5550,"context_line":""},{"line_number":5551,"context_line":"        # creating mocks"},{"line_number":5552,"context_line":"        self.mox.StubOutWithMock(self.compute.driver,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_6c408e08","line":5549,"in_reply_to":"7af24918_62455941","updated":"2016-03-05 14:14:14.000000000","message":"This test really tests block live migration, so it needs an object that has block_migration property. LiveMigrateData doesn\u0027t have \u0027block_migration\u0027 property, so even if I set it to True it won\u0027t be visible in test","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"84dc752411e6049344dad4f096db415cc5b69c54","unresolved":false,"context_lines":[{"line_number":5545,"context_line":"                         \u0027source_type\u0027: \u0027volume\u0027,"},{"line_number":5546,"context_line":"                         \u0027destination_type\u0027: \u0027volume\u0027}))"},{"line_number":5547,"context_line":"        ]"},{"line_number":5548,"context_line":"        migrate_data \u003d migrate_data_obj.XenapiLiveMigrateData("},{"line_number":5549,"context_line":"            block_migration\u003dTrue)"},{"line_number":5550,"context_line":""},{"line_number":5551,"context_line":"        # creating mocks"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_381c82c0","line":5548,"range":{"start_line":5548,"start_character":40,"end_line":5548,"end_character":61},"updated":"2016-03-09 16:04:28.000000000","message":"using a specific object related to a driver is fine, but maybe you should either comment that or use a fixture that would create a test object (not virt-driver related) which would support the block_migration field)","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"ee2ae8e2dca5d47586a6d8d1b1a21370125701a5","unresolved":false,"context_lines":[{"line_number":5545,"context_line":"                         \u0027source_type\u0027: \u0027volume\u0027,"},{"line_number":5546,"context_line":"                         \u0027destination_type\u0027: \u0027volume\u0027}))"},{"line_number":5547,"context_line":"        ]"},{"line_number":5548,"context_line":"        migrate_data \u003d migrate_data_obj.XenapiLiveMigrateData("},{"line_number":5549,"context_line":"            block_migration\u003dTrue)"},{"line_number":5550,"context_line":""},{"line_number":5551,"context_line":"        # creating mocks"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_1094f140","line":5548,"range":{"start_line":5548,"start_character":40,"end_line":5548,"end_character":61},"in_reply_to":"5aef4532_381c82c0","updated":"2016-03-09 18:49:22.000000000","message":"We don\u0027t check type in compute manager so a fixture sounds like a good idea here","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"84dc752411e6049344dad4f096db415cc5b69c54","unresolved":false,"context_lines":[{"line_number":4733,"context_line":""},{"line_number":4734,"context_line":"    def test_live_migration_cleanup_flags_live_migrate(self):"},{"line_number":4735,"context_line":"        do_cleanup, destroy_disks \u003d self.compute._live_migration_cleanup_flags("},{"line_number":4736,"context_line":"            {})"},{"line_number":4737,"context_line":"        self.assertFalse(do_cleanup)"},{"line_number":4738,"context_line":"        self.assertFalse(destroy_disks)"},{"line_number":4739,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_f3f87dc5","line":4736,"range":{"start_line":4736,"start_character":12,"end_line":4736,"end_character":15},"updated":"2016-03-09 16:04:28.000000000","message":"well, I\u0027m not super happy that this test keeps a dict to be passed as a migrate_data object but okay... I can understand that","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"64f325b0a29d8ceafadaf8f2fd24e700f7aef3ca","unresolved":false,"context_lines":[{"line_number":4733,"context_line":""},{"line_number":4734,"context_line":"    def test_live_migration_cleanup_flags_live_migrate(self):"},{"line_number":4735,"context_line":"        do_cleanup, destroy_disks \u003d self.compute._live_migration_cleanup_flags("},{"line_number":4736,"context_line":"            {})"},{"line_number":4737,"context_line":"        self.assertFalse(do_cleanup)"},{"line_number":4738,"context_line":"        self.assertFalse(destroy_disks)"},{"line_number":4739,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_62a92290","line":4736,"range":{"start_line":4736,"start_character":12,"end_line":4736,"end_character":15},"in_reply_to":"5aef4532_b0b7fdd6","updated":"2016-03-09 20:50:48.000000000","message":"Yeah, my comment was mostly a nit. Don\u0027t overthink that much, we can fix that later.","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"ee2ae8e2dca5d47586a6d8d1b1a21370125701a5","unresolved":false,"context_lines":[{"line_number":4733,"context_line":""},{"line_number":4734,"context_line":"    def test_live_migration_cleanup_flags_live_migrate(self):"},{"line_number":4735,"context_line":"        do_cleanup, destroy_disks \u003d self.compute._live_migration_cleanup_flags("},{"line_number":4736,"context_line":"            {})"},{"line_number":4737,"context_line":"        self.assertFalse(do_cleanup)"},{"line_number":4738,"context_line":"        self.assertFalse(destroy_disks)"},{"line_number":4739,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_b0b7fdd6","line":4736,"range":{"start_line":4736,"start_character":12,"end_line":4736,"end_character":15},"in_reply_to":"5aef4532_f3f87dc5","updated":"2016-03-09 18:49:22.000000000","message":"This is old test which was not changed when migrate_data was objectifyed, I can change it to None there","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"}],"nova/tests/unit/conductor/tasks/test_live_migrate.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"08bbdde1eb237bfc89e65ec601ffbd3fb9f8d11b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                dest\u003dself.destination,"},{"line_number":72,"context_line":"                block_migration\u003dself.block_migration,"},{"line_number":73,"context_line":"                migration\u003dself.migration,"},{"line_number":74,"context_line":"                migrate_data\u003dNone).AndReturn(\"bob\")"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.mox.ReplayAll()"},{"line_number":77,"context_line":"        self.assertEqual(\"bob\", self.task.execute())"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_9265b31f","side":"PARENT","line":74,"updated":"2016-03-03 09:35:09.000000000","message":"why are we dropping this test? should we not be adding a new test, I am a bit confused.","commit_id":"040df06bfc45648c44066ecbefa215b6b76dad5a"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"84dc752411e6049344dad4f096db415cc5b69c54","unresolved":false,"context_lines":[{"line_number":8030,"context_line":"        dom \u003d fakelibvirt.Domain(drvr._get_connection(),"},{"line_number":8031,"context_line":"                                 \"\u003cdomain\u003e\u003cname\u003edemo\u003c/name\u003e\u003c/domain\u003e\", True)"},{"line_number":8032,"context_line":"        guest \u003d libvirt_guest.Guest(dom)"},{"line_number":8033,"context_line":"        migrate_data \u003d objects.LibvirtLiveMigrateData(block_migration\u003dTrue)"},{"line_number":8034,"context_line":"        disks_to_copy \u003d ([\u0027/some/path/one\u0027, \u0027/test/path/two\u0027],"},{"line_number":8035,"context_line":"                         [\u0027vda\u0027, \u0027vdb\u0027])"},{"line_number":8036,"context_line":"        mock_copy_disk_path.return_value \u003d disks_to_copy"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_d89d9e0b","line":8033,"range":{"start_line":8033,"start_character":31,"end_line":8033,"end_character":53},"updated":"2016-03-09 16:04:28.000000000","message":"same comment here than for test_compute, maybe a fixture or a test object could help you","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"64f325b0a29d8ceafadaf8f2fd24e700f7aef3ca","unresolved":false,"context_lines":[{"line_number":8030,"context_line":"        dom \u003d fakelibvirt.Domain(drvr._get_connection(),"},{"line_number":8031,"context_line":"                                 \"\u003cdomain\u003e\u003cname\u003edemo\u003c/name\u003e\u003c/domain\u003e\", True)"},{"line_number":8032,"context_line":"        guest \u003d libvirt_guest.Guest(dom)"},{"line_number":8033,"context_line":"        migrate_data \u003d objects.LibvirtLiveMigrateData(block_migration\u003dTrue)"},{"line_number":8034,"context_line":"        disks_to_copy \u003d ([\u0027/some/path/one\u0027, \u0027/test/path/two\u0027],"},{"line_number":8035,"context_line":"                         [\u0027vda\u0027, \u0027vdb\u0027])"},{"line_number":8036,"context_line":"        mock_copy_disk_path.return_value \u003d disks_to_copy"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_c29ab66d","line":8033,"range":{"start_line":8033,"start_character":31,"end_line":8033,"end_character":53},"in_reply_to":"5aef4532_b061bd3b","updated":"2016-03-09 20:50:48.000000000","message":"Heh, you\u0027re fully right. My bad.","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"ee2ae8e2dca5d47586a6d8d1b1a21370125701a5","unresolved":false,"context_lines":[{"line_number":8030,"context_line":"        dom \u003d fakelibvirt.Domain(drvr._get_connection(),"},{"line_number":8031,"context_line":"                                 \"\u003cdomain\u003e\u003cname\u003edemo\u003c/name\u003e\u003c/domain\u003e\", True)"},{"line_number":8032,"context_line":"        guest \u003d libvirt_guest.Guest(dom)"},{"line_number":8033,"context_line":"        migrate_data \u003d objects.LibvirtLiveMigrateData(block_migration\u003dTrue)"},{"line_number":8034,"context_line":"        disks_to_copy \u003d ([\u0027/some/path/one\u0027, \u0027/test/path/two\u0027],"},{"line_number":8035,"context_line":"                         [\u0027vda\u0027, \u0027vdb\u0027])"},{"line_number":8036,"context_line":"        mock_copy_disk_path.return_value \u003d disks_to_copy"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_b061bd3b","line":8033,"range":{"start_line":8033,"start_character":31,"end_line":8033,"end_character":53},"in_reply_to":"5aef4532_d89d9e0b","updated":"2016-03-09 18:49:22.000000000","message":"Here my understanding was that it actually tests Libvirt driver. If someone somehow removes \u0027block_migration\u0027 from object class we still will be secure, because this test will fail.","commit_id":"cef5b4419468e22b15bd483b95d883afb0835e53"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"e408d60a49bd9ec2573c756390cfcbdca3a52d42","unresolved":false,"context_lines":[{"line_number":6496,"context_line":""},{"line_number":6497,"context_line":"        disk_paths \u003d []"},{"line_number":6498,"context_line":"        device_names \u003d []"},{"line_number":6499,"context_line":"        if migrate_data.block_migration:"},{"line_number":6500,"context_line":"            disk_paths, device_names \u003d self._live_migration_copy_disk_paths("},{"line_number":6501,"context_line":"                context, instance, guest)"},{"line_number":6502,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_cd9743ea","line":6499,"updated":"2016-03-04 15:08:11.000000000","message":"this file seems like the big fix for the referenced bug.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"423fe1f6e71e08c39050a57c1e153469502ad6a1","unresolved":false,"context_lines":[{"line_number":6496,"context_line":""},{"line_number":6497,"context_line":"        disk_paths \u003d []"},{"line_number":6498,"context_line":"        device_names \u003d []"},{"line_number":6499,"context_line":"        if migrate_data.block_migration:"},{"line_number":6500,"context_line":"            disk_paths, device_names \u003d self._live_migration_copy_disk_paths("},{"line_number":6501,"context_line":"                context, instance, guest)"},{"line_number":6502,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_e79e7762","line":6499,"in_reply_to":"7af24918_cd9743ea","updated":"2016-03-05 14:14:14.000000000","message":"This alone does not fix the issue. We also need to get disk_info in compute manager for pre_live_migration phase which will prepare images and backing files before we fire off live migration, it is necessary step.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ba873f6f8c2596de5c393a4893ae1f4d60240981","unresolved":false,"context_lines":[{"line_number":6507,"context_line":""},{"line_number":6508,"context_line":"        opthread \u003d utils.spawn(self._live_migration_operation,"},{"line_number":6509,"context_line":"                                     context, instance, dest,"},{"line_number":6510,"context_line":"                                     block_migration,"},{"line_number":6511,"context_line":"                                     migrate_data, dom,"},{"line_number":6512,"context_line":"                                     device_names)"},{"line_number":6513,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_3e886ae7","line":6510,"updated":"2016-03-07 16:34:00.000000000","message":"Why aren\u0027t we passing migrate_data.block_migration here instead of the block_migration parameter?","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"85ad7edeae2f54e3f5dbdef6dd0296e5e62c53fd","unresolved":false,"context_lines":[{"line_number":6507,"context_line":""},{"line_number":6508,"context_line":"        opthread \u003d utils.spawn(self._live_migration_operation,"},{"line_number":6509,"context_line":"                                     context, instance, dest,"},{"line_number":6510,"context_line":"                                     block_migration,"},{"line_number":6511,"context_line":"                                     migrate_data, dom,"},{"line_number":6512,"context_line":"                                     device_names)"},{"line_number":6513,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_81c0157e","line":6510,"in_reply_to":"5aef4532_3e886ae7","updated":"2016-03-08 10:31:52.000000000","message":"+1 good spot.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"dfb6a815439859c749ca4cf884d810ea08f53fcc","unresolved":false,"context_lines":[{"line_number":6507,"context_line":""},{"line_number":6508,"context_line":"        opthread \u003d utils.spawn(self._live_migration_operation,"},{"line_number":6509,"context_line":"                                     context, instance, dest,"},{"line_number":6510,"context_line":"                                     block_migration,"},{"line_number":6511,"context_line":"                                     migrate_data, dom,"},{"line_number":6512,"context_line":"                                     device_names)"},{"line_number":6513,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_84278811","line":6510,"in_reply_to":"5aef4532_3e886ae7","updated":"2016-03-08 10:43:22.000000000","message":"Good catch, this is internal so i can remove this argument.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ba873f6f8c2596de5c393a4893ae1f4d60240981","unresolved":false,"context_lines":[{"line_number":6527,"context_line":"                      instance\u003dinstance)"},{"line_number":6528,"context_line":"            self._live_migration_monitor(context, instance, guest, dest,"},{"line_number":6529,"context_line":"                                         post_method, recover_method,"},{"line_number":6530,"context_line":"                                         block_migration, migrate_data,"},{"line_number":6531,"context_line":"                                         dom, finish_event, disk_paths)"},{"line_number":6532,"context_line":"        except Exception as ex:"},{"line_number":6533,"context_line":"            LOG.warn(_LW(\"Error monitoring migration: %(ex)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_9e6d3e35","line":6530,"updated":"2016-03-07 16:34:00.000000000","message":"Ditto.","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"85ad7edeae2f54e3f5dbdef6dd0296e5e62c53fd","unresolved":false,"context_lines":[{"line_number":6527,"context_line":"                      instance\u003dinstance)"},{"line_number":6528,"context_line":"            self._live_migration_monitor(context, instance, guest, dest,"},{"line_number":6529,"context_line":"                                         post_method, recover_method,"},{"line_number":6530,"context_line":"                                         block_migration, migrate_data,"},{"line_number":6531,"context_line":"                                         dom, finish_event, disk_paths)"},{"line_number":6532,"context_line":"        except Exception as ex:"},{"line_number":6533,"context_line":"            LOG.warn(_LW(\"Error monitoring migration: %(ex)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_41456d15","line":6530,"in_reply_to":"5aef4532_9e6d3e35","updated":"2016-03-08 10:31:52.000000000","message":"+1","commit_id":"da0dda4e0d114729ed301cb9dae98e78d696284b"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"0414f582941c35e4ca1e19a90dc9b15c4a87e61c","unresolved":false,"context_lines":[{"line_number":6229,"context_line":"                                dest, post_method,"},{"line_number":6230,"context_line":"                                recover_method, migrate_data,"},{"line_number":6231,"context_line":"                                dom, finish_event, disk_paths,"},{"line_number":6232,"context_line":"                                block_migration\u003dFalse):"},{"line_number":6233,"context_line":"        data_gb \u003d self._live_migration_data_gb(instance, disk_paths)"},{"line_number":6234,"context_line":"        downtime_steps \u003d list(self._migration_downtime_steps(data_gb))"},{"line_number":6235,"context_line":"        completion_timeout \u003d int("}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_6ce850e3","line":6232,"updated":"2016-03-08 15:54:15.000000000","message":"So I stopped at this point because I would need to modify _post_live_migration and _rollback_live_migration in compute manager and all other drivers. I will post a series of a follow-up patches to cleanup all drivers from \u0027block_migration\u0027 argument and deprecate it in rpcapi.","commit_id":"7d990613e20c9a7a34acfe578783bd30c4b04888"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"05ee51a7efc2ac64cf8f1bb0b8ccefcdb1034d85","unresolved":false,"context_lines":[{"line_number":5788,"context_line":"            raise exception.InvalidHostname(hostname\u003ddest)"},{"line_number":5789,"context_line":""},{"line_number":5790,"context_line":"        self._live_migration(context, instance, dest,"},{"line_number":5791,"context_line":"                             post_method, recover_method, block_migration,"},{"line_number":5792,"context_line":"                             migrate_data)"},{"line_number":5793,"context_line":""},{"line_number":5794,"context_line":"    def live_migration_abort(self, instance):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_ffc2c451","side":"PARENT","line":5791,"updated":"2016-03-10 13:56:13.000000000","message":"Ah, thats a good way to do it, stop the bad data going any further.\n\nI wonder if we need this on any of the other live-migrate top level calls.","commit_id":"f4dd117a81c68d9fb600dff456e1171841758b43"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"05ee51a7efc2ac64cf8f1bb0b8ccefcdb1034d85","unresolved":false,"context_lines":[{"line_number":6404,"context_line":"                # Migration is all done"},{"line_number":6405,"context_line":"                LOG.info(_LI(\"Migration operation has completed\"),"},{"line_number":6406,"context_line":"                         instance\u003dinstance)"},{"line_number":6407,"context_line":"                post_method(context, instance, dest, block_migration,"},{"line_number":6408,"context_line":"                            migrate_data)"},{"line_number":6409,"context_line":"                break"},{"line_number":6410,"context_line":"            elif info.type \u003d\u003d libvirt.VIR_DOMAIN_JOB_FAILED:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_df0f0835","line":6407,"updated":"2016-03-10 13:56:13.000000000","message":"hang on a sec, don\u0027t we break these call back. I think these should get the block_migration we passed in at the top, at least for now.\n\nI guess this is the opposite of what jay was saying. I think we probably want add FIXME comments so its clear why its needed.","commit_id":"7a42654deb70fab2813b470bdd236c6c3a0dc0ad"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"3278081f5be2256506cc990971341a3a2c714d19","unresolved":false,"context_lines":[{"line_number":6404,"context_line":"                # Migration is all done"},{"line_number":6405,"context_line":"                LOG.info(_LI(\"Migration operation has completed\"),"},{"line_number":6406,"context_line":"                         instance\u003dinstance)"},{"line_number":6407,"context_line":"                post_method(context, instance, dest, block_migration,"},{"line_number":6408,"context_line":"                            migrate_data)"},{"line_number":6409,"context_line":"                break"},{"line_number":6410,"context_line":"            elif info.type \u003d\u003d libvirt.VIR_DOMAIN_JOB_FAILED:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_8cb2734a","line":6407,"in_reply_to":"5aef4532_df0f0835","updated":"2016-03-10 15:43:06.000000000","message":"Reverted all changes related to removing block_migration. I will do block_migration cleanup as a followup in Newton.","commit_id":"7a42654deb70fab2813b470bdd236c6c3a0dc0ad"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"0414f582941c35e4ca1e19a90dc9b15c4a87e61c","unresolved":false,"context_lines":[{"line_number":2343,"context_line":"                migrate_data.kernel_file \u003d kernel"},{"line_number":2344,"context_line":"                migrate_data.ramdisk_file \u003d ramdisk"},{"line_number":2345,"context_line":""},{"line_number":2346,"context_line":"            if block_migration:"},{"line_number":2347,"context_line":"                if not migrate_data:"},{"line_number":2348,"context_line":"                    raise exception.InvalidParameterValue(\u0027Block Migration \u0027"},{"line_number":2349,"context_line":"                                    \u0027requires migrate data from destination\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_8c72fc47","side":"PARENT","line":2346,"updated":"2016-03-08 15:54:15.000000000","message":"This check does not make sense anymore, because migrate_data is always created during prechecks, even during upgrades and old-\u003enew live migrations.","commit_id":"4c18867424f09332cf5f7f5678e1f3a984b03618"}]}
