Catch DBReferenceError exception during binding a router

In some cases (Concurrent API tests) router can be deleted
before it is bound to an agent by scheduler.
That may lead to traces on L3 agent side returned via RPC.
Need to handle this case in more graceful way.

Change-Id: Ic52c26ace7f32a615150bd6098b244ae0b98250c
Closes-Bug: #1385257
This commit is contained in:
Eugene Nikanorov 2014-11-17 20:49:09 +04:00
parent 8edf980078
commit 19a79a1148
2 changed files with 10 additions and 0 deletions

View File

@ -220,6 +220,10 @@ class L3Scheduler(object):
{'agent_id': chosen_agent.id,
'router_id': router_id})
return
except db_exc.DBReferenceError:
LOG.debug('Router %s has already been removed '
'by concurrent operation', router_id)
return
LOG.debug('Router %(router_id)s is scheduled to L3 agent '
'%(agent_id)s', {'router_id': router_id,

View File

@ -482,6 +482,12 @@ class L3SchedulerTestBaseMixin(object):
args, kwargs = flog.call_args
self.assertIn('is scheduled', args[0])
def test_bind_absent_router(self):
scheduler = l3_agent_scheduler.ChanceScheduler()
# checking that bind_router() is not throwing
# when supplied with router_id of non-existing router
scheduler.bind_router(self.adminContext, "dummyID", self.agent1)
def test_bind_existing_router(self):
router = self._make_router(self.fmt,
tenant_id=str(uuid.uuid4()),