Merge "Ignore status update on deleted objects in driver-agent"
This commit is contained in:
commit
65b1c341e2
@ -58,6 +58,13 @@ class DriverUpdater(object):
|
|||||||
def _decrement_quota(self, repo, object_name, record_id):
|
def _decrement_quota(self, repo, object_name, record_id):
|
||||||
lock_session = db_apis.get_session(autocommit=False)
|
lock_session = db_apis.get_session(autocommit=False)
|
||||||
db_object = repo.get(lock_session, id=record_id)
|
db_object = repo.get(lock_session, id=record_id)
|
||||||
|
if db_object is None:
|
||||||
|
lock_session.rollback()
|
||||||
|
msg = ('{} with ID of {} is not present in the '
|
||||||
|
'database, it might have already been deleted. '
|
||||||
|
'Skipping quota update.'.format(
|
||||||
|
object_name, record_id))
|
||||||
|
raise driver_exceptions.NotFound(msg)
|
||||||
try:
|
try:
|
||||||
if db_object.provisioning_status == consts.DELETED:
|
if db_object.provisioning_status == consts.DELETED:
|
||||||
LOG.info('%(name)s with ID of %(id)s is already in the '
|
LOG.info('%(name)s with ID of %(id)s is already in the '
|
||||||
@ -91,7 +98,12 @@ class DriverUpdater(object):
|
|||||||
if object_name == consts.LOADBALANCERS:
|
if object_name == consts.LOADBALANCERS:
|
||||||
self._check_for_lb_vip_deallocate(repo, record_id)
|
self._check_for_lb_vip_deallocate(repo, record_id)
|
||||||
|
|
||||||
self._decrement_quota(repo, object_name, record_id)
|
try:
|
||||||
|
self._decrement_quota(repo, object_name, record_id)
|
||||||
|
except driver_exceptions.NotFound:
|
||||||
|
# prov_status is DELETED and the object no longer
|
||||||
|
# exists in the DB, ignore the update.
|
||||||
|
return
|
||||||
|
|
||||||
if delete_record and object_name != consts.LOADBALANCERS:
|
if delete_record and object_name != consts.LOADBALANCERS:
|
||||||
repo.delete(self.db_session, id=record_id)
|
repo.delete(self.db_session, id=record_id)
|
||||||
|
@ -342,3 +342,40 @@ class DriverAgentTest(base.OctaviaDBTestBase):
|
|||||||
# Test non-existent L7 rule
|
# Test non-existent L7 rule
|
||||||
result = self.driver_lib.get_l7rule('bogus')
|
result = self.driver_lib.get_l7rule('bogus')
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
def test_update_load_balancer_status(self):
|
||||||
|
# Add a new member
|
||||||
|
member_dict = copy.deepcopy(self.sample_data.test_member2_dict)
|
||||||
|
self.repos.member.create(self.session, **member_dict)
|
||||||
|
|
||||||
|
result = self.driver_lib.get_member(member_dict[lib_consts.ID])
|
||||||
|
self.assertEqual(self.sample_data.provider_member2_dict,
|
||||||
|
result.to_dict(render_unsets=True))
|
||||||
|
|
||||||
|
# Test deleting a member
|
||||||
|
status = {
|
||||||
|
"loadbalancers": [
|
||||||
|
{"id": self.sample_data.lb_id,
|
||||||
|
"provisioning_status": "ACTIVE",
|
||||||
|
"operating_status": "ONLINE"}
|
||||||
|
],
|
||||||
|
"healthmonitors": [],
|
||||||
|
"l7policies": [],
|
||||||
|
"l7rules": [],
|
||||||
|
"listeners": [],
|
||||||
|
"members": [
|
||||||
|
{"id": member_dict[lib_consts.ID],
|
||||||
|
"provisioning_status": "DELETED"}
|
||||||
|
],
|
||||||
|
"pools": []
|
||||||
|
}
|
||||||
|
|
||||||
|
self.driver_lib.update_loadbalancer_status(status)
|
||||||
|
result = self.driver_lib.get_member(member_dict[lib_consts.ID])
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
# Test deleting an already deleted member
|
||||||
|
# It should be silently ignored
|
||||||
|
self.driver_lib.update_loadbalancer_status(status)
|
||||||
|
result = self.driver_lib.get_member(member_dict[lib_consts.ID])
|
||||||
|
self.assertIsNone(result)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user