Skip to content

Instantly share code, notes, and snippets.

@jimfulton
Last active January 2, 2016 23:19
Show Gist options
  • Save jimfulton/8375482 to your computer and use it in GitHub Desktop.
Save jimfulton/8375482 to your computer and use it in GitHub Desktop.
Script that illustrates issue writing empty nodes w kazoo and reading them with the Python C ZooKeeper API
kazoo script that builds a ZooKeeper tree. To run, with kazoo in the path::
bad.py inp
If you export the tree with zc.zk 1, you'll see random(ish) bad data in the nodes that should be empty.
import kazoo.client, sys, time, hashlib
def inp(client, nonblank=False):
for path, data in test_data:
if nonblank:
data = data or '{}'
client.create(path, data)
def set(client, nonblank=False):
for path, data in test_data:
if nonblank:
data = data or '{}'
client.set(path, data)
def check(client):
for path, data in test_data:
stored = client.get(path)[0]
if stored != data:
print 'bad data at', path, "%r != %r" % (stored, data)
def pt(client):
import zc.zk
zc.zk.ZK(client).print_tree()
def clear(client):
client.delete('/cust', recursive=True)
def main():
args = sys.argv[1:]
func_name = args.pop(0)
client = kazoo.client.KazooClient('127.0.0.1:2181')
client.start()
globals()[func_name](client, *args)
client.stop()
client.close()
test_data = (
('/cust', '{"zrs-primary":"storage1.cust.nova.aws.zope.net","admin-zaam-domain":"CUST","retail-zaam-domain":"cust-retail","zrs-version":"3.9.0"}'),
('/cust/checkout', ''),
('/cust/checkout/app', '{"branding ->":"../../databases/branding","sessions ->":"../../databases/authsessions","port":15040,"zaam ->":"../../databases/profiles"}'),
('/cust/checkout/checkout.zope.net', '{"address =>":"../app port","type":"nginx.host","strict-transport-security":true,"version =>":"/cust/versions nginx.host"}'),
('/cust/checkout/checkout.zope.net/deploy', ''),
('/cust/checkout/checkout.zope.net/deploy/app.cust', ''),
('/cust/databases', '{"profiles ->":"/zmh/databases/profiles","multi-gc":"main= sessions ugc =zaam =transcoder","zaam ->":"/zmh/databases/zaam","primary":"das-head1.zope.net","version =>":".. zrs-version","perform-gc-if-secondary":false,"branding ->":"/zmh/databases/branding","type":"zrs","digest":0}'),
('/cust/databases/authsessions', '{"digest =>":"..","primary =>":"../.. zrs-primary","type":"zrs","blobs":false,"version =>":"../.. zrs-version"}'),
('/cust/databases/authsessions/deploy', ''),
('/cust/databases/authsessions/deploy/storage.cust', ''),
('/cust/databases/authsessions/providers', ''),
('/cust/databases/authsessions/replication', ''),
('/cust/databases/authsessions/replication/providers', ''),
('/cust/databases/authsessions/secondary', ''),
('/cust/databases/authsessions/secondary/providers', ''),
('/cust/databases/authsessions/secondary/replication', ''),
('/cust/databases/authsessions/secondary/replication/providers', ''),
('/cust/databases/customerservice', '{"digest =>":"..","primary =>":"..","type":"zrs","blobs":false,"version =>":"../.. zrs-version"}'),
('/cust/databases/customerservice/deploy', ''),
('/cust/databases/customerservice/deploy/storage.cust', ''),
('/cust/databases/customerservice/providers', ''),
('/cust/databases/customerservice/providers/das-head1.zope.net:13930', ''),
('/cust/databases/customerservice/replication', ''),
('/cust/databases/customerservice/replication/providers', ''),
('/cust/databases/customerservice/replication/providers/das-head1.zope.net:13932', ''),
('/cust/databases/customerservice/secondary', ''),
('/cust/databases/customerservice/secondary/providers', ''),
('/cust/databases/customerservice/secondary/replication', ''),
('/cust/databases/customerservice/secondary/replication/providers', ''),
('/cust/databases/deploy', ''),
('/cust/databases/deploy/storage.cust', ''),
('/cust/databases/events', '{"digest =>":"..","primary =>":"..","type":"zrs","blobs":false,"version =>":"../.. zrs-version"}'),
('/cust/databases/events/deploy', ''),
('/cust/databases/events/deploy/storage.cust', ''),
('/cust/databases/events/providers', ''),
('/cust/databases/events/providers/das-head1.zope.net:15900', ''),
('/cust/databases/events/replication', ''),
('/cust/databases/events/replication/providers', ''),
('/cust/databases/events/replication/providers/das-head1.zope.net:15902', ''),
('/cust/databases/events/secondary', ''),
('/cust/databases/events/secondary/providers', ''),
('/cust/databases/events/secondary/replication', ''),
('/cust/databases/events/secondary/replication/providers', ''),
('/cust/databases/main', '{"s3":"blobs.zope.com/cust/main:0:9999"}'),
('/cust/databases/main/blobs', ''),
('/cust/databases/main/blobs/providers', ''),
('/cust/databases/main/providers', ''),
('/cust/databases/main/providers/das-head1.zope.net:13900', ''),
('/cust/databases/main/replication', ''),
('/cust/databases/main/replication/providers', ''),
('/cust/databases/main/replication/providers/das-head1.zope.net:13902', ''),
('/cust/databases/main/secondary', ''),
('/cust/databases/main/secondary/providers', ''),
('/cust/databases/main/secondary/replication', ''),
('/cust/databases/main/secondary/replication/providers', ''),
('/cust/databases/sessions', ''),
('/cust/databases/sessions/providers', ''),
('/cust/databases/sessions/providers/das-head1.zope.net:13960', ''),
('/cust/databases/sessions/replication', ''),
('/cust/databases/sessions/replication/providers', ''),
('/cust/databases/sessions/replication/providers/das-head1.zope.net:13962', ''),
('/cust/databases/sessions/secondary', ''),
('/cust/databases/sessions/secondary/providers', ''),
('/cust/databases/sessions/secondary/replication', ''),
('/cust/databases/sessions/secondary/replication/providers', ''),
('/cust/databases/subscriptions', '{"digest =>":"..","primary =>":"..","type":"zrs","blobs":false,"version =>":"../.. zrs-version"}'),
('/cust/databases/subscriptions/deploy', ''),
('/cust/databases/subscriptions/deploy/storage.cust', ''),
('/cust/databases/subscriptions/providers', ''),
('/cust/databases/subscriptions/providers/das-head1.zope.net:13910', ''),
('/cust/databases/subscriptions/replication', ''),
('/cust/databases/subscriptions/replication/providers', ''),
('/cust/databases/subscriptions/replication/providers/das-head1.zope.net:13912', ''),
('/cust/databases/subscriptions/secondary', ''),
('/cust/databases/subscriptions/secondary/providers', ''),
('/cust/databases/subscriptions/secondary/replication', ''),
('/cust/databases/subscriptions/secondary/replication/providers', ''),
('/cust/databases/transcoding', '{"digest =>":"..","primary =>":"..","type":"zrs","version =>":"../.. zrs-version"}'),
('/cust/databases/transcoding/deploy', ''),
('/cust/databases/transcoding/deploy/storage.cust', ''),
('/cust/databases/transcoding/providers', ''),
('/cust/databases/transcoding/providers/das-head1.zope.net:8100', ''),
('/cust/databases/transcoding/replication', ''),
('/cust/databases/transcoding/replication/providers', ''),
('/cust/databases/transcoding/replication/providers/das-head1.zope.net:8103', ''),
('/cust/databases/transcoding/secondary', ''),
('/cust/databases/transcoding/secondary/providers', ''),
('/cust/databases/transcoding/secondary/replication', ''),
('/cust/databases/transcoding/secondary/replication/providers', ''),
('/cust/databases/ugc', ''),
('/cust/databases/ugc/providers', ''),
('/cust/databases/ugc/providers/das-head1.zope.net:13940', ''),
('/cust/databases/ugc/replication', ''),
('/cust/databases/ugc/replication/providers', ''),
('/cust/databases/ugc/replication/providers/das-head1.zope.net:13942', ''),
('/cust/databases/ugc/secondary', ''),
('/cust/databases/ugc/secondary/providers', ''),
('/cust/databases/ugc/secondary/replication', ''),
('/cust/databases/ugc/secondary/replication/providers', ''),
('/cust/versions', '{"nginx.host":"1.11.3"}'),
('/cust/z4m', ''),
('/cust/z4m/z4m-sandbox.cust.zope.net', '{"destination":"https://sandbox-cust.admin.zope.net","type":"nginx.host redirect","version =>":"/cust/versions nginx.host"}'),
('/cust/z4m/z4m-sandbox.cust.zope.net/deploy', ''),
('/cust/z4m/z4m-sandbox.cust.zope.net/deploy/app.cust', ''),
('/cust/z4m/z4m.cust.zope.net', '{"destination":"https://z4m-cust.admin.zope.net","type":"nginx.host redirect","version =>":"/cust/versions nginx.host"}'),
('/cust/z4m/z4m.cust.zope.net/deploy', ''),
('/cust/z4m/z4m.cust.zope.net/deploy/app.cust', ''),
)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment