diff --git a/README.textile b/README.textile
index 8109fe8..9a6e6cf 100644
--- a/README.textile
+++ b/README.textile
@@ -38,11 +38,12 @@ h3. Usage
Usage: zk-smoketest.py [options]
Options:
- -h, --help show this help message and exit
- --servers=SERVERS comma separated list of host:port (default localhost:2181)
- --timeout=TIMEOUT session timeout in milliseconds (default 5000)
- -v, --verbose verbose output, include more detail
- -q, --quiet quiet output, basically just success/failure
+ -h, --help show this help message and exit
+ --servers=SERVERS comma separated list of host:port (default localhost:2181)
+ --config=CONFIGFILE zookeeper configuration file to lookup servers from
+ --timeout=TIMEOUT session timeout in milliseconds (default 5000)
+ -v, --verbose verbose output, include more detail
+ -q, --quiet quiet output, basically just success/failure
The exit code is 0 on success, non-0 exit code on failure.
@@ -68,6 +69,12 @@ Say you have a ZooKeeper ensemble with 5 servers (host1,host2,host3,host4,host5,
PYTHONPATH=lib.linux-i686-2.6 LD_LIBRARY_PATH=lib.linux-i686-2.6 ./zk-smoketest.py --servers "host1:2181,host2:2181,host3:2181,host4:2181,host5:2181"
+or, for a ZK-style configuration file:
+
+
+PYTHONPATH=lib.linux-i686-2.6 LD_LIBRARY_PATH=lib.linux-i686-2.6 ./zk-smoketest.py --config zk.conf
+
+
h2. zk-latencies.py
This tool uses the ZooKeeper python binding to test various operation latencies. In general the script does the following:
@@ -92,6 +99,7 @@ Options:
localhost:2181)
--cluster=CLUSTER comma separated list of host:port, test as a cluster,
alternative to --servers
+ --config=CONFIGFILE zookeeper configuration file to lookup servers from
--timeout=TIMEOUT session timeout in milliseconds (default 5000)
--root_znode=ROOT_ZNODE
root for the test, will be created as part of test
@@ -133,6 +141,12 @@ Say you have a ZooKeeper ensemble with 5 servers (host1,host2,host3,host4,host5,
PYTHONPATH=lib.linux-i686-2.6 LD_LIBRARY_PATH=lib.linux-i686-2.6 ./zk-latencies.py --servers "host1:2181,host2:2181,host3:2181,host4:2181,host5:2181" --znode_count=100 --znode_size=100 --synchronous
+or, for a ZK-style configuration file:
+
+
+PYTHONPATH=lib.linux-i686-2.6 LD_LIBRARY_PATH=lib.linux-i686-2.6 ./zk-latencies.py --config zk.conf --znode_count=100 --znode_size=100 --synchronous
+
+
Result:
diff --git a/zk-latencies.py b/zk-latencies.py index edc0a2c..eedafc2 100755 --- a/zk-latencies.py +++ b/zk-latencies.py @@ -28,6 +28,9 @@ default="localhost:2181", help="comma separated list of host:port (default %default), test each in turn") parser.add_option("", "--cluster", dest="cluster", default=None, help="comma separated list of host:port, test as a cluster, alternative to --servers") +parser.add_option("", "--config", + dest="configfile", default=None, + help="zookeeper configuration file to lookup cluster from") parser.add_option("", "--timeout", dest="timeout", type="int", default=5000, help="session timeout in milliseconds (default %default)") parser.add_option("", "--root_znode", dest="root_znode", @@ -261,12 +264,25 @@ def func(): "notif %7d watches" % (options.watch_multiple * options.znode_count), (options.watch_multiple * options.znode_count)) -if __name__ == '__main__': - data = options.znode_size * "x" +def read_zk_config(filename): + with open(filename) as f: + config = dict(tuple(line.rstrip().split('=', 1)) for line in f if line.rstrip()) + return config + +def get_zk_servers(filename): if options.cluster: - servers = [options.cluster] + return [options.cluster] + elif filename: + config = read_zk_config(options.configfile) + client_port = config['clientPort'] + return [",".join("%s:%s" % (v.split(':', 1)[0], client_port) + for k, v in config.items() if k.startswith('server.'))] else: - servers = options.servers.split(",") + return options.servers.split(",") + +if __name__ == '__main__': + data = options.znode_size * "x" + servers = get_zk_servers(options.configfile) # create all the sessions first to ensure that all servers are # at least available & quorum has been formed. otw this will diff --git a/zk-smoketest.py b/zk-smoketest.py index fa9d1ef..2bf839c 100755 --- a/zk-smoketest.py +++ b/zk-smoketest.py @@ -26,6 +26,9 @@ parser = OptionParser(usage=usage) parser.add_option("", "--servers", dest="servers", default="localhost:2181", help="comma separated list of host:port (default %default)") +parser.add_option("", "--config", + dest="configfile", default=None, + help="zookeeper configuration file to lookup servers from") parser.add_option("", "--timeout", dest="timeout", type="int", default=5000, help="session timeout in milliseconds (default %default)") parser.add_option("-v", "--verbose", @@ -48,8 +51,22 @@ def __str__(self): return repr(self.value) +def read_zk_config(filename): + with open(filename) as f: + config = dict(tuple(line.rstrip().split('=', 1)) for line in f if line.rstrip()) + return config + +def get_zk_servers(filename): + if filename: + config = read_zk_config(options.configfile) + client_port = config['clientPort'] + return ["%s:%s" % (v.split(':', 1)[0], client_port) + for k, v in config.items() if k.startswith('server.')] + else: + return options.servers.split(",") + if __name__ == '__main__': - servers = options.servers.split(",") + servers = get_zk_servers(options.configfile) # create all the sessions first to ensure that all servers are # at least available & quorum has been formed. otw this will