From: Kevin Benton Date: Tue, 18 Mar 2014 19:11:53 +0000 (-0700) Subject: ML2 BigSwitch: Don't modify parent context X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=9014f66fce619af6d72823b3fdb0ecf148582649;p=openstack-build%2Fneutron-build.git ML2 BigSwitch: Don't modify parent context Makes a copy of the port context before changing it in preparation for the backend controller so other drivers are not affected. Also removes a UT that was exercising direct modification of VIF details in the port context, which is not allowed by the ML2 plugin. Closes-Bug: #1294308 Change-Id: I47281dcd23c022813b8b6eda0a3d39c4482277b9 --- diff --git a/neutron/plugins/ml2/drivers/mech_bigswitch/driver.py b/neutron/plugins/ml2/drivers/mech_bigswitch/driver.py index ced7b37ff..7954b7d37 100644 --- a/neutron/plugins/ml2/drivers/mech_bigswitch/driver.py +++ b/neutron/plugins/ml2/drivers/mech_bigswitch/driver.py @@ -17,6 +17,7 @@ # # @author: Sumit Naiksatam, sumitnaiksatam@gmail.com, Big Switch Networks, Inc. # @author: Kevin Benton, Big Switch Networks, Inc. +import copy import eventlet from oslo.config import cfg @@ -94,7 +95,8 @@ class BigSwitchMechanismDriver(NeutronRestProxyV2Base, self.servers.rest_delete_port(net["tenant_id"], net["id"], port['id']) def _prepare_port_for_controller(self, context): - port = context.current + # make a copy so the context isn't changed for other drivers + port = copy.deepcopy(context.current) net = context.network.current port['network'] = net port['binding_host'] = context._binding.host diff --git a/neutron/tests/unit/ml2/drivers/test_bigswitch_mech.py b/neutron/tests/unit/ml2/drivers/test_bigswitch_mech.py index c1d3c5277..e09c690c7 100644 --- a/neutron/tests/unit/ml2/drivers/test_bigswitch_mech.py +++ b/neutron/tests/unit/ml2/drivers/test_bigswitch_mech.py @@ -77,18 +77,6 @@ class TestBigSwitchMechDriverPortsV2(test_db_plugin.TestPortsV2, self.assertEqual(port['port']['status'], 'DOWN') self.assertEqual(self.port_create_status, 'DOWN') - # exercise the host_id tracking code - def test_port_vif_details(self): - kwargs = {'name': 'name', 'binding:host_id': 'ivshost', - 'device_id': 'override_dev'} - with self.port(**kwargs) as port: - self.assertEqual(port['port']['binding:vif_type'], - portbindings.VIF_TYPE_IVS) - kwargs = {'name': 'name2', 'binding:host_id': 'someotherhost', - 'device_id': 'other_dev'} - with self.port(**kwargs) as port: - self.assertEqual(port['port']['binding:vif_type'], self.VIF_TYPE) - def _make_port(self, fmt, net_id, expected_res_status=None, arg_list=None, **kwargs): arg_list = arg_list or ()