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

This commit is contained in:
Zuul 2020-08-28 18:30:51 +00:00 committed by Gerrit Code Review
commit 27c53ebc97
2 changed files with 33 additions and 12 deletions

View File

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

View File

@ -2694,35 +2694,59 @@ class TestBasicRouterOperations(BasicRouterOperationsFramework):
self._test_process_routers_update_rpc_timeout(ext_net_call=True, self._test_process_routers_update_rpc_timeout(ext_net_call=True,
ext_net_call_failed=True) ext_net_call_failed=True)
@mock.patch.object(pd, 'remove_router') def test_process_routers_update_router_update(self):
def _test_process_routers_update_router_deleted(self, remove_router,
error=False):
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf) agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
agent._queue = mock.Mock() agent._queue = mock.Mock()
update = mock.Mock() update = mock.Mock()
update.resource = None update.resource = None
update.action = 1 # ROUTER_DELETED update.action = resource_processing_queue.ADD_UPDATE_ROUTER
router_info = mock.MagicMock() router_info = mock.MagicMock()
agent.router_info[update.id] = router_info agent.router_info[update.id] = router_info
router_processor = mock.Mock() router_processor = mock.Mock()
agent._queue.each_update_to_next_resource.side_effect = [ agent._queue.each_update_to_next_resource.side_effect = [
[(router_processor, update)]] [(router_processor, update)]]
agent._resync_router = mock.Mock() 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 = resource_processing_queue.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: if error:
agent._safe_router_removed = mock.Mock()
agent._safe_router_removed.return_value = False agent._safe_router_removed.return_value = False
agent._process_router_update() agent._process_router_update()
if error: if error:
self.assertFalse(router_processor.fetched_and_processed.called) self.assertFalse(router_processor.fetched_and_processed.called)
agent._resync_router.assert_called_with(update) agent._resync_router.assert_called_with(update)
self.assertFalse(remove_router.called) self.assertTrue(agent._safe_router_removed.called)
else: else:
router_info.delete.assert_called_once_with() router_info.delete.assert_not_called()
self.assertFalse(agent.router_info) self.assertFalse(router_info.delete.called)
self.assertTrue(agent.router_info)
self.assertFalse(agent._resync_router.called) self.assertFalse(agent._resync_router.called)
router_processor.fetched_and_processed.assert_called_once_with( router_processor.fetched_and_processed.assert_called_once_with(
update.timestamp) update.timestamp)
self.assertTrue(remove_router.called) self.assertTrue(agent._safe_router_removed.called)
def test_process_routers_update_router_deleted_success(self): def test_process_routers_update_router_deleted_success(self):
self._test_process_routers_update_router_deleted() self._test_process_routers_update_router_deleted()