Browse Source

Merge "Not remove the running router when MQ is unreachable" into stable/ussuri

changes/58/748958/1
Zuul 1 month ago
committed by Gerrit Code Review
parent
commit
b7466491f5
2 changed files with 32 additions and 11 deletions
  1. +0
    -3
      neutron/agent/l3/agent.py
  2. +32
    -8
      neutron/tests/unit/agent/l3/test_agent.py

+ 0
- 3
neutron/agent/l3/agent.py View File

@@ -666,9 +666,6 @@ class L3NATAgent(ha.AgentMixin,
if router_update.hit_retry_limit():
LOG.warning("Hit retry limit with router update for %s, action %s",
router_update.id, router_update.action)
if router_update.action != DELETE_ROUTER:
LOG.debug("Deleting router %s", router_update.id)
self._safe_router_removed(router_update.id)
return
router_update.timestamp = timeutils.utcnow()
router_update.priority = priority


+ 32
- 8
neutron/tests/unit/agent/l3/test_agent.py View File

@@ -2750,35 +2750,59 @@ class TestBasicRouterOperations(BasicRouterOperationsFramework):
self._test_process_routers_update_rpc_timeout(ext_net_call=True,
ext_net_call_failed=True)

@mock.patch.object(pd, 'remove_router')
def _test_process_routers_update_router_deleted(self, remove_router,
def test_process_routers_update_router_update(self):
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
agent._queue = mock.Mock()
update = mock.Mock()
update.resource = None
update.action = l3_agent.ADD_UPDATE_ROUTER
router_info = mock.MagicMock()
agent.router_info[update.id] = router_info
router_processor = mock.Mock()
agent._queue.each_update_to_next_resource.side_effect = [
[(router_processor, update)]]
agent._resync_router = mock.Mock()
agent._safe_router_removed = mock.Mock()
agent.plugin_rpc = mock.MagicMock()
agent.plugin_rpc.get_routers.side_effect = (
Exception("Failed to get router info"))
# start test
agent._process_router_update()
router_info.delete.assert_not_called()
self.assertFalse(router_info.delete.called)
self.assertTrue(agent.router_info)
self.assertTrue(agent._resync_router.called)
self.assertFalse(agent._safe_router_removed.called)

def _test_process_routers_update_router_deleted(self,
error=False):
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
agent._queue = mock.Mock()
update = mock.Mock()
update.resource = None
update.action = 1 # ROUTER_DELETED
update.action = l3_agent.DELETE_ROUTER
router_info = mock.MagicMock()
agent.router_info[update.id] = router_info
router_processor = mock.Mock()
agent._queue.each_update_to_next_resource.side_effect = [
[(router_processor, update)]]
agent._resync_router = mock.Mock()
agent._safe_router_removed = mock.Mock()
if error:
agent._safe_router_removed = mock.Mock()
agent._safe_router_removed.return_value = False
agent._process_router_update()
if error:
self.assertFalse(router_processor.fetched_and_processed.called)
agent._resync_router.assert_called_with(update)
self.assertFalse(remove_router.called)
self.assertTrue(agent._safe_router_removed.called)
else:
router_info.delete.assert_called_once_with()
self.assertFalse(agent.router_info)
router_info.delete.assert_not_called()
self.assertFalse(router_info.delete.called)
self.assertTrue(agent.router_info)
self.assertFalse(agent._resync_router.called)
router_processor.fetched_and_processed.assert_called_once_with(
update.timestamp)
self.assertTrue(remove_router.called)
self.assertTrue(agent._safe_router_removed.called)

def test_process_routers_update_router_deleted_success(self):
self._test_process_routers_update_router_deleted()


Loading…
Cancel
Save