Reputation: 19612
I recently started working with Python for Zookeeper. I am using kazoo
library for Zookeeper. I need to keep a watch on my root node which is -
/my/example
couple of other nodes which might get added to my above root node will be like this -
/my/example/workflow
/my/example/workflow/v1
/my/example/workflow/v1/step1
/my/example/workflow/v1/step2
Now I need to check whether the children which got added in root node /my/example
is /my/example/workflow
or not. If workflow
node gets added up in /my/example
then I will keep a watch on /my/example/workflow
node only and if any new children gets added up in /my/example/workflow
node then I need to keep a watch on that node as well.
Let's say, children of /my/example/workflow
is /my/example/workflow/v1
, so now I need to keep a watch on /my/example/workflow/v1
and then if any new nodes gets added up on this node /my/example/workflow/v1
such as /my/example/workflow/v1/step1
and /my/example/workflow/v1/step2
then I need to print the children of /my/example/workflow/v1
node and I won't make any new watches now.
Now I am not sure how to keep on calling watches on my children until certain point, here in this case till /my/example/workflow/v1
I need to keep on watching and as soon as all the steps nodes gets added up, I need to print the children of /my/example/workflow/v1
. Below is my code which works fine for watching on only one root node and now I am not sure how to do my above problem?
#!/usr/bin/python
from kazoo.client import KazooClient
zk = KazooClient(hosts='127.0.0.1:2181')
zk.start()
@zk.ChildrenWatch("/my/example")
def watch_children(children):
print("Children are now: %s" % children)
Any help is really appreciated on this. I was following the documentation by reading the kazoo tutorial from here
Upvotes: 1
Views: 3664
Reputation:
Try something like this out:
import time
from kazoo.client import KazooClient
zk = KazooClient(hosts='127.0.0.1:2181')
zk.start()
children = zk.get_children("/my/example/")
if "/workflow" in children:
children_testing = zk.get_children("/my/example/testing/")
if children_testing != []:
@zk.ChildrenWatch("/my/example/testing")
def watch_children(children):
print(children)
else:
@zk.ChildrenWatch("/my/example/")
def watch_children(children):
print(children)
while True:
time.sleep(5)
Upvotes: 2