Skip to content

Commit

Permalink
Handle NoIdError in vnc_subscribe callback
Browse files Browse the repository at this point in the history
Under load SVC can receive notifications for resources
that don't exist anymore.

Handle this case and report it as a warning and not as an
error.

Change-Id: Ia37f7612667c7b6b37211ca78fe3d2917a8f7e7e
Closes-Bug: #1576627
  • Loading branch information
eonpatapon committed May 2, 2016
1 parent 80c4a7e commit d1d08f7
Showing 1 changed file with 18 additions and 16 deletions.
34 changes: 18 additions & 16 deletions src/config/svc-monitor/svc_monitor/rabbit.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,10 @@ def _vnc_subscribe_actions(self, oper_info):
obj_dict = oper_info['obj_dict']
obj_id = oper_info['uuid']
obj = obj_class.locate(obj_id)
dependency_tracker = DependencyTracker(
DBBaseSM.get_obj_type_map(), self._REACTION_MAP)
dependency_tracker.evaluate(obj_type, obj)
if obj is not None:
dependency_tracker = DependencyTracker(
DBBaseSM.get_obj_type_map(), self._REACTION_MAP)
dependency_tracker.evaluate(obj_type, obj)
elif oper_info['oper'] == 'UPDATE':
obj_id = oper_info['uuid']
obj = obj_class.get(obj_id)
Expand All @@ -65,18 +66,19 @@ def _vnc_subscribe_actions(self, oper_info):
old_dt.evaluate(obj_type, obj)
else:
obj = obj_class.locate(obj_id)
obj.update()
dependency_tracker = DependencyTracker(
DBBaseSM.get_obj_type_map(), self._REACTION_MAP)
dependency_tracker.evaluate(obj_type, obj)
if old_dt:
for resource, ids in old_dt.resources.items():
if resource not in dependency_tracker.resources:
dependency_tracker.resources[resource] = ids
else:
dependency_tracker.resources[resource] = list(
set(dependency_tracker.resources[resource]) |
set(ids))
if obj is not None:
obj.update()
dependency_tracker = DependencyTracker(
DBBaseSM.get_obj_type_map(), self._REACTION_MAP)
dependency_tracker.evaluate(obj_type, obj)
if old_dt:
for resource, ids in old_dt.resources.items():
if resource not in dependency_tracker.resources:
dependency_tracker.resources[resource] = ids
else:
dependency_tracker.resources[resource] = list(
set(dependency_tracker.resources[resource]) |
set(ids))
elif oper_info['oper'] == 'DELETE':
obj_id = oper_info['uuid']
obj = obj_class.get(obj_id)
Expand All @@ -92,7 +94,7 @@ def _vnc_subscribe_actions(self, oper_info):
return

if obj is None:
self.logger.error('Error while accessing %s uuid %s' % (
self.logger.warning('%s uuid %s has vanished' % (
obj_type, obj_id))
return

Expand Down

0 comments on commit d1d08f7

Please sign in to comment.