Skip to content

Commit

Permalink
Add handling of anarchysubject delete
Browse files Browse the repository at this point in the history
Resolves #14
  • Loading branch information
jkupferer committed Jul 6, 2019
1 parent 92b9b04 commit 5833aa1
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
5 changes: 4 additions & 1 deletion operator/anarchy.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ def handle_subject_deleted(resource):
)
if subject:
subject.process_subject_event_handlers(anarchy_runtime, 'deleted')
AnarchySubject.unregister(subject)

def watch_subjects():
logger.debug('Starting watch for anarchysubjects')
Expand Down Expand Up @@ -202,7 +203,9 @@ def handle_action_modified(action_resource):
def handle_action_deleted(action_resource):
action = AnarchyAction(action_resource)
logger.debug("Action delete on %s", action.namespace_name())
action.subject().dequeue_action(action)
subject = action.subject()
if subject:
subject.dequeue_action(action)

def watch_actions():
logger.debug('Starting watch for anarchyactions')
Expand Down
14 changes: 10 additions & 4 deletions operator/anarchysubject.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@
class AnarchySubject(object):
"""AnarchySubject class"""

subjects_lock = threading.RLock()
subjects = {}

@classmethod
def register(_class, resource):
_class.subjects_lock.acquire()

subject = AnarchySubject.get(
resource['metadata']['namespace'],
resource['metadata']['name']
Expand All @@ -26,6 +29,7 @@ def register(_class, resource):
subject.namespace_name(),
subject.resource_version()
)
_class.subjects_lock.release()
return None

subject = _class(resource)
Expand All @@ -35,23 +39,25 @@ def register(_class, resource):
)
AnarchySubject.subjects[subject.namespace_name()] = subject

_class.subjects_lock.release()
return subject

@classmethod
def unregister(_class, subject):
if isinstance(subject, AnarchySubject):
del AnarchySubject.subjects[subject.name()]
else:
del AnarchySubject.subjects[subject]
_class.subjects_lock.acquire()
del AnarchySubject.subjects[subject.namespace_name()]
_class.subjects_lock.release()

@classmethod
def get(_class, namespace, name):
return AnarchySubject.subjects.get(namespace + '/' + name, None)

@classmethod
def start_subject_actions(_class, runtime):
_class.subjects_lock.acquire()
for subject in AnarchySubject.subjects.values():
subject.start_actions(runtime)
_class.subjects_lock.release()

def __init__(self, resource):
"""Initialize AnarchySubject from resource object data."""
Expand Down

0 comments on commit 5833aa1

Please sign in to comment.