Question: Are there any locking or concurrency guarantees when playbooks are operating on a container?
Issue I am trying to solve: I have a playbook (call it sub-playbook
) that is called by two different parent playbooks ( parent1
and parent2
). So parent1
will set param1
to True using save_object
, keyed to containerN
( phantom.save_object(container_id=container['id'], key='param1', value={'param1':True})
. parent2
sets param1
to False (also keyed to containerN
) and calls sub-playbook
. sub-playbook
gets the value of param1
, and acts different depending on whether it's True/False.
sub-playbook
is called synchronously by both parent1
and parent2
As far as I know there are no concurrency guarantees (e.g. playbook1 -> sub-playbook
could get interrupted after setting param1
, but before sub-playbook
checks/reads param1
). This would cause a race condition. Is that accurate or does phantom lock all access to a container to the playbook (and sub-playbooks) that are operating on it?
Assuming my assumption is correct, and there are no concurrency guarantees, are there any built in patterns that people use to work around this? I can envision using some external capability (redis, maybe a custom app that uses sqllite, etc) to add my own locking, but I don't want to reinvent the wheel if it's not necessary.
Thanks!