Merge "Remove port from ovsdb after its deletion"
This commit is contained in:
commit
9d5e2b9b01
@ -1188,6 +1188,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
|
||||
# fact that an error occurred.
|
||||
LOG.error(_LE("mechanism_manager.delete_port_postcommit failed for"
|
||||
" port %s"), id)
|
||||
self.notifier.port_delete(context, id)
|
||||
self.notify_security_groups_member_updated(context, port)
|
||||
|
||||
def get_bound_port_context(self, plugin_context, port_id, host=None):
|
||||
|
@ -199,6 +199,10 @@ class AgentNotifierApi(dvr_rpc.DVRAgentRpcApiMixin,
|
||||
self.topic_port_update = topics.get_topic_name(topic,
|
||||
topics.PORT,
|
||||
topics.UPDATE)
|
||||
self.topic_port_delete = topics.get_topic_name(topic,
|
||||
topics.PORT,
|
||||
topics.DELETE)
|
||||
|
||||
target = oslo_messaging.Target(topic=topic, version='1.0')
|
||||
self.client = n_rpc.get_client(target)
|
||||
|
||||
@ -214,3 +218,8 @@ class AgentNotifierApi(dvr_rpc.DVRAgentRpcApiMixin,
|
||||
cctxt.cast(context, 'port_update', port=port,
|
||||
network_type=network_type, segmentation_id=segmentation_id,
|
||||
physical_network=physical_network)
|
||||
|
||||
def port_delete(self, context, port_id):
|
||||
cctxt = self.client.prepare(topic=self.topic_port_delete,
|
||||
fanout=True)
|
||||
cctxt.cast(context, 'port_delete', port_id=port_id)
|
||||
|
@ -292,6 +292,7 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin,
|
||||
self.endpoints = [self]
|
||||
# Define the listening consumers for the agent
|
||||
consumers = [[topics.PORT, topics.UPDATE],
|
||||
[topics.PORT, topics.DELETE],
|
||||
[topics.NETWORK, topics.DELETE],
|
||||
[constants.TUNNEL, topics.UPDATE],
|
||||
[constants.TUNNEL, topics.DELETE],
|
||||
@ -330,6 +331,13 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin,
|
||||
self.updated_ports.add(port['id'])
|
||||
LOG.debug("port_update message processed for port %s", port['id'])
|
||||
|
||||
def port_delete(self, context, **kwargs):
|
||||
port_id = kwargs.get('port_id')
|
||||
port = self.int_br.get_vif_port_by_id(port_id)
|
||||
# If port exists, delete it
|
||||
if port:
|
||||
self.int_br.delete_port(port.port_name)
|
||||
|
||||
def tunnel_update(self, context, **kwargs):
|
||||
LOG.debug("tunnel_update received")
|
||||
if not self.enable_tunneling:
|
||||
|
@ -227,6 +227,16 @@ class RpcApiTestCase(base.BaseTestCase):
|
||||
segmentation_id='fake_segmentation_id',
|
||||
physical_network='fake_physical_network')
|
||||
|
||||
def test_port_delete(self):
|
||||
rpcapi = plugin_rpc.AgentNotifierApi(topics.AGENT)
|
||||
self._test_rpc_api(
|
||||
rpcapi,
|
||||
topics.get_topic_name(topics.AGENT,
|
||||
topics.PORT,
|
||||
topics.DELETE),
|
||||
'port_delete', rpc_method='cast',
|
||||
fanout=True, port_id='fake_port')
|
||||
|
||||
def test_tunnel_update(self):
|
||||
rpcapi = plugin_rpc.AgentNotifierApi(topics.AGENT)
|
||||
self._test_rpc_api(
|
||||
|
@ -498,6 +498,20 @@ class TestOvsNeutronAgent(base.BaseTestCase):
|
||||
physical_network="physnet")
|
||||
self.assertEqual(set(['123']), self.agent.updated_ports)
|
||||
|
||||
def test_port_delete(self):
|
||||
port_id = "123"
|
||||
port_name = "foo"
|
||||
with contextlib.nested(
|
||||
mock.patch.object(self.agent.int_br, 'get_vif_port_by_id',
|
||||
return_value=mock.MagicMock(
|
||||
port_name=port_name)),
|
||||
mock.patch.object(self.agent.int_br, "delete_port")
|
||||
) as (get_vif_func, del_port_func):
|
||||
self.agent.port_delete("unused_context",
|
||||
port_id=port_id)
|
||||
self.assertTrue(get_vif_func.called)
|
||||
del_port_func.assert_called_once_with(port_name)
|
||||
|
||||
def test_setup_physical_bridges(self):
|
||||
with contextlib.nested(
|
||||
mock.patch.object(ip_lib, "device_exists"),
|
||||
|
Loading…
Reference in New Issue
Block a user