)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7461,"name":"Paul Murray","email":"pmurray@hpe.com","username":"ptm"},"change_message_id":"8b54a4bba25732ef67ae6ba9076f4011e72f25cd","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Depends-On: Ifa919a9076a3cc2696688af3feadf8d7fa9e6fc2"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: #1414559"},{"line_number":19,"context_line":"Change-Id: Ib1cb9c2f6eb2f5ce6280c685ae44a691665b4e98"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a68dd71_aa0f4f87","line":18,"updated":"2016-01-26 06:48:09.000000000","message":"Does this also fix: https://bugs.launchpad.net/neutron/+bug/1456073","commit_id":"385df9b1f6b9535e5144f712e75326c4b2b16f39"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2a9667ce706dc78337cdda2fcd6c3e1e66b58a00","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Depends-On: Ifa919a9076a3cc2696688af3feadf8d7fa9e6fc2"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: #1414559"},{"line_number":19,"context_line":"Change-Id: Ib1cb9c2f6eb2f5ce6280c685ae44a691665b4e98"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a68dd71_3002ee0c","line":18,"in_reply_to":"9a68dd71_aa0f4f87","updated":"2016-01-26 08:22:09.000000000","message":"It doesn\u0027t, DVR has its own difficulties with live migration which are handled separately","commit_id":"385df9b1f6b9535e5144f712e75326c4b2b16f39"}],"nova/compute/api.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"3a2fca60ea871478017d7cde879be0ea98b24df2","unresolved":false,"context_lines":[{"line_number":3274,"context_line":"        # but doesn\u0027t know where they go. We need to collate lists"},{"line_number":3275,"context_line":"        # by the host the affected instance is on and dispatch them"},{"line_number":3276,"context_line":"        # according to host"},{"line_number":3277,"context_line":"        instances_by_host \u003d {}"},{"line_number":3278,"context_line":"        events_by_host \u003d {}"},{"line_number":3279,"context_line":"        hosts_by_instance \u003d {}"},{"line_number":3280,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_d2eb8eda","line":3277,"updated":"2016-02-01 14:21:09.000000000","message":"nit: this could probably be a defaultdict(list) to clean up the code below a bit","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"80541b8b4f41d0f2e67f26b1b944570a3e7fc3bb","unresolved":false,"context_lines":[{"line_number":3274,"context_line":"        # but doesn\u0027t know where they go. We need to collate lists"},{"line_number":3275,"context_line":"        # by the host the affected instance is on and dispatch them"},{"line_number":3276,"context_line":"        # according to host"},{"line_number":3277,"context_line":"        instances_by_host \u003d {}"},{"line_number":3278,"context_line":"        events_by_host \u003d {}"},{"line_number":3279,"context_line":"        hosts_by_instance \u003d {}"},{"line_number":3280,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_0176aed6","line":3277,"in_reply_to":"7a5de9d1_d2eb8eda","updated":"2016-02-01 15:31:05.000000000","message":"Done","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"01c3a3b68f7ecf6427b7d7a26d5b3c0d50e864b1","unresolved":false,"context_lines":[{"line_number":3285,"context_line":""},{"line_number":3286,"context_line":"            # check if instance is in the process of live migration - in that"},{"line_number":3287,"context_line":"            # case destination might be waiting for network-vif-plugged event"},{"line_number":3288,"context_line":"            dest_host \u003d self._get_instance_destination_host("},{"line_number":3289,"context_line":"                context, instance.uuid)"},{"line_number":3290,"context_line":"            if dest_host is not None:"},{"line_number":3291,"context_line":"                instances_on_host \u003d instances_by_host.get(dest_host, [])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_7bf4f559","line":3288,"updated":"2016-02-01 14:53:52.000000000","message":"Can\u0027t we check the instance task_state before deciding to make this extra database query? Doing this for every instance we receive an event for seems rather expensive, especially given how infrequent instances are likely to be in the middle of live migrating to another host.","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"80541b8b4f41d0f2e67f26b1b944570a3e7fc3bb","unresolved":false,"context_lines":[{"line_number":3285,"context_line":""},{"line_number":3286,"context_line":"            # check if instance is in the process of live migration - in that"},{"line_number":3287,"context_line":"            # case destination might be waiting for network-vif-plugged event"},{"line_number":3288,"context_line":"            dest_host \u003d self._get_instance_destination_host("},{"line_number":3289,"context_line":"                context, instance.uuid)"},{"line_number":3290,"context_line":"            if dest_host is not None:"},{"line_number":3291,"context_line":"                instances_on_host \u003d instances_by_host.get(dest_host, [])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_c1a4164c","line":3288,"in_reply_to":"7a5de9d1_7bf4f559","updated":"2016-02-01 15:31:05.000000000","message":"agree","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"}],"nova/compute/manager.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7aad9ef2306a1c8aaf6c39fe7c860a56eade4627","unresolved":false,"context_lines":[{"line_number":6446,"context_line":"            migration_filters \u003d {\u0027instance_uuid\u0027: instance.uuid,"},{"line_number":6447,"context_line":"                                 \u0027migration_type\u0027: \u0027live-migration\u0027,"},{"line_number":6448,"context_line":"                                 \u0027status\u0027: \u0027preparing\u0027}"},{"line_number":6449,"context_line":"            migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":6450,"context_line":"                context, migration_filters)"},{"line_number":6451,"context_line":"            LOG.error(\u0027Migrations found for instance: %s\u0027, migrations)"},{"line_number":6452,"context_line":"            # dispatch the event to the destination"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_2ace7082","line":6449,"updated":"2015-11-18 13:02:27.000000000","message":"This is not working on versions prior to Liberty as migration info was not stored in DB","commit_id":"dada5e67245976e6da6d871c03a3b7aea9a7afec"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"7535720cb293521f60f9833c41db79b2234334c6","unresolved":false,"context_lines":[{"line_number":6453,"context_line":"            # This will not work on versions prior to Liberty as migration"},{"line_number":6454,"context_line":"            # info was not stored in DB"},{"line_number":6455,"context_line":"            migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":6456,"context_line":"                context, migration_filters)"},{"line_number":6457,"context_line":"            if migrations:"},{"line_number":6458,"context_line":"                # dispatch the event to the destination"},{"line_number":6459,"context_line":"                LOG.debug(\u0027Instance is migrating, resending event to host %s\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_838e702c","line":6456,"updated":"2015-12-07 09:59:48.000000000","message":"I wonder if we could backport this somehow to earlier versions. Is there another mechanism that could be used there?","commit_id":"c831f548dbf0d12d84d84613f8f4d953dc6c098b"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"6f12fe6567e29a68ea69277c5b1c45f8b4ddac8f","unresolved":false,"context_lines":[{"line_number":6454,"context_line":"                # dispatch the event to the destination"},{"line_number":6455,"context_line":"                LOG.debug(\u0027Instance is migrating, resending event to host %s\u0027,"},{"line_number":6456,"context_line":"                          migrations[0].dest_compute)"},{"line_number":6457,"context_line":"                self.compute_rpcapi.external_instance_event("},{"line_number":6458,"context_line":"                    context, [instance], [event],"},{"line_number":6459,"context_line":"                    host\u003dmigrations[0].dest_compute)"},{"line_number":6460,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_48ba1bc2","line":6457,"range":{"start_line":6457,"start_character":16,"end_line":6457,"end_character":59},"updated":"2016-01-28 13:29:26.000000000","message":"It would be useful for dansmith to look at this too, but can\u0027t you just do this in the API - we want to avoid casts between compute nodes as much as possible","commit_id":"385df9b1f6b9535e5144f712e75326c4b2b16f39"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1f95f6bc0f6e698979bb389c9fea3c4a4fcce8c7","unresolved":false,"context_lines":[{"line_number":6454,"context_line":"                # dispatch the event to the destination"},{"line_number":6455,"context_line":"                LOG.debug(\u0027Instance is migrating, resending event to host %s\u0027,"},{"line_number":6456,"context_line":"                          migrations[0].dest_compute)"},{"line_number":6457,"context_line":"                self.compute_rpcapi.external_instance_event("},{"line_number":6458,"context_line":"                    context, [instance], [event],"},{"line_number":6459,"context_line":"                    host\u003dmigrations[0].dest_compute)"},{"line_number":6460,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a5de9d1_f87cf673","line":6457,"range":{"start_line":6457,"start_character":16,"end_line":6457,"end_character":59},"in_reply_to":"7a5de9d1_48ba1bc2","updated":"2016-01-28 14:04:20.000000000","message":"Yeah, this should go to the API","commit_id":"385df9b1f6b9535e5144f712e75326c4b2b16f39"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf96f6fbb0b085b9e02a2f6460dbe5cc58fd0364","unresolved":false,"context_lines":[{"line_number":5265,"context_line":"            else:"},{"line_number":5266,"context_line":"                disk \u003d None"},{"line_number":5267,"context_line":""},{"line_number":5268,"context_line":"            extra_timeout \u003d self.driver.get_pre_live_migration_extra_timeout()"},{"line_number":5269,"context_line":"            migrate_data \u003d self.compute_rpcapi.pre_live_migration("},{"line_number":5270,"context_line":"                context, instance,"},{"line_number":5271,"context_line":"                block_migration, disk, dest, migrate_data, extra_timeout)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_69a056f5","line":5268,"updated":"2016-04-12 21:32:04.000000000","message":"Where is the test that validates that this is called?","commit_id":"dd6a0c74a46683eba2616f58044d642bf93554f5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6c388b712050f18d838a30779da96b7e77e0ed79","unresolved":false,"context_lines":[{"line_number":5265,"context_line":"            else:"},{"line_number":5266,"context_line":"                disk \u003d None"},{"line_number":5267,"context_line":""},{"line_number":5268,"context_line":"            extra_timeout \u003d self.driver.get_pre_live_migration_extra_timeout()"},{"line_number":5269,"context_line":"            migrate_data \u003d self.compute_rpcapi.pre_live_migration("},{"line_number":5270,"context_line":"                context, instance,"},{"line_number":5271,"context_line":"                block_migration, disk, dest, migrate_data, extra_timeout)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_d4b64cdb","line":5268,"in_reply_to":"5a18252c_69a056f5","updated":"2016-04-13 15:59:49.000000000","message":"Will be added","commit_id":"dd6a0c74a46683eba2616f58044d642bf93554f5"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"0237d18b8e7fdfee919a48ae4cbcf38732c746ff","unresolved":false,"context_lines":[{"line_number":610,"context_line":"            host, migrate_data\u003dNone):"},{"line_number":611,"context_line":"        version \u003d \u00274.0\u0027"},{"line_number":612,"context_line":"        timeout \u003d (self.client.conf.rpc_response_timeout +"},{"line_number":613,"context_line":"                   CONF.vif_plugging_timeout)"},{"line_number":614,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003dversion,"},{"line_number":615,"context_line":"                                    timeout\u003dtimeout)"},{"line_number":616,"context_line":"        return cctxt.call(ctxt, \u0027pre_live_migration\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_49242aae","line":613,"updated":"2016-01-22 09:22:19.000000000","message":"I\u0027m not sure whether vif_plugging_timeout should be used as a timeout for pre_live_migration step","commit_id":"385df9b1f6b9535e5144f712e75326c4b2b16f39"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2a9667ce706dc78337cdda2fcd6c3e1e66b58a00","unresolved":false,"context_lines":[{"line_number":610,"context_line":"            host, migrate_data\u003dNone):"},{"line_number":611,"context_line":"        version \u003d \u00274.0\u0027"},{"line_number":612,"context_line":"        timeout \u003d (self.client.conf.rpc_response_timeout +"},{"line_number":613,"context_line":"                   CONF.vif_plugging_timeout)"},{"line_number":614,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003dversion,"},{"line_number":615,"context_line":"                                    timeout\u003dtimeout)"},{"line_number":616,"context_line":"        return cctxt.call(ctxt, \u0027pre_live_migration\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_3b308fe8","line":613,"in_reply_to":"9a68dd71_49242aae","updated":"2016-01-26 08:22:09.000000000","message":"on pre_live_migration destination host will wait for network-vif-plugged event from neutron within vif_plugging_timeout seconds so here, on source host, we should increase timeout accordingly. Does it makes sense?","commit_id":"385df9b1f6b9535e5144f712e75326c4b2b16f39"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"01c3a3b68f7ecf6427b7d7a26d5b3c0d50e864b1","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"CONF.register_opt(rpcapi_cap_opt, \u0027upgrade_levels\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"CONF.import_opt(\u0027vif_plugging_timeout\u0027, \u0027nova.virt.driver\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":59,"context_line":"LAST_VERSION \u003d None"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_06124457","line":56,"updated":"2016-02-01 14:53:52.000000000","message":"This seems like a layering violation to me. I understand why you\u0027re adding it, but it seems wrong to bake this into the RPC layer. This behavior is currently only supported by the libvirt driver, which means adding to the default timeout will cause other drivers to wait longer before giving up even when there is no extra timeout buried in the driver. Further, there is nothing to prevent libvirt from later expecting another event or two from neutron, and this will be far too obscure a location to hope a developer will update when that happens.","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"80541b8b4f41d0f2e67f26b1b944570a3e7fc3bb","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"CONF.register_opt(rpcapi_cap_opt, \u0027upgrade_levels\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"CONF.import_opt(\u0027vif_plugging_timeout\u0027, \u0027nova.virt.driver\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":59,"context_line":"LAST_VERSION \u003d None"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_13b36551","line":56,"in_reply_to":"7a5de9d1_06124457","updated":"2016-02-01 15:31:05.000000000","message":"I understand the concern, let me think what can be done here. Probably we can add optional \u0027timeout\u0027 parameter here and pass it from compute manager based on virt driver configured","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"29a22b0a0fcabf680006f899fb93eb1a74bc34cf","unresolved":false,"context_lines":[{"line_number":4522,"context_line":"        uuid \u003d filters[\"instance_uuid\"]"},{"line_number":4523,"context_line":"        query \u003d query.filter(models.Migration.instance_uuid \u003d\u003d uuid)"},{"line_number":4524,"context_line":"    if \"migration_type\" in filters:"},{"line_number":4525,"context_line":"        type \u003d filters[\"migration_type\"]"},{"line_number":4526,"context_line":"        query \u003d query.filter(models.Migration.migration_type \u003d\u003d type)"},{"line_number":4527,"context_line":"    return query.all()"},{"line_number":4528,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_87db55ed","line":4525,"range":{"start_line":4525,"start_character":8,"end_line":4525,"end_character":12},"updated":"2015-12-17 02:42:04.000000000","message":"type is a reserved keyword, besides, it\u0027s seems it\u0027s in like 4515","commit_id":"6dca90c39c1014605023c2f8b12e633f2480e8d6"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c965fcbea81fe6fc8db24742d1d50205a95dce16","unresolved":false,"context_lines":[{"line_number":4522,"context_line":"        uuid \u003d filters[\"instance_uuid\"]"},{"line_number":4523,"context_line":"        query \u003d query.filter(models.Migration.instance_uuid \u003d\u003d uuid)"},{"line_number":4524,"context_line":"    if \"migration_type\" in filters:"},{"line_number":4525,"context_line":"        type \u003d filters[\"migration_type\"]"},{"line_number":4526,"context_line":"        query \u003d query.filter(models.Migration.migration_type \u003d\u003d type)"},{"line_number":4527,"context_line":"    return query.all()"},{"line_number":4528,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a7e1126_241e060d","line":4525,"range":{"start_line":4525,"start_character":8,"end_line":4525,"end_character":12},"in_reply_to":"3a7e1126_87db55ed","updated":"2015-12-17 08:43:46.000000000","message":"ah, how could I miss it, thanks","commit_id":"6dca90c39c1014605023c2f8b12e633f2480e8d6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"01c3a3b68f7ecf6427b7d7a26d5b3c0d50e864b1","unresolved":false,"context_lines":[{"line_number":4535,"context_line":"    if \"hidden\" in filters:"},{"line_number":4536,"context_line":"        hidden \u003d filters[\"hidden\"]"},{"line_number":4537,"context_line":"        query \u003d query.filter(models.Migration.hidden \u003d\u003d hidden)"},{"line_number":4538,"context_line":"    if \"instance_uuid\" in filters:"},{"line_number":4539,"context_line":"        uuid \u003d filters[\"instance_uuid\"]"},{"line_number":4540,"context_line":"        query \u003d query.filter(models.Migration.instance_uuid \u003d\u003d uuid)"},{"line_number":4541,"context_line":"    return query.all()"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_26566006","line":4538,"updated":"2016-02-01 14:53:52.000000000","message":"Where is the test for this?","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"80541b8b4f41d0f2e67f26b1b944570a3e7fc3bb","unresolved":false,"context_lines":[{"line_number":4535,"context_line":"    if \"hidden\" in filters:"},{"line_number":4536,"context_line":"        hidden \u003d filters[\"hidden\"]"},{"line_number":4537,"context_line":"        query \u003d query.filter(models.Migration.hidden \u003d\u003d hidden)"},{"line_number":4538,"context_line":"    if \"instance_uuid\" in filters:"},{"line_number":4539,"context_line":"        uuid \u003d filters[\"instance_uuid\"]"},{"line_number":4540,"context_line":"        query \u003d query.filter(models.Migration.instance_uuid \u003d\u003d uuid)"},{"line_number":4541,"context_line":"    return query.all()"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_93bd15da","line":4538,"in_reply_to":"7a5de9d1_26566006","updated":"2016-02-01 15:31:05.000000000","message":"will add","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"3a2fca60ea871478017d7cde879be0ea98b24df2","unresolved":false,"context_lines":[{"line_number":2663,"context_line":"                                                 instances, events)"},{"line_number":2664,"context_line":"        method \u003d self.compute_api.compute_rpcapi.external_instance_event"},{"line_number":2665,"context_line":"        method.assert_any_call("},{"line_number":2666,"context_line":"            self.context, instances[0:2], events[0:2], \u0027host1\u0027)"},{"line_number":2667,"context_line":"        method.assert_any_call(self.context,"},{"line_number":2668,"context_line":"                               [instances[0], instances[2]],"},{"line_number":2669,"context_line":"                               [events[0], events[2]],"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_d5dff8d3","line":2666,"updated":"2016-02-01 14:21:09.000000000","message":"don\u0027t we expect to see only instances[0:1] and events[0:1] here?","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"ca985013d80e6244471ba4ef527cabefdbfc0524","unresolved":false,"context_lines":[{"line_number":2663,"context_line":"                                                 instances, events)"},{"line_number":2664,"context_line":"        method \u003d self.compute_api.compute_rpcapi.external_instance_event"},{"line_number":2665,"context_line":"        method.assert_any_call("},{"line_number":2666,"context_line":"            self.context, instances[0:2], events[0:2], \u0027host1\u0027)"},{"line_number":2667,"context_line":"        method.assert_any_call(self.context,"},{"line_number":2668,"context_line":"                               [instances[0], instances[2]],"},{"line_number":2669,"context_line":"                               [events[0], events[2]],"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_405a64f3","line":2666,"in_reply_to":"7a5de9d1_d5dff8d3","updated":"2016-02-01 14:29:21.000000000","message":"Sorry. I forgot that slices expect a half-open interval and 2nd element is actually *not* included","commit_id":"f9d336d96538c9ecfc394fce167b3ee59676bcec"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8c5a6c95441b1a6ec0b9213b1b596dc371d93416","unresolved":false,"context_lines":[{"line_number":6312,"context_line":"        events \u003d []"},{"line_number":6313,"context_line":"        if (self._conn_supports_start_paused and utils.is_neutron() and"},{"line_number":6314,"context_line":"                timeout):"},{"line_number":6315,"context_line":"            events \u003d self._get_neutron_events("},{"line_number":6316,"context_line":"                network_info, live_migration\u003dTrue)"},{"line_number":6317,"context_line":"        try:"},{"line_number":6318,"context_line":"            with self.virtapi.wait_for_instance_event("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_d7578ec8","line":6315,"updated":"2015-11-23 09:20:33.000000000","message":"_get_neutron_events should only return events for ovs type vifs in this case","commit_id":"c831f548dbf0d12d84d84613f8f4d953dc6c098b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"aa61fc297bdc2f7ffa46e3b7e5e222d8f170db94","unresolved":false,"context_lines":[{"line_number":6312,"context_line":"        events \u003d []"},{"line_number":6313,"context_line":"        if (self._conn_supports_start_paused and utils.is_neutron() and"},{"line_number":6314,"context_line":"                timeout):"},{"line_number":6315,"context_line":"            events \u003d self._get_neutron_events("},{"line_number":6316,"context_line":"                network_info, live_migration\u003dTrue)"},{"line_number":6317,"context_line":"        try:"},{"line_number":6318,"context_line":"            with self.virtapi.wait_for_instance_event("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_897a1187","line":6315,"in_reply_to":"ba8a016a_03404033","updated":"2015-11-24 08:54:19.000000000","message":"right, this is what I was thinking about. Will upload new patch set shortly. Meanwhile can you please remove -1 from neutron patch?","commit_id":"c831f548dbf0d12d84d84613f8f4d953dc6c098b"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"ab5ec8995ad513cd89a58285e95425d5a3b0cd69","unresolved":false,"context_lines":[{"line_number":6312,"context_line":"        events \u003d []"},{"line_number":6313,"context_line":"        if (self._conn_supports_start_paused and utils.is_neutron() and"},{"line_number":6314,"context_line":"                timeout):"},{"line_number":6315,"context_line":"            events \u003d self._get_neutron_events("},{"line_number":6316,"context_line":"                network_info, live_migration\u003dTrue)"},{"line_number":6317,"context_line":"        try:"},{"line_number":6318,"context_line":"            with self.virtapi.wait_for_instance_event("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_03404033","line":6315,"in_reply_to":"ba8a016a_d7578ec8","updated":"2015-11-24 08:07:51.000000000","message":"This is a good proposal! In the case where live_migration is True, only ovs vifs should be returned. The information if an vif is an ovs vif is probably contained in the vifs dictionary, isn\u0027t it?\n\nBut in the non live migration case, the behavior must not change!","commit_id":"c831f548dbf0d12d84d84613f8f4d953dc6c098b"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"cd027d58138f8058a2860c317e04dabc1f153006","unresolved":false,"context_lines":[{"line_number":4833,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4834,"context_line":"        # ovs type VIFs"},{"line_number":4835,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4836,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027]"},{"line_number":4837,"context_line":""},{"line_number":4838,"context_line":"    def _create_domain_and_network(self, context, xml, instance, network_info,"},{"line_number":4839,"context_line":"                                   disk_info, block_device_info\u003dNone,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aed3d3a_f1bfeba7","line":4836,"updated":"2016-02-29 08:59:57.000000000","message":"It seems like 2 types of ovs vif exists #1 ovs_bridge and #2 ovs-hybrid.\n\n#1 Only the hybrid-plug [1] does some plug actions that will be applied during pre-live migration --\u003e in this case the vif-plug event will be sent by neutron.\n\n#2 However in the ovs-bridge case [2] no plug actions will be done during pre live migration. --\u003e you will wait forever for this event.\n\nSeems like the the mech driver steers which plug to use. If the hybrid iptables fw driver is configured, then hybrid plug is chosen.\n\nYou should extend this request and also check if the hybrid plug is enabled. the vif model offers a method for that [3]\n\n\n\n\n[1] https://github.com/openstack/nova/blob/master/nova/virt/libvirt/vif.py#L517\n[2] https://github.com/openstack/nova/blob/master/nova/virt/libvirt/vif.py#L476\n[3] https://github.com/openstack/nova/blob/master/nova/network/model.py#L419","commit_id":"33ea399b05de512dd1ae1540692ea338d3bd0d7d"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"65a5755f3391e41859847b2c5376badb5f189418","unresolved":false,"context_lines":[{"line_number":4833,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4834,"context_line":"        # ovs type VIFs"},{"line_number":4835,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4836,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027]"},{"line_number":4837,"context_line":""},{"line_number":4838,"context_line":"    def _create_domain_and_network(self, context, xml, instance, network_info,"},{"line_number":4839,"context_line":"                                   disk_info, block_device_info\u003dNone,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7af24918_7366e6ed","line":4836,"in_reply_to":"9aed3d3a_f1bfeba7","updated":"2016-03-04 08:59:01.000000000","message":"Good point, Done","commit_id":"33ea399b05de512dd1ae1540692ea338d3bd0d7d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf96f6fbb0b085b9e02a2f6460dbe5cc58fd0364","unresolved":false,"context_lines":[{"line_number":885,"context_line":"                                 \u0027retries\u0027: retries},"},{"line_number":886,"context_line":"                                instance\u003dinstance)"},{"line_number":887,"context_line":"                    greenthread.sleep(1)"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"    def _unplug_vifs(self, instance, network_info, ignore_errors):"},{"line_number":890,"context_line":"        \"\"\"Unplug VIFs from networks.\"\"\""},{"line_number":891,"context_line":"        for vif in network_info:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_0942823e","line":888,"updated":"2016-04-12 21:32:04.000000000","message":"Where are the tests for all of these libvirt changes?","commit_id":"dd6a0c74a46683eba2616f58044d642bf93554f5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6c388b712050f18d838a30779da96b7e77e0ed79","unresolved":false,"context_lines":[{"line_number":885,"context_line":"                                 \u0027retries\u0027: retries},"},{"line_number":886,"context_line":"                                instance\u003dinstance)"},{"line_number":887,"context_line":"                    greenthread.sleep(1)"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":"    def _unplug_vifs(self, instance, network_info, ignore_errors):"},{"line_number":890,"context_line":"        \"\"\"Unplug VIFs from networks.\"\"\""},{"line_number":891,"context_line":"        for vif in network_info:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_c0830f03","line":888,"in_reply_to":"5a18252c_0942823e","updated":"2016-04-13 15:59:49.000000000","message":"Will add","commit_id":"dd6a0c74a46683eba2616f58044d642bf93554f5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf96f6fbb0b085b9e02a2f6460dbe5cc58fd0364","unresolved":false,"context_lines":[{"line_number":6712,"context_line":"        events \u003d []"},{"line_number":6713,"context_line":"        if (self._conn_supports_start_paused and utils.is_neutron() and"},{"line_number":6714,"context_line":"                timeout):"},{"line_number":6715,"context_line":"            events \u003d self._get_neutron_events_live_migration(network_info)"},{"line_number":6716,"context_line":"        try:"},{"line_number":6717,"context_line":"            with self.virtapi.wait_for_instance_event("},{"line_number":6718,"context_line":"                    instance, events, deadline\u003dtimeout,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_491e3a64","line":6715,"updated":"2016-04-12 21:32:04.000000000","message":"Since when has neutron been sending these events for live migration? Always?","commit_id":"dd6a0c74a46683eba2616f58044d642bf93554f5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6c388b712050f18d838a30779da96b7e77e0ed79","unresolved":false,"context_lines":[{"line_number":6712,"context_line":"        events \u003d []"},{"line_number":6713,"context_line":"        if (self._conn_supports_start_paused and utils.is_neutron() and"},{"line_number":6714,"context_line":"                timeout):"},{"line_number":6715,"context_line":"            events \u003d self._get_neutron_events_live_migration(network_info)"},{"line_number":6716,"context_line":"        try:"},{"line_number":6717,"context_line":"            with self.virtapi.wait_for_instance_event("},{"line_number":6718,"context_line":"                    instance, events, deadline\u003dtimeout,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_9feced2a","line":6715,"in_reply_to":"5a18252c_491e3a64","updated":"2016-04-13 15:59:49.000000000","message":"It will be added with this patch in Neutron: https://review.openstack.org/#/c/246898/ (Depends-On in the commit message)","commit_id":"dd6a0c74a46683eba2616f58044d642bf93554f5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"541ad16650606a33241bd90804dc6805c52fd091","unresolved":false,"context_lines":[{"line_number":6712,"context_line":"        events \u003d []"},{"line_number":6713,"context_line":"        if (self._conn_supports_start_paused and utils.is_neutron() and"},{"line_number":6714,"context_line":"                timeout):"},{"line_number":6715,"context_line":"            events \u003d self._get_neutron_events_live_migration(network_info)"},{"line_number":6716,"context_line":"        try:"},{"line_number":6717,"context_line":"            with self.virtapi.wait_for_instance_event("},{"line_number":6718,"context_line":"                    instance, events, deadline\u003dtimeout,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_436ee995","line":6715,"in_reply_to":"5a18252c_9feced2a","updated":"2016-04-13 16:12:58.000000000","message":"Okay then we can\u0027t land this until after Newton (assuming the patch above lands in Newton), IMHO.\n\nOtherwise people might upgrade nova before newton and all migrations will fail with timeouts.","commit_id":"dd6a0c74a46683eba2616f58044d642bf93554f5"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"251d95190b3cdbd161b2df7ef8ce8fa73cbd3611","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9abb7d3a_d055b5c6","line":4881,"updated":"2016-06-03 08:37:15.000000000","message":"why?","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"fc4e38360310b8a40a95955ae426b12c61279a1a","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_92acaaa1","line":4881,"in_reply_to":"7aa08908_2dd5e242","updated":"2016-06-07 12:59:58.000000000","message":"I don\u0027t know about other cases, probably some may also have problems. This patch is fixing a particular problem with Nova+Neutron reference implementation.","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ecef0bad1b18d11acf0744d890ae73da2ecc2c06","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_c881ba91","line":4881,"in_reply_to":"7aa08908_51daa079","updated":"2016-06-06 07:40:11.000000000","message":"I\u0027d not say this is hardcode since we\u0027re handling specific case here. Do you have an idea on how we can discover this other way?","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"aeac27c9b0de4cec49d05215b61162ee13e5ccd6","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_8953aee1","line":4881,"in_reply_to":"7aa08908_92acaaa1","updated":"2016-06-08 07:09:28.000000000","message":"Linuxbridge and ovs non-hybrid plug should have the same issue! But it\u0027s more difficult to deal with that, as in those cases the agent detects and processes the port on the migration target after migration already started.\n\n\none way to solve it for those cases might be to start the migration (vm shell is build up on the migration target - tap is being created), then immediately pause migration (to give the l2 agent time to process the port), and on vif-plug-event continue. But not sure if pausing a migration is possible...","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"829e2ac66751ebb3277a9c153d680ce34ae21b47","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_c61d2611","line":4881,"in_reply_to":"7aa08908_988381cc","updated":"2016-06-06 09:16:09.000000000","message":"The bug is with hybrid plug only: neutron should properly handle qvo- device attached to OVS before nova proceeds with live migration","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"8b0ad164f056c10952c08906bf7db1950c58ca5b","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_2dd5e242","line":4881,"in_reply_to":"7aa08908_c61d2611","updated":"2016-06-06 11:39:11.000000000","message":"you mean other cases won\u0027t drop RARPs?  why not?","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1c81b0e86c3f8289fb5399fc9405df51221f994f","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_988381cc","line":4881,"in_reply_to":"7aa08908_c881ba91","updated":"2016-06-06 08:45:49.000000000","message":"well, after a little more thought, i\u0027m not sure if i understand the change correctly.\ndoes this mean fixing bug 1414559 only for ovs-hybrid case and leave others broken?","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b4c939cffb948bd94fc7621d12336d53c65e9189","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9abb7d3a_d3e5bfa8","line":4881,"in_reply_to":"9abb7d3a_b3bf5ba9","updated":"2016-06-03 09:00:29.000000000","message":"This was discussed in PS11, thanks Andreas","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c31132bcbec5e1ae3203a5060ed41936db9dcd7b","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_51daa079","line":4881,"in_reply_to":"9abb7d3a_b3bf5ba9","updated":"2016-06-06 01:51:22.000000000","message":"thank you for explanation.\ni think the difference should be discoverable, rather than being hardcoded here.","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"d5c53cd6c162cf5cec119910ac11498001efec07","unresolved":false,"context_lines":[{"line_number":4878,"context_line":""},{"line_number":4879,"context_line":"    def _get_neutron_events_live_migration(self, network_info):"},{"line_number":4880,"context_line":"        # NOTE(obondarev): for live migration case we should count only"},{"line_number":4881,"context_line":"        # ovs type VIFs and check for hybrid plug"},{"line_number":4882,"context_line":"        return [(\u0027network-vif-plugged\u0027, vif[\u0027id\u0027]) for vif in network_info if"},{"line_number":4883,"context_line":"                vif.get(\u0027type\u0027) \u003d\u003d \u0027ovs\u0027 and vif.is_hybrid_plug_enabled()]"},{"line_number":4884,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9abb7d3a_b3bf5ba9","line":4881,"in_reply_to":"9abb7d3a_d055b5c6","updated":"2016-06-03 08:57:12.000000000","message":"cause only with ovs-hybrid plug, the ovs agent recognizes a new port when nova does plug_vif() and though trigger the vif-plugged-event.\n\nWith all other plugs (lb, ovs-normal) the agent detects the new port only when the instances\u0027s tap device got created (after migration already started). plug_vif() for those types won\u0027t trigger the vif-plugged event.","commit_id":"fac33cb365748d1a321acab199f5bd684958c918"}]}
