)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a936ae82d2bdfbfacf37476c8b11b9262f1d8fc7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"some of the network API calls since it can get very confusing"},{"line_number":11,"context_line":"trying to trace what is happening with networking during"},{"line_number":12,"context_line":"live migration since the network API has several similar"},{"line_number":13,"context_line":"sounding methods."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This also handles PortBindingDeletionFailed which can be raised"},{"line_number":16,"context_line":"from the neutronv2 API implementation of setup_networks_on_host"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5f7c97a3_03134c5b","line":13,"updated":"2018-07-23 11:40:17.000000000","message":"++ This helps a lot to understand the networking codepath","commit_id":"e53f46672e0fba2c72c972f3f031281a863d7765"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a936ae82d2bdfbfacf37476c8b11b9262f1d8fc7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"   destination host port bindings"},{"line_number":23,"context_line":"3. rollback live migration at the destination cleaning up the"},{"line_number":24,"context_line":"   destination host port bindings"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Depends-On: https://review.openstack.org/558990/"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Co-Authored-By: Sean Mooney \u003csean.k.mooney@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5f7c97a3_8320bc9c","line":25,"updated":"2018-07-23 11:40:17.000000000","message":"This patch also bumps the compute RPC version.","commit_id":"e53f46672e0fba2c72c972f3f031281a863d7765"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4d1746705a79d49daab18a02092e3b705465487d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"   destination host port bindings"},{"line_number":23,"context_line":"3. rollback live migration at the destination cleaning up the"},{"line_number":24,"context_line":"   destination host port bindings"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Depends-On: https://review.openstack.org/558990/"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Co-Authored-By: Sean Mooney \u003csean.k.mooney@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5f7c97a3_adf4a356","line":25,"in_reply_to":"5f7c97a3_8320bc9c","updated":"2018-07-24 13:21:00.000000000","message":"If you need to respin, mention the RPC bump in the commit message.","commit_id":"e53f46672e0fba2c72c972f3f031281a863d7765"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"627495e6e04e8aad336a39d714a4aa4872b97990","unresolved":false,"context_lines":[{"line_number":22,"context_line":"   destination host port bindings"},{"line_number":23,"context_line":"3. rollback live migration at the destination cleaning up the"},{"line_number":24,"context_line":"   destination host port bindings"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Depends-On: https://review.openstack.org/558990/"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Co-Authored-By: Sean Mooney \u003csean.k.mooney@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5f7c97a3_bfd909f2","line":25,"in_reply_to":"5f7c97a3_adf4a356","updated":"2018-07-25 15:44:40.000000000","message":"Honestly, we don\u0027t need to provide this, most of the changes modifying the RPC version don\u0027t tell about it.","commit_id":"e53f46672e0fba2c72c972f3f031281a863d7765"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a936ae82d2bdfbfacf37476c8b11b9262f1d8fc7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"3. rollback live migration at the destination cleaning up the"},{"line_number":24,"context_line":"   destination host port bindings"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Depends-On: https://review.openstack.org/558990/"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Co-Authored-By: Sean Mooney \u003csean.k.mooney@intel.com\u003e"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5f7c97a3_63e8017b","line":26,"updated":"2018-07-23 11:40:17.000000000","message":"It is merged, so this is good to go","commit_id":"e53f46672e0fba2c72c972f3f031281a863d7765"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a3799701cded91e90d151635c3896064ac9e8bc","unresolved":false,"context_lines":[{"line_number":5980,"context_line":"            phase\u003dfields.NotificationPhase.START)"},{"line_number":5981,"context_line":""},{"line_number":5982,"context_line":"        if \u0027vifs\u0027 in migrate_data and migrate_data.vifs:"},{"line_number":5983,"context_line":"            # plug vifs using new bindings (this needs to happen in each"},{"line_number":5984,"context_line":"            # virt driver...)"},{"line_number":5985,"context_line":"            # https://git.openstack.org/cgit/openstack/nova-specs/tree/specs/"},{"line_number":5986,"context_line":"            # queens/approved/neutron-new-port-binding-api.rst#n186"},{"line_number":5987,"context_line":"            # TODO(sean-k-mooney): implement self.vif_to_network_info function"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_a841ac0d","line":5984,"range":{"start_line":5983,"start_character":12,"end_line":5984,"end_character":29},"updated":"2018-03-17 01:49:27.000000000","message":"Then this likely needs to happen in each virt driver\u0027s pre_live_migration method. The compute manager shouldn\u0027t be calling driver.plug_vifs IMO.\n\nNote that the VIFs getting plugged on the dest host here should trigger network-vif-plugged events which will get routed to the source host, and that\u0027s what _do_live_migration needs to be setting up events to wait for before calling self.driver.live_migration.","commit_id":"a52b9a22c7ef31e4c65e661349ab14ea30a5e2ee"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a3799701cded91e90d151635c3896064ac9e8bc","unresolved":false,"context_lines":[{"line_number":5984,"context_line":"            # virt driver...)"},{"line_number":5985,"context_line":"            # https://git.openstack.org/cgit/openstack/nova-specs/tree/specs/"},{"line_number":5986,"context_line":"            # queens/approved/neutron-new-port-binding-api.rst#n186"},{"line_number":5987,"context_line":"            # TODO(sean-k-mooney): implement self.vif_to_network_info function"},{"line_number":5988,"context_line":"            # for vif in migrate_data[\u0027vifs\u0027]:"},{"line_number":5989,"context_line":"            #    net_info \u003d self.vif_to_network_info(vif)"},{"line_number":5990,"context_line":"            #    self.driver.plug(inspect,net_info)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_c881804c","line":5987,"range":{"start_line":5987,"start_character":14,"end_line":5987,"end_character":78},"updated":"2018-03-17 01:49:27.000000000","message":"This should live in the object, see:\n\nhttps://review.openstack.org/#/c/515423/7/nova/objects/migrate_data.py@44\n\nWe\u0027ll need it in other places besides the compute manager (the libvirt driver also needs that for building the guest xml for the dest host before starting the live migration).","commit_id":"a52b9a22c7ef31e4c65e661349ab14ea30a5e2ee"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a3799701cded91e90d151635c3896064ac9e8bc","unresolved":false,"context_lines":[{"line_number":5947,"context_line":"        result \u003d self.driver.check_can_live_migrate_source(ctxt, instance,"},{"line_number":5948,"context_line":"                                                           dest_check_data,"},{"line_number":5949,"context_line":"                                                           block_device_info)"},{"line_number":5950,"context_line":"        LOG.debug(\u0027source check data is %s\u0027, result)"},{"line_number":5951,"context_line":"        return result"},{"line_number":5952,"context_line":""},{"line_number":5953,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_28dbd34f","line":5950,"updated":"2018-03-17 01:49:27.000000000","message":"Sending this back over RPC is blowing up because the VIFMigrateData object is blowing up:\n\nhttp://logs.openstack.org/73/552173/3/check/legacy-tempest-dsvm-multinode-live-migration/83b8b25/logs/subnode-2/screen-n-cpu.txt.gz#_Mar_16_23_02_47_599906\n\nMar 16 23:02:47.599906 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server [None req-08c5ebc1-a8c3-4b6a-a4d6-685ac35d550f tempest-LiveMigrationRemoteConsolesV26Test-1113585255 tempest-LiveMigrationRemoteConsolesV26Test-1113585255] Exception during message handling: TypeError: type object argument after ** must be a mapping, not unicode\nMar 16 23:02:47.600202 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server Traceback (most recent call last):\nMar 16 23:02:47.600462 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/server.py\", line 163, in _process_incoming\nMar 16 23:02:47.600682 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     res \u003d self.dispatcher.dispatch(message)\nMar 16 23:02:47.600927 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py\", line 220, in dispatch\nMar 16 23:02:47.601135 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return self._do_dispatch(endpoint, method, ctxt, args)\nMar 16 23:02:47.601364 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py\", line 188, in _do_dispatch\nMar 16 23:02:47.601569 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     new_args[argname] \u003d self.serializer.deserialize_entity(ctxt, arg)\nMar 16 23:02:47.601779 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/opt/stack/new/nova/nova/rpc.py\", line 135, in deserialize_entity\nMar 16 23:02:47.601989 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return self._base.deserialize_entity(context, entity)\nMar 16 23:02:47.602197 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/opt/stack/new/nova/nova/objects/base.py\", line 242, in deserialize_entity\nMar 16 23:02:47.602413 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     entity \u003d self._process_object(context, entity)\nMar 16 23:02:47.602622 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/opt/stack/new/nova/nova/objects/base.py\", line 191, in _process_object\nMar 16 23:02:47.602824 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     objinst \u003d NovaObject.obj_from_primitive(objprim, context\u003dcontext)\nMar 16 23:02:47.603032 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py\", line 415, in obj_from_primitive\nMar 16 23:02:47.603251 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return objclass._obj_from_primitive(context, objver, primitive)\nMar 16 23:02:47.603501 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py\", line 399, in _obj_from_primitive\nMar 16 23:02:47.603707 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     objdata[name]))\nMar 16 23:02:47.603956 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/fields.py\", line 212, in from_primitive\nMar 16 23:02:47.604202 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return self._type.from_primitive(obj, attr, value)\nMar 16 23:02:47.604407 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/fields.py\", line 650, in from_primitive\nMar 16 23:02:47.604615 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return [self._element_type.from_primitive(obj, attr, x) for x in value]\nMar 16 23:02:47.604824 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/fields.py\", line 212, in from_primitive\nMar 16 23:02:47.605026 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return self._type.from_primitive(obj, attr, value)\nMar 16 23:02:47.605226 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/fields.py\", line 812, in from_primitive\nMar 16 23:02:47.605438 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return obj.obj_from_primitive(value, obj._context)\nMar 16 23:02:47.605640 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py\", line 415, in obj_from_primitive\nMar 16 23:02:47.605850 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return objclass._obj_from_primitive(context, objver, primitive)\nMar 16 23:02:47.606053 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/base.py\", line 399, in _obj_from_primitive\nMar 16 23:02:47.606256 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     objdata[name]))\nMar 16 23:02:47.606458 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_versionedobjects/fields.py\", line 212, in from_primitive\nMar 16 23:02:47.606679 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return self._type.from_primitive(obj, attr, value)\nMar 16 23:02:47.606881 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/opt/stack/new/nova/nova/objects/fields.py\", line 1016, in from_primitive\nMar 16 23:02:47.607082 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     return network_model.VIF.hydrate(value)\nMar 16 23:02:47.607626 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server   File \"/opt/stack/new/nova/nova/network/model.py\", line 473, in hydrate\nMar 16 23:02:47.608021 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server     vif \u003d cls(**vif)\nMar 16 23:02:47.608355 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server TypeError: type object argument after ** must be a mapping, not unicode\nMar 16 23:02:47.608683 ubuntu-xenial-rax-ord-0003032020 nova-compute[29424]: ERROR oslo_messaging.rpc.server","commit_id":"e3086e6edee3ebb7d17069014b79a9a95c191ce1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"723f31c635994eb66b135730483fff9bccd7a785","unresolved":false,"context_lines":[{"line_number":6052,"context_line":"                                                    bdm.attachment_id)"},{"line_number":6053,"context_line":""},{"line_number":6054,"context_line":"        # NOTE(tr3buchet): setup networks on destination host"},{"line_number":6055,"context_line":"        self.network_api.setup_networks_on_host(context, instance,"},{"line_number":6056,"context_line":"                                                         self.host)"},{"line_number":6057,"context_line":""},{"line_number":6058,"context_line":"        # Creating filters to hypervisors and firewalls."},{"line_number":6059,"context_line":"        # An example is that nova-instance-instance-xxx,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_e2ef37ae","line":6056,"range":{"start_line":6055,"start_character":8,"end_line":6056,"end_character":67},"updated":"2018-03-23 22:18:01.000000000","message":"Note to self: this sets the migrating_to attribute in the port binding profile for the dest host.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f87763b312ba91d9482d56940ad3f64cb5abdbd","unresolved":false,"context_lines":[{"line_number":6317,"context_line":""},{"line_number":6318,"context_line":"        migration \u003d {\u0027source_compute\u0027: self.host,"},{"line_number":6319,"context_line":"                     \u0027dest_compute\u0027: dest, }"},{"line_number":6320,"context_line":"        # TODO(mriedem): Should we implement this for the neutron API to"},{"line_number":6321,"context_line":"        # delete the port binding for the source host? It would be oddly named."},{"line_number":6322,"context_line":"        self.network_api.migrate_instance_start(ctxt,"},{"line_number":6323,"context_line":"                                                instance,"},{"line_number":6324,"context_line":"                                                migration)"},{"line_number":6325,"context_line":""},{"line_number":6326,"context_line":"        destroy_vifs \u003d False"},{"line_number":6327,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_e269778b","line":6324,"range":{"start_line":6320,"start_character":8,"end_line":6324,"end_character":58},"updated":"2018-03-23 22:07:37.000000000","message":"We could implement this for the neutron code to activate port bindings for the destination host, but this method is used in cold migrate too...","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c2a82b9563edbe7f97a3ac3d34c589d5153d24ee","unresolved":false,"context_lines":[{"line_number":6371,"context_line":""},{"line_number":6372,"context_line":"        # Now that the instance is running on the destination host, delete"},{"line_number":6373,"context_line":"        # the port bindings against the source host (this host)."},{"line_number":6374,"context_line":"        # TODO(mriedem): Why don\u0027t we do this within the call to"},{"line_number":6375,"context_line":"        # setup_networks_on_host in post_live_migration_at_destination?"},{"line_number":6376,"context_line":"        if migrate_data and \u0027vifs\u0027 in migrate_data:"},{"line_number":6377,"context_line":"            for vif in migrate_data.vifs:"},{"line_number":6378,"context_line":"                self.network_api.delete_port_binding("}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_6fa988db","line":6375,"range":{"start_line":6374,"start_character":8,"end_line":6375,"end_character":71},"updated":"2018-03-20 22:06:04.000000000","message":"Or migrate_instance_finish, see the thing below.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21da3ebe3f9b242123b3bbf6065945d617e7f230","unresolved":false,"context_lines":[{"line_number":6444,"context_line":"        #                  this is called a second time because"},{"line_number":6445,"context_line":"        #                  multi_host does not create the bridge in"},{"line_number":6446,"context_line":"        #                  plug_vifs"},{"line_number":6447,"context_line":"        self.network_api.setup_networks_on_host(context, instance,"},{"line_number":6448,"context_line":"                                                         self.host)"},{"line_number":6449,"context_line":"        migration \u003d {\u0027source_compute\u0027: instance.host,"},{"line_number":6450,"context_line":"                     \u0027dest_compute\u0027: self.host, }"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_4fcfe47e","line":6447,"range":{"start_line":6447,"start_character":25,"end_line":6447,"end_character":47},"updated":"2018-03-21 00:26:02.000000000","message":"I think in this call we should likely activate the destination host port binding.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb2d82c30c7da8dba8e8324f1b5db0fe56c29530","unresolved":false,"context_lines":[{"line_number":6444,"context_line":"        #                  this is called a second time because"},{"line_number":6445,"context_line":"        #                  multi_host does not create the bridge in"},{"line_number":6446,"context_line":"        #                  plug_vifs"},{"line_number":6447,"context_line":"        self.network_api.setup_networks_on_host(context, instance,"},{"line_number":6448,"context_line":"                                                         self.host)"},{"line_number":6449,"context_line":"        migration \u003d {\u0027source_compute\u0027: instance.host,"},{"line_number":6450,"context_line":"                     \u0027dest_compute\u0027: self.host, }"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_f57c8a21","line":6447,"range":{"start_line":6447,"start_character":25,"end_line":6447,"end_character":47},"in_reply_to":"df7087c5_4fcfe47e","updated":"2018-03-21 01:27:37.000000000","message":"TODO: we\u0027ll need to add an \u0027update_port_binding(context, instance, port_id, host, status)\u0027 method or something to the neutronv2 API code.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c2a82b9563edbe7f97a3ac3d34c589d5153d24ee","unresolved":false,"context_lines":[{"line_number":6448,"context_line":"                                                         self.host)"},{"line_number":6449,"context_line":"        migration \u003d {\u0027source_compute\u0027: instance.host,"},{"line_number":6450,"context_line":"                     \u0027dest_compute\u0027: self.host, }"},{"line_number":6451,"context_line":"        self.network_api.migrate_instance_finish(context,"},{"line_number":6452,"context_line":"                                                 instance,"},{"line_number":6453,"context_line":"                                                 migration)"},{"line_number":6454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_2f5e3012","line":6451,"range":{"start_line":6451,"start_character":25,"end_line":6451,"end_character":48},"updated":"2018-03-20 22:06:04.000000000","message":"This is blowing up when updating the port in neutron:\n\nhttp://logs.openstack.org/73/552173/5/check/legacy-tempest-dsvm-multinode-live-migration/f1afe92/logs/screen-n-cpu.txt.gz?level\u003dTRACE#_Mar_19_23_10_57_645141\n\nThe failure in the neutron logs:\n\nhttp://logs.openstack.org/73/552173/5/check/legacy-tempest-dsvm-multinode-live-migration/f1afe92/logs/screen-q-svc.txt.gz?level\u003dTRACE#_Mar_19_23_10_57_540891\n\nAnd:\n\nMar 19 23:09:57.663043 ubuntu-xenial-ovh-bhs1-0003066678 neutron-server[23056]: ERROR neutron.plugins.ml2.db [None req-c768004d-cda7-48dd-a273-fa9ae1c934ec None None] Multiple ports have port_id starting with 45dd19b9-356b-4b5c-82bb-22ffaf9b6200: MultipleResultsFound: Multiple rows were found for one()","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"723f31c635994eb66b135730483fff9bccd7a785","unresolved":false,"context_lines":[{"line_number":6448,"context_line":"                                                         self.host)"},{"line_number":6449,"context_line":"        migration \u003d {\u0027source_compute\u0027: instance.host,"},{"line_number":6450,"context_line":"                     \u0027dest_compute\u0027: self.host, }"},{"line_number":6451,"context_line":"        self.network_api.migrate_instance_finish(context,"},{"line_number":6452,"context_line":"                                                 instance,"},{"line_number":6453,"context_line":"                                                 migration)"},{"line_number":6454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_a2661f51","line":6451,"range":{"start_line":6451,"start_character":25,"end_line":6451,"end_character":48},"in_reply_to":"bf659307_22d9af82","updated":"2018-03-23 22:18:01.000000000","message":"\u003e Things get confusing because setup_networks_on_host on L6447 sets the migrating_to attribute in the binding profile\n\nThat\u0027s actually wrong, it\u0027s already set from pre_live_migration on the dest host. So the call to setup_networks_on_host here in post live migration on dest will actually update the port binding profile again for no reason because it\u0027s already set. We could optimize that.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8ed54f91ea1dbc37d8cfe2cd101c5ea139b9c554","unresolved":false,"context_lines":[{"line_number":6448,"context_line":"                                                         self.host)"},{"line_number":6449,"context_line":"        migration \u003d {\u0027source_compute\u0027: instance.host,"},{"line_number":6450,"context_line":"                     \u0027dest_compute\u0027: self.host, }"},{"line_number":6451,"context_line":"        self.network_api.migrate_instance_finish(context,"},{"line_number":6452,"context_line":"                                                 instance,"},{"line_number":6453,"context_line":"                                                 migration)"},{"line_number":6454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_82ef5b86","line":6451,"range":{"start_line":6451,"start_character":25,"end_line":6451,"end_character":48},"in_reply_to":"bf659307_a2661f51","updated":"2018-03-23 22:23:52.000000000","message":"\u003e We could optimize that.\n\nTracking with bug 1758453.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21da3ebe3f9b242123b3bbf6065945d617e7f230","unresolved":false,"context_lines":[{"line_number":6448,"context_line":"                                                         self.host)"},{"line_number":6449,"context_line":"        migration \u003d {\u0027source_compute\u0027: instance.host,"},{"line_number":6450,"context_line":"                     \u0027dest_compute\u0027: self.host, }"},{"line_number":6451,"context_line":"        self.network_api.migrate_instance_finish(context,"},{"line_number":6452,"context_line":"                                                 instance,"},{"line_number":6453,"context_line":"                                                 migration)"},{"line_number":6454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_efa358b0","line":6451,"range":{"start_line":6451,"start_character":25,"end_line":6451,"end_character":48},"in_reply_to":"df7087c5_2f5e3012","updated":"2018-03-21 00:26:02.000000000","message":"If we\u0027re doing the new style thing, we should probably not call this if we activate the destination bindings above.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f87763b312ba91d9482d56940ad3f64cb5abdbd","unresolved":false,"context_lines":[{"line_number":6448,"context_line":"                                                         self.host)"},{"line_number":6449,"context_line":"        migration \u003d {\u0027source_compute\u0027: instance.host,"},{"line_number":6450,"context_line":"                     \u0027dest_compute\u0027: self.host, }"},{"line_number":6451,"context_line":"        self.network_api.migrate_instance_finish(context,"},{"line_number":6452,"context_line":"                                                 instance,"},{"line_number":6453,"context_line":"                                                 migration)"},{"line_number":6454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_22d9af82","line":6451,"range":{"start_line":6451,"start_character":25,"end_line":6451,"end_character":48},"in_reply_to":"df7087c5_efa358b0","updated":"2018-03-23 22:07:37.000000000","message":"Things get confusing because setup_networks_on_host on L6447 sets the migrating_to attribute in the binding profile, and then migrate_instance_finish removes it when it updates the port\u0027s binding profile to point at the new dest host.\n\nNow we could have migrate_instance_finish activate the dest host port binding instead of how migrate_instance_finish works to update the port\u0027s binding:host_id attribute.\n\nOR\n\nWe could have migrate_instance_start, which is currently a no-op, activate the dest host port bindings, which would be called from the source host before we get to the dest host and call migrate_instance_finish.\n\nIDK, it\u0027s terrible that we really have neutron network API methods doing things with the port binding profile during live migration (setup_networks_on_host and migrate_instance_finish), and we also have the call to migrate_instance_start which could activate the dest host port bindings. Ideally we\u0027d just have a single method to handle all of the various scenarios so it\u0027s not so confusing from the client side.\n\nAlso, if we rely on setup_networks_on_host with teardown\u003dFalse to delete port bindings, then wouldn\u0027t it make sense to do the port binding activation from within that method to?","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21da3ebe3f9b242123b3bbf6065945d617e7f230","unresolved":false,"context_lines":[{"line_number":6491,"context_line":"                instance.save(expected_task_state\u003dtask_states.MIGRATING)"},{"line_number":6492,"context_line":""},{"line_number":6493,"context_line":"        # NOTE(tr3buchet): tear down networks on source host"},{"line_number":6494,"context_line":"        self.network_api.setup_networks_on_host(context, instance,"},{"line_number":6495,"context_line":"                                                prev_host, teardown\u003dTrue)"},{"line_number":6496,"context_line":"        # NOTE(vish): this is necessary to update dhcp"},{"line_number":6497,"context_line":"        self.network_api.setup_networks_on_host(context, instance, self.host)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_6f8f482e","line":6494,"range":{"start_line":6494,"start_character":25,"end_line":6494,"end_character":47},"updated":"2018-03-21 00:26:02.000000000","message":"And in here, we can delete the source host port bindings. Although we\u0027d have to be careful here because rollback_live_migration_at_destination also calls this method and passes the dest host with teardown\u003dTrue, so we\u0027d need to know if we need to cleanup port bindings for the dest host (rollback case) or source host (post-live-migrate success case).","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f87763b312ba91d9482d56940ad3f64cb5abdbd","unresolved":false,"context_lines":[{"line_number":6491,"context_line":"                instance.save(expected_task_state\u003dtask_states.MIGRATING)"},{"line_number":6492,"context_line":""},{"line_number":6493,"context_line":"        # NOTE(tr3buchet): tear down networks on source host"},{"line_number":6494,"context_line":"        self.network_api.setup_networks_on_host(context, instance,"},{"line_number":6495,"context_line":"                                                prev_host, teardown\u003dTrue)"},{"line_number":6496,"context_line":"        # NOTE(vish): this is necessary to update dhcp"},{"line_number":6497,"context_line":"        self.network_api.setup_networks_on_host(context, instance, self.host)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_42b5c3ed","line":6494,"range":{"start_line":6494,"start_character":25,"end_line":6494,"end_character":47},"in_reply_to":"df7087c5_6f8f482e","updated":"2018-03-23 22:07:37.000000000","message":"This should actually be OK for deleting port bindings. In this case we\u0027re on the dest host in post-live-migration telling this method to cleanup network stuff for the source host, so we\u0027d want to delete the port bindings for the source host.\n\nIn rollback_live_migration_at_destination we\u0027re on the dest host and telling it to teardown for the dest host, which is called from rollback when live migration fails, and that\u0027s when we want to delete the dest host port bindings.\n\nSo using setup_networks_on_host to cleanup port bindings when teardown\u003dTrue seems like a simple way to do this, although it would have to know if the port even has port bindings for that host, which it might not (we could pass that information from the caller or just query neutron API for it, which is probably safest).","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21da3ebe3f9b242123b3bbf6065945d617e7f230","unresolved":false,"context_lines":[{"line_number":6543,"context_line":""},{"line_number":6544,"context_line":"        # NOTE(tr3buchet): setup networks on source host (really it\u0027s re-setup)"},{"line_number":6545,"context_line":"        self.network_api.setup_networks_on_host(context, instance, self.host)"},{"line_number":6546,"context_line":"        if migrate_data and \u0027vifs\u0027 in migrate_data:"},{"line_number":6547,"context_line":"            for vif in migrate_data.vifs:"},{"line_number":6548,"context_line":"                self.network_api.delete_port_binding("},{"line_number":6549,"context_line":"                    context, vif.port_id, dest)"},{"line_number":6550,"context_line":""},{"line_number":6551,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":6552,"context_line":"                context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_4fd044f8","line":6549,"range":{"start_line":6546,"start_character":8,"end_line":6549,"end_character":47},"updated":"2018-03-21 00:26:02.000000000","message":"We could likely do this in setup_networks_on_host which is called from rollback_live_migration_at_destination, however, rollback_live_migration_at_destination is only called conditionally.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb2d82c30c7da8dba8e8324f1b5db0fe56c29530","unresolved":false,"context_lines":[{"line_number":6543,"context_line":""},{"line_number":6544,"context_line":"        # NOTE(tr3buchet): setup networks on source host (really it\u0027s re-setup)"},{"line_number":6545,"context_line":"        self.network_api.setup_networks_on_host(context, instance, self.host)"},{"line_number":6546,"context_line":"        if migrate_data and \u0027vifs\u0027 in migrate_data:"},{"line_number":6547,"context_line":"            for vif in migrate_data.vifs:"},{"line_number":6548,"context_line":"                self.network_api.delete_port_binding("},{"line_number":6549,"context_line":"                    context, vif.port_id, dest)"},{"line_number":6550,"context_line":""},{"line_number":6551,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":6552,"context_line":"                context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_95a3ceb1","line":6549,"range":{"start_line":6546,"start_character":8,"end_line":6549,"end_character":47},"in_reply_to":"df7087c5_4fd044f8","updated":"2018-03-21 01:27:37.000000000","message":"The conditional is bug 1757292 which we can fix separately first.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21da3ebe3f9b242123b3bbf6065945d617e7f230","unresolved":false,"context_lines":[{"line_number":6581,"context_line":"                migrate_data)"},{"line_number":6582,"context_line":""},{"line_number":6583,"context_line":"        if do_cleanup:"},{"line_number":6584,"context_line":"            self.compute_rpcapi.rollback_live_migration_at_destination("},{"line_number":6585,"context_line":"                    context, instance, dest, destroy_disks\u003ddestroy_disks,"},{"line_number":6586,"context_line":"                    migrate_data\u003dmigrate_data)"},{"line_number":6587,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_8f341c4c","line":6584,"range":{"start_line":6584,"start_character":32,"end_line":6584,"end_character":70},"updated":"2018-03-21 00:26:02.000000000","message":"This does more than just cleanup disks, it also cleans up the network information, like the \u0027migrating_to\u0027 attribute in the port binding profile for neutron DVR. That shouldn\u0027t be tied to the do_cleanup flag which is specifically related to whether or not the compute host is using shared ephemeral disk (rbd imagebackend for example).","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eb2d82c30c7da8dba8e8324f1b5db0fe56c29530","unresolved":false,"context_lines":[{"line_number":6581,"context_line":"                migrate_data)"},{"line_number":6582,"context_line":""},{"line_number":6583,"context_line":"        if do_cleanup:"},{"line_number":6584,"context_line":"            self.compute_rpcapi.rollback_live_migration_at_destination("},{"line_number":6585,"context_line":"                    context, instance, dest, destroy_disks\u003ddestroy_disks,"},{"line_number":6586,"context_line":"                    migrate_data\u003dmigrate_data)"},{"line_number":6587,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_158fbe2e","line":6584,"range":{"start_line":6584,"start_character":32,"end_line":6584,"end_character":70},"in_reply_to":"df7087c5_8f341c4c","updated":"2018-03-21 01:27:37.000000000","message":"Right, so for bug 1757292 we\u0027ll add an else here to call the same setup_networks_on_host as we\u0027d call in rollback_live_migration_at_destination.","commit_id":"74f846f67b12430abe56e8e6cf37296edc810b32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b10c6c65d5ac83e1cdd054cbd8a4944b4a81da01","unresolved":false,"context_lines":[{"line_number":6047,"context_line":"            else:"},{"line_number":6048,"context_line":"                disk \u003d None"},{"line_number":6049,"context_line":""},{"line_number":6050,"context_line":"            # TODO(mriedem): Start waiting for network-vif-plugged events"},{"line_number":6051,"context_line":"            # from neutron since pre_live_migration plugs vifs on the"},{"line_number":6052,"context_line":"            # destination host, and we don\u0027t want to start the actual"},{"line_number":6053,"context_line":"            # live migration in the hypervisor until that plugging is done."}],"source_content_type":"text/x-python","patch_set":11,"id":"bf659307_39e85de0","line":6050,"updated":"2018-03-30 15:53:50.000000000","message":"This will not be so easy, see https://review.openstack.org/#/c/553035/ - not all neutron backends (opendaylight at least) send a network-vif-plugged event unless the port binding also changes, which for live migration doesn\u0027t happen until after we\u0027ve started the transfer of the guest.\n\nSo what we probably need for this is:\n\n1. pre_live_migration on the dest host to send a flag back to the source telling it if waiting for vif plugged is safe.\n\n2. a config option, read on the dest host, telling us if we should wait for vif plugged events during live migration; by default this would be False for backward compatibility, and then in Stein we can change that to True by default and comment that if you have networking backends that have this known issue, like ODL, you should disable it.","commit_id":"b2a6077a9151c322abf62fddcbe4a05574598eb9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"80bae195cd00c942ad7735d442c2851170e84bb2","unresolved":false,"context_lines":[{"line_number":6332,"context_line":"        # For neutron, migrate_instance_start will activate the destination"},{"line_number":6333,"context_line":"        # host port bindings, if there are any created by conductor before live"},{"line_number":6334,"context_line":"        # migration started."},{"line_number":6335,"context_line":"        self.network_api.migrate_instance_start(ctxt,"},{"line_number":6336,"context_line":"                                                instance,"},{"line_number":6337,"context_line":"                                                migration)"},{"line_number":6338,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_22db397c","line":6335,"updated":"2018-04-01 14:17:18.000000000","message":"This is failing in the patch that turns on the new flow:\n\nhttp://logs.openstack.org/37/522537/17/check/legacy-tempest-dsvm-multinode-live-migration/c5278d6/logs/screen-n-cpu.txt.gz?level\u003dTRACE#_Mar_31_16_12_18_752475\n\nLooks like a bug in neutron:\n\nhttp://logs.openstack.org/37/522537/17/check/legacy-tempest-dsvm-multinode-live-migration/c5278d6/logs/screen-q-svc.txt.gz?level\u003dTRACE#_Mar_31_16_12_14_191309","commit_id":"857101ab61db15ad327618bfb3a4a83eb6593e22"}],"nova/objects/service.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a936ae82d2bdfbfacf37476c8b11b9262f1d8fc7","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":144,"context_line":"    # Version 34: Adds support to abort queued/preparing live migrations."},{"line_number":145,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":146,"context_line":"    # Version 35: Indicates that nova-compute supports live migration with"},{"line_number":147,"context_line":"    # ports bound early on the destination host using VIFMigrateData."},{"line_number":148,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":149,"context_line":")"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_230c4839","line":148,"range":{"start_line":146,"start_character":0,"end_line":148,"end_character":27},"updated":"2018-07-23 11:40:17.000000000","message":"This feels out of context in this patch. I think the support for this is added in the previous patch to the libvirt driver and the actual use of this feature is added in a later patch.","commit_id":"e53f46672e0fba2c72c972f3f031281a863d7765"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4d1746705a79d49daab18a02092e3b705465487d","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":144,"context_line":"    # Version 34: Adds support to abort queued/preparing live migrations."},{"line_number":145,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":146,"context_line":"    # Version 35: Indicates that nova-compute supports live migration with"},{"line_number":147,"context_line":"    # ports bound early on the destination host using VIFMigrateData."},{"line_number":148,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":149,"context_line":")"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_4deaaf77","line":148,"range":{"start_line":146,"start_character":0,"end_line":148,"end_character":27},"in_reply_to":"5f7c97a3_0f7a86ba","updated":"2018-07-24 13:21:00.000000000","message":"Thanks for the explanation. If this is intentional then I\u0027m OK with it.","commit_id":"e53f46672e0fba2c72c972f3f031281a863d7765"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1b97ed3ca0715ad6516f3a3ab310b1f1874a728e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":144,"context_line":"    # Version 34: Adds support to abort queued/preparing live migrations."},{"line_number":145,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":146,"context_line":"    # Version 35: Indicates that nova-compute supports live migration with"},{"line_number":147,"context_line":"    # ports bound early on the destination host using VIFMigrateData."},{"line_number":148,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":149,"context_line":")"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_0f7a86ba","line":148,"range":{"start_line":146,"start_character":0,"end_line":148,"end_character":27},"in_reply_to":"5f7c97a3_230c4839","updated":"2018-07-23 16:51:03.000000000","message":"We could put it here or in the next change really, it just needs to go before the conductor change that uses it. At this point, the compute is all wired up to handle port bindings, so that\u0027s where I added the version bump.\n\n\u003e and the actual use of this feature is added in a later patch.\n\nYes, but that\u0027s in conductor which is control plane, and our normal pattern for this kind of thing is getting the changes into the compute (which aren\u0027t being used yet), bump the compute version and then we have logic in the controller code (conductor at the end of this series) to enable using the new flows.","commit_id":"e53f46672e0fba2c72c972f3f031281a863d7765"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"627495e6e04e8aad336a39d714a4aa4872b97990","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":144,"context_line":"    # Version 34: Adds support to abort queued/preparing live migrations."},{"line_number":145,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":146,"context_line":"    # Version 35: Indicates that nova-compute supports live migration with"},{"line_number":147,"context_line":"    # ports bound early on the destination host using VIFMigrateData."},{"line_number":148,"context_line":"    {\u0027compute_rpc\u0027: \u00275.0\u0027},"},{"line_number":149,"context_line":")"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_dfbf25fb","line":148,"range":{"start_line":146,"start_character":0,"end_line":148,"end_character":27},"in_reply_to":"5f7c97a3_4deaaf77","updated":"2018-07-25 15:44:40.000000000","message":"Yeah, it\u0027s just for signaling.","commit_id":"e53f46672e0fba2c72c972f3f031281a863d7765"}],"nova/tests/fixtures.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"15102181e3a1797b8686248e6b3db4e468bcde45","unresolved":false,"context_lines":[{"line_number":1270,"context_line":""},{"line_number":1271,"context_line":"        return {\u0027port\u0027: new_port}"},{"line_number":1272,"context_line":""},{"line_number":1273,"context_line":"    def bind_ports_to_host(self, context, instance, host,"},{"line_number":1274,"context_line":"                           vnic_type\u003dNone, profile\u003dNone):"},{"line_number":1275,"context_line":"        for vif in instance.get_network_info():"},{"line_number":1276,"context_line":"            self.bindings[vif[\u0027id\u0027]] \u003d {\u0027host\u0027: host,"},{"line_number":1277,"context_line":"                                        \u0027vnic_type\u0027: vnic_type or \u0027normal\u0027,"},{"line_number":1278,"context_line":"                                        \u0027profile\u0027: profile}"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"    def delete_port_binding(self, context, port_id, host):"},{"line_number":1281,"context_line":"        self.bindings.pop(port_id)"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"class _NoopConductor(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_666554b5","line":1281,"range":{"start_line":1273,"start_character":4,"end_line":1281,"end_character":34},"updated":"2018-03-26 14:17:44.000000000","message":"I\u0027m not sure that these are needed in this patch anymore.","commit_id":"b69056a34067a4d0d12ccf56280c441cdd265fb3"}]}
