From: Kevin Benton Date: Thu, 4 Jun 2015 01:25:14 +0000 (-0700) Subject: Allow update_port_status to take network param X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=ea35b299f06050608f3e7bb6fbc880006ed31024;p=openstack-build%2Fneutron-build.git Allow update_port_status to take network param Allow the update_port_status function to take a network as an optional parameter to skip calling get_network again if the caller has already done so. Closes-Bug: #1463656 Change-Id: I994f3abdb1b0ad3b2766f409b206ad4a8b2309b6 --- diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index df831fdc8..ba8054b99 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -1375,10 +1375,13 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, return self._bind_port_if_needed(port_context) - def update_port_status(self, context, port_id, status, host=None): + def update_port_status(self, context, port_id, status, host=None, + network=None): """ Returns port_id (non-truncated uuid) if the port exists. Otherwise returns None. + network can be passed in to avoid another get_network call if + one was already performed by the caller. """ updated = False session = context.session @@ -1398,8 +1401,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, original_port = self._make_port_dict(port) port.status = status updated_port = self._make_port_dict(port) - network = self.get_network(context, - original_port['network_id']) + network = network or self.get_network( + context, original_port['network_id']) levels = db.get_binding_levels(session, port.id, port.port_binding.host) mech_context = driver_context.PortContext( @@ -1426,8 +1429,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, port_id) return original_port = self._make_port_dict(port) - network = self.get_network(context, - original_port['network_id']) + network = network or self.get_network( + context, original_port['network_id']) port.status = db.generate_dvr_port_status(session, port['id']) updated_port = self._make_port_dict(port) levels = db.get_binding_levels(session, port_id, host) diff --git a/neutron/plugins/ml2/rpc.py b/neutron/plugins/ml2/rpc.py index b9d478cd5..eeccde6a0 100644 --- a/neutron/plugins/ml2/rpc.py +++ b/neutron/plugins/ml2/rpc.py @@ -103,7 +103,8 @@ class RpcCallbacks(type_tunnel.TunnelRpcCallbackMixin): plugin.update_port_status(rpc_context, port_id, new_status, - host) + host, + port_context.network.current) entry = {'device': device, 'network_id': port['network_id'], diff --git a/neutron/tests/unit/plugins/ml2/test_plugin.py b/neutron/tests/unit/plugins/ml2/test_plugin.py index 50dfd3196..aa7de3721 100644 --- a/neutron/tests/unit/plugins/ml2/test_plugin.py +++ b/neutron/tests/unit/plugins/ml2/test_plugin.py @@ -412,6 +412,16 @@ class TestMl2PortsV2(test_plugin.TestPortsV2, Ml2PluginV2TestCase): plugin.update_port(ctx, port['port']['id'], port) self.assertTrue(sg_member_update.called) + def test_update_port_status_with_network(self): + ctx = context.get_admin_context() + plugin = manager.NeutronManager.get_plugin() + with self.port() as port: + net = plugin.get_network(ctx, port['port']['network_id']) + with mock.patch.object(plugin, 'get_network') as get_net: + plugin.update_port_status(ctx, port['port']['id'], 'UP', + network=net) + self.assertFalse(get_net.called) + def test_update_port_mac(self): self.check_update_port_mac( host_arg={portbindings.HOST_ID: HOST},