Merge "Don't fail when trying to unbind a router"
This commit is contained in:
commit
899473ae99
@ -45,6 +45,7 @@ from neutron.db import quota_db # noqa
|
|||||||
from neutron.db import securitygroups_rpc_base as sg_db_rpc
|
from neutron.db import securitygroups_rpc_base as sg_db_rpc
|
||||||
from neutron.extensions import allowedaddresspairs as addr_pair
|
from neutron.extensions import allowedaddresspairs as addr_pair
|
||||||
from neutron.extensions import extra_dhcp_opt as edo_ext
|
from neutron.extensions import extra_dhcp_opt as edo_ext
|
||||||
|
from neutron.extensions import l3agentscheduler
|
||||||
from neutron.extensions import portbindings
|
from neutron.extensions import portbindings
|
||||||
from neutron.extensions import providernet as provider
|
from neutron.extensions import providernet as provider
|
||||||
from neutron import manager
|
from neutron import manager
|
||||||
@ -1019,9 +1020,14 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
|
|||||||
if l3plugin:
|
if l3plugin:
|
||||||
l3plugin.notify_routers_updated(context, router_ids)
|
l3plugin.notify_routers_updated(context, router_ids)
|
||||||
for router in removed_routers:
|
for router in removed_routers:
|
||||||
l3plugin.remove_router_from_l3_agent(
|
try:
|
||||||
context, router['agent_id'], router['router_id'])
|
l3plugin.remove_router_from_l3_agent(
|
||||||
|
context, router['agent_id'], router['router_id'])
|
||||||
|
except l3agentscheduler.RouterNotHostedByL3Agent:
|
||||||
|
# router may have been removed by another process
|
||||||
|
LOG.debug("Router %(id)s not hosted by L3 agent %(agent)s",
|
||||||
|
{'id': router['router_id'],
|
||||||
|
'agent': router['agent_id']})
|
||||||
try:
|
try:
|
||||||
# for both normal and DVR Interface ports, only one invocation of
|
# for both normal and DVR Interface ports, only one invocation of
|
||||||
# delete_port_postcommit. We use gather/scatter technique for DVR
|
# delete_port_postcommit. We use gather/scatter technique for DVR
|
||||||
|
@ -25,6 +25,7 @@ from neutron.common import utils
|
|||||||
from neutron import context
|
from neutron import context
|
||||||
from neutron.db import db_base_plugin_v2 as base_plugin
|
from neutron.db import db_base_plugin_v2 as base_plugin
|
||||||
from neutron.extensions import external_net as external_net
|
from neutron.extensions import external_net as external_net
|
||||||
|
from neutron.extensions import l3agentscheduler
|
||||||
from neutron.extensions import multiprovidernet as mpnet
|
from neutron.extensions import multiprovidernet as mpnet
|
||||||
from neutron.extensions import portbindings
|
from neutron.extensions import portbindings
|
||||||
from neutron.extensions import providernet as pnet
|
from neutron.extensions import providernet as pnet
|
||||||
@ -267,6 +268,30 @@ class TestMl2DvrPortsV2(TestMl2PortsV2):
|
|||||||
self._test_delete_dvr_serviced_port(device_owner='compute:None',
|
self._test_delete_dvr_serviced_port(device_owner='compute:None',
|
||||||
floating_ip=True)
|
floating_ip=True)
|
||||||
|
|
||||||
|
def test_delete_vm_port_namespace_already_deleted(self):
|
||||||
|
ns_to_delete = {'host': 'myhost',
|
||||||
|
'agent_id': 'vm_l3_agent',
|
||||||
|
'router_id': 'my_router'}
|
||||||
|
|
||||||
|
with contextlib.nested(
|
||||||
|
mock.patch.object(manager.NeutronManager,
|
||||||
|
'get_service_plugins',
|
||||||
|
return_value=self.service_plugins),
|
||||||
|
self.port(do_delete=False,
|
||||||
|
device_owner='compute:None'),
|
||||||
|
mock.patch.object(self.l3plugin, 'dvr_deletens_if_no_port',
|
||||||
|
return_value=[ns_to_delete]),
|
||||||
|
mock.patch.object(self.l3plugin, 'remove_router_from_l3_agent',
|
||||||
|
side_effect=l3agentscheduler.RouterNotHostedByL3Agent(
|
||||||
|
router_id=ns_to_delete['router_id'],
|
||||||
|
agent_id=ns_to_delete['agent_id']))
|
||||||
|
) as (get_service_plugin, port, dvr_delns_ifno_port,
|
||||||
|
remove_router_from_l3_agent):
|
||||||
|
|
||||||
|
self.plugin.delete_port(self.context, port['port']['id'])
|
||||||
|
remove_router_from_l3_agent.assert_called_once_with(self.context,
|
||||||
|
ns_to_delete['agent_id'], ns_to_delete['router_id'])
|
||||||
|
|
||||||
def test_delete_lbaas_vip_port(self):
|
def test_delete_lbaas_vip_port(self):
|
||||||
self._test_delete_dvr_serviced_port(
|
self._test_delete_dvr_serviced_port(
|
||||||
device_owner=constants.DEVICE_OWNER_LOADBALANCER)
|
device_owner=constants.DEVICE_OWNER_LOADBALANCER)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user