Merge "Modify logic of l3-agent to be notified"
This commit is contained in:
commit
8f27c2a165
@ -453,8 +453,13 @@ def _notify_l3_agent_port_update(resource, event, trigger, **kwargs):
|
|||||||
fips = l3plugin._get_floatingips_by_port_id(
|
fips = l3plugin._get_floatingips_by_port_id(
|
||||||
context, port_id=original_port['id'])
|
context, port_id=original_port['id'])
|
||||||
fip = fips[0] if fips else None
|
fip = fips[0] if fips else None
|
||||||
if fip and not (removed_routers and
|
removed_router_ids = [
|
||||||
fip['router_id'] in removed_routers):
|
info['router_id'] for info in removed_routers
|
||||||
|
]
|
||||||
|
if (fip and
|
||||||
|
l3plugin.is_distributed_router(fip['router_id']) and
|
||||||
|
not (removed_routers and
|
||||||
|
fip['router_id'] in removed_router_ids)):
|
||||||
l3plugin.l3_rpc_notifier.routers_updated_on_host(
|
l3plugin.l3_rpc_notifier.routers_updated_on_host(
|
||||||
context, [fip['router_id']],
|
context, [fip['router_id']],
|
||||||
original_port[portbindings.HOST_ID])
|
original_port[portbindings.HOST_ID])
|
||||||
|
@ -1036,9 +1036,34 @@ class L3DvrSchedulerTestCase(L3SchedulerBaseMixin,
|
|||||||
fip = {'router_id': 'router_id'}
|
fip = {'router_id': 'router_id'}
|
||||||
self._test__notify_l3_agent_port_binding_change(None, fip)
|
self._test__notify_l3_agent_port_binding_change(None, fip)
|
||||||
|
|
||||||
|
def test__notify_l3_agent_port_binding_change_fip_dvr(self):
|
||||||
|
fip = {'router_id': 'router_id'}
|
||||||
|
is_distributed = True
|
||||||
|
self._test__notify_l3_agent_port_binding_change(None,
|
||||||
|
fip, is_distributed)
|
||||||
|
|
||||||
|
def test__notify_l3_agent_port_binding_change_fip_dvr_rmrt(self):
|
||||||
|
fip = {'router_id': 'router_id'}
|
||||||
|
router_to_remove = [{'agent_id': 'foo_agent',
|
||||||
|
'router_id': 'foo_id',
|
||||||
|
'host': 'vm-host1'}]
|
||||||
|
is_distributed = True
|
||||||
|
self._test__notify_l3_agent_port_binding_change(router_to_remove,
|
||||||
|
fip, is_distributed)
|
||||||
|
|
||||||
|
def test__notify_l3_agent_port_binding_change_fip_dvr_on_rmrt(self):
|
||||||
|
fip = {'router_id': 'foo_id'}
|
||||||
|
router_to_remove = [{'agent_id': 'foo_agent',
|
||||||
|
'router_id': 'foo_id',
|
||||||
|
'host': 'vm-host1'}]
|
||||||
|
is_distributed = True
|
||||||
|
self._test__notify_l3_agent_port_binding_change(router_to_remove,
|
||||||
|
fip, is_distributed)
|
||||||
|
|
||||||
def _test__notify_l3_agent_port_binding_change(self,
|
def _test__notify_l3_agent_port_binding_change(self,
|
||||||
routers_to_remove=None,
|
routers_to_remove=None,
|
||||||
fip=None):
|
fip=None,
|
||||||
|
is_distributed=False):
|
||||||
source_host = 'vm-host1'
|
source_host = 'vm-host1'
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'context': self.adminContext,
|
'context': self.adminContext,
|
||||||
@ -1055,9 +1080,12 @@ class L3DvrSchedulerTestCase(L3SchedulerBaseMixin,
|
|||||||
l3plugin = mock.Mock()
|
l3plugin = mock.Mock()
|
||||||
directory.add_plugin(plugin_constants.L3, l3plugin)
|
directory.add_plugin(plugin_constants.L3, l3plugin)
|
||||||
with mock.patch.object(l3plugin, 'get_dvr_routers_to_remove',
|
with mock.patch.object(l3plugin, 'get_dvr_routers_to_remove',
|
||||||
return_value=routers_to_remove),\
|
return_value=routers_to_remove
|
||||||
|
if routers_to_remove else []),\
|
||||||
mock.patch.object(l3plugin, '_get_floatingips_by_port_id',
|
mock.patch.object(l3plugin, '_get_floatingips_by_port_id',
|
||||||
return_value=[fip] if fip else []):
|
return_value=[fip] if fip else []),\
|
||||||
|
mock.patch.object(l3plugin, 'is_distributed_router',
|
||||||
|
return_value=is_distributed):
|
||||||
l3_dvrscheduler_db._notify_l3_agent_port_update(
|
l3_dvrscheduler_db._notify_l3_agent_port_update(
|
||||||
'port', 'after_update', mock.ANY, **kwargs)
|
'port', 'after_update', mock.ANY, **kwargs)
|
||||||
if routers_to_remove:
|
if routers_to_remove:
|
||||||
@ -1066,7 +1094,8 @@ class L3DvrSchedulerTestCase(L3SchedulerBaseMixin,
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
1,
|
1,
|
||||||
l3plugin.delete_arp_entry_for_dvr_service_port.call_count)
|
l3plugin.delete_arp_entry_for_dvr_service_port.call_count)
|
||||||
if fip and not routers_to_remove:
|
if fip and is_distributed and not (routers_to_remove and
|
||||||
|
fip['router_id'] is routers_to_remove[0]['router_id']):
|
||||||
(l3plugin.l3_rpc_notifier.routers_updated_on_host.
|
(l3plugin.l3_rpc_notifier.routers_updated_on_host.
|
||||||
assert_called_once_with(mock.ANY, ['router_id'], source_host))
|
assert_called_once_with(mock.ANY, ['router_id'], source_host))
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user