http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zkpython/src/test/create_test.py
----------------------------------------------------------------------
diff --git a/src/contrib/zkpython/src/test/create_test.py b/src/contrib/zkpython/src/test/create_test.py
deleted file mode 100755
index 8ab80f9..0000000
--- a/src/contrib/zkpython/src/test/create_test.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/python
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import zookeeper, zktestbase, unittest, threading
-
-ZOO_OPEN_ACL_UNSAFE = {"perms":0x1f, "scheme":"world", "id" :"anyone"}
-
-class CreationTest(zktestbase.TestBase):
- """Test whether we can create znodes"""
- # to do: startup and teardown via scripts?
- def setUp(self):
- zktestbase.TestBase.setUp(self)
- try:
- zookeeper.delete(self.handle, "/zk-python-createtest")
- zookeeper.delete(self.handle, "/zk-python-acreatetest")
- except:
- pass
-
- def test_sync_create(self):
- self.assertEqual(self.connected, True)
- ret = zookeeper.create(self.handle, "/zk-python-createtest", "nodecontents", [ZOO_OPEN_ACL_UNSAFE], zookeeper.EPHEMERAL)
- self.assertEqual(ret, "/zk-python-createtest")
- self.assertRaises(zookeeper.NoChildrenForEphemeralsException,
- zookeeper.create,
- self.handle,
- "/zk-python-createtest/invalid-child",
- "",
- [ZOO_OPEN_ACL_UNSAFE],
- zookeeper.EPHEMERAL)
-
- def test_sync_create_existing(self):
- self.assertEqual(self.connected, True)
- ret = zookeeper.create(self.handle, "/zk-python-createtest-existing", "nodecontents", [ZOO_OPEN_ACL_UNSAFE], zookeeper.EPHEMERAL)
- self.assertEqual(ret, "/zk-python-createtest-existing")
-
- self.assertRaises(zookeeper.NodeExistsException,
- zookeeper.create,
- self.handle,
- "/zk-python-createtest-existing",
- "nodecontents",
- [ZOO_OPEN_ACL_UNSAFE],
- zookeeper.EPHEMERAL)
-
-
- def test_exception_paths(self):
- """
- Make sure common exceptions due to API misuse are correctly propogated
- """
- self.assertRaises(zookeeper.BadArgumentsException,
- zookeeper.create,
- self.handle,
- "/zk-python-badargs-test",
- "",
- [ZOO_OPEN_ACL_UNSAFE],
- -1)
- self.assertRaises(zookeeper.InvalidACLException,
- zookeeper.create,
- self.handle,
- "/zk-python-invalidacl-test",
- "",
- ZOO_OPEN_ACL_UNSAFE) # Error - not a list
-
-
- def test_async_create(self):
- self.cv = threading.Condition()
- def callback(handle, rc, value):
- self.cv.acquire()
- self.callback_flag = True
- self.rc = rc
- self.cv.notify()
- self.cv.release()
-
- self.assertEqual(self.connected, True, "Not connected!")
- self.cv.acquire()
-
- ret = zookeeper.acreate(self.handle, "/zk-python-acreatetest", "nodecontents",
- [ZOO_OPEN_ACL_UNSAFE], zookeeper.EPHEMERAL,
- callback )
- self.assertEqual(ret, zookeeper.OK, "acreate failed")
- while not self.callback_flag:
- self.cv.wait(15)
- self.cv.release()
-
- self.assertEqual(self.callback_flag, True, "acreate timed out")
- self.assertEqual(self.rc, zookeeper.OK)
-
-
-if __name__ == '__main__':
- unittest.main()
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zkpython/src/test/delete_test.py
----------------------------------------------------------------------
diff --git a/src/contrib/zkpython/src/test/delete_test.py b/src/contrib/zkpython/src/test/delete_test.py
deleted file mode 100755
index 913b6a9..0000000
--- a/src/contrib/zkpython/src/test/delete_test.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/python
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import zookeeper, zktestbase, unittest, threading
-
-class DeletionTest(zktestbase.TestBase):
- """Test whether we can delete znodes"""
-
- def test_sync_delete(self):
- ZOO_OPEN_ACL_UNSAFE = {"perms":0x1f, "scheme":"world", "id" :"anyone"}
- self.assertEqual(self.connected, True)
- ret = zookeeper.create(self.handle, "/zk-python-deletetest", "nodecontents", [ZOO_OPEN_ACL_UNSAFE], zookeeper.EPHEMERAL)
- self.assertEqual(ret, "/zk-python-deletetest")
- ret = zookeeper.delete(self.handle,"/zk-python-deletetest")
- self.assertEqual(ret, zookeeper.OK)
- children = zookeeper.get_children(self.handle, "/")
- self.assertEqual(False, "zk-python-deletetest" in children)
-
- # test exception
- self.assertRaises(zookeeper.NoNodeException,
- zookeeper.delete,
- self.handle,
- "/zk-python-deletetest")
-
- def test_async_delete(self):
- ZOO_OPEN_ACL_UNSAFE = {"perms":0x1f, "scheme":"world", "id" :"anyone"}
- self.assertEqual(self.connected, True)
- ret = zookeeper.create(self.handle, "/zk-python-adeletetest", "nodecontents", [ZOO_OPEN_ACL_UNSAFE], zookeeper.EPHEMERAL)
- self.assertEqual(ret, "/zk-python-adeletetest")
-
- self.cv = threading.Condition()
- self.callback_flag = False
- self.rc = -1
- def callback(handle, rc):
- self.cv.acquire()
- self.callback_flag = True
- self.cv.notify()
- self.rc = rc # don't assert this here, as if the assertion fails, the test will block
- self.cv.release()
-
- self.cv.acquire()
- ret = zookeeper.adelete(self.handle,"/zk-python-adeletetest",-1,callback)
- self.assertEqual(ret, zookeeper.OK, "adelete failed")
- while not self.callback_flag:
- self.cv.wait(15)
- self.cv.release()
-
- self.assertEqual(self.callback_flag, True, "adelete timed out")
- self.assertEqual(self.rc, zookeeper.OK)
-
-
-if __name__ == '__main__':
- unittest.main()
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zkpython/src/test/exists_test.py
----------------------------------------------------------------------
diff --git a/src/contrib/zkpython/src/test/exists_test.py b/src/contrib/zkpython/src/test/exists_test.py
deleted file mode 100755
index ddc6ef3..0000000
--- a/src/contrib/zkpython/src/test/exists_test.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/python
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import zookeeper, zktestbase, unittest, threading
-
-ZOO_OPEN_ACL_UNSAFE = {"perms":0x1f, "scheme":"world", "id" :"anyone"}
-class ExistsTest(zktestbase.TestBase):
- def setUp( self ):
- zktestbase.TestBase.setUp(self)
- try:
- zookeeper.create(self.handle, "/zk-python-existstest","existstest", [ZOO_OPEN_ACL_UNSAFE],zookeeper.EPHEMERAL)
- zookeeper.create(self.handle, "/zk-python-aexiststest","existstest",[ZOO_OPEN_ACL_UNSAFE],zookeeper.EPHEMERAL)
- except:
- pass
-
- def test_sync_exists(self):
- self.assertEqual(self.connected, True)
- ret = zookeeper.exists(self.handle, "/zk-python-existstest", None)
- self.assertNotEqual(ret, None, "/zk-python-existstest does not exist (possibly means creation failure)")
-
- def test_sync_nexists(self):
- self.assertEqual(None, zookeeper.exists(self.handle, "/i-dont-exist", None))
-
-
- def test_async_exists(self):
- self.cv = threading.Condition()
- def callback(handle, rc, stat):
- self.cv.acquire()
- self.callback_flag = True
- self.cv.notify()
- self.cv.release()
- self.rc = rc
-
- self.assertEqual(self.connected, True)
-
- self.cv.acquire()
- ret = zookeeper.aexists(self.handle, "/zk-python-aexiststest", None,
- callback )
- self.assertEqual(ret, zookeeper.OK)
- while not self.callback_flag:
- self.cv.wait(15)
- self.cv.release()
-
- self.assertEqual(self.callback_flag, True, "aexists timed out")
- self.assertEqual(self.rc, zookeeper.OK, "Return code not ok:" + zookeeper.zerror(self.rc))
-
-
-if __name__ == '__main__':
- unittest.main()
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zkpython/src/test/get_set_test.py
----------------------------------------------------------------------
diff --git a/src/contrib/zkpython/src/test/get_set_test.py b/src/contrib/zkpython/src/test/get_set_test.py
deleted file mode 100755
index b77b3b2..0000000
--- a/src/contrib/zkpython/src/test/get_set_test.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/bin/python
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import zookeeper, zktestbase, unittest, threading, sys
-if sys.version_info < (3,):
- range = xrange
-
-ZOO_OPEN_ACL_UNSAFE = {"perms":0x1f, "scheme":"world", "id" :"anyone"}
-
-class GetSetTest(zktestbase.TestBase):
- def setUp( self ):
- zktestbase.TestBase.setUp(self)
- try:
- zookeeper.create(self.handle, "/zk-python-getsettest", "on",[ZOO_OPEN_ACL_UNSAFE], zookeeper.EPHEMERAL)
- zookeeper.create(self.handle, "/zk-python-agetsettest",
- "on",[ZOO_OPEN_ACL_UNSAFE], zookeeper.EPHEMERAL)
- except:
- pass
-
- def test_empty_node(self):
- """
- Test for a bug when instead of empty string we can get
- random data from buffer malloc'ed to hold node contents.
- See ZOOKEEPER-1906 for details
- """
- NODE_PATH = "/zk-python-test-empty-node"
- self.ensureDeleted(NODE_PATH)
- zookeeper.create(self.handle, NODE_PATH, "",
- [{"perms":0x1f, "scheme":"world", "id" :"anyone"}])
- (data,stat) = zookeeper.get(self.handle, NODE_PATH, None)
- self.assertEqual(data, "", "Data is not empty as expected: " + data)
-
- def test_sync_getset(self):
- self.assertEqual(self.connected, True, "Not connected!")
- (data,stat) = zookeeper.get(self.handle, "/zk-python-getsettest", None)
- self.assertEqual(data, "on", "Data is not 'on' as expected: " + data)
- ret = zookeeper.set(self.handle, "/zk-python-getsettest",
- "off", stat["version"])
- (data,stat) = zookeeper.get(self.handle, "/zk-python-getsettest", None)
- self.assertEqual(data, "off", "Data is not 'off' as expected: " + data)
- self.assertRaises(zookeeper.BadVersionException,
- zookeeper.set,
- self.handle,
- "/zk-python-getsettest",
- "test",
- stat["version"]+1)
- stat2 = zookeeper.set2(self.handle, "/zk-python-getsettest",
- "set2", stat["version"])
- self.assertNotEqual(stat2, None, "set2 call failed, return should not be None")
- self.assertEqual(stat2["numChildren"], 0,
- "set2 call failed, numChildren not 0 in set2 call")
- (data,stat) = zookeeper.get(self.handle, "/zk-python-getsettest", None)
- self.assertEqual(data, "set2", "Data is not 'set2' as expected: " + data)
-
- def test_stat_deleted_node(self):
- """
- Test for a bug that surfaced when trying to build a
- stat object from a non-existant node.
-
- """
- self.ensureDeleted("/zk-python-test-deleteme")
- self.assertRaises(zookeeper.NoNodeException,
- zookeeper.get,
- self.handle,
- "/zk-python-test-deleteme")
- self.cv = threading.Condition()
- def callback(handle, rc, value, stat):
- self.cv.acquire()
- self.stat = stat
- self.rc = rc
- self.value = value
- self.callback_flag = True
- self.cv.notify()
- self.cv.release()
- self.cv.acquire()
- zookeeper.aget(self.handle, "/zk-python-test-deleteme", None, callback)
- self.cv.wait(15)
- self.assertEqual(self.callback_flag, True, "aget timed out!")
- self.assertEqual(self.stat, None, "Stat should be none!")
- self.assertEqual(self.value, None, "Value should be none!")
-
- def test_sync_get_large_datanode(self):
- """
- Test that we can retrieve datanode sizes up to
- 1Mb with default parameters (depends on ZooKeeper server).
- """
-
- data = ''.join(["A" for x in range(1024*1023)])
- self.ensureDeleted("/zk-python-test-large-datanode")
- zookeeper.create(self.handle, "/zk-python-test-large-datanode", data,
- [{"perms":0x1f, "scheme":"world", "id" :"anyone"}])
- (ret,stat) = zookeeper.get(self.handle, "/zk-python-test-large-datanode")
- self.assertEqual(len(ret), 1024*1023,
- "Should have got 1Mb returned, instead got %s" % len(ret))
- (ret,stat) = zookeeper.get(self.handle, "/zk-python-test-large-datanode",None,500)
- self.assertEqual(len(ret), 500,
- "Should have got 500 bytes returned, instead got %s" % len(ret))
-
-
-
- def test_async_getset(self):
- self.cv = threading.Condition()
- def get_callback(handle, rc, value, stat):
- self.cv.acquire()
- self.callback_flag = True
- self.rc = rc
- self.value = (value,stat)
- self.cv.notify()
- self.cv.release()
-
- def set_callback(handle, rc, stat):
- self.cv.acquire()
- self.callback_flag = True
- self.rc = rc
- self.value = stat
- self.cv.notify()
- self.cv.release()
-
- self.assertEqual(self.connected, True, "Not connected!")
-
- self.cv.acquire()
- self.callback_flag = False
- ret = zookeeper.aset(self.handle, "/zk-python-agetsettest", "off", -1, set_callback)
- self.assertEqual(ret, zookeeper.OK, "aset failed")
- while not self.callback_flag:
- self.cv.wait(15)
- self.cv.release()
- self.assertEqual(self.callback_flag, True, "aset timed out")
-
- self.cv.acquire()
- self.callback_flag = False
- ret = zookeeper.aget(self.handle, "/zk-python-agetsettest", None, get_callback)
- self.assertEqual(ret, zookeeper.OK, "aget failed")
- self.cv.wait(15)
- self.cv.release()
- self.assertEqual(self.callback_flag, True, "aget timed out")
- self.assertEqual(self.value[0], "off", "Data is not 'off' as expected: " + self.value[0])
-
- def test_sync_getchildren(self):
- self.ensureCreated("/zk-python-getchildrentest", flags=0)
- self.ensureCreated("/zk-python-getchildrentest/child")
- children = zookeeper.get_children(self.handle, "/zk-python-getchildrentest")
- self.assertEqual(len(children), 1, "Expected to find 1 child, got " + str(len(children)))
-
- def test_async_getchildren(self):
- self.ensureCreated("/zk-python-getchildrentest", flags=0)
- self.ensureCreated("/zk-python-getchildrentest/child")
-
- def gc_callback(handle, rc, children):
- self.cv.acquire()
- self.rc = rc
- self.children = children
- self.callback_flag = True
- self.cv.notify()
- self.cv.release()
-
- self.cv.acquire()
- self.callback_flag = False
- zookeeper.aget_children(self.handle, "/zk-python-getchildrentest", None, gc_callback)
- self.cv.wait(15)
- self.assertEqual(self.callback_flag, True, "aget_children timed out")
- self.assertEqual(self.rc, zookeeper.OK, "Return code for aget_children was not OK - %s" % zookeeper.zerror(self.rc))
- self.assertEqual(len(self.children), 1, "Expected to find 1 child, got " + str(len(self.children)))
-
-
- def test_async_getchildren_with_watcher(self):
- self.ensureCreated("/zk-python-getchildrentest", flags=0)
- self.ensureCreated("/zk-python-getchildrentest/child")
-
- watched = []
-
- def watcher(*args):
- self.cv.acquire()
- watched.append(args)
- self.cv.notify()
- self.cv.release()
-
- def children_callback(*args):
- self.cv.acquire()
- self.cv.notify()
- self.cv.release()
-
- zookeeper.aget_children(
- self.handle, "/zk-python-getchildrentest", watcher, children_callback)
-
- self.cv.acquire()
- self.cv.wait()
- self.cv.release()
-
- self.cv.acquire()
- self.ensureCreated("/zk-python-getchildrentest/child2")
- self.cv.wait(15)
- self.assertTrue(watched)
-
-if __name__ == '__main__':
- unittest.main()
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zkpython/src/test/run_tests.sh
----------------------------------------------------------------------
diff --git a/src/contrib/zkpython/src/test/run_tests.sh b/src/contrib/zkpython/src/test/run_tests.sh
deleted file mode 100755
index 18d9240..0000000
--- a/src/contrib/zkpython/src/test/run_tests.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Usage: run_tests.sh testdir [logdir]
-# logdir is optional, defaults to cwd
-
-# get the number of command-line arguments given
-ARGC=$#
-
-# check to make sure enough arguments were given or exit
-if [ $ARGC -lt 2 ]; then
- export ZKPY_LOG_DIR="."
-else
- export ZKPY_LOG_DIR=$2
-fi
-
-# Find the build directory containing zookeeper.so
-SO_PATH=`find ../../../build/ -name "zookeeper.so" | head -1`
-PYTHONPATH=`dirname $SO_PATH`
-LIB_PATH=../../c/.libs/:../../../build/test/test-cppunit/.libs
-for test in `ls $1/*_test.py`;
-do
- echo "Running $test"
- LD_LIBRARY_PATH=$LIB_PATH:$LD_LIBRARY_PATH DYLD_LIBRARY_PATH=$LIB_PATH:$DYLD_LIBRARY_PATH PYTHONPATH=$PYTHONPATH python $test
-done
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zkpython/src/test/zkServer.sh
----------------------------------------------------------------------
diff --git a/src/contrib/zkpython/src/test/zkServer.sh b/src/contrib/zkpython/src/test/zkServer.sh
deleted file mode 100755
index 51d508f..0000000
--- a/src/contrib/zkpython/src/test/zkServer.sh
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-if [ "x$1" == "x" ]
-then
- echo "USAGE: $0 startClean|start|stop hostPorts"
- exit 2
-fi
-
-if [ "x$1" == "xstartClean" ]
-then
- if [ "x${base_dir}" == "x" ]
- then
- rm -rf /tmp/zkdata
- else
- rm -rf ${base_dir}/build/tmp
- fi
-fi
-
-if [ "x${base_dir}" == "x" ]
-then
-zk_base="../../../"
-else
-zk_base="${base_dir}"
-fi
-
-CLASSPATH="$CLASSPATH:${zk_base}/build/classes"
-CLASSPATH="$CLASSPATH:${zk_base}/conf"
-
-for i in "${zk_base}"/build/lib/*.jar
-do
- CLASSPATH="$CLASSPATH:$i"
-done
-
-for i in "${zk_base}"/src/java/lib/*.jar
-do
- CLASSPATH="$CLASSPATH:$i"
-done
-
-# Make sure nothing is left over from before
-#fuser -skn tcp 22182/tcp
-
-case $1 in
-start|startClean)
- if [ "x${base_dir}" == "x" ]
- then
- mkdir -p /tmp/zkdata
- java -cp $CLASSPATH org.apache.zookeeper.server.ZooKeeperServerMain 22182 /tmp/zkdata &> /tmp/zk.log &
- else
- mkdir -p ${base_dir}/build/tmp/zkdata
- java -cp $CLASSPATH org.apache.zookeeper.server.ZooKeeperServerMain 22182 ${base_dir}/build/tmp/zkdata &> ${base_dir}/build/tmp/zk.log &
- fi
- sleep 5
- ;;
-stop)
- # Already killed above
- ;;
-*)
- echo "Unknown command " + $1
- exit 2
-esac
-
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zkpython/src/test/zktestbase.py
----------------------------------------------------------------------
diff --git a/src/contrib/zkpython/src/test/zktestbase.py b/src/contrib/zkpython/src/test/zktestbase.py
deleted file mode 100755
index 8229418..0000000
--- a/src/contrib/zkpython/src/test/zktestbase.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/python
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import os
-import unittest, threading, zookeeper
-ZOO_OPEN_ACL_UNSAFE = {"perms":0x1f, "scheme":"world", "id" :"anyone"}
-
-class TestBase(unittest.TestCase):
- SERVER_PORT = 22182
-
- def __init__(self,methodName='runTest'):
- unittest.TestCase.__init__(self,methodName)
- self.host = "localhost:%d" % self.SERVER_PORT
- self.connected = False
- self.handle = -1
- logdir = os.environ.get("ZKPY_LOG_DIR")
- logfile = os.path.join(logdir, self.__class__.__name__ + ".log")
- try:
- f = open(logfile,"w")
- zookeeper.set_log_stream(f)
- except IOError:
- print("Couldn't open " + logfile + " for writing")
-
-
- def setUp(self):
- self.callback_flag = False
- self.cv = threading.Condition()
- self.connected = False
- def connection_watcher(handle, type, state, path):
- self.cv.acquire()
- self.connected = True
- self.cv.notify()
- self.cv.release()
-
- self.cv.acquire()
- self.handle = zookeeper.init(self.host, connection_watcher)
- self.cv.wait(15.0)
- self.cv.release()
-
- if not self.connected:
- raise Exception("Couldn't connect to host -", self.host)
-
- def newConnection(self):
- cv = threading.Condition()
- self.pending_connection = False
- def connection_watcher(handle, type, state, path):
- cv.acquire()
- self.pending_connection = True
- cv.notify()
- cv.release()
-
- cv.acquire()
- handle = zookeeper.init(self.host, connection_watcher)
- cv.wait(15.0)
- cv.release()
-
- if not self.pending_connection:
- raise Exception("Couldn't connect to host -", self.host)
- return handle
-
- def ensureDeleted(self,path):
- self.assertEqual(zookeeper.CONNECTED_STATE, zookeeper.state(self.handle), "Not connected!")
- try:
- self.assertEqual(zookeeper.OK, zookeeper.delete(self.handle, path))
- except zookeeper.NoNodeException:
- pass
-
- def ensureCreated(self,path,data="",flags=zookeeper.EPHEMERAL):
- """
- It's possible not to get the flags you want here if the node already exists
- """
- self.assertEqual(zookeeper.CONNECTED_STATE, zookeeper.state(self.handle), "Not connected!")
- try:
- self.assertEqual(path, zookeeper.create(self.handle, path, data, [ZOO_OPEN_ACL_UNSAFE], flags))
- except zookeeper.NodeExistsException:
- pass
-
- def tearDown(self):
- if self.connected:
- zookeeper.close(self.handle)
-
- def all(self, iterable):
- for element in iterable:
- if not element:
- return False
- return True
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/Makefile.am
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/Makefile.am b/src/contrib/zktreeutil/Makefile.am
deleted file mode 100644
index 36da1a5..0000000
--- a/src/contrib/zktreeutil/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SUBDIRS = src
-
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/README.txt
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/README.txt b/src/contrib/zktreeutil/README.txt
deleted file mode 100644
index 43b06fa..0000000
--- a/src/contrib/zktreeutil/README.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-==========================================
-zktreeutil - Zookeeper Tree Data Utility
-Author: Anirban Roy
-Organization: Yahoo Inc.
-==========================================
-
-zktreeutil program is intended to manage and manipulate zk-tree data quickly, effi-
-ciently and with ease. The utility operates on free-form ZK-tree and hence can be used
-for any cluster managed by Zookeeper. Here are the basic functionalities -
-
-EXPORT: The whole/partial ZK-tree is exported into a XML file. This helps in
-capturing a current snapshot of the data for backup/analysis. For a subtree
-export, one need to specify the path to the ZK-subtree with proper option.
-
-IMPORT: The ZK-tree can be imported from XML into ZK cluster. This helps in priming
-the new ZK cluster with static configuration. The import can be non-intrusive by
-making only the additions in the existing data. The import of subtree is also
-possible by optionally providing the path to the ZK-subtree.
-
-DIFF: Creates a diff between live ZK data vs data saved in XML file. Diff can ignore
-some ZK-tree branches (possibly dynamic data) on reading the optional ignore flag
-from XML file. Diffing on a ZK-subtree achieved by providing path to ZK-subtree with
-diff command.
-
-UPDATE: Make the incremental changes into the live ZK-tree from saved XML, essentia-
-lly after running the diff.
-
-DUMP: Dumps the ZK-tree on the standard output device reading either from live ZK
-server or XML file. Like export, ZK-subtree can be dumped with optionaly
-providing the path to the ZK-subtree, and till a certain depth of the (sub)tree.
-
-The exported ZK data into XML file can be shortened by only keeping the static ZK
-nodes which are required to prime a cluster. The dynamic zk nodes (created on-the-
-fly) can be ignored by setting a 'ignore' attribute at the root node of the dynamic
-subtree (see tests/zk_sample.xml), possibly deleting all inner ZK nodes under that.
-Once ignored, the whole subtree is ignored during DIFF, UPDATE and WRITE.
-
-Pre-requisites
---------------
-1. Linux system with 2.6.X kernel.
-2. Zookeeper C client library (locally built at ../../c/.libs) >= 3.X.X
-3. Development build libraries (rpm packages):
- a. boost-devel >= 1.32.0
- b. libxml2-devel >= 2.7.3
- c. log4cxx0100-devel >= 0.10.0
-
-Build instructions
-------------------
-1. cd into this directory
-2. autoreconf -if
-3. ./configure
-4. make
-5. 'zktreeutil' binary created under src directory
-
-Limitations
------------
-Current version works with text data only, binary data will be supported in future
-versions.
-
-Testing and usage of zktreeutil
---------------------------------
-1. Run Zookeeper server locally on port 2181
-2. export LD_LIBRARY_PATH=../../c/.libs/:/usr/local/lib/
-3. ./src/zktreeutil --help # show help
-4. ./src/zktreeutil --zookeeper=localhost:2181 --import --xmlfile=tests/zk_sample.xml 2>/dev/null # import sample ZK tree
-5. ./src/zktreeutil --zookeeper=localhost:2181 --dump --path=/myapp/version-1.0 2>/dev/null # dump Zk subtree
-5. ./src/zktreeutil --zookeeper=localhost:2181 --dump --depth=3 2>/dev/null # dump Zk tree till certain depth
-6. ./src/zktreeutil --xmlfile=zk_sample.xml -D 2>/dev/null # dump the xml data
-7. Change zk_sample.xml with adding/deleting/chaging some nodes
-8. ./src/zktreeutil -z localhost:2181 -F -x zk_sample.xml -p /myapp/version-1.0/configuration 2>/dev/null # take a diff of changes
-9. ./src/zktreeutil -z localhost:2181 -E 2>/dev/null > zk_sample2.xml # export the mofied ZK tree
-10. ./src/zktreeutil -z localhost:2181 -U -x zk_sample.xml -p /myapp/version-1.0/distributions 2>/dev/null # update with incr. changes
-11. ./src/zktreeutil --zookeeper=localhost:2181 --import --force --xmlfile=zk_sample2.xml 2>/dev/null # re-prime the ZK tree
-
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/build.xml
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/build.xml b/src/contrib/zktreeutil/build.xml
deleted file mode 100644
index 809d134..0000000
--- a/src/contrib/zktreeutil/build.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<project name="zktreeutil" default="compile">
- <import file="../build-contrib.xml"/>
-
- <target name="init" depends="check-contrib" unless="skip.contrib">
- <echo message="contrib: ${name}"/>
- <mkdir dir="${build.dir}"/>
- <antcall target="init-contrib"/>
- </target>
-
- <target name="compile" depends="init" unless="skip.contrib">
- <echo message="contrib: ${name}"/>
-
- <mkdir dir="${build.dir}"/>
- <copy todir="${build.dir}">
- <fileset dir="${basedir}">
- <exclude name="**/VERSION"/>
- </fileset>
- </copy>
- <exec executable="echo" output="${build.dir}/VERSION">
- <arg line="${version}" />
- </exec>
- </target>
-
- <target name="jar" depends="compile" >
- <echo message="No jar target defined for this package"/>
- </target>
-
- <target name="test">
- <echo message="No test target defined for this package" />
- </target>
-
-
- <target name="package" depends="compile" unless="skip.contrib">
- <echo message="contrib: ${name}"/>
-
- <mkdir dir="${dist.dir}/contrib/${name}"/>
- <copy todir="${dist.dir}/contrib/${name}">
- <fileset dir="${build.dir}"/>
- </copy>
- </target>
-
-</project>
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/configure.ac
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/configure.ac b/src/contrib/zktreeutil/configure.ac
deleted file mode 100644
index b4a82a7..0000000
--- a/src/contrib/zktreeutil/configure.ac
+++ /dev/null
@@ -1,66 +0,0 @@
-# -*- Autoconf -*-
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.59)
-
-AC_INIT([zktreeutil], [1.0.0])
-AM_INIT_AUTOMAKE(foreign)
-
-AC_CONFIG_SRCDIR([src])
-AM_CONFIG_HEADER([config.h])
-
-PACKAGE=zktreeutil
-VERSION=1.0.0
-
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-BUILD_PATH="`pwd`"
-
-# Checks for programs.
-AC_LANG_CPLUSPLUS
-AC_PROG_CXX
-
-# Checks for libxm2.
-AM_PATH_XML2(2.7.3)
-XML2_INCLUDE="/usr/include/libxml2"
-AC_SUBST(XML2_INCLUDE)
-
-# Zookeeper C client
-ZOOKEEPER_PATH=${BUILD_PATH}/../../c
-AC_CHECK_LIB(zookeeper_mt, main, [ZOOKEEPER="-L${ZOOKEEPER_PATH}/.libs -lzookeeper_mt"],,["-L${ZOOKEEPER_PATH}/.libs"])
-if test -z "${ZOOKEEPER}"; then
- AC_ERROR("... zookeeper C client not found!")
-fi
-
-AC_SUBST(ZOOKEEPER)
-AC_SUBST(ZOOKEEPER_PATH)
-
-### log4cxx ###
-
-LOG4CXX_VERSION="0.10.0"
-LOG4CXX_INCLUDE="/usr/local/include"
-LOG4CXX_LIB_PATH="/usr/local/lib"
-AC_CHECK_LIB(log4cxx, main, [LOG4CXX="-L${LOG4CXX_LIB_PATH} -llog4cxx"],,["-L${LOG4CXX_LIB_PATH}"])
-if test -z "${LOG4CXX}"; then
- AC_ERROR("... log4cxx not found!")
-fi
-
-AC_SUBST(LOG4CXX)
-AC_SUBST(LOG4CXX_VERSION)
-AC_SUBST(LOG4CXX_INCLUDE)
-
-# Checks for header files.
-AC_HEADER_DIRENT
-AC_HEADER_STDC
-AC_CHECK_HEADERS([stdlib.h string.h stdio.h unistd.h boost/shared_ptr.hpp boost/algorithm/string.hpp boost/algorithm/string/split.hpp])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_HEADER_STDBOOL
-AC_C_CONST
-AC_C_INLINE
-AC_TYPE_SIZE_T
-AC_C_VOLATILE
-
-AC_CONFIG_FILES([Makefile])
-AC_CONFIG_FILES([src/Makefile])
-AC_OUTPUT
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/src/Makefile.am b/src/contrib/zktreeutil/src/Makefile.am
deleted file mode 100644
index 641077a..0000000
--- a/src/contrib/zktreeutil/src/Makefile.am
+++ /dev/null
@@ -1,24 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-AM_CXXFLAGS = -I${ZOOKEEPER_PATH}/include -I${ZOOKEEPER_PATH}/generated \
- -I$(top_srcdir)/include -I${LOG4CXX_INCLUDE} -I/usr/include \
- -I${XML2_INCLUDE}
-
-bin_PROGRAMS = zktreeutil
-
-zktreeutil_SOURCES = ZkAdaptor.cc ZkTreeUtil.cc ZkTreeUtilMain.cc
-zktreeutil_LDADD = ${ZOOKEEPER} ${XML_LIBS} ${LOG4CXX}
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/src/SimpleTree.h
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/src/SimpleTree.h b/src/contrib/zktreeutil/src/SimpleTree.h
deleted file mode 100644
index 8226f05..0000000
--- a/src/contrib/zktreeutil/src/SimpleTree.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __SIMPLE_TREE_H__
-#define __SIMPLE_TREE_H__
-
-#include <vector>
-#include <boost/shared_ptr.hpp>
-
-namespace zktreeutil
-{
- using std::vector;
-
- /**
- * \brief A simple tree data-structure template.
- */
- template < class KeyType, class DataType > class SimpleTreeNode
- {
- private:
- /**
- * \brief The type representing simple-tree node smart-pointer.
- */
- typedef boost::shared_ptr< SimpleTreeNode< KeyType, DataType > > SimpleTreeNodeSptr;
-
- public:
- /**
- * \brief Constructor.
- *
- * @param isRoot the flag indicating whether the node is root.
- */
- SimpleTreeNode (bool isRoot=false) : isRoot_(isRoot)
- {
- }
-
- /**
- * \brief Constructor.
- *
- * @param key the key stored at the tree node
- * @param isRoot the flag indicating whether the node is root
- */
- SimpleTreeNode (const KeyType& key, bool isRoot=false) :
- isRoot_(isRoot), key_(key)
- {
- }
-
- /**
- * \brief Constructor.
- *
- * @param key the key stored at the tree node
- * @param val the value stored at the tree node
- * @param isRoot the flag indicating whether the node is root
- */
- SimpleTreeNode (const KeyType& key, const DataType& val, bool isRoot=false) :
- isRoot_(isRoot), key_(key), val_(val)
- {
- }
-
- /**
- * \brief Destructor.
- */
- ~SimpleTreeNode () throw() {}
-
- /**
- * \brief Add a child node to this node.
- *
- * @param node the child node to be added
- */
- void addChild (const SimpleTreeNodeSptr node) { children_.push_back (node); }
-
- /**
- * \brief Sets the key of this node.
- *
- * @param key the key to be set
- */
- void setKey (const KeyType& key) { key_ = key; }
-
- /**
- * \brief Sets the data of this node.
- *
- * @param val the value to be set
- */
- void setData (const DataType& val) { val_ = val; }
-
- /**
- * \brief Gets the key of this node.
- *
- * @return the key of this node
- */
- KeyType getKey () const { return key_; }
-
- /**
- * \brief Gets the data of this node.
- *
- * @return the value of this node
- */
- DataType getData () const { return val_; }
-
- /**
- * \brief Gets the i'th of this node.
- *
- * @param idx the index of the child node
- * @return the child node
- */
- SimpleTreeNodeSptr getChild (unsigned idx) const { return children_[idx]; }
-
- /**
- * \brief Gets the number of children of this node.
- *
- * @return the number of children
- */
- unsigned numChildren () const { return children_.size(); }
-
- /**
- * \brief Indicates whether this node is root.
- *
- * @return 'true' if this node is root, 'false' otherwise
- */
- bool isRoot () const { return isRoot_; }
-
- /**
- * \brief Indicates whether this node is leaf node.
- *
- * @return 'true' if this node is leaf node, 'false' otherwise
- */
- bool isLeaf () const { return !numChildren(); }
-
- private:
- bool isRoot_; // Flag indicates if the node is root
- KeyType key_; // Key of this node
- DataType val_; // Value of this node
- vector< SimpleTreeNodeSptr > children_; // List of children of this node
- };
-}
-
-#endif // __SIMPLE_TREE_H__
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/src/ZkAdaptor.cc
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/src/ZkAdaptor.cc b/src/contrib/zktreeutil/src/ZkAdaptor.cc
deleted file mode 100644
index 1df175a..0000000
--- a/src/contrib/zktreeutil/src/ZkAdaptor.cc
+++ /dev/null
@@ -1,513 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "ZkAdaptor.h"
-#include <string.h>
-#include <sstream>
-#include <iostream>
-#include <algorithm>
-#include <log4cxx/logger.h>
-
-// Logger
-static log4cxx::LoggerPtr zkLoggerPtr = log4cxx::Logger::getLogger ("zookeeper.core");
-
-namespace zktreeutil
-{
- /**
- * \brief This class provides logic for checking if a request can be retried.
- */
- class RetryHandler
- {
- public:
- RetryHandler(const ZooKeeperConfig &zkConfig) : m_zkConfig(zkConfig)
- {
- if (zkConfig.getAutoReconnect())
- retries = 2;
- else
- retries = 0;
- }
-
- /**
- * \brief Attempts to fix a side effect of the given RC.
- *
- * @param rc the ZK error code
- * @return whether the error code has been handled and the caller should
- * retry an operation the caused this error
- */
- bool handleRC(int rc)
- {
- //check if the given error code is recoverable
- if (!retryOnError(rc))
- return false;
-
- std::cerr << "[zktreeuti] Number of retries left: " << retries << std::endl;
- if (retries-- > 0)
- return true;
- else
- return false;
- }
-
- private:
- /**
- * The ZK config.
- */
- const ZooKeeperConfig &m_zkConfig;
-
- /**
- * The number of outstanding retries.
- */
- int retries;
-
- /**
- * Checks whether the given error entitles this adapter
- * to retry the previous operation.
- *
- * @param zkErrorCode one of the ZK error code
- */
- static bool retryOnError(int zkErrorCode)
- {
- return (zkErrorCode == ZCONNECTIONLOSS || zkErrorCode == ZOPERATIONTIMEOUT);
- }
- };
-
-
- // =======================================================================
-
- ZooKeeperAdapter::ZooKeeperAdapter(ZooKeeperConfig config) throw(ZooKeeperException) :
- m_zkConfig(config),
- mp_zkHandle(NULL)
- {
- // Enforce setting up appropriate ZK log level
- if (zkLoggerPtr->isDebugEnabled()
-#ifdef LOG4CXX_TRACE
- || zkLoggerPtr->isTraceEnabled()
-#endif
- )
- {
- zoo_set_debug_level( ZOO_LOG_LEVEL_DEBUG );
- } else if (zkLoggerPtr->isInfoEnabled()) {
- zoo_set_debug_level( ZOO_LOG_LEVEL_INFO );
- } else if (zkLoggerPtr->isWarnEnabled()) {
- zoo_set_debug_level( ZOO_LOG_LEVEL_WARN );
- } else {
- zoo_set_debug_level( ZOO_LOG_LEVEL_ERROR );
- }
-
- // Establish the connection
- reconnect();
- }
-
- ZooKeeperAdapter::~ZooKeeperAdapter()
- {
- try
- {
- disconnect();
- }
- catch (std::exception &e)
- {
- std::cerr << "[zktreeutil] An exception while disconnecting from ZK: "
- << e.what()
- << std::endl;
- }
- }
-
- void ZooKeeperAdapter::validatePath(const string &path) throw(ZooKeeperException)
- {
- if (path.find ("/") != 0)
- {
- std::ostringstream oss;
- oss << "Node path must start with '/' but" "it was '"
- << path
- << "'";
- throw ZooKeeperException (oss.str());
- }
- if (path.length() > 1)
- {
- if (path.rfind ("/") == path.length() - 1)
- {
- std::ostringstream oss;
- oss << "Node path must not end with '/' but it was '"
- << path
- << "'";
- throw ZooKeeperException (oss.str());
- }
- if (path.find( "//" ) != string::npos)
- {
- std::ostringstream oss;
- oss << "Node path must not contain '//' but it was '"
- << path
- << "'";
- throw ZooKeeperException (oss.str());
- }
- }
- }
-
- void ZooKeeperAdapter::disconnect()
- {
- if (mp_zkHandle != NULL)
- {
- zookeeper_close (mp_zkHandle);
- mp_zkHandle = NULL;
- }
- }
-
- void ZooKeeperAdapter::reconnect() throw(ZooKeeperException)
- {
- // Clear the connection state
- disconnect();
-
- // Establish a new connection to ZooKeeper
- mp_zkHandle = zookeeper_init( m_zkConfig.getHosts().c_str(),
- NULL,
- m_zkConfig.getLeaseTimeout(),
- 0,
- NULL,
- 0);
- if (mp_zkHandle == NULL)
- {
- // Invalid handle returned
- std::ostringstream oss;
- oss << "Unable to connect to ZK running at '"
- << m_zkConfig.getHosts()
- << "'";
- throw ZooKeeperException (oss.str());
- }
-
- // Enter into connect loop
- int64_t connWaitTime = m_zkConfig.getConnectTimeout();
- while (1)
- {
- int state = zoo_state (mp_zkHandle);
- if (state == ZOO_CONNECTED_STATE)
- {
- // connected
- std::cerr << "[zktreeutil] Connected! mp_zkHandle: "
- << mp_zkHandle
- << std::endl;
- return;
- }
- else if ( state && state != ZOO_CONNECTING_STATE)
- {
- // Not connecting any more... some other issue
- std::ostringstream oss;
- oss << "Unable to connect to ZK running at '"
- << m_zkConfig.getHosts()
- << "'; state="
- << state;
- throw ZooKeeperException (oss.str());
- }
-
- // Still connecting, wait and come back
- struct timeval now;
- gettimeofday( &now, NULL );
- int64_t milliSecs = -(now.tv_sec * 1000LL + now.tv_usec / 1000);
- std::cerr << "[zktreeutil] About to wait 1 sec" << std::endl;
- sleep (1);
- gettimeofday( &now, NULL );
- milliSecs += now.tv_sec * 1000LL + now.tv_usec / 1000;
- connWaitTime -= milliSecs;
- // Timed out !!!
- if (connWaitTime <= 0)
- break;
- }
-
- // Timed out while connecting
- std::ostringstream oss;
- oss << "Timed out while connecting to ZK running at '"
- << m_zkConfig.getHosts()
- << "'";
- throw ZooKeeperException (oss.str());
- }
-
- void ZooKeeperAdapter::verifyConnection() throw(ZooKeeperException)
- {
- // Check connection state
- int state = zoo_state (mp_zkHandle);
- if (state != ZOO_CONNECTED_STATE)
- {
- if (m_zkConfig.getAutoReconnect())
- {
- // Trying to reconnect
- std::cerr << "[zktreeutil] Trying to reconnect..." << std::endl;
- reconnect();
- }
- else
- {
- std::ostringstream oss;
- oss << "Disconnected from ZK running at '"
- << m_zkConfig.getHosts()
- << "'; state="
- << state;
- throw ZooKeeperException (oss.str());
- }
- }
- }
-
- bool ZooKeeperAdapter::createNode(const string &path,
- const string &value,
- int flags,
- bool createAncestors) throw(ZooKeeperException)
- {
- const int MAX_PATH_LENGTH = 1024;
- char realPath[MAX_PATH_LENGTH];
- realPath[0] = 0;
-
- int rc;
- RetryHandler rh(m_zkConfig);
- do
- {
- verifyConnection();
- rc = zoo_create( mp_zkHandle,
- path.c_str(),
- value.c_str(),
- value.length(),
- &ZOO_OPEN_ACL_UNSAFE,
- flags,
- realPath,
- MAX_PATH_LENGTH );
- } while (rc != ZOK && rh.handleRC(rc));
- if (rc != ZOK) // check return status
- {
- if (rc == ZNODEEXISTS)
- {
- //the node already exists
- std::cerr << "[zktreeutil] ZK node " << path << " already exists" << std::endl;
- return false;
- }
- else if (rc == ZNONODE && createAncestors)
- {
- std::cerr << "[zktreeutil] Intermediate ZK node missing in path " << path << std::endl;
- //one of the ancestors doesn't exist so lets start from the root
- //and make sure the whole path exists, creating missing nodes if
- //necessary
- for (string::size_type pos = 1; pos != string::npos; )
- {
- pos = path.find( "/", pos );
- if (pos != string::npos)
- {
- try
- {
- createNode( path.substr( 0, pos ), "", 0, true );
- }
- catch (ZooKeeperException &e)
- {
- throw ZooKeeperException( string("Unable to create " "node ") + path, rc );
- }
- pos++;
- }
- else
- {
- // No more path components
- return createNode( path, value, flags, false );
- }
- }
- }
-
- // Unexpected error during create
- std::cerr << "[zktreeutil] Error in creating ZK node " << path << std::endl;
- throw ZooKeeperException( string("Unable to create node ") + path, rc );
- }
-
- // Success
- std::cerr << "[zktreeutil] " << realPath << " has been created" << std::endl;
- return true;
- }
-
- bool ZooKeeperAdapter::deleteNode(const string &path,
- bool recursive,
- int version) throw(ZooKeeperException)
- {
- // Validate the zk path
- validatePath( path );
-
- int rc;
- RetryHandler rh(m_zkConfig);
- do
- {
- verifyConnection();
- rc = zoo_delete( mp_zkHandle, path.c_str(), version );
- } while (rc != ZOK && rh.handleRC(rc));
- if (rc != ZOK) //check return status
- {
- if (rc == ZNONODE)
- {
- std::cerr << "[zktreeutil] ZK Node "
- << path
- << " does not exist"
- << std::endl;
- return false;
- }
- if (rc == ZNOTEMPTY && recursive)
- {
- std::cerr << "[zktreeutil] ZK Node "
- << path
- << " not empty; deleting..."
- << std::endl;
- //get all children and delete them recursively...
- vector<string> nodeList = getNodeChildren (path);
- for (vector<string>::const_iterator i = nodeList.begin();
- i != nodeList.end();
- ++i) {
- deleteNode( *i, true );
- }
- //...and finally attempt to delete the node again
- return deleteNode( path, false );
- }
-
- // Unexpected return without success
- std::cerr << "[zktreeutil] Unable to delete ZK node " << path << std::endl;
- throw ZooKeeperException( string("Unable to delete node ") + path, rc );
- }
-
- // success
- std::cerr << "[zktreeutil] " << path << " has been deleted" << std::endl;
- return true;
- }
-
- vector< string > ZooKeeperAdapter::getNodeChildren (const string &path) throw (ZooKeeperException)
- {
- // Validate the zk path
- validatePath( path );
-
- String_vector children;
- memset( &children, 0, sizeof(children) );
- int rc;
- RetryHandler rh(m_zkConfig);
- do
- {
- verifyConnection();
- rc = zoo_get_children( mp_zkHandle,
- path.c_str(),
- 0,
- &children );
- } while (rc != ZOK && rh.handleRC(rc));
- if (rc != ZOK) // check return code
- {
- std::cerr << "[zktreeutil] Error in fetching children of " << path << std::endl;
- throw ZooKeeperException( string("Unable to get children of node ") + path, rc );
- }
- else
- {
- vector< string > nodeList;
- for (int i = 0; i < children.count; ++i)
- {
- //convert each child's path from relative to absolute
- string absPath(path);
- if (path != "/")
- {
- absPath.append( "/" );
- }
- absPath.append( children.data[i] );
- nodeList.push_back( absPath );
- }
-
- //make sure the order is always deterministic
- sort( nodeList.begin(), nodeList.end() );
- return nodeList;
- }
- }
-
- bool ZooKeeperAdapter::nodeExists(const string &path) throw(ZooKeeperException)
- {
- // Validate the zk path
- validatePath( path );
-
- struct Stat tmpStat;
- struct Stat* stat = &tmpStat;
- memset( stat, 0, sizeof(Stat) );
-
- int rc;
- RetryHandler rh(m_zkConfig);
- do {
- verifyConnection();
- rc = zoo_exists( mp_zkHandle,
- path.c_str(),
- 0,
- stat );
- } while (rc != ZOK && rh.handleRC(rc));
- if (rc != ZOK)
- {
- if (rc == ZNONODE)
- return false;
- // Some error
- std::cerr << "[zktreeutil] Error in checking existence of " << path << std::endl;
- throw ZooKeeperException( string("Unable to check existence of node ") + path, rc );
- } else {
- return true;
- }
- }
-
- string ZooKeeperAdapter::getNodeData(const string &path) throw(ZooKeeperException)
- {
- // Validate the zk path
- validatePath( path );
-
- const int MAX_DATA_LENGTH = 128 * 1024;
- char buffer[MAX_DATA_LENGTH];
- memset( buffer, 0, MAX_DATA_LENGTH );
- struct Stat tmpStat;
- struct Stat* stat = &tmpStat;
- memset( stat, 0, sizeof(Stat) );
-
- int rc;
- int len;
- RetryHandler rh(m_zkConfig);
- do {
- verifyConnection();
- len = MAX_DATA_LENGTH - 1;
- rc = zoo_get( mp_zkHandle,
- path.c_str(),
- 0,
- buffer, &len, stat );
- } while (rc != ZOK && rh.handleRC(rc));
- if (rc != ZOK) // checl return code
- {
- std::cerr << "[zktreeutil] Error in fetching value of " << path << std::endl;
- throw ZooKeeperException( string("Unable to get data of node ") + path, rc );
- }
-
- // return data
- return string( buffer, buffer + len );
- }
-
- void ZooKeeperAdapter::setNodeData(const string &path,
- const string &value,
- int version) throw(ZooKeeperException)
- {
- // Validate the zk path
- validatePath( path );
-
- int rc;
- RetryHandler rh(m_zkConfig);
- do {
- verifyConnection();
- rc = zoo_set( mp_zkHandle,
- path.c_str(),
- value.c_str(),
- value.length(),
- version);
- } while (rc != ZOK && rh.handleRC(rc));
- if (rc != ZOK) // check return code
- {
- std::cerr << "[zktreeutil] Error in setting value of " << path << std::endl;
- throw ZooKeeperException( string("Unable to set data for node ") + path, rc );
- }
- // success
- }
-
-} /* end of 'namespace zktreeutil' */
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/zktreeutil/src/ZkAdaptor.h
----------------------------------------------------------------------
diff --git a/src/contrib/zktreeutil/src/ZkAdaptor.h b/src/contrib/zktreeutil/src/ZkAdaptor.h
deleted file mode 100644
index 4b68e28..0000000
--- a/src/contrib/zktreeutil/src/ZkAdaptor.h
+++ /dev/null
@@ -1,327 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __ZK_ADAPTER_H__
-#define __ZK_ADAPTER_H__
-
-#include <string>
-#include <vector>
-
-extern "C" {
-#include "zookeeper.h"
-}
-
-namespace zktreeutil
-{
- using std::string;
- using std::vector;
-
- /**
- * \brief A cluster related exception.
- */
- class ZooKeeperException : public std::exception
- {
- public:
-
- /**
- * \brief Constructor.
- *
- * @param msg the detailed message associated with this exception
- */
- ZooKeeperException(const string& msg) :
- m_message(msg),
- m_zkErrorCode(0) {}
-
- /**
- * \brief Constructor.
- *
- * @param msg the detailed message associated with this exception
- * @param errorCode the ZK error code associated with this exception
- */
- ZooKeeperException(const string &msg, int errorCode) :
- m_zkErrorCode(errorCode)
- {
- char tmp[100];
- sprintf( tmp, " (ZK error code: %d)", errorCode );
- m_message = msg + tmp;
- }
-
- /**
- * \brief Destructor.
- */
- ~ZooKeeperException() throw() {}
-
- /**
- * \brief Returns detailed description of the exception.
- */
- const char *what() const throw()
- {
- return m_message.c_str();
- }
-
- /**
- * \brief Returns the ZK error code.
- */
- int getZKErrorCode() const
- {
- return m_zkErrorCode;
- }
-
- private:
-
- /**
- * The detailed message associated with this exception.
- */
- string m_message;
-
- /**
- * The optional error code received from ZK.
- */
- int m_zkErrorCode;
-
- };
-
- /**
- * \brief This class encapsulates configuration of a ZK client.
- */
- class ZooKeeperConfig
- {
- public:
-
- /**
- * \brief Constructor.
- *
- * @param hosts the comma separated list of host and port pairs of ZK nodes
- * @param leaseTimeout the lease timeout (heartbeat)
- * @param autoReconnect whether to allow for auto-reconnect
- * @param connectTimeout the connect timeout, in milliseconds;
- */
- ZooKeeperConfig(const string &hosts,
- int leaseTimeout,
- bool autoReconnect = true,
- long long int connectTimeout = 15000)
- : m_hosts(hosts),
- m_leaseTimeout(leaseTimeout),
- m_autoReconnect(autoReconnect),
- m_connectTimeout(connectTimeout) {}
-
- /**
- * \brief Returns the list of ZK hosts to connect to.
- */
- string getHosts() const { return m_hosts; }
-
- /**
- * \brief Returns the lease timeout.
- */
- int getLeaseTimeout() const { return m_leaseTimeout; }
-
- /**
- * \brief Returns whether {@link ZooKeeperAdapter} should attempt
- * \brief to automatically reconnect in case of a connection failure.
- */
- bool getAutoReconnect() const { return m_autoReconnect; }
-
- /**
- * \brief Gets the connect timeout.
- *
- * @return the connect timeout
- */
- long long int getConnectTimeout() const { return m_connectTimeout; }
-
- private:
-
- /**
- * The host addresses of ZK nodes.
- */
- const string m_hosts;
-
- /**
- * The ZK lease timeout.
- */
- const int m_leaseTimeout;
-
- /**
- * True if this adapater should attempt to autoreconnect in case
- * the current session has been dropped.
- */
- const bool m_autoReconnect;
-
- /**
- * How long to wait, in milliseconds, before a connection
- * is established to ZK.
- */
- const long long int m_connectTimeout;
- };
-
- /**
- * \brief This is a wrapper around ZK C synchrounous API.
- */
- class ZooKeeperAdapter
- {
- public:
- /**
- * \brief Constructor.
- * Attempts to create a ZK adapter, optionally connecting
- * to the ZK. Note, that if the connection is to be established
- * and the given listener is NULL, some events may be lost,
- * as they may arrive asynchronously before this method finishes.
- *
- * @param config the ZK configuration
- * @throw ZooKeeperException if cannot establish connection to the given ZK
- */
- ZooKeeperAdapter(ZooKeeperConfig config) throw(ZooKeeperException);
-
- /**
- * \brief Destructor.
- */
- ~ZooKeeperAdapter();
-
- /**
- * \brief Returns the current config.
- */
- const ZooKeeperConfig &getZooKeeperConfig() const { return m_zkConfig; }
-
- /**
- * \brief Restablishes connection to the ZK.
- * If this adapter is already connected, the current connection
- * will be dropped and a new connection will be established.
- *
- * @throw ZooKeeperException if cannot establish connection to the ZK
- */
- void reconnect() throw(ZooKeeperException);
-
- /**
- * \brief Disconnects from the ZK and unregisters {@link #mp_zkHandle}.
- */
- void disconnect();
-
- /**
- * \brief Creates a new node identified by the given path.
- * This method will optionally attempt to create all missing ancestors.
- *
- * @param path the absolute path name of the node to be created
- * @param value the initial value to be associated with the node
- * @param flags the ZK flags of the node to be created
- * @param createAncestors if true and there are some missing ancestor nodes,
- * this method will attempt to create them
- *
- * @return true if the node has been successfully created; false otherwise
- * @throw ZooKeeperException if the operation has failed
- */
- bool createNode(const string &path,
- const string &value = "",
- int flags = 0,
- bool createAncestors = true) throw(ZooKeeperException);
-
- /**
- * \brief Deletes a node identified by the given path.
- *
- * @param path the absolute path name of the node to be deleted
- * @param recursive if true this method will attempt to remove
- * all children of the given node if any exist
- * @param version the expected version of the node. The function will
- * fail if the actual version of the node does not match
- * the expected version
- *
- * @return true if the node has been deleted; false otherwise
- * @throw ZooKeeperException if the operation has failed
- */
- bool deleteNode(const string &path,
- bool recursive = false,
- int version = -1) throw(ZooKeeperException);
-
- /**
- * \brief Retrieves list of all children of the given node.
- *
- * @param path the absolute path name of the node for which to get children
- * @return the list of absolute paths of child nodes, possibly empty
- * @throw ZooKeeperException if the operation has failed
- */
- vector<string> getNodeChildren( const string &path) throw(ZooKeeperException);
-
- /**
- * \brief Check the existence of path to a znode.
- *
- * @param path the absolute path name of the znode
- * @return TRUE if the znode exists; FALSE otherwise
- * @throw ZooKeeperException if the operation has failed
- */
- bool nodeExists(const string &path) throw(ZooKeeperException);
-
- /**
- * \brief Gets the given node's data.
- *
- * @param path the absolute path name of the node to get data from
- *
- * @return the node's data
- * @throw ZooKeeperException if the operation has failed
- */
- string getNodeData(const string &path) throw(ZooKeeperException);
-
- /**
- * \brief Sets the given node's data.
- *
- * @param path the absolute path name of the node to get data from
- * @param value the node's data to be set
- * @param version the expected version of the node. The function will
- * fail if the actual version of the node does not match
- * the expected version
- *
- * @throw ZooKeeperException if the operation has failed
- */
- void setNodeData(const string &path,
- const string &value,
- int version = -1) throw(ZooKeeperException);
-
- /**
- * \brief Validates the given path to a node in ZK.
- *
- * @param the path to be validated
- *
- * @throw ZooKeeperException if the given path is not valid
- * (for instance it doesn't start with "/")
- */
- static void validatePath(const string &path) throw(ZooKeeperException);
-
- private:
-
- /**
- * Verifies whether the connection is established,
- * optionally auto reconnecting.
- *
- * @throw ZooKeeperConnection if this client is disconnected
- * and auto-reconnect failed or was not allowed
- */
- void verifyConnection() throw(ZooKeeperException);
-
- private:
-
- /**
- * The current ZK configuration.
- */
- const ZooKeeperConfig m_zkConfig;
-
- /**
- * The current ZK session.
- */
- zhandle_t *mp_zkHandle;
- };
-
-} /* end of 'namespace zktreeutil' */
-
-#endif /* __ZK_ADAPTER_H__ */
|