Skip to content

Instantly share code, notes, and snippets.

@tkaemming
Last active August 29, 2015 14:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tkaemming/6102a522e8f2395aeaeb to your computer and use it in GitHub Desktop.
Save tkaemming/6102a522e8f2395aeaeb to your computer and use it in GitHub Desktop.
(6fbda187737cc2cd)ted@aventador-3 % python remove-consumer.py --zookeeper $ZOOKEEPER tkaemming
/consumers/tkaemming (created 1 day, 3:21:37.186777 ago, modified 1 day, 3:21:37.186777 ago, version 0)
/consumers/tkaemming/offsets (created 1 day, 3:21:27.186777 ago, modified 1 day, 3:21:27.186777 ago, version 0)
/consumers/tkaemming/offsets/activity-metrics (created 1 day, 3:21:27.186777 ago, modified 1 day, 3:21:27.186777 ago, version 0)
/consumers/tkaemming/offsets/activity-metrics/3-1 (created 1 day, 3:21:26.186777 ago, modified 0:31:03.186777 ago, version 1293)
/consumers/tkaemming/offsets/activity-metrics/3-0 (created 1 day, 3:21:26.186777 ago, modified 0:31:03.186777 ago, version 1293)
/consumers/tkaemming/offsets/activity-metrics/1-1 (created 1 day, 3:21:26.186777 ago, modified 0:31:03.186777 ago, version 1293)
/consumers/tkaemming/offsets/activity-metrics/1-0 (created 1 day, 3:21:26.186777 ago, modified 0:31:03.186777 ago, version 1293)
/consumers/tkaemming/offsets/activity-metrics/2-1 (created 1 day, 3:21:26.186777 ago, modified 0:31:03.186777 ago, version 1293)
/consumers/tkaemming/offsets/activity-metrics/2-0 (created 1 day, 3:21:26.186777 ago, modified 0:31:03.186777 ago, version 1293)
/consumers/tkaemming/owners (created 1 day, 3:21:34.186777 ago, modified 1 day, 3:21:34.186777 ago, version 0)
/consumers/tkaemming/owners/activity-metrics (created 1 day, 3:21:33.186777 ago, modified 1 day, 3:21:33.186777 ago, version 0)
/consumers/tkaemming/ids (created 1 day, 3:21:37.186777 ago, modified 1 day, 3:21:37.186777 ago, version 0)
delete tree? [y/n]
y
removed consumers/tkaemming/offsets/activity-metrics/3-1
removed consumers/tkaemming/offsets/activity-metrics/3-0
removed consumers/tkaemming/offsets/activity-metrics/1-1
removed consumers/tkaemming/offsets/activity-metrics/1-0
removed consumers/tkaemming/offsets/activity-metrics/2-1
removed consumers/tkaemming/offsets/activity-metrics/2-0
removed consumers/tkaemming/offsets/activity-metrics
removed consumers/tkaemming/offsets
removed consumers/tkaemming/owners/activity-metrics
removed consumers/tkaemming/owners
removed consumers/tkaemming/ids
removed consumers/tkaemming
successfully removed tkaemming
#!/usr/bin/env python
import time
import pprint
import logging
import posixpath
from datetime import timedelta
from distutils.util import strtobool
import kazoo.client
logging.basicConfig(level=logging.WARN)
def walk(zookeeper, path):
node = zookeeper.get_async(path)
children = []
for name in zookeeper.get_children(path):
children.append(walk(zookeeper, posixpath.join(path, name)))
return path, node.get(), children
now = time.time()
def history(stat):
return "created %s ago, modified %s ago, version %s" % (
timedelta(seconds=now - (stat.ctime / 1000)),
timedelta(seconds=now - (stat.mtime / 1000)),
stat.version,
)
def format(stream, tree, depth=0, indent=" "):
write = lambda line: stream.write("%s%s\n" % (indent * depth, line))
path, (data, stat), children = tree
write("/%s (%s)" % (path, history(stat)))
for child in children:
format(stream, child, depth=depth+1)
def prune(stream, zookeeper, tree):
path, (data, stat), children = tree
for child in children:
prune(stream, z, child)
zookeeper.delete(path)
stream.write("removed %s\n" % (path,))
if __name__ == "__main__":
import optparse
import sys
parser = optparse.OptionParser()
parser.add_option("-z", "--zookeeper", default="localhost:2181")
options, (identifier,) = parser.parse_args()
z = kazoo.client.KazooClient(options.zookeeper)
z.start()
path = posixpath.join("consumers", identifier)
tree = walk(z, path)
format(sys.stderr, tree)
while True:
sys.stderr.write("\n")
sys.stderr.write("delete tree? [y/n]\n")
i = raw_input()
try:
ok = strtobool(i)
break
except ValueError:
sys.stderr.write("invalid input: %s\n" % (i,))
if not ok:
sys.stderr.write("aborted\n")
sys.exit(1)
prune(sys.stderr, z, tree)
sys.stderr.write("\nsuccessfully removed %s\n" % (identifier,))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment