)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0e580a1c73782b4bbb267ab25ce45112822d5765","unresolved":false,"context_lines":[{"line_number":16,"context_line":"{neutron_vif_id: dest_network_ref} in migrate_data, then in"},{"line_number":17,"context_line":"source host, before live_migration, we will calculate the"},{"line_number":18,"context_line":"{src_vif_ref: dest_network_ref} and set it as parameters to"},{"line_number":19,"context_line":"xapi when calling VM.migrate_send"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-bug: 1658877"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a3905b3_02ef371e","line":19,"updated":"2017-01-24 11:33:48.000000000","message":"I believe this should better describe what has changed. talking to bob in IRC, we want to talk about this change:\n\n\u003cBobBall\u003e johnthetubaguy: The addition of the interim network to fix the neutron vlan tagging on vif/tap bug (and also to support neutron security groups) introduces a per-VIF network.  The per-VIF network doesn\u0027t exist (by name) on the destination and therefore XAPI can no longer make a good guess for what the vif mapping should be.\n\nIdeally we would reference the change that added all of that.","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ffc568543fbeefbc956c546ab099dbd52139a3c7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"{neutron_vif_id: dest_network_ref} in migrate_data, then in"},{"line_number":17,"context_line":"source host, before live_migration, we will calculate the"},{"line_number":18,"context_line":"{src_vif_ref: dest_network_ref} and set it as parameters to"},{"line_number":19,"context_line":"xapi when calling VM.migrate_send"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-bug: 1658877"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5a3905b3_3028f432","line":19,"in_reply_to":"5a3905b3_02ef371e","updated":"2017-01-24 14:12:24.000000000","message":"I see, will add the background here","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":16,"context_line":"this way, we must give vif_ref and network_ref mapping."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"(2) In nova, XenServer has introduced interim network for"},{"line_number":19,"context_line":"fixing ovs updating wrong port in neutorn, see bug 1268955"},{"line_number":20,"context_line":"and also interim network can assit support neutron security"},{"line_number":21,"context_line":"group (linux bridge) as we cannot make VIF connected to"},{"line_number":22,"context_line":"linux bridge directly via XAPI"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa31d9ce_05f4a558","line":19,"range":{"start_line":19,"start_character":34,"end_line":19,"end_character":41},"updated":"2017-02-15 19:44:49.000000000","message":"neutron","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":16,"context_line":"this way, we must give vif_ref and network_ref mapping."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"(2) In nova, XenServer has introduced interim network for"},{"line_number":19,"context_line":"fixing ovs updating wrong port in neutorn, see bug 1268955"},{"line_number":20,"context_line":"and also interim network can assit support neutron security"},{"line_number":21,"context_line":"group (linux bridge) as we cannot make VIF connected to"},{"line_number":22,"context_line":"linux bridge directly via XAPI"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa31d9ce_a08d7cd4","line":19,"range":{"start_line":19,"start_character":34,"end_line":19,"end_character":41},"in_reply_to":"fa31d9ce_05f4a558","updated":"2017-02-16 08:54:48.000000000","message":"Done","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"(2) In nova, XenServer has introduced interim network for"},{"line_number":19,"context_line":"fixing ovs updating wrong port in neutorn, see bug 1268955"},{"line_number":20,"context_line":"and also interim network can assit support neutron security"},{"line_number":21,"context_line":"group (linux bridge) as we cannot make VIF connected to"},{"line_number":22,"context_line":"linux bridge directly via XAPI"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa31d9ce_45ea1d75","line":20,"range":{"start_line":20,"start_character":29,"end_line":20,"end_character":34},"updated":"2017-02-15 19:44:49.000000000","message":"assist","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"(2) In nova, XenServer has introduced interim network for"},{"line_number":19,"context_line":"fixing ovs updating wrong port in neutorn, see bug 1268955"},{"line_number":20,"context_line":"and also interim network can assit support neutron security"},{"line_number":21,"context_line":"group (linux bridge) as we cannot make VIF connected to"},{"line_number":22,"context_line":"linux bridge directly via XAPI"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa31d9ce_c0bef063","line":20,"range":{"start_line":20,"start_character":29,"end_line":20,"end_character":34},"in_reply_to":"fa31d9ce_45ea1d75","updated":"2017-02-16 08:54:48.000000000","message":"Done","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":22,"context_line":"linux bridge directly via XAPI"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"This patch is to add {src_vif_ref: dest_network_ref}"},{"line_number":25,"context_line":"mapping information. To achive this, in pre_live_migration,"},{"line_number":26,"context_line":"we first create interim network in destination host and store"},{"line_number":27,"context_line":"{neutron_vif_id: dest_network_ref} in migrate_data, then in"},{"line_number":28,"context_line":"source host, before live_migration, we will calculate the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa31d9ce_e5beb163","line":25,"range":{"start_line":25,"start_character":24,"end_line":25,"end_character":30},"updated":"2017-02-15 19:44:49.000000000","message":"achieve","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":22,"context_line":"linux bridge directly via XAPI"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"This patch is to add {src_vif_ref: dest_network_ref}"},{"line_number":25,"context_line":"mapping information. To achive this, in pre_live_migration,"},{"line_number":26,"context_line":"we first create interim network in destination host and store"},{"line_number":27,"context_line":"{neutron_vif_id: dest_network_ref} in migrate_data, then in"},{"line_number":28,"context_line":"source host, before live_migration, we will calculate the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa31d9ce_e0c134e5","line":25,"range":{"start_line":25,"start_character":24,"end_line":25,"end_character":30},"in_reply_to":"fa31d9ce_e5beb163","updated":"2017-02-16 08:54:48.000000000","message":"Done","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":24,"context_line":"This patch is to add {src_vif_ref: dest_network_ref}"},{"line_number":25,"context_line":"mapping information. To achive this, in pre_live_migration,"},{"line_number":26,"context_line":"we first create interim network in destination host and store"},{"line_number":27,"context_line":"{neutron_vif_id: dest_network_ref} in migrate_data, then in"},{"line_number":28,"context_line":"source host, before live_migration, we will calculate the"},{"line_number":29,"context_line":"{src_vif_ref: dest_network_ref} and set it as parameters to"},{"line_number":30,"context_line":"xapi when calling VM.migrate_send"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Closes-bug: 1658877"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa31d9ce_05502531","line":30,"range":{"start_line":27,"start_character":52,"end_line":30,"end_character":33},"updated":"2017-02-15 19:44:49.000000000","message":"Along with handling the case where the destination host is running older code that doesn\u0027t have this new src_vif_ref mapping, like live migrating from an Ocata compute node to a Newton compute node.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":24,"context_line":"This patch is to add {src_vif_ref: dest_network_ref}"},{"line_number":25,"context_line":"mapping information. To achive this, in pre_live_migration,"},{"line_number":26,"context_line":"we first create interim network in destination host and store"},{"line_number":27,"context_line":"{neutron_vif_id: dest_network_ref} in migrate_data, then in"},{"line_number":28,"context_line":"source host, before live_migration, we will calculate the"},{"line_number":29,"context_line":"{src_vif_ref: dest_network_ref} and set it as parameters to"},{"line_number":30,"context_line":"xapi when calling VM.migrate_send"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Closes-bug: 1658877"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa31d9ce_c0335012","line":30,"range":{"start_line":27,"start_character":52,"end_line":30,"end_character":33},"in_reply_to":"fa31d9ce_05502531","updated":"2017-02-16 08:54:48.000000000","message":"Yes, I see, the code also handled that, I need to change this commit message","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"}],"nova/objects/migrate_data.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0e580a1c73782b4bbb267ab25ce45112822d5765","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \u0027supported_perf_events\u0027: fields.ListOfStringsField(),"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":135,"context_line":"        super(LibvirtLiveMigrateData, self).obj_make_compatible("},{"line_number":136,"context_line":"            primitive, target_version)"},{"line_number":137,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_a24ae352","line":134,"updated":"2017-01-24 11:33:48.000000000","message":"See note below.","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ffc568543fbeefbc956c546ab099dbd52139a3c7","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \u0027supported_perf_events\u0027: fields.ListOfStringsField(),"},{"line_number":132,"context_line":"    }"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":135,"context_line":"        super(LibvirtLiveMigrateData, self).obj_make_compatible("},{"line_number":136,"context_line":"            primitive, target_version)"},{"line_number":137,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_eda053f6","line":134,"in_reply_to":"5a3905b3_a24ae352","updated":"2017-01-24 14:12:24.000000000","message":"I see","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"664a789a21259ae16d03a6f571746a62a92c175c","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        \u0027sr_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":231,"context_line":"        \u0027kernel_file\u0027: fields.StringField(),"},{"line_number":232,"context_line":"        \u0027ramdisk_file\u0027: fields.StringField(),"},{"line_number":233,"context_line":"        \u0027vif_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":234,"context_line":"    }"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def to_legacy_dict(self, pre_migration_result\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_82d967f5","line":233,"updated":"2017-01-24 14:29:52.000000000","message":"Is this really needed?\nI wonder if we just create the correctly-named network on the destination then XAPI will detect it for us?\nThat would be a *much* simpler change overall","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0f4c2deed05d583c0894a7e81a4d797c7840abbd","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        \u0027sr_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":231,"context_line":"        \u0027kernel_file\u0027: fields.StringField(),"},{"line_number":232,"context_line":"        \u0027ramdisk_file\u0027: fields.StringField(),"},{"line_number":233,"context_line":"        \u0027vif_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":234,"context_line":"    }"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def to_legacy_dict(self, pre_migration_result\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_16113004","line":233,"in_reply_to":"5a3905b3_82d967f5","updated":"2017-01-24 14:58:08.000000000","message":"I see, if creating correctly-name network on destination can work, then there is no need to change this file, will have a test without this first","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0e580a1c73782b4bbb267ab25ce45112822d5765","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        \u0027ramdisk_file\u0027: fields.StringField(),"},{"line_number":233,"context_line":"        \u0027vif_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":234,"context_line":"    }"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def to_legacy_dict(self, pre_migration_result\u003dFalse):"},{"line_number":237,"context_line":"        legacy \u003d super(XenapiLiveMigrateData, self).to_legacy_dict()"},{"line_number":238,"context_line":"        if self.obj_attr_is_set(\u0027block_migration\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_2256f305","line":235,"updated":"2017-01-24 11:33:48.000000000","message":"I think you should implement (and test) the method:\n\n    def obj_make_compatible","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ffc568543fbeefbc956c546ab099dbd52139a3c7","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        \u0027ramdisk_file\u0027: fields.StringField(),"},{"line_number":233,"context_line":"        \u0027vif_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":234,"context_line":"    }"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def to_legacy_dict(self, pre_migration_result\u003dFalse):"},{"line_number":237,"context_line":"        legacy \u003d super(XenapiLiveMigrateData, self).to_legacy_dict()"},{"line_number":238,"context_line":"        if self.obj_attr_is_set(\u0027block_migration\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_8de6ef41","line":235,"in_reply_to":"5a3905b3_2256f305","updated":"2017-01-24 14:12:24.000000000","message":"yes, will add this.","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6d4d49ae97b0d47047552ae019e95923e17ff243","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            self.sr_uuid_map \u003d \\"},{"line_number":268,"context_line":"                legacy[\u0027pre_live_migration_result\u0027][\u0027sr_uuid_map\u0027]"},{"line_number":269,"context_line":"            self.vif_uuid_map \u003d \\"},{"line_number":270,"context_line":"                legacy[\u0027pre_live_migration_result\u0027][\u0027vif_uuid_map\u0027]"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":273,"context_line":"        super(XenapiLiveMigrateData, self).obj_make_compatible("}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_85c3038a","line":270,"range":{"start_line":270,"start_character":53,"end_line":270,"end_character":65},"updated":"2017-02-01 22:32:27.000000000","message":"Do we need to check if this is in legacy[\u0027pre_live_migration_result\u0027]?","commit_id":"48d44557ada74862ea790ea8adeac4086f634c65"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"625cae64bfa8b180c470dbc4716cec28e51d8268","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            self.sr_uuid_map \u003d \\"},{"line_number":268,"context_line":"                legacy[\u0027pre_live_migration_result\u0027][\u0027sr_uuid_map\u0027]"},{"line_number":269,"context_line":"            self.vif_uuid_map \u003d \\"},{"line_number":270,"context_line":"                legacy[\u0027pre_live_migration_result\u0027][\u0027vif_uuid_map\u0027]"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":273,"context_line":"        super(XenapiLiveMigrateData, self).obj_make_compatible("}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_33850a07","line":270,"range":{"start_line":270,"start_character":53,"end_line":270,"end_character":65},"in_reply_to":"3a461143_381a506f","updated":"2017-02-02 21:17:43.000000000","message":"Yes you should be able to live migrate from ocata to newton and vice-versa.","commit_id":"48d44557ada74862ea790ea8adeac4086f634c65"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"6712ca6fe7fbb91ce6838e61f2ef46ccee04356c","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            self.sr_uuid_map \u003d \\"},{"line_number":268,"context_line":"                legacy[\u0027pre_live_migration_result\u0027][\u0027sr_uuid_map\u0027]"},{"line_number":269,"context_line":"            self.vif_uuid_map \u003d \\"},{"line_number":270,"context_line":"                legacy[\u0027pre_live_migration_result\u0027][\u0027vif_uuid_map\u0027]"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":273,"context_line":"        super(XenapiLiveMigrateData, self).obj_make_compatible("}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_381a506f","line":270,"range":{"start_line":270,"start_character":53,"end_line":270,"end_character":65},"in_reply_to":"3a461143_85c3038a","updated":"2017-02-02 18:14:52.000000000","message":"Can easily be changed to .get(\u0027vif_uuid_map\u0027, {}) - but what\u0027s the policy for doing live migrations between computes running different versions of Nova?  Is that expected to be supported?","commit_id":"48d44557ada74862ea790ea8adeac4086f634c65"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        \u0027sr_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":233,"context_line":"        \u0027kernel_file\u0027: fields.StringField(),"},{"line_number":234,"context_line":"        \u0027ramdisk_file\u0027: fields.StringField(),"},{"line_number":235,"context_line":"        \u0027vif_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":236,"context_line":"    }"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def to_legacy_dict(self, pre_migration_result\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_a5575924","line":235,"range":{"start_line":235,"start_character":31,"end_line":235,"end_character":49},"updated":"2017-02-15 19:44:49.000000000","message":"Should this be nullable\u003dTrue? sr_uuid_map isn\u0027t so maybe it doesn\u0027t matter.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        \u0027sr_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":233,"context_line":"        \u0027kernel_file\u0027: fields.StringField(),"},{"line_number":234,"context_line":"        \u0027ramdisk_file\u0027: fields.StringField(),"},{"line_number":235,"context_line":"        \u0027vif_uuid_map\u0027: fields.DictOfStringsField(),"},{"line_number":236,"context_line":"    }"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def to_legacy_dict(self, pre_migration_result\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_0dae75e7","line":235,"range":{"start_line":235,"start_character":31,"end_line":235,"end_character":49},"in_reply_to":"fa31d9ce_a5575924","updated":"2017-02-16 08:54:48.000000000","message":"Since XenServer 7.0, we must set vif and network mapping during live migration, so I suggest we don\u0027t set nullable\u003dTrue","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                legacy[\u0027migrate_data\u0027][\u0027destination_sr_ref\u0027]"},{"line_number":268,"context_line":"        if \u0027pre_live_migration_result\u0027 in legacy:"},{"line_number":269,"context_line":"            self.sr_uuid_map \u003d \\"},{"line_number":270,"context_line":"                legacy[\u0027pre_live_migration_result\u0027][\u0027sr_uuid_map\u0027]"},{"line_number":271,"context_line":"            self.vif_uuid_map \u003d \\"},{"line_number":272,"context_line":"                legacy[\u0027pre_live_migration_result\u0027].get(\u0027vif_uuid_map\u0027, {})"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_482234a4","line":270,"range":{"start_line":270,"start_character":51,"end_line":270,"end_character":66},"updated":"2017-02-15 19:44:49.000000000","message":"This isn\u0027t using get() so it assumes that sr_uuid_map is always set, seems we could make the same assumption for vif_uuid_map, but I\u0027m not sure. I suppose it doesn\u0027t hurt to be safe and use get() with a default value.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"}],"nova/tests/unit/virt/xenapi/test_vmops.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5028ab23f0236dde060bece40bffeeae07c381ea","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self._session \u003d xenapi_session.XenAPISession(\u0027test_url\u0027, \u0027root\u0027,"},{"line_number":59,"context_line":"                                                     \u0027test_pass\u0027)"},{"line_number":60,"context_line":"        self.vmops \u003d vmops.VMOps(self._session, fake.FakeVirtAPI())"},{"line_number":61,"context_line":"        self.vmops.vif_driver \u003d mock.Mock"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def create_vm(self, name, state\u003d\"Running\"):"},{"line_number":64,"context_line":"        vm_ref \u003d xenapi_fake.create_vm(name, state)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_5fbd1267","line":61,"range":{"start_line":61,"start_character":32,"end_line":61,"end_character":41},"updated":"2017-02-06 18:10:18.000000000","message":"Shouldn\u0027t this be mock.Mock() or mock.MagicMock()?","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5f2d4f0c9f32f3470fe07fc9ac4489ab1e116c68","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self._session \u003d xenapi_session.XenAPISession(\u0027test_url\u0027, \u0027root\u0027,"},{"line_number":59,"context_line":"                                                     \u0027test_pass\u0027)"},{"line_number":60,"context_line":"        self.vmops \u003d vmops.VMOps(self._session, fake.FakeVirtAPI())"},{"line_number":61,"context_line":"        self.vmops.vif_driver \u003d mock.Mock"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def create_vm(self, name, state\u003d\"Running\"):"},{"line_number":64,"context_line":"        vm_ref \u003d xenapi_fake.create_vm(name, state)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_fa3decbb","line":61,"range":{"start_line":61,"start_character":32,"end_line":61,"end_character":41},"in_reply_to":"1a430d35_5fbd1267","updated":"2017-02-06 18:12:56.000000000","message":"hmm, good spot, it should be.","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0940990867ba1f549c066daf8467e8739ad8bf3f","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self._session \u003d xenapi_session.XenAPISession(\u0027test_url\u0027, \u0027root\u0027,"},{"line_number":59,"context_line":"                                                     \u0027test_pass\u0027)"},{"line_number":60,"context_line":"        self.vmops \u003d vmops.VMOps(self._session, fake.FakeVirtAPI())"},{"line_number":61,"context_line":"        self.vmops.vif_driver \u003d mock.Mock"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def create_vm(self, name, state\u003d\"Running\"):"},{"line_number":64,"context_line":"        vm_ref \u003d xenapi_fake.create_vm(name, state)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_36edc325","line":61,"range":{"start_line":61,"start_character":32,"end_line":61,"end_character":41},"in_reply_to":"1a430d35_5fbd1267","updated":"2017-02-07 01:54:04.000000000","message":"yes, sorry I missed (), will fix it","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0940990867ba1f549c066daf8467e8739ad8bf3f","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self._session \u003d xenapi_session.XenAPISession(\u0027test_url\u0027, \u0027root\u0027,"},{"line_number":59,"context_line":"                                                     \u0027test_pass\u0027)"},{"line_number":60,"context_line":"        self.vmops \u003d vmops.VMOps(self._session, fake.FakeVirtAPI())"},{"line_number":61,"context_line":"        self.vmops.vif_driver \u003d mock.Mock"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def create_vm(self, name, state\u003d\"Running\"):"},{"line_number":64,"context_line":"        vm_ref \u003d xenapi_fake.create_vm(name, state)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_56f40ff1","line":61,"range":{"start_line":61,"start_character":32,"end_line":61,"end_character":41},"in_reply_to":"1a430d35_fa3decbb","updated":"2017-02-07 01:54:04.000000000","message":"yes, it\u0027s my fault","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5028ab23f0236dde060bece40bffeeae07c381ea","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"                migrate_data)"},{"line_number":1620,"context_line":""},{"line_number":1621,"context_line":"    def test_generate_vif_network_map(self):"},{"line_number":1622,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1623,"context_line":"        with mock.patch.object(self._session.VIF,"},{"line_number":1624,"context_line":"                               \u0027get_other_config\u0027) as mock_other_config, \\"},{"line_number":1625,"context_line":"             mock.patch.object(self._session.VM,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_5f643221","line":1622,"updated":"2017-02-06 18:10:18.000000000","message":"...Like this","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5f2d4f0c9f32f3470fe07fc9ac4489ab1e116c68","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"                migrate_data)"},{"line_number":1620,"context_line":""},{"line_number":1621,"context_line":"    def test_generate_vif_network_map(self):"},{"line_number":1622,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1623,"context_line":"        with mock.patch.object(self._session.VIF,"},{"line_number":1624,"context_line":"                               \u0027get_other_config\u0027) as mock_other_config, \\"},{"line_number":1625,"context_line":"             mock.patch.object(self._session.VM,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_9a6f88c4","line":1622,"in_reply_to":"1a430d35_5f643221","updated":"2017-02-06 18:12:56.000000000","message":"Yeah.","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0940990867ba1f549c066daf8467e8739ad8bf3f","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"                migrate_data)"},{"line_number":1620,"context_line":""},{"line_number":1621,"context_line":"    def test_generate_vif_network_map(self):"},{"line_number":1622,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1623,"context_line":"        with mock.patch.object(self._session.VIF,"},{"line_number":1624,"context_line":"                               \u0027get_other_config\u0027) as mock_other_config, \\"},{"line_number":1625,"context_line":"             mock.patch.object(self._session.VM,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_96de776b","line":1622,"in_reply_to":"1a430d35_5f643221","updated":"2017-02-07 01:54:04.000000000","message":"yeah","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0940990867ba1f549c066daf8467e8739ad8bf3f","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"                migrate_data)"},{"line_number":1620,"context_line":""},{"line_number":1621,"context_line":"    def test_generate_vif_network_map(self):"},{"line_number":1622,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1623,"context_line":"        with mock.patch.object(self._session.VIF,"},{"line_number":1624,"context_line":"                               \u0027get_other_config\u0027) as mock_other_config, \\"},{"line_number":1625,"context_line":"             mock.patch.object(self._session.VM,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_f6e33b31","line":1622,"in_reply_to":"1a430d35_9a6f88c4","updated":"2017-02-07 01:54:04.000000000","message":":)","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a3dda749ad995e4f1851daa358e634c2154a473b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self._session \u003d xenapi_session.XenAPISession(\u0027test_url\u0027, \u0027root\u0027,"},{"line_number":59,"context_line":"                                                     \u0027test_pass\u0027)"},{"line_number":60,"context_line":"        self.vmops \u003d vmops.VMOps(self._session, fake.FakeVirtAPI())"},{"line_number":61,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def create_vm(self, name, state\u003d\"Running\"):"},{"line_number":64,"context_line":"        vm_ref \u003d xenapi_fake.create_vm(name, state)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_d4a98025","line":61,"updated":"2017-02-08 17:34:57.000000000","message":"Thinking about this, I really don\u0027t like just mocking out the vif driver here.\n\nSurely this only affects the tests relating to live-migration anyways? At a minimum just add it in those? Or are their loads of them?","commit_id":"ee47ca638796a4e144a5be6342e5b7ed9354749e"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0ef14adc45cac6cb2d0f8b892f89a4fcb084296f","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self._session \u003d xenapi_session.XenAPISession(\u0027test_url\u0027, \u0027root\u0027,"},{"line_number":59,"context_line":"                                                     \u0027test_pass\u0027)"},{"line_number":60,"context_line":"        self.vmops \u003d vmops.VMOps(self._session, fake.FakeVirtAPI())"},{"line_number":61,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def create_vm(self, name, state\u003d\"Running\"):"},{"line_number":64,"context_line":"        vm_ref \u003d xenapi_fake.create_vm(name, state)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_4c7b377b","line":61,"in_reply_to":"1a430d35_d4a98025","updated":"2017-02-09 01:40:35.000000000","message":"Got your concern, I will modify this","commit_id":"ee47ca638796a4e144a5be6342e5b7ed9354749e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a3dda749ad995e4f1851daa358e634c2154a473b","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"                migrate_data)"},{"line_number":1620,"context_line":""},{"line_number":1621,"context_line":"    def test_generate_vif_network_map(self):"},{"line_number":1622,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1623,"context_line":"        with mock.patch.object(self._session.VIF,"},{"line_number":1624,"context_line":"                               \u0027get_other_config\u0027) as mock_other_config, \\"},{"line_number":1625,"context_line":"             mock.patch.object(self._session.VM,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_5f568906","line":1622,"updated":"2017-02-08 17:34:57.000000000","message":"why is this needed here?","commit_id":"ee47ca638796a4e144a5be6342e5b7ed9354749e"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0ef14adc45cac6cb2d0f8b892f89a4fcb084296f","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"                migrate_data)"},{"line_number":1620,"context_line":""},{"line_number":1621,"context_line":"    def test_generate_vif_network_map(self):"},{"line_number":1622,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1623,"context_line":"        with mock.patch.object(self._session.VIF,"},{"line_number":1624,"context_line":"                               \u0027get_other_config\u0027) as mock_other_config, \\"},{"line_number":1625,"context_line":"             mock.patch.object(self._session.VM,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_cce64743","line":1622,"in_reply_to":"1a430d35_5f568906","updated":"2017-02-09 01:40:35.000000000","message":"There is no need for mock.Mock() as there is a mock in the base class as you commented, maybe I add this first during unit test, but later add the mock in Line:61, will check these together and modify them","commit_id":"ee47ca638796a4e144a5be6342e5b7ed9354749e"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"3b23a7bd4c477c20f95dce85f897c67595d137be","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"                migrate_data)"},{"line_number":1620,"context_line":""},{"line_number":1621,"context_line":"    def test_generate_vif_network_map(self):"},{"line_number":1622,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1623,"context_line":"        with mock.patch.object(self._session.VIF,"},{"line_number":1624,"context_line":"                               \u0027get_other_config\u0027) as mock_other_config, \\"},{"line_number":1625,"context_line":"             mock.patch.object(self._session.VM,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_0c63ef42","line":1622,"in_reply_to":"1a430d35_cce64743","updated":"2017-02-09 01:58:50.000000000","message":"The function generate_vif_network_map() didn\u0027t use vif_driver anymore, so it shouldn\u0027t be here, it\u0027s my carelessness","commit_id":"ee47ca638796a4e144a5be6342e5b7ed9354749e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a3dda749ad995e4f1851daa358e634c2154a473b","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"            self.assertEqual(vif_map, expected)"},{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"    def test_delete_networks_and_bridges(self):"},{"line_number":1639,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1640,"context_line":"        network_info \u003d [\u0027fake_vif\u0027]"},{"line_number":1641,"context_line":"        self.vmops._delete_networks_and_bridges(\u0027fake_instance\u0027, network_info)"},{"line_number":1642,"context_line":"        self.vmops.vif_driver.delete_network_and_bridge.\\"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_dff0b9cb","line":1639,"updated":"2017-02-08 17:34:57.000000000","message":"Nit: I would prefer a mock patch decorator for the delete_network_and_bridge method, as its more clearly safe. This happens to be OK because vmops is a fresh instance for each test run. At least I think it is.","commit_id":"ee47ca638796a4e144a5be6342e5b7ed9354749e"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b2d7d4f539b9a78af2f061da56b4e04cdfda7dd1","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"            self.assertEqual(vif_map, expected)"},{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"    def test_delete_networks_and_bridges(self):"},{"line_number":1639,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1640,"context_line":"        network_info \u003d [\u0027fake_vif\u0027]"},{"line_number":1641,"context_line":"        self.vmops._delete_networks_and_bridges(\u0027fake_instance\u0027, network_info)"},{"line_number":1642,"context_line":"        self.vmops.vif_driver.delete_network_and_bridge.\\"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_c0c28b52","line":1639,"in_reply_to":"1a430d35_8c4eff38","updated":"2017-02-09 02:22:47.000000000","message":"For delete_networks_and_bridges(), I found in RollbackLiveMigrateDestinationTestCase, I have mocked it, but this function is also called by post_live_migration_at_source(), so I add another testcase in LiveMigrateTestCase.\nAnd there is a duplicated test_delete_networks_and_bridges() Line:1696, I will delete one","commit_id":"ee47ca638796a4e144a5be6342e5b7ed9354749e"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0ef14adc45cac6cb2d0f8b892f89a4fcb084296f","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"            self.assertEqual(vif_map, expected)"},{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"    def test_delete_networks_and_bridges(self):"},{"line_number":1639,"context_line":"        self.vmops.vif_driver \u003d mock.Mock()"},{"line_number":1640,"context_line":"        network_info \u003d [\u0027fake_vif\u0027]"},{"line_number":1641,"context_line":"        self.vmops._delete_networks_and_bridges(\u0027fake_instance\u0027, network_info)"},{"line_number":1642,"context_line":"        self.vmops.vif_driver.delete_network_and_bridge.\\"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_8c4eff38","line":1639,"in_reply_to":"1a430d35_dff0b9cb","updated":"2017-02-09 01:40:35.000000000","message":"I see, will check current unit tests and add the mock for it","commit_id":"ee47ca638796a4e144a5be6342e5b7ed9354749e"}],"nova/tests/unit/virt/xenapi/test_xenapi.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"28a3dec31b0e567d4943c66a4dd3ad79eae932f2","unresolved":false,"context_lines":[{"line_number":3468,"context_line":"                       fake_get_vm_opaque_ref)"},{"line_number":3469,"context_line":"        self.stubs.Set(vm_utils, \"lookup_kernel_ramdisk\","},{"line_number":3470,"context_line":"                       fake_lookup_kernel_ramdisk)"},{"line_number":3471,"context_line":"        self.stubs.Set(conn._vmops, \"_generate_vif_network_map\","},{"line_number":3472,"context_line":"                       fake_generate_vif_map)"},{"line_number":3473,"context_line":""},{"line_number":3474,"context_line":"    def test_check_can_live_migrate_source_with_block_migrate(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_9ef0e6ca","line":3471,"range":{"start_line":3471,"start_character":8,"end_line":3471,"end_character":22},"updated":"2017-02-15 19:58:52.000000000","message":"Can you please use self.stub_out or mock instead of self.stubs which uses mox?","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":3468,"context_line":"                       fake_get_vm_opaque_ref)"},{"line_number":3469,"context_line":"        self.stubs.Set(vm_utils, \"lookup_kernel_ramdisk\","},{"line_number":3470,"context_line":"                       fake_lookup_kernel_ramdisk)"},{"line_number":3471,"context_line":"        self.stubs.Set(conn._vmops, \"_generate_vif_network_map\","},{"line_number":3472,"context_line":"                       fake_generate_vif_map)"},{"line_number":3473,"context_line":""},{"line_number":3474,"context_line":"    def test_check_can_live_migrate_source_with_block_migrate(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_7b3339f6","line":3471,"range":{"start_line":3471,"start_character":8,"end_line":3471,"end_character":22},"in_reply_to":"fa31d9ce_9ef0e6ca","updated":"2017-02-16 08:54:48.000000000","message":"I see, this testcase use stubs.Set, so I use the same way to make it the same style in a single testcase, but I can change it","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"}],"nova/virt/xenapi/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0e580a1c73782b4bbb267ab25ce45112822d5765","unresolved":false,"context_lines":[{"line_number":541,"context_line":"        # NOTE(sulo): The only cleanup we do explicitly is to forget"},{"line_number":542,"context_line":"        # any volume that was attached to the destination during"},{"line_number":543,"context_line":"        # live migration. XAPI should take care of all other cleanup."},{"line_number":544,"context_line":"        self._vmops.rollback_live_migration_at_destination(instance,"},{"line_number":545,"context_line":"                                                           block_device_info,"},{"line_number":546,"context_line":"                                                           network_info)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"},{"line_number":549,"context_line":"                           network_info, disk_info, migrate_data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_c24fef31","line":546,"range":{"start_line":544,"start_character":59,"end_line":546,"end_character":71},"updated":"2017-01-24 11:33:48.000000000","message":"Nit: it would be good for the param order to match the driver method.","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ffc568543fbeefbc956c546ab099dbd52139a3c7","unresolved":false,"context_lines":[{"line_number":541,"context_line":"        # NOTE(sulo): The only cleanup we do explicitly is to forget"},{"line_number":542,"context_line":"        # any volume that was attached to the destination during"},{"line_number":543,"context_line":"        # live migration. XAPI should take care of all other cleanup."},{"line_number":544,"context_line":"        self._vmops.rollback_live_migration_at_destination(instance,"},{"line_number":545,"context_line":"                                                           block_device_info,"},{"line_number":546,"context_line":"                                                           network_info)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"},{"line_number":549,"context_line":"                           network_info, disk_info, migrate_data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_2d5a5bf2","line":546,"range":{"start_line":544,"start_character":59,"end_line":546,"end_character":71},"in_reply_to":"5a3905b3_c24fef31","updated":"2017-01-24 14:12:24.000000000","message":"got it, will change the param order","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        # NOTE(johngarbutt) Destroying the VM is not appropriate here"},{"line_number":539,"context_line":"        # and in the cases where it might make sense,"},{"line_number":540,"context_line":"        # XenServer has already done it."},{"line_number":541,"context_line":"        # NOTE(sulo): The only cleanup we do explicitly is to forget"},{"line_number":542,"context_line":"        # any volume that was attached to the destination during"},{"line_number":543,"context_line":"        # live migration. XAPI should take care of all other cleanup."},{"line_number":544,"context_line":"        self._vmops.rollback_live_migration_at_destination(instance,"},{"line_number":545,"context_line":"                                                           network_info,"},{"line_number":546,"context_line":"                                                           block_device_info)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_08183cd2","line":543,"range":{"start_line":541,"start_character":22,"end_line":543,"end_character":25},"updated":"2017-02-15 19:44:49.000000000","message":"Doesn\u0027t this also include network cleanup now too?","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        # NOTE(johngarbutt) Destroying the VM is not appropriate here"},{"line_number":539,"context_line":"        # and in the cases where it might make sense,"},{"line_number":540,"context_line":"        # XenServer has already done it."},{"line_number":541,"context_line":"        # NOTE(sulo): The only cleanup we do explicitly is to forget"},{"line_number":542,"context_line":"        # any volume that was attached to the destination during"},{"line_number":543,"context_line":"        # live migration. XAPI should take care of all other cleanup."},{"line_number":544,"context_line":"        self._vmops.rollback_live_migration_at_destination(instance,"},{"line_number":545,"context_line":"                                                           network_info,"},{"line_number":546,"context_line":"                                                           block_device_info)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_9b5c6d1a","line":543,"range":{"start_line":541,"start_character":22,"end_line":543,"end_character":25},"in_reply_to":"fa31d9ce_08183cd2","updated":"2017-02-16 08:54:48.000000000","message":"Yes, it does include network cleanup since I add this part in this patch, will change the comment message","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"03e4e45c49801addfac1a16a71da5bed0ff3e35f","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        # any volume that was attached to the destination during"},{"line_number":543,"context_line":"        # live migration. XAPI should take care of all other cleanup."},{"line_number":544,"context_line":"        self._vmops.rollback_live_migration_at_destination(instance,"},{"line_number":545,"context_line":"                                                           network_info,"},{"line_number":546,"context_line":"                                                           block_device_info)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_9e19c624","line":545,"updated":"2017-02-15 19:56:29.000000000","message":"You have no test for asserting this is passed in.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        # any volume that was attached to the destination during"},{"line_number":543,"context_line":"        # live migration. XAPI should take care of all other cleanup."},{"line_number":544,"context_line":"        self._vmops.rollback_live_migration_at_destination(instance,"},{"line_number":545,"context_line":"                                                           network_info,"},{"line_number":546,"context_line":"                                                           block_device_info)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_9b99cd7b","line":545,"in_reply_to":"fa31d9ce_9e19c624","updated":"2017-02-16 08:54:48.000000000","message":"I see, will add one","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        \"\"\""},{"line_number":569,"context_line":"        self._vmops.post_live_migration(context, instance, migrate_data)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def post_live_migration_at_source(self, context, instance, network_info):"},{"line_number":572,"context_line":"        \"\"\"Unplug VIFs from networks at source."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_8887ccb3","line":571,"range":{"start_line":571,"start_character":8,"end_line":571,"end_character":37},"updated":"2017-02-15 19:44:49.000000000","message":"(to myself) I just love how we have post_live_migration and post_live_migration_at_source, which are both for doing things post-live-migration at the source host, but are different methods...","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9d57edc99fdfcd82f0dc3e92c173a58b97b547c2","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        \"\"\""},{"line_number":569,"context_line":"        self._vmops.post_live_migration(context, instance, migrate_data)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def post_live_migration_at_source(self, context, instance, network_info):"},{"line_number":572,"context_line":"        \"\"\"Unplug VIFs from networks at source."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_1bd5c4b8","line":571,"range":{"start_line":571,"start_character":8,"end_line":571,"end_character":37},"in_reply_to":"fa31d9ce_3b98e177","updated":"2017-02-16 13:41:58.000000000","message":"Yeah I know, I was just basically complaining in general about how this is really confusing in Nova. post_live_migration_at_source was added at some point just for the libvirt driver, the compute manager handles NotImplementedError from the other drivers.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        \"\"\""},{"line_number":569,"context_line":"        self._vmops.post_live_migration(context, instance, migrate_data)"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def post_live_migration_at_source(self, context, instance, network_info):"},{"line_number":572,"context_line":"        \"\"\"Unplug VIFs from networks at source."},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        :param context: security context"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_3b98e177","line":571,"range":{"start_line":571,"start_character":8,"end_line":571,"end_character":37},"in_reply_to":"fa31d9ce_8887ccb3","updated":"2017-02-16 08:54:48.000000000","message":"I saw, from the base driver, we can see it defined two different method https://github.com/openstack/nova/blob/master/nova/virt/driver.py#L870 and post_live_migration() doesn\u0027t have network_info, so we can only use this method to delete networks at source node","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"634623c11e81d6af1eb014ed2142f1ef098dbc5a","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        # NOTE(johngarbutt) Destroying the VM is not appropriate here"},{"line_number":539,"context_line":"        # and in the cases where it might make sense,"},{"line_number":540,"context_line":"        # XenServer has already done it."},{"line_number":541,"context_line":"        # NOTE(sulo): The only cleanup we do explicitly is to forget"},{"line_number":542,"context_line":"        # any volume that was attached to the destination during"},{"line_number":543,"context_line":"        # live migration. XAPI should take care of all other cleanup."},{"line_number":544,"context_line":"        self._vmops.rollback_live_migration_at_destination(instance,"},{"line_number":545,"context_line":"                                                           network_info,"},{"line_number":546,"context_line":"                                                           block_device_info)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_16459916","line":543,"range":{"start_line":541,"start_character":22,"end_line":543,"end_character":25},"updated":"2017-02-16 13:52:06.000000000","message":"And the interim network...","commit_id":"749f6e6ec74190cab8e3ca48c61e14e11a89b8bc"}],"nova/virt/xenapi/vif.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0e580a1c73782b4bbb267ab25ce45112822d5765","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        pass"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def get_vif_interim_net_name(self, vif_id):"},{"line_number":128,"context_line":"        return (\"net-\" + vif_id)[:network_model.NIC_NAME_LEN]"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class XenAPIBridgeDriver(XenVIFDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_82708773","line":128,"updated":"2017-01-24 11:33:48.000000000","message":"Surely you don\u0027t need that here, because there is no vif_interim network?","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ffc568543fbeefbc956c546ab099dbd52139a3c7","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        pass"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def get_vif_interim_net_name(self, vif_id):"},{"line_number":128,"context_line":"        return (\"net-\" + vif_id)[:network_model.NIC_NAME_LEN]"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class XenAPIBridgeDriver(XenVIFDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_30439414","line":128,"in_reply_to":"5a3905b3_82708773","updated":"2017-01-24 14:12:24.000000000","message":"This needn\u0027t here, my fault, I meant to use this functions in vmops.py, so move this function to base class, but changed the implementation and forgot to move it back, will change this","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"6b720ff900ec9758c897a2b49227af22efd7daf0","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        pass"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def get_vif_interim_net_name(self, vif_id):"},{"line_number":128,"context_line":"        return (\"net-\" + vif_id)[:network_model.NIC_NAME_LEN]"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class XenAPIBridgeDriver(XenVIFDriver):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_e6d92085","line":128,"in_reply_to":"5a3905b3_82708773","updated":"2017-01-25 10:43:23.000000000","message":"we need this in vmops.py, so make this function in base Class","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"1a9063da11f39ba0843641546b60228bf130933f","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        net_name \u003d self.get_vif_interim_net_name(vif[\u0027id\u0027])"},{"line_number":302,"context_line":"        network \u003d network_utils.find_network_with_name_label("},{"line_number":303,"context_line":"            self._session, net_name)"},{"line_number":304,"context_line":"        if network is None:"},{"line_number":305,"context_line":"            LOG.debug(\"Didn\u0027t find network by name %s\", net_name,"},{"line_number":306,"context_line":"                      instance\u003dinstance)"},{"line_number":307,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a3905b3_9ac3508a","line":304,"updated":"2017-01-25 17:05:09.000000000","message":"If a new patch is needed, we should check that we don\u0027t have any VIFs on this network.\n\nIn other words I think that the unplug method above should just call super().unplug() then call delete_network_and_bridge with the code from 286-297 also moved to delete_network_and_bridge","commit_id":"86a37edee53819940d92c54524879988980e6a88"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        self.delete_network_and_bridge(instance, vif)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def delete_network_and_bridge(self, instance, vif):"},{"line_number":301,"context_line":"        net_name \u003d self.get_vif_interim_net_name(vif[\u0027id\u0027])"},{"line_number":302,"context_line":"        network \u003d network_utils.find_network_with_name_label("},{"line_number":303,"context_line":"            self._session, net_name)"},{"line_number":304,"context_line":"        if network is None:"},{"line_number":305,"context_line":"            LOG.debug(\"Didn\u0027t find network by name %s\", net_name,"},{"line_number":306,"context_line":"                      instance\u003dinstance)"},{"line_number":307,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_bb713c0e","line":304,"range":{"start_line":301,"start_character":8,"end_line":304,"end_character":27},"updated":"2017-02-15 19:44:49.000000000","message":"This is all redundant with L286-L289 above, but this is a utility function so it\u0027s called from different places where we haven\u0027t already checked that, so this is OK.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        self.delete_network_and_bridge(instance, vif)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def delete_network_and_bridge(self, instance, vif):"},{"line_number":301,"context_line":"        net_name \u003d self.get_vif_interim_net_name(vif[\u0027id\u0027])"},{"line_number":302,"context_line":"        network \u003d network_utils.find_network_with_name_label("},{"line_number":303,"context_line":"            self._session, net_name)"},{"line_number":304,"context_line":"        if network is None:"},{"line_number":305,"context_line":"            LOG.debug(\"Didn\u0027t find network by name %s\", net_name,"},{"line_number":306,"context_line":"                      instance\u003dinstance)"},{"line_number":307,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_18b31899","line":304,"range":{"start_line":301,"start_character":8,"end_line":304,"end_character":27},"in_reply_to":"fa31d9ce_bb713c0e","updated":"2017-02-16 08:54:48.000000000","message":"yeah","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":20382,"name":"YuYang","email":"yuyangwang1985@gmail.com","username":"YuYangWang"},"change_message_id":"0a61771516ffbd6edd7bddba9f8854c5ab7af040","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        network \u003d network_utils.find_network_with_name_label("},{"line_number":303,"context_line":"            self._session, net_name)"},{"line_number":304,"context_line":"        if network is None:"},{"line_number":305,"context_line":"            LOG.debug(\"Didn\u0027t find network by name %s\", net_name,"},{"line_number":306,"context_line":"                      instance\u003dinstance)"},{"line_number":307,"context_line":"            return"},{"line_number":308,"context_line":"        LOG.debug(\u0027destroying patch port pair for vif: vif_id\u003d%(vif_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_5ac17a53","line":305,"range":{"start_line":305,"start_character":16,"end_line":305,"end_character":21},"updated":"2017-02-14 02:07:04.000000000","message":"change to warn or error my be suitable!","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"f2c5dcbb2f3862e9c9ddaa57446157c2ba1cd4d7","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        network \u003d network_utils.find_network_with_name_label("},{"line_number":303,"context_line":"            self._session, net_name)"},{"line_number":304,"context_line":"        if network is None:"},{"line_number":305,"context_line":"            LOG.debug(\"Didn\u0027t find network by name %s\", net_name,"},{"line_number":306,"context_line":"                      instance\u003dinstance)"},{"line_number":307,"context_line":"            return"},{"line_number":308,"context_line":"        LOG.debug(\u0027destroying patch port pair for vif: vif_id\u003d%(vif_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_861e375d","line":305,"range":{"start_line":305,"start_character":16,"end_line":305,"end_character":21},"in_reply_to":"fa31d9ce_5ac17a53","updated":"2017-02-14 04:17:11.000000000","message":"Should not be error, our purpose is to delete these bridges, if they are not exist anymore, I think it\u0027s OK, why make warn or error log to worry people?","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1afc538b499d93a4d9525639a014aa52b639b167","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        network \u003d network_utils.find_network_with_name_label("},{"line_number":303,"context_line":"            self._session, net_name)"},{"line_number":304,"context_line":"        if network is None:"},{"line_number":305,"context_line":"            LOG.debug(\"Didn\u0027t find network by name %s\", net_name,"},{"line_number":306,"context_line":"                      instance\u003dinstance)"},{"line_number":307,"context_line":"            return"},{"line_number":308,"context_line":"        LOG.debug(\u0027destroying patch port pair for vif: vif_id\u003d%(vif_id)s\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_05a94890","line":305,"range":{"start_line":305,"start_character":16,"end_line":305,"end_character":21},"in_reply_to":"fa31d9ce_861e375d","updated":"2017-02-14 14:19:20.000000000","message":"+1 Huan.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"634623c11e81d6af1eb014ed2142f1ef098dbc5a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"class XenAPIBridgeDriver(XenVIFDriver):"},{"line_number":135,"context_line":"    \"\"\"VIF Driver for XenAPI that uses XenAPI to create Networks.\"\"\""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    # NOTE(huanxie): This driver uses linux bridge as backend for XenServer,"},{"line_number":138,"context_line":"    # it only supports nova network, for using neutron, you should use"},{"line_number":139,"context_line":"    # XenAPIOpenVswitchDriver"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def plug(self, instance, vif, vm_ref\u003dNone, device\u003dNone):"},{"line_number":142,"context_line":"        if not vm_ref:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_f6c805ab","line":139,"range":{"start_line":137,"start_character":4,"end_line":139,"end_character":29},"updated":"2017-02-16 13:52:06.000000000","message":"In Pike we need to change the default vif_driver to the OVS driver.","commit_id":"749f6e6ec74190cab8e3ca48c61e14e11a89b8bc"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0e580a1c73782b4bbb267ab25ce45112822d5765","unresolved":false,"context_lines":[{"line_number":2355,"context_line":"                    self._generate_vdi_map("},{"line_number":2356,"context_line":"                        sr_uuid_map[sr_uuid], vm_ref, sr_ref))"},{"line_number":2357,"context_line":"        vif_map \u003d {}"},{"line_number":2358,"context_line":"        if command_name \u003d\u003d \u0027VM.migrate_send\u0027and \\"},{"line_number":2359,"context_line":"           \u0027vif_uuid_map\u0027 in migrate_data:"},{"line_number":2360,"context_line":"            vif_uuid_map \u003d migrate_data.vif_uuid_map"},{"line_number":2361,"context_line":"            if vif_uuid_map:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_82f7a7d1","line":2358,"range":{"start_line":2358,"start_character":8,"end_line":2358,"end_character":49},"updated":"2017-01-24 11:33:48.000000000","message":"Why can\u0027t this be handled just like the SR? Is the network not created early enough? Or does the XenAPI for the check command not take the network details?","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"664a789a21259ae16d03a6f571746a62a92c175c","unresolved":false,"context_lines":[{"line_number":2355,"context_line":"                    self._generate_vdi_map("},{"line_number":2356,"context_line":"                        sr_uuid_map[sr_uuid], vm_ref, sr_ref))"},{"line_number":2357,"context_line":"        vif_map \u003d {}"},{"line_number":2358,"context_line":"        if command_name \u003d\u003d \u0027VM.migrate_send\u0027and \\"},{"line_number":2359,"context_line":"           \u0027vif_uuid_map\u0027 in migrate_data:"},{"line_number":2360,"context_line":"            vif_uuid_map \u003d migrate_data.vif_uuid_map"},{"line_number":2361,"context_line":"            if vif_uuid_map:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_7b8fbd74","line":2358,"updated":"2017-01-24 14:29:52.000000000","message":"Why just for migrate_send?  Can we still pass the info for other calls, or not?","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0f4c2deed05d583c0894a7e81a4d797c7840abbd","unresolved":false,"context_lines":[{"line_number":2355,"context_line":"                    self._generate_vdi_map("},{"line_number":2356,"context_line":"                        sr_uuid_map[sr_uuid], vm_ref, sr_ref))"},{"line_number":2357,"context_line":"        vif_map \u003d {}"},{"line_number":2358,"context_line":"        if command_name \u003d\u003d \u0027VM.migrate_send\u0027and \\"},{"line_number":2359,"context_line":"           \u0027vif_uuid_map\u0027 in migrate_data:"},{"line_number":2360,"context_line":"            vif_uuid_map \u003d migrate_data.vif_uuid_map"},{"line_number":2361,"context_line":"            if vif_uuid_map:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_21cc24ba","line":2358,"in_reply_to":"5a3905b3_7b8fbd74","updated":"2017-01-24 14:58:08.000000000","message":"should be able to do that, will change it, just it mainly for VM.migrate_send, but this really looks ugly, will change in next patch","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0f4c2deed05d583c0894a7e81a4d797c7840abbd","unresolved":false,"context_lines":[{"line_number":2355,"context_line":"                    self._generate_vdi_map("},{"line_number":2356,"context_line":"                        sr_uuid_map[sr_uuid], vm_ref, sr_ref))"},{"line_number":2357,"context_line":"        vif_map \u003d {}"},{"line_number":2358,"context_line":"        if command_name \u003d\u003d \u0027VM.migrate_send\u0027and \\"},{"line_number":2359,"context_line":"           \u0027vif_uuid_map\u0027 in migrate_data:"},{"line_number":2360,"context_line":"            vif_uuid_map \u003d migrate_data.vif_uuid_map"},{"line_number":2361,"context_line":"            if vif_uuid_map:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_016d68cb","line":2358,"range":{"start_line":2358,"start_character":8,"end_line":2358,"end_character":49},"in_reply_to":"5a3905b3_82f7a7d1","updated":"2017-01-24 14:58:08.000000000","message":"it should be able to be handled like the SR, will change this in next patch","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"664a789a21259ae16d03a6f571746a62a92c175c","unresolved":false,"context_lines":[{"line_number":2366,"context_line":"                                  vdi_map, vif_map, options)"},{"line_number":2367,"context_line":""},{"line_number":2368,"context_line":"    def _generate_vif_network_map(self, vif_uuid_map):"},{"line_number":2369,"context_line":"        # This mapping is {source_vif_ref: destination_network_ref}"},{"line_number":2370,"context_line":"        vif_map \u003d {}"},{"line_number":2371,"context_line":"        for item in vif_uuid_map.items():"},{"line_number":2372,"context_line":"            net_name \u003d self.vif_driver.get_vif_interim_net_name(item[0])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_9b5c691a","line":2369,"updated":"2017-01-24 14:29:52.000000000","message":"\"This mapping is\" is a strange way of describing the documentation.  Perhaps the documentation should say \"Generates a mapping dictionary of vif_ref: dest_network_ref\"","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0f4c2deed05d583c0894a7e81a4d797c7840abbd","unresolved":false,"context_lines":[{"line_number":2366,"context_line":"                                  vdi_map, vif_map, options)"},{"line_number":2367,"context_line":""},{"line_number":2368,"context_line":"    def _generate_vif_network_map(self, vif_uuid_map):"},{"line_number":2369,"context_line":"        # This mapping is {source_vif_ref: destination_network_ref}"},{"line_number":2370,"context_line":"        vif_map \u003d {}"},{"line_number":2371,"context_line":"        for item in vif_uuid_map.items():"},{"line_number":2372,"context_line":"            net_name \u003d self.vif_driver.get_vif_interim_net_name(item[0])"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_e104dc15","line":2369,"in_reply_to":"5a3905b3_9b5c691a","updated":"2017-01-24 14:58:08.000000000","message":"yeah, I will change this description","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"664a789a21259ae16d03a6f571746a62a92c175c","unresolved":false,"context_lines":[{"line_number":2368,"context_line":"    def _generate_vif_network_map(self, vif_uuid_map):"},{"line_number":2369,"context_line":"        # This mapping is {source_vif_ref: destination_network_ref}"},{"line_number":2370,"context_line":"        vif_map \u003d {}"},{"line_number":2371,"context_line":"        for item in vif_uuid_map.items():"},{"line_number":2372,"context_line":"            net_name \u003d self.vif_driver.get_vif_interim_net_name(item[0])"},{"line_number":2373,"context_line":"            net_refs \u003d self._session.network.get_by_name_label(net_name)"},{"line_number":2374,"context_line":"            if not net_refs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_1011385d","line":2371,"updated":"2017-01-24 14:29:52.000000000","message":"item isn\u0027t descriptive - perhaps network_refs?","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0f4c2deed05d583c0894a7e81a4d797c7840abbd","unresolved":false,"context_lines":[{"line_number":2368,"context_line":"    def _generate_vif_network_map(self, vif_uuid_map):"},{"line_number":2369,"context_line":"        # This mapping is {source_vif_ref: destination_network_ref}"},{"line_number":2370,"context_line":"        vif_map \u003d {}"},{"line_number":2371,"context_line":"        for item in vif_uuid_map.items():"},{"line_number":2372,"context_line":"            net_name \u003d self.vif_driver.get_vif_interim_net_name(item[0])"},{"line_number":2373,"context_line":"            net_refs \u003d self._session.network.get_by_name_label(net_name)"},{"line_number":2374,"context_line":"            if not net_refs:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_9629a09d","line":2371,"in_reply_to":"5a3905b3_1011385d","updated":"2017-01-24 14:58:08.000000000","message":"item has two part, item[0] is neutron_vif_uuid, item[1] is dest_network_ref, I will change the name more descriptive","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"664a789a21259ae16d03a6f571746a62a92c175c","unresolved":false,"context_lines":[{"line_number":2376,"context_line":"            vif_refs \u003d self._session.network.get_VIFs(net_refs[0])"},{"line_number":2377,"context_line":"            if not vif_refs:"},{"line_number":2378,"context_line":"                continue"},{"line_number":2379,"context_line":"            vif_map.update({vif_refs[0]: item[1]})"},{"line_number":2380,"context_line":"            LOG.debug(\"source vif and dest network mapping: %s\", vif_map)"},{"line_number":2381,"context_line":"        return vif_map"},{"line_number":2382,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_303d54dd","line":2379,"updated":"2017-01-24 14:29:52.000000000","message":"What if there are multiple vif_refs?\nShould probably do:\nfor vif_ref in vif_refs:\n    vif_map[vif_ref] \u003d item[1]","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0f4c2deed05d583c0894a7e81a4d797c7840abbd","unresolved":false,"context_lines":[{"line_number":2376,"context_line":"            vif_refs \u003d self._session.network.get_VIFs(net_refs[0])"},{"line_number":2377,"context_line":"            if not vif_refs:"},{"line_number":2378,"context_line":"                continue"},{"line_number":2379,"context_line":"            vif_map.update({vif_refs[0]: item[1]})"},{"line_number":2380,"context_line":"            LOG.debug(\"source vif and dest network mapping: %s\", vif_map)"},{"line_number":2381,"context_line":"        return vif_map"},{"line_number":2382,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_968d20d5","line":2379,"in_reply_to":"5a3905b3_303d54dd","updated":"2017-01-24 14:58:08.000000000","message":"In theory, there shouldn\u0027t be multiple vif_refs as interim network is created with neutron_vif_uuid, so its network_name is unique and thus net_ref should be unique. But you are right, in case there are multiple vif_refs, we should deal with it. But if there are multiple vif_refs, I thinks we cannot set multiple times of mapping, because from neutron side, one neutron port(VIF) corresponding to one destination network_ref","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0e580a1c73782b4bbb267ab25ce45112822d5765","unresolved":false,"context_lines":[{"line_number":2380,"context_line":"            LOG.debug(\"source vif and dest network mapping: %s\", vif_map)"},{"line_number":2381,"context_line":"        return vif_map"},{"line_number":2382,"context_line":""},{"line_number":2383,"context_line":"    def create_interim_network(self, network_info):"},{"line_number":2384,"context_line":"        # Creating an interim bridge in destination host before live_migration"},{"line_number":2385,"context_line":"        vif_map \u003d {}"},{"line_number":2386,"context_line":"        for vif in network_info:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_220b537e","line":2383,"updated":"2017-01-24 11:33:48.000000000","message":"Is this not needed for the other VM move operations like migrate and resize? Seems surprising its not here already. I guess they might all explicitly do a VIF.plug() so its delt with already?","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"664a789a21259ae16d03a6f571746a62a92c175c","unresolved":false,"context_lines":[{"line_number":2380,"context_line":"            LOG.debug(\"source vif and dest network mapping: %s\", vif_map)"},{"line_number":2381,"context_line":"        return vif_map"},{"line_number":2382,"context_line":""},{"line_number":2383,"context_line":"    def create_interim_network(self, network_info):"},{"line_number":2384,"context_line":"        # Creating an interim bridge in destination host before live_migration"},{"line_number":2385,"context_line":"        vif_map \u003d {}"},{"line_number":2386,"context_line":"        for vif in network_info:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_9be1c92c","line":2383,"updated":"2017-01-24 14:29:52.000000000","message":"Plural: create_interim_networks","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ffc568543fbeefbc956c546ab099dbd52139a3c7","unresolved":false,"context_lines":[{"line_number":2380,"context_line":"            LOG.debug(\"source vif and dest network mapping: %s\", vif_map)"},{"line_number":2381,"context_line":"        return vif_map"},{"line_number":2382,"context_line":""},{"line_number":2383,"context_line":"    def create_interim_network(self, network_info):"},{"line_number":2384,"context_line":"        # Creating an interim bridge in destination host before live_migration"},{"line_number":2385,"context_line":"        vif_map \u003d {}"},{"line_number":2386,"context_line":"        for vif in network_info:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_4d8c07da","line":2383,"in_reply_to":"5a3905b3_220b537e","updated":"2017-01-24 14:12:24.000000000","message":"yes, VIF.plug() will call create_interim_network() see https://github.com/openstack/nova/blob/master/nova/virt/xenapi/vif.py#L249\nFor this part, I want to make sure interim network is created in destination host before live migration starting, I will double check this, if VIF.plug() is called before VM live migrating to destination host, then I won\u0027t do this, I can just get the interim_network_ref in dest","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"477caff9e1e0c74d27ee2c97ffc176017d3e1255","unresolved":false,"context_lines":[{"line_number":2380,"context_line":"            LOG.debug(\"source vif and dest network mapping: %s\", vif_map)"},{"line_number":2381,"context_line":"        return vif_map"},{"line_number":2382,"context_line":""},{"line_number":2383,"context_line":"    def create_interim_network(self, network_info):"},{"line_number":2384,"context_line":"        # Creating an interim bridge in destination host before live_migration"},{"line_number":2385,"context_line":"        vif_map \u003d {}"},{"line_number":2386,"context_line":"        for vif in network_info:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_c41c2d6d","line":2383,"in_reply_to":"5a3905b3_9be1c92c","updated":"2017-01-25 10:29:43.000000000","message":"yes, changed:)","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"c7a0fc55b634e717c4f1cae006f36532116b5c8f","unresolved":false,"context_lines":[{"line_number":2385,"context_line":"        vif_map \u003d {}"},{"line_number":2386,"context_line":"        for vif in network_info:"},{"line_number":2387,"context_line":"            network_ref \u003d self.vif_driver.create_vif_interim_network(vif)"},{"line_number":2388,"context_line":"            vif_map.update({vif[\u0027id\u0027]: network_ref})"},{"line_number":2389,"context_line":"        return vif_map"},{"line_number":2390,"context_line":""},{"line_number":2391,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_9c8a9f62","line":2388,"updated":"2017-01-24 15:12:39.000000000","message":"vif[\u0027id\u0027] is an internal OpenStack VIF UUID - but actually we need this to be the XenServer VIF UUID.\n\nIn the current code: live_migration data has vif_uuid_map\u003d{b53c653a-c41a-4fcf-be22-d6d809af4e14\u003d\u0027OpaqueRef:9ae1fda2-3ce6-300f-c805-3652e6ff1f95\u0027} but the b53 UUID is the internal OpenStack UUID rather than the XenServer VIF uuid:\n\n[root@zannah ~]# xe vif-list vm-name-label\u003dinstance-00000015  params\u003duuid,other-config\nuuid ( RO)            : a8633d8d-7182-d826-5230-182837e58d7f\n    other-config (MRW): nicira-iface-id: b53c653a-c41a-4fcf-be22-d6d809af4e14","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"fce47619a2bea940d9167f1df3cf890aa1fe5d72","unresolved":false,"context_lines":[{"line_number":2385,"context_line":"        vif_map \u003d {}"},{"line_number":2386,"context_line":"        for vif in network_info:"},{"line_number":2387,"context_line":"            network_ref \u003d self.vif_driver.create_vif_interim_network(vif)"},{"line_number":2388,"context_line":"            vif_map.update({vif[\u0027id\u0027]: network_ref})"},{"line_number":2389,"context_line":"        return vif_map"},{"line_number":2390,"context_line":""},{"line_number":2391,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_908a8362","line":2388,"in_reply_to":"5a3905b3_9c8a9f62","updated":"2017-01-24 15:30:49.000000000","message":"No, in the final map, I xenserver_vif_ref: xenserver_network_ref https://review.openstack.org/#/c/424428/2/nova/virt/xenapi/vmops.py L:2368 vif_uuid_map is the neutro_vif_uuid: dest_network_ref, as we create the interim-bridge in pre_live_migrate() in dest host\n\nSee log:\n\nVM.migrate_send: vif_map: {\u0027OpaqueRef:a38364d4-de01-449a-f1a8-6fc66d197714\u0027: u\u0027OpaqueRef:e1ecf5b7-224a-87ec-33fb-6c31d155f4a6\u0027} from (pid\u003d30837) _call_live_migrate_command /opt/stack/nova/nova/virt/xenapi/vmops.py:2372","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"664a789a21259ae16d03a6f571746a62a92c175c","unresolved":false,"context_lines":[{"line_number":2393,"context_line":"        migrate_data.sr_uuid_map \u003d self.connect_block_device_volumes("},{"line_number":2394,"context_line":"                block_device_info)"},{"line_number":2395,"context_line":"        migrate_data.vif_uuid_map \u003d self.create_interim_network(network_info)"},{"line_number":2396,"context_line":"        LOG.debug(\"pre_live_migration, {src_vif: dest_network}: %(vif_map)s, \""},{"line_number":2397,"context_line":"                  \"{src_sr_uuid: dest_sr_ref}: %(sr_map)s\","},{"line_number":2398,"context_line":"                  {\u0027vif_map\u0027: migrate_data.vif_uuid_map,"},{"line_number":2399,"context_line":"                   \u0027sr_map\u0027: migrate_data.sr_uuid_map})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_7b197d21","line":2396,"updated":"2017-01-24 14:29:52.000000000","message":"I don\u0027t see the value of including the dictionary formats in here; if we\u0027re looking at debug output they the expectation is the user is also looking at the code.","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0f4c2deed05d583c0894a7e81a4d797c7840abbd","unresolved":false,"context_lines":[{"line_number":2393,"context_line":"        migrate_data.sr_uuid_map \u003d self.connect_block_device_volumes("},{"line_number":2394,"context_line":"                block_device_info)"},{"line_number":2395,"context_line":"        migrate_data.vif_uuid_map \u003d self.create_interim_network(network_info)"},{"line_number":2396,"context_line":"        LOG.debug(\"pre_live_migration, {src_vif: dest_network}: %(vif_map)s, \""},{"line_number":2397,"context_line":"                  \"{src_sr_uuid: dest_sr_ref}: %(sr_map)s\","},{"line_number":2398,"context_line":"                  {\u0027vif_map\u0027: migrate_data.vif_uuid_map,"},{"line_number":2399,"context_line":"                   \u0027sr_map\u0027: migrate_data.sr_uuid_map})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_36a62cae","line":2396,"in_reply_to":"5a3905b3_7b197d21","updated":"2017-01-24 14:58:08.000000000","message":"I see, I will remove the dict formats","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"664a789a21259ae16d03a6f571746a62a92c175c","unresolved":false,"context_lines":[{"line_number":2488,"context_line":"        vm_ref \u003d self._get_vm_opaque_ref(instance)"},{"line_number":2489,"context_line":"        for vif in network_info:"},{"line_number":2490,"context_line":"            try:"},{"line_number":2491,"context_line":"                self.vif_driver.unplug(instance, vif, vm_ref)"},{"line_number":2492,"context_line":"            except Exception:"},{"line_number":2493,"context_line":"                LOG.exception("},{"line_number":2494,"context_line":"                    _LW(\u0027Failed to delete VIF %s in destination host\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_5be5a106","line":2491,"updated":"2017-01-24 14:29:52.000000000","message":"Do we actually have a VIF?  Don\u0027t we just have the network?","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0e580a1c73782b4bbb267ab25ce45112822d5765","unresolved":false,"context_lines":[{"line_number":2488,"context_line":"        vm_ref \u003d self._get_vm_opaque_ref(instance)"},{"line_number":2489,"context_line":"        for vif in network_info:"},{"line_number":2490,"context_line":"            try:"},{"line_number":2491,"context_line":"                self.vif_driver.unplug(instance, vif, vm_ref)"},{"line_number":2492,"context_line":"            except Exception:"},{"line_number":2493,"context_line":"                LOG.exception("},{"line_number":2494,"context_line":"                    _LW(\u0027Failed to delete VIF %s in destination host\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_42005f66","line":2491,"updated":"2017-01-24 11:33:48.000000000","message":"Do we need to tidy this up on the source host as well? While it wouldn\u0027t break things, maybe we are leaving those networks behind?","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"ffc568543fbeefbc956c546ab099dbd52139a3c7","unresolved":false,"context_lines":[{"line_number":2488,"context_line":"        vm_ref \u003d self._get_vm_opaque_ref(instance)"},{"line_number":2489,"context_line":"        for vif in network_info:"},{"line_number":2490,"context_line":"            try:"},{"line_number":2491,"context_line":"                self.vif_driver.unplug(instance, vif, vm_ref)"},{"line_number":2492,"context_line":"            except Exception:"},{"line_number":2493,"context_line":"                LOG.exception("},{"line_number":2494,"context_line":"                    _LW(\u0027Failed to delete VIF %s in destination host\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_7038bcd3","line":2491,"in_reply_to":"5a3905b3_42005f66","updated":"2017-01-24 14:12:24.000000000","message":"yes, you are right, we need to tidy up on source host when successfully migrated to destination host, I noticed this before leaving office but haven\u0027t had chance do that. Will add that part, thanks for your suggestion, otherwise, there will by many useless networks","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"477caff9e1e0c74d27ee2c97ffc176017d3e1255","unresolved":false,"context_lines":[{"line_number":2488,"context_line":"        vm_ref \u003d self._get_vm_opaque_ref(instance)"},{"line_number":2489,"context_line":"        for vif in network_info:"},{"line_number":2490,"context_line":"            try:"},{"line_number":2491,"context_line":"                self.vif_driver.unplug(instance, vif, vm_ref)"},{"line_number":2492,"context_line":"            except Exception:"},{"line_number":2493,"context_line":"                LOG.exception("},{"line_number":2494,"context_line":"                    _LW(\u0027Failed to delete VIF %s in destination host\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_84122557","line":2491,"in_reply_to":"5a3905b3_5be5a106","updated":"2017-01-25 10:29:43.000000000","message":"Before live migration, we did only have the network, but the migration maybe failed during live-migration, so at that point, there maybe other things created, e.g. interim-network, VIF, tap device, linux bridge qbr, ..., so calling unplug() is better, it will try to delete all things one bye one https://github.com/openstack/nova/blob/master/nova/virt/xenapi/vif.py#L268, https://github.com/openstack/nova/blob/master/nova/virt/xenapi/vif.py#L67","commit_id":"9a2834e190199a13e65a3d6fa6df284a7049392d"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0c036033df1f301d69bea21400033d9d93906808","unresolved":false,"context_lines":[{"line_number":2500,"context_line":"            try:"},{"line_number":2501,"context_line":"                self.vif_driver.delete_network_and_bridge(instance, vif)"},{"line_number":2502,"context_line":"            except Exception:"},{"line_number":2503,"context_line":"                LOG.exception(_LW(\u0027Failed to delete networks and bridges with \u0027"},{"line_number":2504,"context_line":"                                  \u0027VIF %s\u0027), vif[\u0027id\u0027], instance\u003dinstance)"},{"line_number":2505,"context_line":""},{"line_number":2506,"context_line":"    def get_per_instance_usage(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_c30b9822","line":2503,"range":{"start_line":2503,"start_character":30,"end_line":2503,"end_character":33},"updated":"2017-01-31 05:35:09.000000000","message":"It should be \u0027_LE\u0027.\nSee http://docs.openstack.org/developer/oslo.i18n/guidelines.html#log-translation","commit_id":"3a878132f23d4ce8a32770fbc85f09e59f6ecfd7"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"18812ded08a3d64be76a6355760ab47da856a7c5","unresolved":false,"context_lines":[{"line_number":2500,"context_line":"            try:"},{"line_number":2501,"context_line":"                self.vif_driver.delete_network_and_bridge(instance, vif)"},{"line_number":2502,"context_line":"            except Exception:"},{"line_number":2503,"context_line":"                LOG.exception(_LW(\u0027Failed to delete networks and bridges with \u0027"},{"line_number":2504,"context_line":"                                  \u0027VIF %s\u0027), vif[\u0027id\u0027], instance\u003dinstance)"},{"line_number":2505,"context_line":""},{"line_number":2506,"context_line":"    def get_per_instance_usage(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_ea430011","line":2503,"range":{"start_line":2503,"start_character":30,"end_line":2503,"end_character":33},"in_reply_to":"3a461143_c30b9822","updated":"2017-01-31 11:02:08.000000000","message":"Done","commit_id":"3a878132f23d4ce8a32770fbc85f09e59f6ecfd7"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4a3377f3586f4291805587a22a74b3e79bd69ef0","unresolved":false,"context_lines":[{"line_number":2370,"context_line":"        # Generate a mapping dictionary of src_vif_ref: dest_network_ref"},{"line_number":2371,"context_line":"        vif_map \u003d {}"},{"line_number":2372,"context_line":"        # vif_uuid_map is dictionary of neutron_vif_uuid: dest_network_ref"},{"line_number":2373,"context_line":"        for item in vif_uuid_map.items():"},{"line_number":2374,"context_line":"            net_name \u003d self.vif_driver.get_vif_interim_net_name(item[0])"},{"line_number":2375,"context_line":"            net_refs \u003d self._session.network.get_by_name_label(net_name)"},{"line_number":2376,"context_line":"            if not net_refs:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_3041a70c","line":2373,"range":{"start_line":2373,"start_character":12,"end_line":2373,"end_character":16},"updated":"2017-02-03 16:39:53.000000000","message":"Micro nit, its tempting to make this vif_uuid, network_ref","commit_id":"77284ddc0a3c45489568a0586f85a53bc1940ab5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4a3377f3586f4291805587a22a74b3e79bd69ef0","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        for item in vif_uuid_map.items():"},{"line_number":2374,"context_line":"            net_name \u003d self.vif_driver.get_vif_interim_net_name(item[0])"},{"line_number":2375,"context_line":"            net_refs \u003d self._session.network.get_by_name_label(net_name)"},{"line_number":2376,"context_line":"            if not net_refs:"},{"line_number":2377,"context_line":"                continue"},{"line_number":2378,"context_line":"            vif_refs \u003d self._session.network.get_VIFs(net_refs[0])"},{"line_number":2379,"context_line":"            if not vif_refs:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_5087130f","line":2376,"updated":"2017-02-03 16:39:53.000000000","message":"Should we be logging a warning if this failed or maybe debug? \n\nDoesn\u0027t that mean that most likely the live-migration is going to fail? Maybe we should just fail hard and throw some exception that triggers the live-migration rollback?\n\nI mean it shouldn\u0027t ever happen, but you know, best to check.","commit_id":"77284ddc0a3c45489568a0586f85a53bc1940ab5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4a3377f3586f4291805587a22a74b3e79bd69ef0","unresolved":false,"context_lines":[{"line_number":2379,"context_line":"            if not vif_refs:"},{"line_number":2380,"context_line":"                continue"},{"line_number":2381,"context_line":"            vif_map.update({vif_refs[0]: item[1]})"},{"line_number":2382,"context_line":"        return vif_map"},{"line_number":2383,"context_line":""},{"line_number":2384,"context_line":"    def create_interim_networks(self, network_info):"},{"line_number":2385,"context_line":"        # Creating an interim bridge in destination host before live_migration"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_ab552ac7","line":2382,"updated":"2017-02-03 16:39:53.000000000","message":"It seems like if a VM doesn\u0027t have an interim network, i.e its a really old VM that has just kept running, and hasn\u0027t been moved, when it comes to live-migration to XS 7.0, it will fail.\n\nI think the work around is to move the VM to an older version of XenServer, before moving it to XS 7.0? Its a total edge case I guess, so thats probably OK ish for now.\n\nI think we should call out that limitation in a reno note or some such.","commit_id":"77284ddc0a3c45489568a0586f85a53bc1940ab5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b8ab0a70b8591b8af6a4cba68be56dcad78a6eee","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027)%("}],"source_content_type":"text/x-python","patch_set":7,"id":"1a430d35_63d8c654","line":2376,"updated":"2017-02-03 18:33:28.000000000","message":"I guess key error is possible, but game over if its missing anyways, so fair enough.","commit_id":"0c69ea317186db28fe3eae668eac5c3b732a9dc7"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"6b8b3206178926d02e51f9c2cb2d1c345ad988ac","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027)%("}],"source_content_type":"text/x-python","patch_set":7,"id":"1a430d35_d804e17f","line":2376,"in_reply_to":"1a430d35_63d8c654","updated":"2017-02-06 01:38:46.000000000","message":"yeah, maybe it will fail to get neutron_id with key \"nicira-iface-id\". But agree with you, it\u0027s OK to fail here","commit_id":"0c69ea317186db28fe3eae668eac5c3b732a9dc7"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b8ab0a70b8591b8af6a4cba68be56dcad78a6eee","unresolved":false,"context_lines":[{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027)%("},{"line_number":2380,"context_line":"                        neutron_id))"},{"line_number":2381,"context_line":"            vif_map[vif] \u003d vif_uuid_map[neutron_id]"},{"line_number":2382,"context_line":"        return vif_map"},{"line_number":2383,"context_line":""},{"line_number":2384,"context_line":"    def create_interim_networks(self, network_info):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a430d35_6331a6a2","line":2381,"range":{"start_line":2381,"start_character":27,"end_line":2381,"end_character":51},"updated":"2017-02-03 18:33:28.000000000","message":"Nit: it would be lovely if that were a variable named network_ref, just so its clear.","commit_id":"0c69ea317186db28fe3eae668eac5c3b732a9dc7"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"6b8b3206178926d02e51f9c2cb2d1c345ad988ac","unresolved":false,"context_lines":[{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027)%("},{"line_number":2380,"context_line":"                        neutron_id))"},{"line_number":2381,"context_line":"            vif_map[vif] \u003d vif_uuid_map[neutron_id]"},{"line_number":2382,"context_line":"        return vif_map"},{"line_number":2383,"context_line":""},{"line_number":2384,"context_line":"    def create_interim_networks(self, network_info):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a430d35_b8ee35b2","line":2381,"range":{"start_line":2381,"start_character":27,"end_line":2381,"end_character":51},"in_reply_to":"1a430d35_6331a6a2","updated":"2017-02-06 01:38:46.000000000","message":"I see, will update in the next patch","commit_id":"0c69ea317186db28fe3eae668eac5c3b732a9dc7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5028ab23f0236dde060bece40bffeeae07c381ea","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_5a00c001","line":2376,"range":{"start_line":2376,"start_character":39,"end_line":2376,"end_character":54},"updated":"2017-02-06 18:10:18.000000000","message":"Is this really something neutron always returns? That seems weird to me.","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"ae678c6ace389b626e3d11aea0ed33cdf5997b9b","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_a1cc0a6b","line":2376,"range":{"start_line":2376,"start_character":39,"end_line":2376,"end_character":54},"in_reply_to":"1a430d35_1ae9d814","updated":"2017-02-07 05:57:39.000000000","message":"Note that this is *not* returned by Neutron; the nicira-iface-id is set by the XenAPI driver on the VIF to identify it.  This should probably be a more generic term (e.g. neutron-iface-id) but as John says, it\u0027s always been nicira-iface-id and external scripts now depend on that value.","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0940990867ba1f549c066daf8467e8739ad8bf3f","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_d6bf1ff9","line":2376,"range":{"start_line":2376,"start_character":39,"end_line":2376,"end_character":54},"in_reply_to":"1a430d35_1ae9d814","updated":"2017-02-07 01:54:04.000000000","message":"Yes","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5f2d4f0c9f32f3470fe07fc9ac4489ab1e116c68","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_1ae9d814","line":2376,"range":{"start_line":2376,"start_character":39,"end_line":2376,"end_character":54},"in_reply_to":"1a430d35_5a00c001","updated":"2017-02-06 18:12:56.000000000","message":"So this is mental, but its set here when the VIF is created:\nhttps://github.com/openstack/nova/blob/06442d9bea88cfbd6e72c29bff36b42f50183ae8/nova/virt/xenapi/vif.py#L260\n\nI think this \"happens\" to match what an out of tree nicira network driver is looking for.\n\n/me ducks","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"dc0746748613f9debf8b862b3619270f02a00228","unresolved":false,"context_lines":[{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"},{"line_number":2381,"context_line":"            network_ref \u003d vif_uuid_map[neutron_id]"},{"line_number":2382,"context_line":"            vif_map[vif] \u003d network_ref"},{"line_number":2383,"context_line":"        return vif_map"},{"line_number":2384,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_2d42f23e","line":2381,"updated":"2017-02-06 12:58:20.000000000","message":"Nit: its tempting to add a log if there is a keyerror here, as that probably means network_info is out of sync with the VIFs in the current VM. As opposed to the above key error that relates to the vif_id not being in the VIF.","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0940990867ba1f549c066daf8467e8739ad8bf3f","unresolved":false,"context_lines":[{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"},{"line_number":2381,"context_line":"            network_ref \u003d vif_uuid_map[neutron_id]"},{"line_number":2382,"context_line":"            vif_map[vif] \u003d network_ref"},{"line_number":2383,"context_line":"        return vif_map"},{"line_number":2384,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_f6c09b2c","line":2381,"in_reply_to":"1a430d35_2d42f23e","updated":"2017-02-07 01:54:04.000000000","message":"I see, I think I can first check whether vif is in vif_map, if not, raise exception. Is my understanding correct?","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cd4007a7b3c940650760339415aa12b9d369431d","unresolved":false,"context_lines":[{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"},{"line_number":2381,"context_line":"            network_ref \u003d vif_uuid_map[neutron_id]"},{"line_number":2382,"context_line":"            vif_map[vif] \u003d network_ref"},{"line_number":2383,"context_line":"        return vif_map"},{"line_number":2384,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_d60c683d","line":2381,"in_reply_to":"1a430d35_71459515","updated":"2017-02-07 13:33:41.000000000","message":"yeah, my bad, I didn\u0027t tie those two things together. Its more pythonic to handle the keyerror, but I wouldn\u0027t really mention it normally.","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"e9368343f4c778998e40690d3ca1b2a417d2f55c","unresolved":false,"context_lines":[{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"},{"line_number":2381,"context_line":"            network_ref \u003d vif_uuid_map[neutron_id]"},{"line_number":2382,"context_line":"            vif_map[vif] \u003d network_ref"},{"line_number":2383,"context_line":"        return vif_map"},{"line_number":2384,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_71459515","line":2381,"in_reply_to":"1a430d35_f6c09b2c","updated":"2017-02-07 02:21:08.000000000","message":"My above understand should be wrong, we are trying to generate a map vif_map, so vif not in vif_map is the common scenario.\nLooking at the code, in Line:2377, we already checked that neutron_id(VIF_UUID) is in vif_uuid_map.keys(), so it should be OK to set in Line:2382?","commit_id":"d877d7397c64d4dd1b2a2383f02ce40a9660aa31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":2356,"context_line":"                        sr_uuid_map[sr_uuid], vm_ref, sr_ref))"},{"line_number":2357,"context_line":"        vif_map \u003d {}"},{"line_number":2358,"context_line":"        vif_uuid_map \u003d None"},{"line_number":2359,"context_line":"        if \u0027vif_uuid_map\u0027 in migrate_data:"},{"line_number":2360,"context_line":"            vif_uuid_map \u003d migrate_data.vif_uuid_map"},{"line_number":2361,"context_line":"        if vif_uuid_map:"},{"line_number":2362,"context_line":"            vif_map \u003d self._generate_vif_network_map(vm_ref, vif_uuid_map)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_fb09f495","line":2359,"updated":"2017-02-15 19:44:49.000000000","message":"Note to self, this will be False in the case of live migrating to a Newton compute since the Newton compute won\u0027t have the code to set the vif_uuid_map in the migration object.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":2356,"context_line":"                        sr_uuid_map[sr_uuid], vm_ref, sr_ref))"},{"line_number":2357,"context_line":"        vif_map \u003d {}"},{"line_number":2358,"context_line":"        vif_uuid_map \u003d None"},{"line_number":2359,"context_line":"        if \u0027vif_uuid_map\u0027 in migrate_data:"},{"line_number":2360,"context_line":"            vif_uuid_map \u003d migrate_data.vif_uuid_map"},{"line_number":2361,"context_line":"        if vif_uuid_map:"},{"line_number":2362,"context_line":"            vif_map \u003d self._generate_vif_network_map(vm_ref, vif_uuid_map)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_1870780a","line":2359,"in_reply_to":"fa31d9ce_fb09f495","updated":"2017-02-16 08:54:48.000000000","message":"yes","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":2360,"context_line":"            vif_uuid_map \u003d migrate_data.vif_uuid_map"},{"line_number":2361,"context_line":"        if vif_uuid_map:"},{"line_number":2362,"context_line":"            vif_map \u003d self._generate_vif_network_map(vm_ref, vif_uuid_map)"},{"line_number":2363,"context_line":"            LOG.debug(\"Generated vif_map for live migration: %s\", vif_map)"},{"line_number":2364,"context_line":"        options \u003d {}"},{"line_number":2365,"context_line":"        self._session.call_xenapi(command_name, vm_ref,"},{"line_number":2366,"context_line":"                                  migrate_send_data, True,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_1bb3280b","line":2363,"updated":"2017-02-15 19:44:49.000000000","message":"nit: would be nice to have the instance uuid in here for context.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":2360,"context_line":"            vif_uuid_map \u003d migrate_data.vif_uuid_map"},{"line_number":2361,"context_line":"        if vif_uuid_map:"},{"line_number":2362,"context_line":"            vif_map \u003d self._generate_vif_network_map(vm_ref, vif_uuid_map)"},{"line_number":2363,"context_line":"            LOG.debug(\"Generated vif_map for live migration: %s\", vif_map)"},{"line_number":2364,"context_line":"        options \u003d {}"},{"line_number":2365,"context_line":"        self._session.call_xenapi(command_name, vm_ref,"},{"line_number":2366,"context_line":"                                  migrate_send_data, True,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_7b9259f7","line":2363,"in_reply_to":"fa31d9ce_1bb3280b","updated":"2017-02-16 08:54:48.000000000","message":"I see, but I can only add vm_ref, however vm_ref is only hypervisor side concept, so we cannot directly connect it with instance uuid","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_db919048","line":2376,"range":{"start_line":2376,"start_character":38,"end_line":2376,"end_character":55},"updated":"2017-02-15 19:44:49.000000000","message":"This key isn\u0027t set if I\u0027m using XenAPIBridgeDriver, so isn\u0027t that a problem?","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9d57edc99fdfcd82f0dc3e92c173a58b97b547c2","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_bb93d8ff","line":2376,"range":{"start_line":2376,"start_character":38,"end_line":2376,"end_character":55},"in_reply_to":"fa31d9ce_9ba46d4b","updated":"2017-02-16 13:41:58.000000000","message":"Bob explained that to me in IRC. I don\u0027t see anything saying the bridge driver is nova-net only and deprecated, it\u0027s also still the default vif_driver in the xen config options, so yeah we need to make that more obvious. We should change the default vif_driver config option in Pike to be the OVS one.\n\nAs for this specific issue, I still think we should avoid the KeyError and simply check if the key is in the other_config dict and if not handle appropriately (which probably means noop?).","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_9ba46d4b","line":2376,"range":{"start_line":2376,"start_character":38,"end_line":2376,"end_character":55},"in_reply_to":"fa31d9ce_db919048","updated":"2017-02-16 08:54:48.000000000","message":"Yes, if we are uing XenAPIBridgeDriver (which means using Linux bridge as backend in XenServer), there is no this key.\nBut for Xenserver + Neutron, we only support XenAPIOpenVswitchDriver at the moment as Xenserver\u0027s default backend driver is OVS, so this didn\u0027t fix consider Linux bridge.\nLinux bridge is only supported when dealing with nova network which is deprecated now. Let me add a comment in XenAPIBridgeDriver","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":20382,"name":"YuYang","email":"yuyangwang1985@gmail.com","username":"YuYangWang"},"change_message_id":"0a61771516ffbd6edd7bddba9f8854c5ab7af040","unresolved":false,"context_lines":[{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_3adf660e","line":2377,"range":{"start_line":2377,"start_character":15,"end_line":2377,"end_character":25},"updated":"2017-02-14 02:07:04.000000000","message":"this should verify neutron_id is none!","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"f2c5dcbb2f3862e9c9ddaa57446157c2ba1cd4d7","unresolved":false,"context_lines":[{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_c643cf40","line":2377,"range":{"start_line":2377,"start_character":15,"end_line":2377,"end_character":25},"in_reply_to":"fa31d9ce_3adf660e","updated":"2017-02-14 04:17:11.000000000","message":"If you check the whole process from booting VM, you will find this won\u0027t be none, see https://github.com/openstack/nova/blob/master/nova/virt/xenapi/vif.py#L260","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1afc538b499d93a4d9525639a014aa52b639b167","unresolved":false,"context_lines":[{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_45cc206a","line":2377,"range":{"start_line":2377,"start_character":15,"end_line":2377,"end_character":25},"in_reply_to":"fa31d9ce_c643cf40","updated":"2017-02-14 14:19:20.000000000","message":"It doesn\u0027t matter either way, as None will not be in the vif_uuid_map.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"28a3dec31b0e567d4943c66a4dd3ad79eae932f2","unresolved":false,"context_lines":[{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"},{"line_number":2381,"context_line":"            network_ref \u003d vif_uuid_map[neutron_id]"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_7e7a5225","line":2378,"updated":"2017-02-15 19:58:52.000000000","message":"You have no unit test for this error condition.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"},{"line_number":2381,"context_line":"            network_ref \u003d vif_uuid_map[neutron_id]"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_3b7aa1bd","line":2378,"in_reply_to":"fa31d9ce_7e7a5225","updated":"2017-02-16 08:54:48.000000000","message":"Will add one","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"},{"line_number":2381,"context_line":"            network_ref \u003d vif_uuid_map[neutron_id]"},{"line_number":2382,"context_line":"            vif_map[vif] \u003d network_ref"},{"line_number":2383,"context_line":"        return vif_map"},{"line_number":2384,"context_line":""},{"line_number":2385,"context_line":"    def create_interim_networks(self, network_info):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_dbb8b0ca","line":2382,"updated":"2017-02-15 19:44:49.000000000","message":"Again, as noted below, if using XenAPIBridgeDriver the network_ref here will be None.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("},{"line_number":2380,"context_line":"                           neutron_id))"},{"line_number":2381,"context_line":"            network_ref \u003d vif_uuid_map[neutron_id]"},{"line_number":2382,"context_line":"            vif_map[vif] \u003d network_ref"},{"line_number":2383,"context_line":"        return vif_map"},{"line_number":2384,"context_line":""},{"line_number":2385,"context_line":"    def create_interim_networks(self, network_info):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_982d4800","line":2382,"in_reply_to":"fa31d9ce_dbb8b0ca","updated":"2017-02-16 08:54:48.000000000","message":"yes","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3c5de9ff588815f50f4c8b3489a112dd8e92055","unresolved":false,"context_lines":[{"line_number":2386,"context_line":"        # Creating an interim bridge in destination host before live_migration"},{"line_number":2387,"context_line":"        vif_map \u003d {}"},{"line_number":2388,"context_line":"        for vif in network_info:"},{"line_number":2389,"context_line":"            network_ref \u003d self.vif_driver.create_vif_interim_network(vif)"},{"line_number":2390,"context_line":"            vif_map.update({vif[\u0027id\u0027]: network_ref})"},{"line_number":2391,"context_line":"        return vif_map"},{"line_number":2392,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_3b11cc04","line":2389,"range":{"start_line":2389,"start_character":12,"end_line":2389,"end_character":23},"updated":"2017-02-15 19:44:49.000000000","message":"Just as a note to myself, this can be None if not using XenAPIOpenVswitchDriver.","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"b7913b64f249bcee2143dd76a911b6a809326d78","unresolved":false,"context_lines":[{"line_number":2386,"context_line":"        # Creating an interim bridge in destination host before live_migration"},{"line_number":2387,"context_line":"        vif_map \u003d {}"},{"line_number":2388,"context_line":"        for vif in network_info:"},{"line_number":2389,"context_line":"            network_ref \u003d self.vif_driver.create_vif_interim_network(vif)"},{"line_number":2390,"context_line":"            vif_map.update({vif[\u0027id\u0027]: network_ref})"},{"line_number":2391,"context_line":"        return vif_map"},{"line_number":2392,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_18fb187a","line":2389,"range":{"start_line":2389,"start_character":12,"end_line":2389,"end_character":23},"in_reply_to":"fa31d9ce_3b11cc04","updated":"2017-02-16 08:54:48.000000000","message":"Yes","commit_id":"5e603cd364728b33b15239a9a6b26661322f83de"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"634623c11e81d6af1eb014ed2142f1ef098dbc5a","unresolved":false,"context_lines":[{"line_number":2373,"context_line":"        vifs \u003d self._session.VM.get_VIFs(vm_ref)"},{"line_number":2374,"context_line":"        for vif in vifs:"},{"line_number":2375,"context_line":"            other_config \u003d self._session.VIF.get_other_config(vif)"},{"line_number":2376,"context_line":"            neutron_id \u003d other_config[\u0027nicira-iface-id\u0027]"},{"line_number":2377,"context_line":"            if neutron_id not in vif_uuid_map.keys():"},{"line_number":2378,"context_line":"                raise exception.MigrationError("},{"line_number":2379,"context_line":"                    reason\u003d_(\u0027No mapping for source network %s\u0027) % ("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa31d9ce_56f551c9","line":2376,"updated":"2017-02-16 13:52:06.000000000","message":"I still think we should check for whether or not the \u0027nicira-iface-id\u0027 is in other_config and then probably noop if it\u0027s not (just continue the loop). Since we want to get this fix into RC2 we could probably just handle that in a follow up change though.","commit_id":"749f6e6ec74190cab8e3ca48c61e14e11a89b8bc"}]}
