Full Code of shayhatsor/zookeeper for AI

trunk 0874166177fb cached
1003 files
7.2 MB
2.0M tokens
7569 symbols
1 requests
Download .txt
Showing preview only (7,824K chars total). Download the full file or copy to clipboard to get everything.
Repository: shayhatsor/zookeeper
Branch: trunk
Commit: 0874166177fb
Files: 1003
Total size: 7.2 MB

Directory structure:
gitextract_87q86p2i/

├── .gitattributes
├── .gitignore
├── LICENSE.txt
├── NOTICE.txt
├── README_packaging.txt
├── bin/
│   ├── README.txt
│   ├── zkCleanup.sh
│   ├── zkCli.cmd
│   ├── zkCli.sh
│   ├── zkEnv.cmd
│   ├── zkEnv.sh
│   ├── zkServer.cmd
│   └── zkServer.sh
├── build.xml
├── conf/
│   ├── configuration.xsl
│   ├── log4j.properties
│   └── zoo_sample.cfg
├── docs/
│   ├── bookkeeperConfig.html
│   ├── bookkeeperOverview.html
│   ├── bookkeeperProgrammer.html
│   ├── bookkeeperStarted.html
│   ├── bookkeeperStream.html
│   ├── broken-links.xml
│   ├── index.html
│   ├── javaExample.html
│   ├── linkmap.html
│   ├── recipes.html
│   ├── releasenotes.html
│   ├── skin/
│   │   ├── CommonMessages_de.xml
│   │   ├── CommonMessages_en_US.xml
│   │   ├── CommonMessages_es.xml
│   │   ├── CommonMessages_fr.xml
│   │   ├── basic.css
│   │   ├── breadcrumbs-optimized.js
│   │   ├── breadcrumbs.js
│   │   ├── fontsize.js
│   │   ├── getBlank.js
│   │   ├── getMenu.js
│   │   ├── images/
│   │   │   └── README.txt
│   │   ├── menu.js
│   │   ├── note.txt
│   │   ├── print.css
│   │   ├── profile.css
│   │   ├── prototype.js
│   │   └── screen.css
│   ├── zookeeperAdmin.html
│   ├── zookeeperHierarchicalQuorums.html
│   ├── zookeeperInternals.html
│   ├── zookeeperJMX.html
│   ├── zookeeperObservers.html
│   ├── zookeeperOtherInfo.html
│   ├── zookeeperOver.html
│   ├── zookeeperProgrammers.html
│   ├── zookeeperQuotas.html
│   ├── zookeeperStarted.html
│   └── zookeeperTutorial.html
├── ivy.xml
├── ivysettings.xml
├── readme.md
└── src/
    ├── LICENSE.txt
    ├── NOTICE.txt
    ├── c/
    │   ├── CMakeLists.txt
    │   ├── ChangeLog
    │   ├── INSTALL
    │   ├── LICENSE
    │   ├── Makefile.am
    │   ├── NOTICE.txt
    │   ├── README
    │   ├── acinclude.m4
    │   ├── aminclude.am
    │   ├── c-doc.Doxyfile
    │   ├── cmake_config.h.in
    │   ├── configure.ac
    │   ├── include/
    │   │   ├── proto.h
    │   │   ├── recordio.h
    │   │   ├── winconfig.h
    │   │   ├── zookeeper.h
    │   │   ├── zookeeper_log.h
    │   │   └── zookeeper_version.h
    │   ├── src/
    │   │   ├── cli.c
    │   │   ├── hashtable/
    │   │   │   ├── LICENSE.txt
    │   │   │   ├── hashtable.c
    │   │   │   ├── hashtable.h
    │   │   │   ├── hashtable_itr.c
    │   │   │   ├── hashtable_itr.h
    │   │   │   └── hashtable_private.h
    │   │   ├── load_gen.c
    │   │   ├── mt_adaptor.c
    │   │   ├── recordio.c
    │   │   ├── st_adaptor.c
    │   │   ├── winport.c
    │   │   ├── winport.h
    │   │   ├── zk_adaptor.h
    │   │   ├── zk_hashtable.c
    │   │   ├── zk_hashtable.h
    │   │   ├── zk_log.c
    │   │   └── zookeeper.c
    │   └── tests/
    │       ├── CollectionUtil.h
    │       ├── CppAssertHelper.h
    │       ├── LibCMocks.cc
    │       ├── LibCMocks.h
    │       ├── LibCSymTable.cc
    │       ├── LibCSymTable.h
    │       ├── MocksBase.cc
    │       ├── MocksBase.h
    │       ├── PthreadMocks.cc
    │       ├── PthreadMocks.h
    │       ├── TestClient.cc
    │       ├── TestClientRetry.cc
    │       ├── TestDriver.cc
    │       ├── TestMulti.cc
    │       ├── TestOperations.cc
    │       ├── TestWatchers.cc
    │       ├── TestZookeeperClose.cc
    │       ├── TestZookeeperInit.cc
    │       ├── ThreadingUtil.cc
    │       ├── ThreadingUtil.h
    │       ├── Util.cc
    │       ├── Util.h
    │       ├── Vector.h
    │       ├── ZKMocks.cc
    │       ├── ZKMocks.h
    │       ├── wrappers-mt.opt
    │       ├── wrappers.opt
    │       └── zkServer.sh
    ├── contrib/
    │   ├── build-contrib.xml
    │   ├── build.xml
    │   ├── fatjar/
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── conf/
    │   │   │   └── mainClasses
    │   │   └── src/
    │   │       └── java/
    │   │           └── org/
    │   │               └── apache/
    │   │                   └── zookeeper/
    │   │                       └── util/
    │   │                           └── FatJarMain.java
    │   ├── huebrowser/
    │   │   ├── README
    │   │   └── zkui/
    │   │       ├── Makefile
    │   │       ├── setup.py
    │   │       └── src/
    │   │           └── zkui/
    │   │               ├── __init__.py
    │   │               ├── forms.py
    │   │               ├── models.py
    │   │               ├── rest.py
    │   │               ├── settings.py
    │   │               ├── static/
    │   │               │   ├── bootstrap.js
    │   │               │   ├── css/
    │   │               │   │   └── zkui.css
    │   │               │   ├── help/
    │   │               │   │   └── index.html
    │   │               │   └── js/
    │   │               │       ├── Source/
    │   │               │       │   └── Zkui/
    │   │               │       │       └── Zkui.js
    │   │               │       └── package.yml
    │   │               ├── stats.py
    │   │               ├── templates/
    │   │               │   ├── clients.mako
    │   │               │   ├── create.mako
    │   │               │   ├── edit.mako
    │   │               │   ├── index.mako
    │   │               │   ├── shared_components.mako
    │   │               │   ├── tree.mako
    │   │               │   └── view.mako
    │   │               ├── urls.py
    │   │               ├── utils.py
    │   │               ├── views.py
    │   │               └── windmilltests.py
    │   ├── loggraph/
    │   │   ├── README.txt
    │   │   ├── bin/
    │   │   │   ├── loggraph-dev.sh
    │   │   │   └── loggraph.sh
    │   │   ├── build.xml
    │   │   ├── ivy.xml
    │   │   ├── src/
    │   │   │   └── java/
    │   │   │       └── org/
    │   │   │           └── apache/
    │   │   │               └── zookeeper/
    │   │   │                   └── graph/
    │   │   │                       ├── FilterException.java
    │   │   │                       ├── FilterOp.java
    │   │   │                       ├── FilterParser.java
    │   │   │                       ├── JsonGenerator.java
    │   │   │                       ├── Log4JEntry.java
    │   │   │                       ├── Log4JSource.java
    │   │   │                       ├── LogEntry.java
    │   │   │                       ├── LogIterator.java
    │   │   │                       ├── LogServer.java
    │   │   │                       ├── LogSkipList.java
    │   │   │                       ├── LogSource.java
    │   │   │                       ├── MeasureThroughput.java
    │   │   │                       ├── MergedLogSource.java
    │   │   │                       ├── RandomAccessFileReader.java
    │   │   │                       ├── TransactionEntry.java
    │   │   │                       ├── TxnLogSource.java
    │   │   │                       ├── filterops/
    │   │   │                       │   ├── AndOp.java
    │   │   │                       │   ├── Arg.java
    │   │   │                       │   ├── EqualsOp.java
    │   │   │                       │   ├── GreaterThanOp.java
    │   │   │                       │   ├── LessThanOp.java
    │   │   │                       │   ├── NotOp.java
    │   │   │                       │   ├── NumberArg.java
    │   │   │                       │   ├── OrOp.java
    │   │   │                       │   ├── StringArg.java
    │   │   │                       │   ├── SymbolArg.java
    │   │   │                       │   └── XorOp.java
    │   │   │                       └── servlets/
    │   │   │                           ├── FileLoader.java
    │   │   │                           ├── Fs.java
    │   │   │                           ├── GraphData.java
    │   │   │                           ├── JsonServlet.java
    │   │   │                           ├── NumEvents.java
    │   │   │                           ├── StaticContent.java
    │   │   │                           └── Throughput.java
    │   │   └── web/
    │   │       └── org/
    │   │           └── apache/
    │   │               └── zookeeper/
    │   │                   └── graph/
    │   │                       ├── log4j.properties
    │   │                       └── resources/
    │   │                           ├── date.format.js
    │   │                           ├── g.bar.js
    │   │                           ├── g.dot.js
    │   │                           ├── g.line.js
    │   │                           ├── g.pie.js
    │   │                           ├── g.raphael.js
    │   │                           ├── loggraph.css
    │   │                           ├── loggraph.js
    │   │                           ├── loggraph.log.js
    │   │                           ├── loggraph.server.js
    │   │                           ├── loggraph.session.js
    │   │                           ├── loggraph.stats.js
    │   │                           ├── loggraph.ui.js
    │   │                           ├── main.html
    │   │                           ├── raphael.js
    │   │                           └── yui-min.js
    │   ├── monitoring/
    │   │   ├── JMX-RESOURCES
    │   │   ├── README
    │   │   ├── cacti/
    │   │   │   └── README
    │   │   ├── check_zookeeper.py
    │   │   ├── ganglia/
    │   │   │   ├── README
    │   │   │   ├── modpython.conf
    │   │   │   ├── zookeeper.pyconf
    │   │   │   └── zookeeper_ganglia.py
    │   │   ├── nagios/
    │   │   │   ├── README.txt
    │   │   │   ├── hostgroups.cfg
    │   │   │   ├── services.cfg
    │   │   │   └── zookeeper.cfg
    │   │   └── test.py
    │   ├── rest/
    │   │   ├── NOTICE.txt
    │   │   ├── README.txt
    │   │   ├── SPEC.txt
    │   │   ├── build.xml
    │   │   ├── conf/
    │   │   │   ├── keys/
    │   │   │   │   ├── README
    │   │   │   │   ├── rest.cer
    │   │   │   │   └── rest.jks
    │   │   │   ├── log4j.properties
    │   │   │   └── rest.properties
    │   │   ├── ivy.xml
    │   │   ├── rest.sh
    │   │   └── src/
    │   │       ├── java/
    │   │       │   └── org/
    │   │       │       └── apache/
    │   │       │           └── zookeeper/
    │   │       │               └── server/
    │   │       │                   └── jersey/
    │   │       │                       ├── RestMain.java
    │   │       │                       ├── ZooKeeperService.java
    │   │       │                       ├── cfg/
    │   │       │                       │   ├── Credentials.java
    │   │       │                       │   ├── Endpoint.java
    │   │       │                       │   ├── HostPort.java
    │   │       │                       │   ├── HostPortSet.java
    │   │       │                       │   └── RestCfg.java
    │   │       │                       ├── filters/
    │   │       │                       │   └── HTTPBasicAuth.java
    │   │       │                       ├── jaxb/
    │   │       │                       │   ├── ZChildren.java
    │   │       │                       │   ├── ZChildrenJSON.java
    │   │       │                       │   ├── ZError.java
    │   │       │                       │   ├── ZPath.java
    │   │       │                       │   ├── ZSession.java
    │   │       │                       │   └── ZStat.java
    │   │       │                       └── resources/
    │   │       │                           ├── JAXBContextResolver.java
    │   │       │                           ├── KeeperExceptionMapper.java
    │   │       │                           ├── RuntimeExceptionMapper.java
    │   │       │                           ├── SessionsResource.java
    │   │       │                           ├── ZErrorWriter.java
    │   │       │                           └── ZNodeResource.java
    │   │       ├── python/
    │   │       │   ├── README.txt
    │   │       │   ├── demo_master_election.py
    │   │       │   ├── demo_queue.py
    │   │       │   ├── test.py
    │   │       │   ├── zk_dump_tree.py
    │   │       │   └── zkrest.py
    │   │       └── test/
    │   │           ├── org/
    │   │           │   └── apache/
    │   │           │       └── zookeeper/
    │   │           │           └── server/
    │   │           │               └── jersey/
    │   │           │                   ├── Base.java
    │   │           │                   ├── CreateTest.java
    │   │           │                   ├── DeleteTest.java
    │   │           │                   ├── ExistsTest.java
    │   │           │                   ├── GetChildrenTest.java
    │   │           │                   ├── GetTest.java
    │   │           │                   ├── RestTestSuite.java
    │   │           │                   ├── RootTest.java
    │   │           │                   ├── SessionTest.java
    │   │           │                   ├── SetTest.java
    │   │           │                   └── WadlTest.java
    │   │           └── zkServer.sh
    │   ├── zkfuse/
    │   │   ├── Makefile.am
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── configure.ac
    │   │   └── src/
    │   │       ├── Makefile.am
    │   │       ├── blockingqueue.h
    │   │       ├── doxygen.cfg
    │   │       ├── event.cc
    │   │       ├── event.h
    │   │       ├── log.cc
    │   │       ├── log.h
    │   │       ├── log4cxx.properties
    │   │       ├── mutex.h
    │   │       ├── thread.cc
    │   │       ├── thread.h
    │   │       ├── zkadapter.cc
    │   │       ├── zkadapter.h
    │   │       └── zkfuse.cc
    │   ├── zkperl/
    │   │   ├── Changes
    │   │   ├── LICENSE
    │   │   ├── MANIFEST
    │   │   ├── Makefile.PL
    │   │   ├── NOTICE
    │   │   ├── README
    │   │   ├── ZooKeeper.pm
    │   │   ├── ZooKeeper.xs
    │   │   ├── build.xml
    │   │   ├── t/
    │   │   │   ├── 10_invalid.t
    │   │   │   ├── 15_thread.t
    │   │   │   ├── 20_tie.t
    │   │   │   ├── 22_stat_tie.t
    │   │   │   ├── 24_watch_tie.t
    │   │   │   ├── 30_connect.t
    │   │   │   ├── 35_log.t
    │   │   │   ├── 40_basic.t
    │   │   │   ├── 45_class.t
    │   │   │   ├── 50_access.t
    │   │   │   ├── 60_watch.t
    │   │   │   └── util.pl
    │   │   └── typemap
    │   ├── zkpython/
    │   │   ├── README
    │   │   ├── build.xml
    │   │   ├── ivy.xml
    │   │   └── src/
    │   │       ├── c/
    │   │       │   ├── pyzk_docstrings.h
    │   │       │   └── zookeeper.c
    │   │       ├── examples/
    │   │       │   ├── README
    │   │       │   └── watch_znode_for_changes.py
    │   │       ├── packages/
    │   │       │   ├── deb/
    │   │       │   │   └── zkpython.control/
    │   │       │   │       └── control
    │   │       │   └── rpm/
    │   │       │       └── spec/
    │   │       │           └── zkpython.spec
    │   │       ├── python/
    │   │       │   ├── setup.py
    │   │       │   └── zk.py
    │   │       └── test/
    │   │           ├── acl_test.py
    │   │           ├── async_test.py
    │   │           ├── callback_test.py
    │   │           ├── clientid_test.py
    │   │           ├── close_deadlock_test.py
    │   │           ├── connection_test.py
    │   │           ├── create_test.py
    │   │           ├── delete_test.py
    │   │           ├── exists_test.py
    │   │           ├── get_set_test.py
    │   │           ├── run_tests.sh
    │   │           ├── zkServer.sh
    │   │           └── zktestbase.py
    │   ├── zktreeutil/
    │   │   ├── Makefile.am
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── configure.ac
    │   │   ├── src/
    │   │   │   ├── Makefile.am
    │   │   │   ├── SimpleTree.h
    │   │   │   ├── ZkAdaptor.cc
    │   │   │   ├── ZkAdaptor.h
    │   │   │   ├── ZkTreeUtil.cc
    │   │   │   ├── ZkTreeUtil.h
    │   │   │   └── ZkTreeUtilMain.cc
    │   │   └── tests/
    │   │       └── zk_sample.xml
    │   └── zooinspector/
    │       ├── NOTICE.txt
    │       ├── README.txt
    │       ├── build.xml
    │       ├── config/
    │       │   ├── defaultConnectionSettings.cfg
    │       │   └── defaultNodeVeiwers.cfg
    │       ├── ivy.xml
    │       ├── lib/
    │       │   ├── jtoaster-1.0.4.jar
    │       │   └── log4j.properties
    │       ├── licences/
    │       │   ├── Apache Software Licence v2.0.txt
    │       │   └── epl-v10.html
    │       ├── src/
    │       │   └── java/
    │       │       └── org/
    │       │           └── apache/
    │       │               └── zookeeper/
    │       │                   ├── inspector/
    │       │                   │   ├── ZooInspector.java
    │       │                   │   ├── encryption/
    │       │                   │   │   ├── BasicDataEncryptionManager.java
    │       │                   │   │   └── DataEncryptionManager.java
    │       │                   │   ├── gui/
    │       │                   │   │   ├── NodeViewersChangeListener.java
    │       │                   │   │   ├── ZooInspectorAboutDialog.java
    │       │                   │   │   ├── ZooInspectorConnectionPropertiesDialog.java
    │       │                   │   │   ├── ZooInspectorIconResources.java
    │       │                   │   │   ├── ZooInspectorNodeViewersDialog.java
    │       │                   │   │   ├── ZooInspectorNodeViewersPanel.java
    │       │                   │   │   ├── ZooInspectorPanel.java
    │       │                   │   │   ├── ZooInspectorTreeViewer.java
    │       │                   │   │   ├── about.html
    │       │                   │   │   └── nodeviewer/
    │       │                   │   │       ├── NodeViewerACL.java
    │       │                   │   │       ├── NodeViewerData.java
    │       │                   │   │       ├── NodeViewerMetaData.java
    │       │                   │   │       └── ZooInspectorNodeViewer.java
    │       │                   │   ├── logger/
    │       │                   │   │   └── LoggerFactory.java
    │       │                   │   └── manager/
    │       │                   │       ├── NodeListener.java
    │       │                   │       ├── Pair.java
    │       │                   │       ├── ZooInspectorManager.java
    │       │                   │       ├── ZooInspectorManagerImpl.java
    │       │                   │       ├── ZooInspectorNodeManager.java
    │       │                   │       ├── ZooInspectorNodeTreeManager.java
    │       │                   │       └── ZooInspectorReadOnlyManager.java
    │       │                   └── retry/
    │       │                       └── ZooKeeperRetry.java
    │       ├── zooInspector-dev.sh
    │       ├── zooInspector.cmd
    │       └── zooInspector.sh
    ├── csharp/
    │   ├── .gitattributes
    │   ├── .gitignore
    │   ├── Directory.Build.props
    │   ├── NuGet.config
    │   ├── ZooKeeperNetEx.sln
    │   ├── ZooKeeperNetEx.snk
    │   ├── src/
    │   │   ├── Directory.Build.props
    │   │   ├── ZooKeeperNetEx/
    │   │   │   ├── .gitignore
    │   │   │   ├── Properties/
    │   │   │   │   └── AssemblyInfo.cs
    │   │   │   ├── ZooKeeperNetEx.csproj
    │   │   │   ├── jute/
    │   │   │   │   ├── BinaryInputArchive.cs
    │   │   │   │   ├── BinaryOutputArchive.cs
    │   │   │   │   ├── Index.cs
    │   │   │   │   ├── InputArchive.cs
    │   │   │   │   ├── OutputArchive.cs
    │   │   │   │   └── Record.cs
    │   │   │   ├── utils/
    │   │   │   │   ├── AwaitableSignal.cs
    │   │   │   │   ├── ByteBuffer.cs
    │   │   │   │   ├── EnumUtil.cs
    │   │   │   │   ├── MiscEx.cs
    │   │   │   │   ├── SignalTask.cs
    │   │   │   │   ├── SocketContext.cs
    │   │   │   │   ├── SocketEx.cs
    │   │   │   │   ├── TimeHelper.cs
    │   │   │   │   ├── VolatileBool.cs
    │   │   │   │   ├── VolatileInt.cs
    │   │   │   │   ├── VolatileLong.cs
    │   │   │   │   ├── VolatileReference.cs
    │   │   │   │   ├── bigEndian/
    │   │   │   │   │   ├── BigEndianBinaryReader.cs
    │   │   │   │   │   ├── BigEndianBinaryWriter.cs
    │   │   │   │   │   └── BigEndianBitConverter.cs
    │   │   │   │   └── log/
    │   │   │   │       ├── ILogConsumer.cs
    │   │   │   │       ├── ILogProducer.cs
    │   │   │   │       ├── LogWriter.cs
    │   │   │   │       ├── NonBlockingFileWriter.cs
    │   │   │   │       ├── TraceWriter.cs
    │   │   │   │       ├── TypeLogger.cs
    │   │   │   │       └── ZooKeeperLogger.cs
    │   │   │   └── zookeeper/
    │   │   │       ├── AsyncResults.cs
    │   │   │       ├── ClientCnxn.cs
    │   │   │       ├── ClientCnxnSocket.cs
    │   │   │       ├── ClientCnxnSocketNIO.cs
    │   │   │       ├── ClientWatchManager.cs
    │   │   │       ├── CreateMode.cs
    │   │   │       ├── KeeperException.cs
    │   │   │       ├── MultiResponse.cs
    │   │   │       ├── MultiTransactionRecord.cs
    │   │   │       ├── Op.cs
    │   │   │       ├── OpResult.cs
    │   │   │       ├── Quotas.cs
    │   │   │       ├── StatsTrack.cs
    │   │   │       ├── Transaction.cs
    │   │   │       ├── WatchedEvent.cs
    │   │   │       ├── Watcher.cs
    │   │   │       ├── ZKUtil.cs
    │   │   │       ├── ZooDefs.cs
    │   │   │       ├── ZooKeeper.cs
    │   │   │       ├── client/
    │   │   │       │   ├── ConnectStringParser.cs
    │   │   │       │   ├── DnsResolver.cs
    │   │   │       │   ├── DynamicHostProvider.cs
    │   │   │       │   ├── HostAndPort.cs
    │   │   │       │   ├── HostProvider.cs
    │   │   │       │   ├── IDnsResolver.cs
    │   │   │       │   └── ResolvedEndPoint.cs
    │   │   │       └── common/
    │   │   │           └── PathUtils.cs
    │   │   └── ZooKeeperNetEx.Recipes/
    │   │       ├── AsyncLock.cs
    │   │       ├── Lock/
    │   │       │   ├── LockListener.cs
    │   │       │   ├── ProtocolSupport.cs
    │   │       │   ├── WriteLock.cs
    │   │       │   ├── ZNodeName.cs
    │   │       │   └── ZooKeeperOperation.cs
    │   │       ├── Properties/
    │   │       │   └── AssemblyInfo.cs
    │   │       ├── ZooKeeperNetEx.Recipes.csproj
    │   │       ├── leader/
    │   │       │   ├── LeaderElectionAware.cs
    │   │       │   ├── LeaderElectionSupport.cs
    │   │       │   └── LeaderOffer.cs
    │   │       └── queue/
    │   │           └── DistributedQueue.cs
    │   └── test/
    │       ├── Directory.Build.props
    │       ├── ZooKeeperNetEx.Recipes.Tests/
    │       │   ├── ZooKeeperNetEx.Recipes.Tests.csproj
    │       │   ├── leader/
    │       │   │   └── LeaderElectionSupportTest.cs
    │       │   ├── lock/
    │       │   │   ├── WriteLockTest.cs
    │       │   │   └── ZNodeNameTest.cs
    │       │   └── queue/
    │       │       └── DistributedQueueTest.cs
    │       ├── ZooKeeperNetEx.Tests/
    │       │   ├── Assert.cs
    │       │   ├── BinaryInputArchiveTest.cs
    │       │   ├── ClientBase.cs
    │       │   ├── LogAndConfigTests.cs
    │       │   ├── MultiResponseTest.cs
    │       │   ├── MultiTransactionRecordTest.cs
    │       │   ├── Properties/
    │       │   │   └── AssemblyInfo.cs
    │       │   ├── TestsSetup.cs
    │       │   ├── ZooKeeperNetEx.Tests.csproj
    │       │   ├── ZooKeeperTest.cs
    │       │   └── test/
    │       │       ├── ACLCountTest.cs
    │       │       ├── ACLRootTest.cs
    │       │       ├── ChrootTest.cs
    │       │       ├── ClientHammerTest.cs
    │       │       ├── ClientTest.cs
    │       │       ├── ConnectStringParserTest.cs
    │       │       ├── CreateModeTest.cs
    │       │       ├── DynamicHostProviderTest.cs
    │       │       ├── EventTypeTest.cs
    │       │       ├── GetChildren2Test.cs
    │       │       ├── KeeperStateTest.cs
    │       │       ├── MultiTransactionTest.cs
    │       │       ├── NullDataTest.cs
    │       │       ├── StatTest.cs
    │       │       ├── SyncCallTest.cs
    │       │       ├── WatchedEventTest.cs
    │       │       ├── WatcherFuncTest.cs
    │       │       └── WatcherTest.cs
    │       └── xunit.runner.json
    ├── docs/
    │   ├── forrest.properties
    │   ├── src/
    │   │   └── documentation/
    │   │       ├── README.txt
    │   │       ├── TODO.txt
    │   │       ├── classes/
    │   │       │   └── CatalogManager.properties
    │   │       ├── conf/
    │   │       │   └── cli.xconf
    │   │       ├── content/
    │   │       │   └── xdocs/
    │   │       │       ├── bookkeeperConfig.xml
    │   │       │       ├── bookkeeperOverview.xml
    │   │       │       ├── bookkeeperProgrammer.xml
    │   │       │       ├── bookkeeperStarted.xml
    │   │       │       ├── bookkeeperStream.xml
    │   │       │       ├── index.xml
    │   │       │       ├── javaExample.xml
    │   │       │       ├── recipes.xml
    │   │       │       ├── site.xml
    │   │       │       ├── tabs.xml
    │   │       │       ├── zookeeperAdmin.xml
    │   │       │       ├── zookeeperHierarchicalQuorums.xml
    │   │       │       ├── zookeeperInternals.xml
    │   │       │       ├── zookeeperJMX.xml
    │   │       │       ├── zookeeperObservers.xml
    │   │       │       ├── zookeeperOtherInfo.xml
    │   │       │       ├── zookeeperOver.xml
    │   │       │       ├── zookeeperProgrammers.xml
    │   │       │       ├── zookeeperQuotas.xml
    │   │       │       ├── zookeeperStarted.xml
    │   │       │       └── zookeeperTutorial.xml
    │   │       ├── resources/
    │   │       │   └── images/
    │   │       │       └── state_dia.dia
    │   │       └── skinconf.xml
    │   └── status.xml
    ├── java/
    │   ├── OldChangeLog
    │   ├── lib/
    │   │   ├── cobertura/
    │   │   │   └── README.txt
    │   │   ├── jdiff/
    │   │   │   └── zookeeper_3.1.1.xml
    │   │   ├── jline-0.9.94.LICENSE.txt
    │   │   ├── log4j-1.2.17.LICENSE.txt
    │   │   └── slf4j-1.7.25.LICENSE.txt
    │   ├── main/
    │   │   ├── org/
    │   │   │   └── apache/
    │   │   │       ├── jute/
    │   │   │       │   ├── BinaryInputArchive.java
    │   │   │       │   ├── BinaryOutputArchive.java
    │   │   │       │   ├── CsvInputArchive.java
    │   │   │       │   ├── CsvOutputArchive.java
    │   │   │       │   ├── Index.java
    │   │   │       │   ├── InputArchive.java
    │   │   │       │   ├── OutputArchive.java
    │   │   │       │   ├── Record.java
    │   │   │       │   ├── RecordReader.java
    │   │   │       │   ├── RecordWriter.java
    │   │   │       │   ├── Utils.java
    │   │   │       │   ├── XmlInputArchive.java
    │   │   │       │   ├── XmlOutputArchive.java
    │   │   │       │   ├── compiler/
    │   │   │       │   │   ├── CGenerator.java
    │   │   │       │   │   ├── CSharpGenerator.java
    │   │   │       │   │   ├── CppGenerator.java
    │   │   │       │   │   ├── JBoolean.java
    │   │   │       │   │   ├── JBuffer.java
    │   │   │       │   │   ├── JByte.java
    │   │   │       │   │   ├── JCompType.java
    │   │   │       │   │   ├── JDouble.java
    │   │   │       │   │   ├── JField.java
    │   │   │       │   │   ├── JFile.java
    │   │   │       │   │   ├── JFloat.java
    │   │   │       │   │   ├── JInt.java
    │   │   │       │   │   ├── JLong.java
    │   │   │       │   │   ├── JMap.java
    │   │   │       │   │   ├── JRecord.java
    │   │   │       │   │   ├── JString.java
    │   │   │       │   │   ├── JType.java
    │   │   │       │   │   ├── JVector.java
    │   │   │       │   │   ├── JavaGenerator.java
    │   │   │       │   │   └── package.html
    │   │   │       │   └── package.html
    │   │   │       └── zookeeper/
    │   │   │           ├── AsyncCallback.java
    │   │   │           ├── ClientCnxn.java
    │   │   │           ├── ClientCnxnSocket.java
    │   │   │           ├── ClientCnxnSocketNIO.java
    │   │   │           ├── ClientWatchManager.java
    │   │   │           ├── CreateMode.java
    │   │   │           ├── Environment.java
    │   │   │           ├── JLineZNodeCompletor.java
    │   │   │           ├── KeeperException.java
    │   │   │           ├── Login.java
    │   │   │           ├── MultiResponse.java
    │   │   │           ├── MultiTransactionRecord.java
    │   │   │           ├── Op.java
    │   │   │           ├── OpResult.java
    │   │   │           ├── Quotas.java
    │   │   │           ├── SaslClientCallbackHandler.java
    │   │   │           ├── ServerAdminClient.java
    │   │   │           ├── Shell.java
    │   │   │           ├── StatsTrack.java
    │   │   │           ├── Transaction.java
    │   │   │           ├── Version.java
    │   │   │           ├── WatchedEvent.java
    │   │   │           ├── Watcher.java
    │   │   │           ├── ZKUtil.java
    │   │   │           ├── ZooDefs.java
    │   │   │           ├── ZooKeeper.java
    │   │   │           ├── ZooKeeperMain.java
    │   │   │           ├── client/
    │   │   │           │   ├── ConnectStringParser.java
    │   │   │           │   ├── FourLetterWordMain.java
    │   │   │           │   ├── HostProvider.java
    │   │   │           │   ├── StaticHostProvider.java
    │   │   │           │   └── ZooKeeperSaslClient.java
    │   │   │           ├── common/
    │   │   │           │   ├── AtomicFileOutputStream.java
    │   │   │           │   ├── IOUtils.java
    │   │   │           │   ├── PathTrie.java
    │   │   │           │   ├── PathUtils.java
    │   │   │           │   └── Time.java
    │   │   │           ├── jmx/
    │   │   │           │   ├── CommonNames.java
    │   │   │           │   ├── MBeanRegistry.java
    │   │   │           │   ├── ManagedUtil.java
    │   │   │           │   └── ZKMBeanInfo.java
    │   │   │           ├── server/
    │   │   │           │   ├── ByteBufferInputStream.java
    │   │   │           │   ├── ByteBufferOutputStream.java
    │   │   │           │   ├── ConnectionBean.java
    │   │   │           │   ├── ConnectionMXBean.java
    │   │   │           │   ├── DataNode.java
    │   │   │           │   ├── DataTree.java
    │   │   │           │   ├── DataTreeBean.java
    │   │   │           │   ├── DataTreeMXBean.java
    │   │   │           │   ├── DatadirCleanupManager.java
    │   │   │           │   ├── ExitCode.java
    │   │   │           │   ├── FinalRequestProcessor.java
    │   │   │           │   ├── LogFormatter.java
    │   │   │           │   ├── NIOServerCnxn.java
    │   │   │           │   ├── NIOServerCnxnFactory.java
    │   │   │           │   ├── NettyServerCnxn.java
    │   │   │           │   ├── NettyServerCnxnFactory.java
    │   │   │           │   ├── ObserverBean.java
    │   │   │           │   ├── PrepRequestProcessor.java
    │   │   │           │   ├── PurgeTxnLog.java
    │   │   │           │   ├── ReferenceCountedACLCache.java
    │   │   │           │   ├── Request.java
    │   │   │           │   ├── RequestProcessor.java
    │   │   │           │   ├── ServerCnxn.java
    │   │   │           │   ├── ServerCnxnFactory.java
    │   │   │           │   ├── ServerConfig.java
    │   │   │           │   ├── ServerStats.java
    │   │   │           │   ├── SessionTracker.java
    │   │   │           │   ├── SessionTrackerImpl.java
    │   │   │           │   ├── SnapshotFormatter.java
    │   │   │           │   ├── Stats.java
    │   │   │           │   ├── SyncRequestProcessor.java
    │   │   │           │   ├── TraceFormatter.java
    │   │   │           │   ├── UnimplementedRequestProcessor.java
    │   │   │           │   ├── WatchManager.java
    │   │   │           │   ├── ZKDatabase.java
    │   │   │           │   ├── ZooKeeperCriticalThread.java
    │   │   │           │   ├── ZooKeeperSaslServer.java
    │   │   │           │   ├── ZooKeeperServer.java
    │   │   │           │   ├── ZooKeeperServerBean.java
    │   │   │           │   ├── ZooKeeperServerListener.java
    │   │   │           │   ├── ZooKeeperServerListenerImpl.java
    │   │   │           │   ├── ZooKeeperServerMXBean.java
    │   │   │           │   ├── ZooKeeperServerMain.java
    │   │   │           │   ├── ZooKeeperServerShutdownHandler.java
    │   │   │           │   ├── ZooKeeperThread.java
    │   │   │           │   ├── ZooTrace.java
    │   │   │           │   ├── auth/
    │   │   │           │   │   ├── AuthenticationProvider.java
    │   │   │           │   │   ├── DigestAuthenticationProvider.java
    │   │   │           │   │   ├── DigestLoginModule.java
    │   │   │           │   │   ├── IPAuthenticationProvider.java
    │   │   │           │   │   ├── KerberosName.java
    │   │   │           │   │   ├── ProviderRegistry.java
    │   │   │           │   │   ├── SASLAuthenticationProvider.java
    │   │   │           │   │   └── SaslServerCallbackHandler.java
    │   │   │           │   ├── package.html
    │   │   │           │   ├── persistence/
    │   │   │           │   │   ├── FileSnap.java
    │   │   │           │   │   ├── FileTxnLog.java
    │   │   │           │   │   ├── FileTxnSnapLog.java
    │   │   │           │   │   ├── SnapShot.java
    │   │   │           │   │   ├── TxnLog.java
    │   │   │           │   │   └── Util.java
    │   │   │           │   ├── quorum/
    │   │   │           │   │   ├── AckRequestProcessor.java
    │   │   │           │   │   ├── AuthFastLeaderElection.java
    │   │   │           │   │   ├── CommitProcessor.java
    │   │   │           │   │   ├── Election.java
    │   │   │           │   │   ├── FastLeaderElection.java
    │   │   │           │   │   ├── Follower.java
    │   │   │           │   │   ├── FollowerBean.java
    │   │   │           │   │   ├── FollowerMXBean.java
    │   │   │           │   │   ├── FollowerRequestProcessor.java
    │   │   │           │   │   ├── FollowerZooKeeperServer.java
    │   │   │           │   │   ├── Leader.java
    │   │   │           │   │   ├── LeaderBean.java
    │   │   │           │   │   ├── LeaderElection.java
    │   │   │           │   │   ├── LeaderElectionBean.java
    │   │   │           │   │   ├── LeaderElectionMXBean.java
    │   │   │           │   │   ├── LeaderMXBean.java
    │   │   │           │   │   ├── LeaderZooKeeperServer.java
    │   │   │           │   │   ├── Learner.java
    │   │   │           │   │   ├── LearnerHandler.java
    │   │   │           │   │   ├── LearnerSessionTracker.java
    │   │   │           │   │   ├── LearnerSyncRequest.java
    │   │   │           │   │   ├── LearnerZooKeeperServer.java
    │   │   │           │   │   ├── LocalPeerBean.java
    │   │   │           │   │   ├── LocalPeerMXBean.java
    │   │   │           │   │   ├── Observer.java
    │   │   │           │   │   ├── ObserverMXBean.java
    │   │   │           │   │   ├── ObserverRequestProcessor.java
    │   │   │           │   │   ├── ObserverZooKeeperServer.java
    │   │   │           │   │   ├── ProposalRequestProcessor.java
    │   │   │           │   │   ├── QuorumBean.java
    │   │   │           │   │   ├── QuorumCnxManager.java
    │   │   │           │   │   ├── QuorumMXBean.java
    │   │   │           │   │   ├── QuorumPeer.java
    │   │   │           │   │   ├── QuorumPeerConfig.java
    │   │   │           │   │   ├── QuorumPeerMain.java
    │   │   │           │   │   ├── QuorumStats.java
    │   │   │           │   │   ├── QuorumZooKeeperServer.java
    │   │   │           │   │   ├── ReadOnlyBean.java
    │   │   │           │   │   ├── ReadOnlyRequestProcessor.java
    │   │   │           │   │   ├── ReadOnlyZooKeeperServer.java
    │   │   │           │   │   ├── RemotePeerBean.java
    │   │   │           │   │   ├── RemotePeerMXBean.java
    │   │   │           │   │   ├── SendAckRequestProcessor.java
    │   │   │           │   │   ├── ServerBean.java
    │   │   │           │   │   ├── ServerMXBean.java
    │   │   │           │   │   ├── StateSummary.java
    │   │   │           │   │   ├── Vote.java
    │   │   │           │   │   ├── auth/
    │   │   │           │   │   │   ├── NullQuorumAuthLearner.java
    │   │   │           │   │   │   ├── NullQuorumAuthServer.java
    │   │   │           │   │   │   ├── QuorumAuth.java
    │   │   │           │   │   │   ├── QuorumAuthLearner.java
    │   │   │           │   │   │   ├── QuorumAuthServer.java
    │   │   │           │   │   │   ├── SaslQuorumAuthLearner.java
    │   │   │           │   │   │   ├── SaslQuorumAuthServer.java
    │   │   │           │   │   │   └── SaslQuorumServerCallbackHandler.java
    │   │   │           │   │   └── flexible/
    │   │   │           │   │       ├── QuorumHierarchical.java
    │   │   │           │   │       ├── QuorumMaj.java
    │   │   │           │   │       └── QuorumVerifier.java
    │   │   │           │   ├── upgrade/
    │   │   │           │   │   ├── DataNodeV1.java
    │   │   │           │   │   ├── DataTreeV1.java
    │   │   │           │   │   ├── UpgradeMain.java
    │   │   │           │   │   ├── UpgradeSnapShot.java
    │   │   │           │   │   └── UpgradeSnapShotV1.java
    │   │   │           │   └── util/
    │   │   │           │       ├── KerberosUtil.java
    │   │   │           │       ├── OSMXBean.java
    │   │   │           │       ├── Profiler.java
    │   │   │           │       ├── SerializeUtils.java
    │   │   │           │       └── ZxidUtils.java
    │   │   │           ├── util/
    │   │   │           │   └── SecurityUtils.java
    │   │   │           └── version/
    │   │   │               └── util/
    │   │   │                   └── VerGen.java
    │   │   └── overview.html
    │   ├── systest/
    │   │   ├── README.txt
    │   │   └── org/
    │   │       └── apache/
    │   │           └── zookeeper/
    │   │               └── test/
    │   │                   └── system/
    │   │                       ├── BaseSysTest.java
    │   │                       ├── DuplicateNameException.java
    │   │                       ├── GenerateLoad.java
    │   │                       ├── Instance.java
    │   │                       ├── InstanceContainer.java
    │   │                       ├── InstanceManager.java
    │   │                       ├── NoAssignmentException.java
    │   │                       ├── NoAvailableContainers.java
    │   │                       ├── QuorumPeerInstance.java
    │   │                       ├── SimpleClient.java
    │   │                       └── SimpleSysTest.java
    │   └── test/
    │       ├── bin/
    │       │   ├── check_compatibility.py
    │       │   ├── test-github-pr.sh
    │       │   ├── test-patch.properties
    │       │   └── test-patch.sh
    │       ├── checkstyle-noframes-sorted.xsl
    │       ├── checkstyle.xml
    │       ├── config/
    │       │   └── findbugsExcludeFile.xml
    │       ├── data/
    │       │   ├── buffersize/
    │       │   │   ├── create/
    │       │   │   │   └── version-2/
    │       │   │   │       ├── log.1
    │       │   │   │       └── snapshot.0
    │       │   │   ├── set/
    │       │   │   │   └── version-2/
    │       │   │   │       ├── log.1
    │       │   │   │       └── snapshot.0
    │       │   │   └── snapshot/
    │       │   │       └── version-2/
    │       │   │           ├── log.1
    │       │   │           ├── snapshot.0
    │       │   │           └── snapshot.2
    │       │   ├── invalidsnap/
    │       │   │   └── version-2/
    │       │   │       ├── log.1
    │       │   │       ├── log.274
    │       │   │       ├── log.63b
    │       │   │       ├── snapshot.0
    │       │   │       ├── snapshot.272
    │       │   │       ├── snapshot.273
    │       │   │       ├── snapshot.639
    │       │   │       └── snapshot.83f
    │       │   ├── kerberos/
    │       │   │   ├── minikdc-krb5.conf
    │       │   │   └── minikdc.ldiff
    │       │   └── upgrade/
    │       │       ├── log.100000001
    │       │       ├── log.100001bf0
    │       │       ├── snapshot.100000000
    │       │       └── snapshot.100001bec
    │       └── org/
    │           └── apache/
    │               ├── jute/
    │               │   └── BinaryInputArchiveTest.java
    │               └── zookeeper/
    │                   ├── ClientReconnectTest.java
    │                   ├── JUnit4ZKTestRunner.java
    │                   ├── JaasConfiguration.java
    │                   ├── MockPacket.java
    │                   ├── MultiResponseTest.java
    │                   ├── MultiTransactionRecordTest.java
    │                   ├── PortAssignment.java
    │                   ├── SaslAuthTest.java
    │                   ├── ServerConfigTest.java
    │                   ├── TestableZooKeeper.java
    │                   ├── VerGenTest.java
    │                   ├── ZKTestCase.java
    │                   ├── ZooKeeperTest.java
    │                   ├── common/
    │                   │   └── TimeTest.java
    │                   ├── server/
    │                   │   ├── CRCTest.java
    │                   │   ├── DataNodeTest.java
    │                   │   ├── DataTreeTest.java
    │                   │   ├── DataTreeUnitTest.java
    │                   │   ├── DatadirCleanupManagerTest.java
    │                   │   ├── DeserializationPerfTest.java
    │                   │   ├── InvalidSnapCountTest.java
    │                   │   ├── InvalidSnapshotTest.java
    │                   │   ├── MockNIOServerCnxn.java
    │                   │   ├── NIOServerCnxnTest.java
    │                   │   ├── NettyServerCnxnTest.java
    │                   │   ├── PrepRequestProcessorTest.java
    │                   │   ├── PurgeTxnTest.java
    │                   │   ├── ReferenceCountedACLCacheTest.java
    │                   │   ├── SerializationPerfTest.java
    │                   │   ├── ServerCnxnFactoryAccessor.java
    │                   │   ├── SessionTrackerTest.java
    │                   │   ├── ToStringTest.java
    │                   │   ├── ZooKeeperServerMainTest.java
    │                   │   ├── ZooKeeperServerStartupTest.java
    │                   │   ├── ZooKeeperServerTest.java
    │                   │   ├── ZooKeeperThreadTest.java
    │                   │   ├── ZxidRolloverTest.java
    │                   │   ├── persistence/
    │                   │   │   ├── FileTxnLogTest.java
    │                   │   │   └── FileTxnSnapLogTest.java
    │                   │   ├── quorum/
    │                   │   │   ├── CnxManagerTest.java
    │                   │   │   ├── EphemeralNodeDeletionTest.java
    │                   │   │   ├── FLEBackwardElectionRoundTest.java
    │                   │   │   ├── FLECompatibilityTest.java
    │                   │   │   ├── FLEDontCareTest.java
    │                   │   │   ├── FLELostMessageTest.java
    │                   │   │   ├── FLETestUtils.java
    │                   │   │   ├── LearnerTest.java
    │                   │   │   ├── QuorumCnxManagerTest.java
    │                   │   │   ├── QuorumPeerMainTest.java
    │                   │   │   ├── QuorumPeerTestBase.java
    │                   │   │   ├── WatchLeakTest.java
    │                   │   │   ├── Zab1_0Test.java
    │                   │   │   └── auth/
    │                   │   │       ├── KerberosSecurityTestcase.java
    │                   │   │       ├── KerberosTestUtils.java
    │                   │   │       ├── MiniKdc.java
    │                   │   │       ├── MiniKdcTest.java
    │                   │   │       ├── QuorumAuthTestBase.java
    │                   │   │       ├── QuorumAuthUpgradeTest.java
    │                   │   │       ├── QuorumDigestAuthTest.java
    │                   │   │       ├── QuorumKerberosAuthTest.java
    │                   │   │       └── QuorumKerberosHostBasedAuthTest.java
    │                   │   └── util/
    │                   │       └── PortForwarder.java
    │                   └── test/
    │                       ├── ACLCountTest.java
    │                       ├── ACLRootTest.java
    │                       ├── ACLTest.java
    │                       ├── AsyncHammerTest.java
    │                       ├── AsyncOps.java
    │                       ├── AsyncOpsTest.java
    │                       ├── AsyncTest.java
    │                       ├── AtomicFileOutputStreamTest.java
    │                       ├── AuthTest.java
    │                       ├── BufferSizeTest.java
    │                       ├── ChrootAsyncTest.java
    │                       ├── ChrootClientTest.java
    │                       ├── ChrootTest.java
    │                       ├── ClientBase.java
    │                       ├── ClientHammerTest.java
    │                       ├── ClientPortBindTest.java
    │                       ├── ClientRetry.java
    │                       ├── ClientTest.java
    │                       ├── ConnectStringParserTest.java
    │                       ├── CreateModeTest.java
    │                       ├── DisconnectableZooKeeper.java
    │                       ├── DisconnectedWatcherTest.java
    │                       ├── EventTypeTest.java
    │                       ├── FLENewEpochTest.java
    │                       ├── FLEPredicateTest.java
    │                       ├── FLERestartTest.java
    │                       ├── FLETest.java
    │                       ├── FLEZeroWeightTest.java
    │                       ├── FollowerResyncConcurrencyTest.java
    │                       ├── FollowerTest.java
    │                       ├── FourLetterWordsQuorumTest.java
    │                       ├── FourLetterWordsTest.java
    │                       ├── FourLetterWordsWhiteListTest.java
    │                       ├── GetChildren2Test.java
    │                       ├── HierarchicalQuorumTest.java
    │                       ├── IntegrityCheck.java
    │                       ├── InvalidSnapshotTest.java
    │                       ├── JMXEnv.java
    │                       ├── KeeperStateTest.java
    │                       ├── LENonTerminateTest.java
    │                       ├── LETest.java
    │                       ├── LoadFromLogNoServerTest.java
    │                       ├── LoadFromLogTest.java
    │                       ├── MaxCnxnsTest.java
    │                       ├── MultiTransactionTest.java
    │                       ├── NioNettySuiteBase.java
    │                       ├── NioNettySuiteHammerTest.java
    │                       ├── NioNettySuiteTest.java
    │                       ├── NonRecoverableErrorTest.java
    │                       ├── NullDataTest.java
    │                       ├── OOMTest.java
    │                       ├── OSMXBeanTest.java
    │                       ├── ObserverHierarchicalQuorumTest.java
    │                       ├── ObserverLETest.java
    │                       ├── ObserverQuorumHammerTest.java
    │                       ├── ObserverTest.java
    │                       ├── QuorumBase.java
    │                       ├── QuorumHammerTest.java
    │                       ├── QuorumQuotaTest.java
    │                       ├── QuorumTest.java
    │                       ├── QuorumUtil.java
    │                       ├── QuorumZxidSyncTest.java
    │                       ├── ReadOnlyModeTest.java
    │                       ├── RecoveryTest.java
    │                       ├── RepeatStartupTest.java
    │                       ├── RestoreCommittedLogTest.java
    │                       ├── SaslAuthDesignatedClientTest.java
    │                       ├── SaslAuthDesignatedServerTest.java
    │                       ├── SaslAuthFailDesignatedClientTest.java
    │                       ├── SaslAuthFailNotifyTest.java
    │                       ├── SaslAuthFailTest.java
    │                       ├── SaslAuthMissingClientConfigTest.java
    │                       ├── SaslClientTest.java
    │                       ├── SessionInvalidationTest.java
    │                       ├── SessionTest.java
    │                       ├── SledgeHammer.java
    │                       ├── StandaloneTest.java
    │                       ├── StatTest.java
    │                       ├── StaticHostProviderTest.java
    │                       ├── SyncCallTest.java
    │                       ├── TestHammer.java
    │                       ├── TestUtils.java
    │                       ├── TruncateTest.java
    │                       ├── UpgradeTest.java
    │                       ├── WatchEventWhenAutoReset.java
    │                       ├── WatchedEventTest.java
    │                       ├── WatcherFuncTest.java
    │                       ├── WatcherTest.java
    │                       ├── ZkDatabaseCorruptionTest.java
    │                       ├── ZooKeeperQuotaTest.java
    │                       └── ZooKeeperTestClient.java
    ├── lastRevision.bat
    ├── lastRevision.sh
    ├── packages/
    │   ├── deb/
    │   │   ├── init.d/
    │   │   │   └── zookeeper
    │   │   └── zookeeper.control/
    │   │       ├── conffile
    │   │       ├── control
    │   │       ├── postinst
    │   │       ├── postrm
    │   │       ├── preinst
    │   │       └── prerm
    │   ├── rpm/
    │   │   ├── init.d/
    │   │   │   └── zookeeper
    │   │   └── spec/
    │   │       └── zookeeper.spec
    │   ├── templates/
    │   │   └── conf/
    │   │       └── zookeeper-env.sh
    │   └── update-zookeeper-env.sh
    ├── pom.template
    ├── recipes/
    │   ├── README.txt
    │   ├── build-recipes.xml
    │   ├── build.xml
    │   ├── election/
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── src/
    │   │   │   └── java/
    │   │   │       └── org/
    │   │   │           └── apache/
    │   │   │               └── zookeeper/
    │   │   │                   └── recipes/
    │   │   │                       └── leader/
    │   │   │                           ├── LeaderElectionAware.java
    │   │   │                           ├── LeaderElectionSupport.java
    │   │   │                           └── LeaderOffer.java
    │   │   └── test/
    │   │       └── org/
    │   │           └── apache/
    │   │               └── zookeeper/
    │   │                   └── recipes/
    │   │                       └── leader/
    │   │                           └── LeaderElectionSupportTest.java
    │   ├── lock/
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── src/
    │   │   │   ├── c/
    │   │   │   │   ├── INSTALL
    │   │   │   │   ├── LICENSE
    │   │   │   │   ├── Makefile.am
    │   │   │   │   ├── README.txt
    │   │   │   │   ├── acinclude.m4
    │   │   │   │   ├── aminclude.am
    │   │   │   │   ├── c-doc.Doxyfile
    │   │   │   │   ├── configure.ac
    │   │   │   │   ├── include/
    │   │   │   │   │   └── zoo_lock.h
    │   │   │   │   ├── src/
    │   │   │   │   │   └── zoo_lock.c
    │   │   │   │   └── tests/
    │   │   │   │       ├── TestClient.cc
    │   │   │   │       ├── TestDriver.cc
    │   │   │   │       ├── Util.cc
    │   │   │   │       ├── Util.h
    │   │   │   │       └── zkServer.sh
    │   │   │   └── java/
    │   │   │       └── org/
    │   │   │           └── apache/
    │   │   │               └── zookeeper/
    │   │   │                   └── recipes/
    │   │   │                       └── lock/
    │   │   │                           ├── LockListener.java
    │   │   │                           ├── ProtocolSupport.java
    │   │   │                           ├── WriteLock.java
    │   │   │                           ├── ZNodeName.java
    │   │   │                           └── ZooKeeperOperation.java
    │   │   └── test/
    │   │       └── org/
    │   │           └── apache/
    │   │               └── zookeeper/
    │   │                   └── recipes/
    │   │                       └── lock/
    │   │                           ├── WriteLockTest.java
    │   │                           └── ZNodeNameTest.java
    │   └── queue/
    │       ├── README.txt
    │       ├── build.xml
    │       ├── src/
    │       │   ├── c/
    │       │   │   ├── INSTALL
    │       │   │   ├── LICENSE
    │       │   │   ├── Makefile.am
    │       │   │   ├── README.txt
    │       │   │   ├── acinclude.m4
    │       │   │   ├── aminclude.am
    │       │   │   ├── c-doc.Doxyfile
    │       │   │   ├── configure.ac
    │       │   │   ├── include/
    │       │   │   │   └── zoo_queue.h
    │       │   │   ├── src/
    │       │   │   │   └── zoo_queue.c
    │       │   │   └── tests/
    │       │   │       ├── TestClient.cc
    │       │   │       ├── TestDriver.cc
    │       │   │       ├── Util.cc
    │       │   │       ├── Util.h
    │       │   │       └── zkServer.sh
    │       │   └── java/
    │       │       └── org/
    │       │           └── apache/
    │       │               └── zookeeper/
    │       │                   └── recipes/
    │       │                       └── queue/
    │       │                           └── DistributedQueue.java
    │       └── test/
    │           └── org/
    │               └── apache/
    │                   └── zookeeper/
    │                       └── recipes/
    │                           └── queue/
    │                               └── DistributedQueueTest.java
    └── zookeeper.jute

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
*        text=auto

*.cs     text diff=csharp
*.java   text diff=java
*.html   text diff=html
*.py     text diff=python
*.pl     text diff=perl
*.pm     text diff=perl
*.css    text
*.js     text
*.sql    text

*.sh     text eol=lf

*.bat    text eol=crlf
*.cmd    text eol=crlf
*.csproj text merge=union eol=crlf
*.sln    text merge=union eol=crlf


================================================
FILE: .gitignore
================================================
# Java
hs_err_pid*

# Git
*.orij
*.rej

# SVN
.svn
.revision

# Eclipse
.metadata
.classpath
.eclipse/
.idea/
.project
.revision/
.settings/
.externalToolBuilders/
local.properties
.recommenders
*.launch
build/
target/
out/

# Intellij
*.ipr
*.iws
*.iml

# NetBeans
*~.nib
nbbuild/
dist/
nbdist/
.ndb-gradle/
.cproject
.buildpath

# Other
*~
logs/
*.out
*.log
*.bak
*.tmp
tmp/**
tmp/**/*
.DS_Store
.gradle
*.patch
*.swp
generated

# C
tags
.cproject
.project
obj
src/c/core.*
src/c/TEST-*.txt
src/c/*.la
src/c/*.lo
src/c/*.o
src/c/generated/
src/java/generated/
src/java/lib/ant-eclipse-*
src/java/lib/ivy-*
src/c/Makefile.in
src/c/aclocal.m4
src/c/autom4te.cache/
src/c/compile
src/c/config.guess
src/c/config.h.in
src/c/config.sub
src/c/configure
src/c/depcomp
src/c/install-sh
src/c/ltmain.sh
src/c/missing


================================================
FILE: LICENSE.txt
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed 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.


================================================
FILE: NOTICE.txt
================================================
Apache ZooKeeper
Copyright 2009-2018 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).


================================================
FILE: README_packaging.txt
================================================
README file for Packaging Notes

Requirement
-----------

gcc, cppunit and python-setuptools are required to build 
C and python bindings.

On RHEL machine:

yum install cppunit
yum install python-setuptools

On Ubuntu:

apt-get --install cppunit
apt-get --install python-setuptools

Package build command
---------------------

Command to build Debian package: ant deb
Command to build RPM Package: ant rpm

rpm and deb packages are generated and placed in:

build/zookeeper*.[rpm|deb]
build/contrib/**.[rpm|deb]

Default package file structure layout

  /usr/bin                           - User executable
  /usr/sbin                          - System executable
  /usr/libexec                       - Configuration boot trap script
  /usr/lib                           - Native libraries
  /usr/share/doc/zookeeper           - Documents
  /usr/share/zookeeper               - Project files
  /usr/share/zookeeper/template/conf - Configuration template files
  /etc/zookeeper                     - Configuration files
  /etc/init.d/zookeeper              - OS startup script

Source file structure layout
---------------------

src/packages/update-zookeeper-env.sh 
  - setup environment variables and symlink $PREFIX/etc/zookeeper to 
    /etc/zookeeper.
  - This script is designed to run in post installation, and pre-remove 
    phase of ZooKeeper package.
  - Run update-zookeeper-env.sh -h to get a list of supported parameters.

src/packages/template
  - Standard configuration template

src/packages/deb 
  Meta data for creating Debian package

src/packages/deb/init.d
  Daemon start/stop script for Debian flavor of Linux

src/packages/rpm 
  Meta data for creating RPM package

src/packages/rpm/init.d
  Daemon start/stop script for Redhat flavor of Linux


================================================
FILE: bin/README.txt
================================================
This directory contain scripts that allow easy access (classpath in particular)
to the ZooKeeper server and command line client.

Files ending in .sh are unix and cygwin compatible

Files ending in .cmd are msdos/windows compatible


================================================
FILE: bin/zkCleanup.sh
================================================
#!/usr/bin/env 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.

#
# This script cleans up old transaction logs and snapshots
#

#
# If this scripted is run out of /usr/bin or some other system bin directory
# it should be linked to and not copied. Things like java jar files are found
# relative to the canonical path of this script.
#

# use POSTIX interface, symlink is followed automatically
ZOOBIN="${BASH_SOURCE-$0}"
ZOOBIN="$(dirname "${ZOOBIN}")"
ZOOBINDIR="$(cd "${ZOOBIN}"; pwd)"

if [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then
  . "$ZOOBINDIR"/../libexec/zkEnv.sh
else
  . "$ZOOBINDIR"/zkEnv.sh
fi

ZOODATADIR="$(grep "^[[:space:]]*dataDir=" "$ZOOCFG" | sed -e 's/.*=//')"
ZOODATALOGDIR="$(grep "^[[:space:]]*dataLogDir=" "$ZOOCFG" | sed -e 's/.*=//')"

if [ "x$ZOODATALOGDIR" = "x" ]
then
"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
     -cp "$CLASSPATH" $JVMFLAGS \
     org.apache.zookeeper.server.PurgeTxnLog "$ZOODATADIR" $*
else
"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
     -cp "$CLASSPATH" $JVMFLAGS \
     org.apache.zookeeper.server.PurgeTxnLog "$ZOODATALOGDIR" "$ZOODATADIR" $*
fi


================================================
FILE: bin/zkCli.cmd
================================================
@echo off
REM Licensed to the Apache Software Foundation (ASF) under one or more
REM contributor license agreements.  See the NOTICE file distributed with
REM this work for additional information regarding copyright ownership.
REM The ASF licenses this file to You under the Apache License, Version 2.0
REM (the "License"); you may not use this file except in compliance with
REM the License.  You may obtain a copy of the License at
REM
REM     http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.

setlocal
call "%~dp0zkEnv.cmd"

set ZOOMAIN=org.apache.zookeeper.ZooKeeperMain
call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% %*

endlocal



================================================
FILE: bin/zkCli.sh
================================================
#!/usr/bin/env 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.

#
# This script cleans up old transaction logs and snapshots
#

#
# If this scripted is run out of /usr/bin or some other system bin directory
# it should be linked to and not copied. Things like java jar files are found
# relative to the canonical path of this script.
#

# use POSTIX interface, symlink is followed automatically
ZOOBIN="${BASH_SOURCE-$0}"
ZOOBIN="$(dirname "${ZOOBIN}")"
ZOOBINDIR="$(cd "${ZOOBIN}"; pwd)"

if [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then
  . "$ZOOBINDIR"/../libexec/zkEnv.sh
else
  . "$ZOOBINDIR"/zkEnv.sh
fi

"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
     -cp "$CLASSPATH" $CLIENT_JVMFLAGS $JVMFLAGS \
     org.apache.zookeeper.ZooKeeperMain "$@"


================================================
FILE: bin/zkEnv.cmd
================================================
@echo off
REM Licensed to the Apache Software Foundation (ASF) under one or more
REM contributor license agreements.  See the NOTICE file distributed with
REM this work for additional information regarding copyright ownership.
REM The ASF licenses this file to You under the Apache License, Version 2.0
REM (the "License"); you may not use this file except in compliance with
REM the License.  You may obtain a copy of the License at
REM
REM     http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.

set ZOOCFGDIR=%~dp0%..\conf
set ZOO_LOG_DIR=%~dp0%..
set ZOO_LOG4J_PROP=INFO,CONSOLE

REM for sanity sake assume Java 1.6
REM see: http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html

REM add the zoocfg dir to classpath
set CLASSPATH=%ZOOCFGDIR%

REM make it work in the release
SET CLASSPATH=%~dp0..\*;%~dp0..\lib\*;%CLASSPATH%

REM make it work for developers
SET CLASSPATH=%~dp0..\build\classes;%~dp0..\build\lib\*;%CLASSPATH%

set ZOOCFG=%ZOOCFGDIR%\zoo.cfg

@REM setup java environment variables

if not defined JAVA_HOME (
  echo Error: JAVA_HOME is not set.
  goto :eof
)

set JAVA_HOME=%JAVA_HOME:"=%

if not exist "%JAVA_HOME%"\bin\java.exe (
  echo Error: JAVA_HOME is incorrectly set.
  goto :eof
)

REM strip off trailing \ from JAVA_HOME or java does not start
if "%JAVA_HOME:~-1%" EQU "\" set "JAVA_HOME=%JAVA_HOME:~0,-1%"
 
set JAVA="%JAVA_HOME%"\bin\java


================================================
FILE: bin/zkEnv.sh
================================================
#!/usr/bin/env 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.

# This script should be sourced into other zookeeper
# scripts to setup the env variables

# We use ZOOCFGDIR if defined,
# otherwise we use /etc/zookeeper
# or the conf directory that is
# a sibling of this script's directory

ZOOBINDIR="${ZOOBINDIR:-/usr/bin}"
ZOOKEEPER_PREFIX="${ZOOBINDIR}/.."

if [ "x$ZOOCFGDIR" = "x" ]
then
  if [ -e "${ZOOKEEPER_PREFIX}/conf" ]; then
    ZOOCFGDIR="$ZOOBINDIR/../conf"
  else
    ZOOCFGDIR="$ZOOBINDIR/../etc/zookeeper"
  fi
fi

if [ -f "${ZOOCFGDIR}/zookeeper-env.sh" ]; then
  . "${ZOOCFGDIR}/zookeeper-env.sh"
fi

if [ "x$ZOOCFG" = "x" ]
then
    ZOOCFG="zoo.cfg"
fi

ZOOCFG="$ZOOCFGDIR/$ZOOCFG"

if [ -f "$ZOOCFGDIR/java.env" ]
then
    . "$ZOOCFGDIR/java.env"
fi

if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="."
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
    ZOO_LOG4J_PROP="INFO,CONSOLE"
fi

if [ "$JAVA_HOME" != "" ]; then
  JAVA="$JAVA_HOME/bin/java"
else
  JAVA=java
fi

#add the zoocfg dir to classpath
CLASSPATH="$ZOOCFGDIR:$CLASSPATH"

for i in "$ZOOBINDIR"/../src/java/lib/*.jar
do
    CLASSPATH="$i:$CLASSPATH"
done

#make it work in the binary package
#(use array for LIBPATH to account for spaces within wildcard expansion)
if [ -e "${ZOOKEEPER_PREFIX}"/share/zookeeper/zookeeper-*.jar ]; then
  LIBPATH=("${ZOOKEEPER_PREFIX}"/share/zookeeper/*.jar)
else
  #release tarball format
  for i in "$ZOOBINDIR"/../zookeeper-*.jar
  do
    CLASSPATH="$i:$CLASSPATH"
  done
  LIBPATH=("${ZOOBINDIR}"/../lib/*.jar)
fi

for i in "${LIBPATH[@]}"
do
    CLASSPATH="$i:$CLASSPATH"
done

#make it work for developers
for d in "$ZOOBINDIR"/../build/lib/*.jar
do
   CLASSPATH="$d:$CLASSPATH"
done

#make it work for developers
CLASSPATH="$ZOOBINDIR/../build/classes:$CLASSPATH"

case "`uname`" in
    CYGWIN*) cygwin=true ;;
    *) cygwin=false ;;
esac

if $cygwin
then
    CLASSPATH=`cygpath -wp "$CLASSPATH"`
fi

#echo "CLASSPATH=$CLASSPATH"

================================================
FILE: bin/zkServer.cmd
================================================
@echo off
REM Licensed to the Apache Software Foundation (ASF) under one or more
REM contributor license agreements.  See the NOTICE file distributed with
REM this work for additional information regarding copyright ownership.
REM The ASF licenses this file to You under the Apache License, Version 2.0
REM (the "License"); you may not use this file except in compliance with
REM the License.  You may obtain a copy of the License at
REM
REM     http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.

setlocal
call "%~dp0zkEnv.cmd"

set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
echo on
call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*

endlocal


================================================
FILE: bin/zkServer.sh
================================================
#!/usr/bin/env 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 this scripted is run out of /usr/bin or some other system bin directory
# it should be linked to and not copied. Things like java jar files are found
# relative to the canonical path of this script.
#



# use POSTIX interface, symlink is followed automatically
ZOOBIN="${BASH_SOURCE-$0}"
ZOOBIN="$(dirname "${ZOOBIN}")"
ZOOBINDIR="$(cd "${ZOOBIN}"; pwd)"

if [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then
  . "$ZOOBINDIR/../libexec/zkEnv.sh"
else
  . "$ZOOBINDIR/zkEnv.sh"
fi

# See the following page for extensive details on setting
# up the JVM to accept JMX remote management:
# http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
# by default we allow local JMX connections
if [ "x$JMXLOCALONLY" = "x" ]
then
    JMXLOCALONLY=false
fi

if [ "x$JMXDISABLE" = "x" ] || [ "$JMXDISABLE" = 'false' ]
then
  echo "ZooKeeper JMX enabled by default" >&2
  if [ "x$JMXPORT" = "x" ]
  then
    # for some reason these two options are necessary on jdk6 on Ubuntu
    #   accord to the docs they are not necessary, but otw jconsole cannot
    #   do a local attach
    ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY org.apache.zookeeper.server.quorum.QuorumPeerMain"
  else
    if [ "x$JMXAUTH" = "x" ]
    then
      JMXAUTH=false
    fi
    if [ "x$JMXSSL" = "x" ]
    then
      JMXSSL=false
    fi
    if [ "x$JMXLOG4J" = "x" ]
    then
      JMXLOG4J=true
    fi
    echo "ZooKeeper remote JMX Port set to $JMXPORT" >&2
    echo "ZooKeeper remote JMX authenticate set to $JMXAUTH" >&2
    echo "ZooKeeper remote JMX ssl set to $JMXSSL" >&2
    echo "ZooKeeper remote JMX log4j set to $JMXLOG4J" >&2
    ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=$JMXPORT -Dcom.sun.management.jmxremote.authenticate=$JMXAUTH -Dcom.sun.management.jmxremote.ssl=$JMXSSL -Dzookeeper.jmx.log4j.disable=$JMXLOG4J org.apache.zookeeper.server.quorum.QuorumPeerMain"
  fi
else
    echo "JMX disabled by user request" >&2
    ZOOMAIN="org.apache.zookeeper.server.quorum.QuorumPeerMain"
fi

if [ "x$SERVER_JVMFLAGS"  != "x" ]
then
    JVMFLAGS="$SERVER_JVMFLAGS $JVMFLAGS"
fi

if [ "x$2" != "x" ]
then
    ZOOCFG="$ZOOCFGDIR/$2"
fi

# if we give a more complicated path to the config, don't screw around in $ZOOCFGDIR
if [ "x$(dirname "$ZOOCFG")" != "x$ZOOCFGDIR" ]
then
    ZOOCFG="$2"
fi

if $cygwin
then
    ZOOCFG=`cygpath -wp "$ZOOCFG"`
    # cygwin has a "kill" in the shell itself, gets confused
    KILL=/bin/kill
else
    KILL=kill
fi

echo "Using config: $ZOOCFG" >&2

case "$OSTYPE" in
*solaris*)
  GREP=/usr/xpg4/bin/grep
  ;;
*)
  GREP=grep
  ;;
esac
if [ -z "$ZOOPIDFILE" ]; then
    ZOO_DATADIR="$($GREP "^[[:space:]]*dataDir" "$ZOOCFG" | sed -e 's/.*=//')"
    if [ ! -d "$ZOO_DATADIR" ]; then
        mkdir -p "$ZOO_DATADIR"
    fi
    ZOOPIDFILE="$ZOO_DATADIR/zookeeper_server.pid"
else
    # ensure it exists, otw stop will fail
    mkdir -p "$(dirname "$ZOOPIDFILE")"
fi

if [ ! -w "$ZOO_LOG_DIR" ] ; then
mkdir -p "$ZOO_LOG_DIR"
fi

_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"

case $1 in
start)
    echo  -n "Starting zookeeper ... "
    if [ -f "$ZOOPIDFILE" ]; then
      if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then
         echo $command already running as process `cat "$ZOOPIDFILE"`. 
         exit 0
      fi
    fi
    nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
    if [ $? -eq 0 ]
    then
      case "$OSTYPE" in
      *solaris*)
        /bin/echo "${!}\\c" > "$ZOOPIDFILE"
        ;;
      *)
        /bin/echo -n $! > "$ZOOPIDFILE"
        ;;
      esac
      if [ $? -eq 0 ];
      then
        sleep 1
        echo STARTED
      else
        echo FAILED TO WRITE PID
        exit 1
      fi
    else
      echo SERVER DID NOT START
      exit 1
    fi
    ;;
start-foreground)
    ZOO_CMD=(exec "$JAVA")
    if [ "${ZOO_NOEXEC}" != "" ]; then
      ZOO_CMD=("$JAVA")
    fi
    "${ZOO_CMD[@]}" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG"
    ;;
print-cmd)
    echo "\"$JAVA\" -Dzookeeper.log.dir=\"${ZOO_LOG_DIR}\" -Dzookeeper.root.logger=\"${ZOO_LOG4J_PROP}\" -cp \"$CLASSPATH\" $JVMFLAGS $ZOOMAIN \"$ZOOCFG\" > \"$_ZOO_DAEMON_OUT\" 2>&1 < /dev/null"
    ;;
stop)
    echo -n "Stopping zookeeper ... "
    if [ ! -f "$ZOOPIDFILE" ]
    then
      echo "no zookeeper to stop (could not find file $ZOOPIDFILE)"
    else
      $KILL -9 $(cat "$ZOOPIDFILE")
      rm "$ZOOPIDFILE"
      echo STOPPED
    fi
    exit 0
    ;;
upgrade)
    shift
    echo "upgrading the servers to 3.*"
    "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    -cp "$CLASSPATH" $JVMFLAGS org.apache.zookeeper.server.upgrade.UpgradeMain ${@}
    echo "Upgrading ... "
    ;;
restart)
    shift
    "$0" stop ${@}
    sleep 3
    "$0" start ${@}
    ;;
status)
    # -q is necessary on some versions of linux where nc returns too quickly, and no stat result is output
    clientPortAddress=`$GREP "^[[:space:]]*clientPortAddress[^[:alpha:]]" "$ZOOCFG" | sed -e 's/.*=//'`
    if ! [ $clientPortAddress ]
    then
	clientPortAddress="localhost"
    fi
    clientPort=`$GREP "^[[:space:]]*clientPort[^[:alpha:]]" "$ZOOCFG" | sed -e 's/.*=//'`
    STAT=`"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
             -cp "$CLASSPATH" $JVMFLAGS org.apache.zookeeper.client.FourLetterWordMain \
             $clientPortAddress $clientPort srvr 2> /dev/null    \
          | $GREP Mode`
    if [ "x$STAT" = "x" ]
    then
        echo "Error contacting service. It is probably not running."
        exit 1
    else
        echo $STAT
        exit 0
    fi
    ;;
*)
    echo "Usage: $0 {start|start-foreground|stop|restart|status|upgrade|print-cmd}" >&2

esac


================================================
FILE: build.xml
================================================
<?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="ZooKeeper" default="jar" 
xmlns:ivy="antlib:org.apache.ivy.ant"
xmlns:artifact="antlib:org.apache.maven.artifact.ant"
xmlns:maven="antlib:org.apache.maven.artifact.ant"
xmlns:cs="antlib:com.puppycrawl.tools.checkstyle">

    <!-- read build.properties from the basedir if any -->
    <property file="${basedir}/build.properties" />

    <property name="Name" value="ZooKeeper" />
    <property name="name" value="zookeeper" />

    <property environment="env"/>
    
    <property name="version" value="3.4.12" />
    <property name="final.name" value="${name}-${version}"/>
    <property name="revision.dir" value="${basedir}/.revision" />
    <property name="revision.properties" value="revision.properties" />
    <property file="${basedir}/src/java/${revision.properties}" />
    
    <property name="javac.target" value="1.6" />
    <property name="javac.source" value="1.6" />

    <property name="src.dir" value="${basedir}/src" />
    <property name="java.src.dir" value="${src.dir}/java/main" />

    <property name="lib.dir" value="${src.dir}/java/lib" />
    <property name="lib.dir.includes" value="**/*.jar" />
    <property name="lib.dir.excludes" value="**/excluded/" />

    <!-- prior to ant 1.7.1 fileset always fails if dir doesn't exist
         so just point to bin directory and provide settings that exclude
         everything - user can change as appropriate -->
    <property name="additional.lib.dir" value="bin" />
    <property name="additional.lib.dir.includes" value="**/*.jar" />
    <property name="additional.lib.dir.excludes" value="**/*.jar" />

    <property name="build.dir" value="${basedir}/build" />
    <property name="distribution" value="${basedir}/distribution" />
    <property name="src_generated.dir" value="${src.dir}/java/generated" />
    <property name="c.src.dir" value="${src.dir}/c" />    
    <property name="csrc_generated.dir" value="${c.src.dir}/generated" />
    <property name="csharp.src.dir" value="${src.dir}/csharp/src"/>
    <property name="csharpsrc_generated.dir" value="${csharp.src.dir}/ZooKeeperNetEx/Generated"/>

    <property name="jute.file" value="${src.dir}/zookeeper.jute" />

    <property name="build.classes" value="${build.dir}/classes"/>
    <property name="build.docs" value="${build.dir}/docs" />
    <property name="build.javadoc" value="${build.docs}/api" />
    <property name="build.javadoc.dev" value="${build.docs}/dev-api"/>

    <property name="test.java.build.dir" value="${build.dir}/test"/>
    <property name="test.java.classes" value="${test.java.build.dir}/classes"/>
    <property name="test.src.dir" value="${src.dir}/java/test"/>
    <property name="systest.src.dir" value="${src.dir}/java/systest"/>
    <property name="test.log.dir" value="${test.java.build.dir}/logs" />
    <property name="test.data.dir" value="${test.java.build.dir}/data" />
    <property name="test.data.upgrade.dir" value="${test.data.dir}/upgrade" />
    <property name="test.data.invalid.dir" value="${test.data.dir}/invalidsnap" />
    <property name="test.data.buffersize.dir" value="${test.data.dir}/buffersize" />
    <property name="test.data.kerberos.dir" value="${test.data.dir}/kerberos" />
    <property name="test.cppunit.dir" value="${test.java.build.dir}/test-cppunit"/>
    <property name="test.tmp.dir" value="${test.java.build.dir}/tmp" />
    <property name="test.output" value="no" />
    <property name="test.timeout" value="900000" />
    <property name="test.junit.output.format" value="plain" />
    <property name="test.junit.fork.mode" value="perTest" />
    <property name="test.junit.printsummary" value="yes" />
    <property name="test.junit.haltonfailure" value="no" />
    <property name="test.junit.failbuild.ontestfailure" value="true" />
    <property name="config.dir" value="${src.dir}/java/test/config" />
    <property name="test.junit.maxmem" value="512m" />
    <property name="test.quick" value="no" />
    <property name="conf.dir" value="${basedir}/conf"/>
    <property name="docs.dir" value="${basedir}/docs"/>
    <property name="docs.src" value="${basedir}/src/docs"/>
    <property name="javadoc.link.java"
              value="http://docs.oracle.com/javase/6/docs/api/" />
    <property name="javadoc.packages" value="org.apache.*" />

    <property name="dist.dir" value="${build.dir}/${final.name}"/>
    <property name="dist.maven.dir" value="${dist.dir}/dist-maven"/>

    <property name="clover.home" location="${env.CLOVER_HOME}"/>
    <property name="clover.jar" location="${clover.home}/lib/clover.jar" />
    <property name="clover.db.dir" location="${test.java.build.dir}/clover/db"/>
    <property name="clover.report.dir"
              location="${test.java.build.dir}/clover/reports"/>

    <property name="contrib.dir" value="${src.dir}/contrib"/>
    <property name="recipes.dir" value="${src.dir}/recipes"/>

    <property name="ivy.version" value="2.4.0"/>
    <property name="ivy.url"
              value="https://repo1.maven.org/maven2/org/apache/ivy/ivy" />
    <property name="ivy.home" value="${user.home}/.ant" />
    <property name="ivy.lib" value="${build.dir}/lib"/>
    <property name="ivy.package.lib" value="${build.dir}/package/lib"/>
    <property name="ivy.test.lib" value="${build.dir}/test/lib"/>
    <property name="ivy.jdiff.lib" value="${build.dir}/jdiff/lib"/>
    <property name="ivy.releaseaudit.lib" value="${build.dir}/releaseaudit/lib"/>
    <property name="ivy.owasp.lib" value="${build.dir}/owasp/lib"/>
    <property name="ivysettings.xml" value="${basedir}/ivysettings.xml"/>

    <property name="mvnrepo" value="https://repo1.maven.org/maven2"/>
    <property name="tsk.org" value="/org/apache/maven/maven-ant-tasks/"/>
    <property name="ant-task.version" value="2.1.3"/>
    <property name="ant_task_repo_url"
        value="${mvnrepo}${tsk.org}${ant-task.version}/maven-ant-tasks-${ant-task.version}.jar"/>
    <property name="ant_task.jar" location="${ivy.lib}/maven-ant-tasks-${ant-task.version}.jar"/>
    
    <available property="clover.present"
               classname="com.cenqua.clover.CloverInstr"
               classpath="${clover.home}/lib/clover.jar"/>

    <available file="${c.src.dir}/Makefile" property="Makefile.present"/>

    <!-- check if clover reports should be generated -->
    <condition property="clover.enabled">
      <and>
        <isset property="run.clover"/>
        <isset property="clover.present"/>
      </and>
    </condition>


    <property name="test.cobertura.output.format" value="html" />
    <property name="coveragereport.dir" value="${build.dir}/cobertura" />

    <!-- rats properties -->
    <property name="rats_url" value="http://arat.googlecode.com/files/rat-lib-all-0.5.1.jar" />
    <property name="rat.reporting.classname" value="rat.Report"/>

        <!-- test patch properties -->
    <property name="scratch.dir" value="${user.home}/tmp"/>
    <property name="svn.cmd" value="svn"/>
    <property name="grep.cmd" value="grep"/>
    <property name="patch.cmd" value="patch"/>
    <property name="make.cmd" value="make"/>
    <property name="test_patch_sh" value="${test.src.dir}/bin/test-patch.sh"/>
    <property name="test_pullrequest_sh" value="${test.src.dir}/bin/test-github-pr.sh"/>

	<!-- jdiff.home property set -->
    <property name="jdiff.home" value="${ivy.jdiff.lib}"/>
    <property name="jdiff.build.dir" value="${build.docs}/jdiff"/>
    <property name="jdiff.xml.dir" value="${lib.dir}/jdiff"/>
    <property name="jdiff.stable" value="3.1.1"/>
    <property name="jdiff.stable.javadoc" 
            value="http://hadoop.apache.org/zookeeper/docs/r${jdiff.stable}/api/"/>

    <!-- eclipse property set -->
    <property name="build.dir.eclipse" value=".eclipse"/>
    <property name="build.dir.eclipse-main-classes" value="${build.dir.eclipse}/classes-main"/>
    <property name="build.dir.eclipse-test-classes" value="${build.dir.eclipse}/classes-test"/>

    <!-- cppunit property set -->
    <property name="cppunit.lib" value="/usr/lib"/>
    <property name="cppunit.m4" value="/usr/share/aclocal"/>

    <!-- packaging property set -->
    <property name="package.release" value="1"/>
    <property name="package.prefix" value="/usr"/>
    <property name="package.conf.dir" value="/etc/zookeeper"/>
    <property name="package.log.dir" value="/var/log/zookeeper"/>
    <property name="package.pid.dir" value="/var/run/zookeeper"/>
    <property name="package.var.dir" value="/var/lib/zookeeper"/>
    <property name="package.share.dir" value="/share/zookeeper"/>
    <property name="package.buildroot" value="/tmp/zookeeper_package_build_${user.name}"/>
    <property name="package.build.dir" value="/tmp/zookeeper_package_build_${user.name}/BUILD"/>

    <!-- artifact publishing property set -->
    <property name="staging_repo_id" value="apache.staging.https"/>
    <property name="wagon-http.version" value="2.4"/>
    <property name="snapshots_repo_id" value="apache.snapshots.https"/>
    <property name="asfrepo" value="https://repository.apache.org"/> 
    <property name="snapshots_repo_url" 
      value="${asfrepo}/content/repositories/snapshots"/> 
    <property name="staging_repo_url"
      value="${asfrepo}/service/local/staging/deploy/maven2"/> 
    <property name="gpg-plugin" 
      value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file"/>
    <property name="deploy-plugin" 
      value="org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy-file"/>
    <property name="main-jar" value="${dist.maven.dir}/${final.name}.jar"/>
    <property name="tests-jar" value="${dist.maven.dir}/${final.name}-tests.jar"/>
    <property name="sources-jar" value="${dist.maven.dir}/${final.name}-sources.jar"/>
    <property name="javadoc-jar" value="${dist.maven.dir}/${final.name}-javadoc.jar"/>

    <!-- ====================================================== -->
    <!-- Dependency versions                                    -->
    <!-- ====================================================== -->
    <property name="slf4j.version" value="1.7.25"/>

    <property name="wagon-http.version" value="2.4"/>
    <property name="maven-ant-tasks.version" value="2.1.3"/>
    <property name="log4j.version" value="1.2.17"/>
    <property name="jline.version" value="0.9.94"/>

    <property name="jdeb.version" value="0.8"/>

    <property name="audience-annotations.version" value="0.5.0" />

    <property name="netty.version" value="3.10.6.Final"/>

    <property name="junit.version" value="4.8.1"/>
    <property name="mockito.version" value="1.8.5"/>
    <property name="checkstyle.version" value="6.1.1"/>
    <property name="commons-collections.version" value="3.2.2"/>
    <property name="commons-io.version" value="2.4"/>

    <property name="apache-directory-server.version" value="2.0.0-M15"/>
    <property name="apache-directory-api.version" value="1.0.0-M20"/>

    <property name="jdiff.version" value="1.0.9"/>
    <property name="xerces.version" value="1.4.4"/>

    <property name="apache-rat-tasks.version" value="0.6"/>
    <property name="commons-lang.version" value="2.4"/>

    <property name="dependency-check-ant.version" value="2.1.0"/>

    <!-- ====================================================== -->
    <!-- Macro definitions                                      -->
    <!-- ====================================================== -->
    <macrodef name="macro_tar" description="Worker Macro for tar">
      <attribute name="param.destfile"/>
      <element name="param.listofitems"/>
      <sequential>
        <tar compression="gzip" longfile="gnu"
             destfile="@{param.destfile}">
          <param.listofitems/>
        </tar>
      </sequential>
    </macrodef>

    <path id="base.classpath">
      <pathelement location="${build.classes}"/>
      <!-- allow the user to override (e.g. if there are local versions) -->
      <fileset dir="${additional.lib.dir}">
          <include name="${additional.lib.dir.includes}" />
          <exclude name="${additional.lib.dir.excludes}" />
      </fileset>
      <fileset dir="${lib.dir}">
          <include name="${lib.dir.includes}" />
          <exclude name="${lib.dir.excludes}" />
      </fileset>
      <fileset dir="${ant.home}/lib">
          <include name="ant.jar" />
      </fileset>
      <pathelement path="${clover.jar}" />
    </path>

    <!-- the normal classpath -->
    <path id="java.classpath">
      <path refid="base.classpath"/>
      <fileset dir="${ivy.lib}">
        <include name="**/*.jar" />
      </fileset>
    </path>

    <path id="test.java.classpath">
      <path refid="base.classpath"/>
      <pathelement location="${test.java.classes}" />
      <fileset dir="${ivy.test.lib}">
        <include name="**/*.jar" />
      </fileset>
    </path>

    <path id="package.classpath">
      <fileset dir="${ivy.package.lib}">
        <include name="**/jdeb*.jar" />
      </fileset>
    </path>

    <!-- ====================================================== -->
    <!-- Generate and compile the Java files                    -->
    <!-- ====================================================== -->
    <target name="init">    
        <mkdir dir="${build.classes}" />

        <mkdir dir="${ivy.lib}"/>
        <mkdir dir="${ivy.package.lib}"/>
        <mkdir dir="${ivy.test.lib}"/>
        <condition property="ivy.jar.exists">
          <available file="${lib.dir}/ivy-${ivy.version}.jar"/>
        </condition>

        <tstamp>
            <format property="build.time" pattern="MM/dd/yyyy HH:mm zz" timezone="GMT"/>
            <format property="year" pattern="yyyy" timezone="GMT"/>
        </tstamp>
    </target>
    
    <target name="jute" depends="init">
        <javac srcdir="${java.src.dir}" destdir="${build.classes}" includeantruntime="false"
            target="${javac.target}" source="${javac.source}"
            includes="org/apache/jute/**" debug="on" classpath="${ivy.lib}/audience-annotations-${audience-annotations.version}.jar" />
    </target>

    <target name="compile_jute_uptodate">
        <uptodate property="juteBuild.notRequired"
                  srcfile="${jute.file}"
                  targetfile="${src_generated.dir}/.generated"/>
    </target>

    <target name="compile_jute" depends="jute,compile_jute_uptodate" unless="juteBuild.notRequired">
        <mkdir dir="${src_generated.dir}" />
        <mkdir dir="${csrc_generated.dir}" />
        <mkdir dir="${csharpsrc_generated.dir}"/>
        <java classname="org.apache.jute.compiler.generated.Rcc" fork="true" dir="${src_generated.dir}">
            <arg value="-l" />
            <arg value="java" />
            <arg value="../../zookeeper.jute" /> 
            <classpath>
                <pathelement path="${build.classes}" />
            </classpath>
        </java>
        
        <java classname="org.apache.jute.compiler.generated.Rcc" fork="true" dir="${csrc_generated.dir}">
            <arg value="-l" />
            <arg value="c" />
            <arg value="../../zookeeper.jute" />
            <classpath>
                <pathelement path="${build.classes}" />
            </classpath>
        </java>
      <java dir="${csharpsrc_generated.dir}" classname="org.apache.jute.compiler.generated.Rcc" fork="true">
        <arg value="-l"/>
        <arg value="csharp"/>
        <arg value="../../../../zookeeper.jute"/>
            <classpath>
                <pathelement path="${build.classes}" />
            </classpath>
        </java>

        <touch file="${src_generated.dir}/.generated"/>
    </target>

    <target name="ver-gen" depends="init">
        <javac srcdir="${java.src.dir}" destdir="${build.classes}" includeantruntime="false"
            target="${javac.target}" source="${javac.source}"
            includes="org/apache/zookeeper/version/util/**" debug="on" />
    </target>
    
    <target name="git-revision" unless="lastRevision">
        <mkdir dir="${revision.dir}" />
        <condition property="shell.name" value="cmd" else="sh">
      	    <os family="windows"/>
        </condition>
        <condition property="revision.cmd.line" 
        	value="/c ${src.dir}\lastRevision.bat" else="${src.dir}/lastRevision.sh">
      	    <os family="windows"/>
        </condition>
        <exec executable="${shell.name}">
           <arg line="${revision.cmd.line} ${revision.dir}${file.separator}${revision.properties}"/>
        </exec>
        <property file="${revision.dir}/${revision.properties}" />
    </target>
    
    <target name="version-info" depends="ver-gen,git-revision">
        <mkdir dir="${src_generated.dir}" />
        <java classname="org.apache.zookeeper.version.util.VerGen" fork="true" 
                dir="${src_generated.dir}">
            <arg value="${version}" />
            <arg value="${lastRevision}" />
            <arg value="${build.time}" />
            <classpath>
                <pathelement path="${build.classes}" />
            </classpath>
        </java>
    </target>
    
    <target name="build-generated" depends="compile_jute,version-info,ivy-retrieve" >
        <javac srcdir="${src_generated.dir}" destdir="${build.classes}" includeantruntime="false"
            target="${javac.target}" source="${javac.source}" debug="on" classpath="${ivy.lib}/audience-annotations-${audience-annotations.version}.jar" />
    </target>
    
    <target name="ivy-download" unless="ivy.jar.exists" depends="init">
      <delete dir="${lib.dir}"
              includes="ivy-*.jar" excludes="ivy-${ivy.version}.jar"/>
      <get src="${ivy.url}/${ivy.version}/ivy-${ivy.version}.jar"
           dest="${lib.dir}/ivy-${ivy.version}.jar" usetimestamp="true"/>
    </target>

    <target name="ivy-taskdef" unless="ivy.initialized">
      <taskdef resource="org/apache/ivy/ant/antlib.xml"
               uri="antlib:org.apache.ivy.ant" classpathref="java.classpath"/>
      <!-- ensure that ivy taskdef is only run once, otw ant will error -->
      <property name="ivy.initialized" value="true"/> 
    </target>

    <target name="ivy-init" depends="ivy-download,ivy-taskdef">
      <ivy:settings id="${ant.project.name}" file="${ivysettings.xml}"/>
    </target>

    <target name="ivy-retrieve" depends="init,ivy-init">
      <ivy:retrieve settingsRef="${ant.project.name}" conf="default"
                    pattern="${ivy.lib}/[artifact]-[revision].[ext]"/>
    </target>

    <target name="ivy-retrieve-test" depends="init,ivy-init">
      <ivy:retrieve settingsRef="${ant.project.name}" conf="test"
                    pattern="${ivy.test.lib}/[artifact]-[revision].[ext]"/>
    </target>

    <target name="ivy-retrieve-package" depends="init,ivy-init">
      <ivy:retrieve settingsRef="${ant.project.name}" conf="package"
                    pattern="${ivy.package.lib}/[artifact]-[revision].[ext]"/>
    </target>

    <target name="ivy-retrieve-jdiff" depends="init,ivy-init">
      <mkdir dir="${ivy.jdiff.lib}"/>
      <ivy:retrieve settingsRef="${ant.project.name}" conf="jdiff"
                    pattern="${ivy.jdiff.lib}/[artifact]-[revision].[ext]"/>
    </target>

    <target name="ivy-retrieve-releaseaudit" depends="init,ivy-init">
      <ivy:retrieve settingsRef="${ant.project.name}" conf="releaseaudit"
                    pattern="${ivy.releaseaudit.lib}/[artifact]-[revision].[ext]"/>
      <ivy:cachepath pathid="releaseaudit-classpath" conf="releaseaudit"/>
    </target>

    <target name="ivy-retrieve-owasp" depends="init,ivy-init">
        <ivy:retrieve settingsRef="${ant.project.name}" conf="owasp"
                      pattern="${ivy.owasp.lib}/[artifact]-[revision].[ext]"/>
        <ivy:cachepath pathid="owasp-classpath" conf="owasp"/>
    </target>

    <target name="ivy-retrieve-mvn-ant-task" depends="init,ivy-init">
      <ivy:retrieve settingsRef="${ant.project.name}" conf="mvn-ant-task"
                    pattern="${ivy.lib}/[artifact]-[revision].[ext]"/>
      <ivy:cachepath pathid="mvn-ant-task-classpath" conf="mvn-ant-task"/>
    </target>

    <target name="dependency-report" depends="init,ivy-init">
        <ivy:resolve conf="*"/>
        <ivy:report conf="*" todir="${build.dir}/dependency-report"/>
    </target>

    <target name="compile" depends="ivy-retrieve,clover,build-generated">
        <javac srcdir="${java.src.dir}" destdir="${build.classes}" includeantruntime="false"
               target="${javac.target}" source="${javac.source}" debug="on">
            <classpath refid="java.classpath"/>
            <compilerarg value="-Xlint:all"/>
            <compilerarg value="-Xlint:-path"/>
        </javac>
    </target>

    <target name="compile-test" depends="ivy-retrieve-test,compile">
      <mkdir dir="${test.java.classes}"/>
      <javac srcdir="${test.src.dir}" destdir="${test.java.classes}" includeantruntime="false"
             target="${javac.target}" source="${javac.source}" debug="on">
        <classpath refid="test.java.classpath"/>
      </javac>
      <javac srcdir="${systest.src.dir}" destdir="${test.java.classes}" includeantruntime="false"
             target="${javac.target}" source="${javac.source}" debug="on">
        <classpath refid="test.java.classpath"/>
      </javac>
    </target>

    <target name="compile-native" depends="compile_jute" description="Make C binding">
      <exec executable="autoreconf" dir="${c.src.dir}" searchpath="yes"
            failonerror="yes">
        <arg value="-if"/>
        <env key="ACLOCAL" value="aclocal -I ${cppunit.m4}"/>
      </exec>
      <mkdir dir="${build.dir}/c" />
      <exec executable="${c.src.dir}/configure" dir="${build.dir}/c"
            failonerror="yes">
        <env key="base_dir" value="${basedir}"/>
        <env key="CALLER" value="ANT"/>
        <arg value="--prefix=${build.dir}/c/build/${package.prefix}"/>
      </exec>
      <property name="c.build" value="${build.dir}/c/build"/>
      <exec dir="${build.dir}/c" executable="make" failonerror="true">
        <arg value="install"/>
        <env key="LD_LIBRARY_PATH" value="${env.LD_LIBRARY_PATH};${c.build}"/>
        <env key="PATH" path="${env.PATH};${c.src.dir};"/>
        <env key="CALLER" value="ANT"/>
        <env key="base_dir" value="${basedir}"/>
      </exec>
    </target>

    <!-- ====================================================== -->
    <!-- Documentation                                          -->
    <!-- ====================================================== -->
    <target name="docs" depends="forrest.check" description="Generate forrest-based documentation. To use, specify -Dforrest.home=&lt;base of Apache Forrest installation&gt; on the command line." if="forrest.home">
      <condition property="forrest.exec" value="forrest.bat" else="forrest">
      	<os family="windows"/>
      </condition>
      <exec dir="${docs.src}" executable="${forrest.home}/bin/${forrest.exec}"
            failonerror="true">
      </exec>
      <copy todir="${docs.dir}">
        <fileset dir="${docs.src}/build/site/" />
      </copy>
      <style basedir="${conf.dir}" destdir="${docs.dir}"
             includes="zookeeper-default.xml" style="conf/configuration.xsl"/>
    </target>

    <target name="forrest.check" unless="forrest.home">
      <fail message="'forrest.home' is not defined. Please pass -Dforrest.home=&lt;base of Apache Forrest installation&gt; to Ant on the command-line." />
    </target>

    <!-- Javadoc -->
    <target name="javadoc-dev" depends="jar"
            description="Generate javadoc for zookeeper developers">
      <mkdir dir="${build.javadoc.dev}"/>
      <javadoc
         overview="${java.src.dir}/overview.html"
         packagenames="org.apache.zookeeper.*"
         destdir="${build.javadoc.dev}"
         author="true"
         version="true"
         use="true"
         windowtitle="${Name} ${version} API"
         doctitle="${Name} ${version} API"
         bottom="Copyright &amp;copy; ${year} The Apache Software Foundation"
         >
    	<packageset dir="${java.src.dir}">
          <include name="org/apache/**"/>
          <exclude name="org/apache/jute/**"/>
    	</packageset>
    	<packageset dir="${src_generated.dir}"/>
        <link href="${javadoc.link.java}"/>
        <classpath refid="java.classpath"/>
      </javadoc>
    </target>	

    <target name="javadoc" depends="jar" description="Generate javadoc">
      <mkdir dir="${build.javadoc}"/>
      <javadoc
         overview="${java.src.dir}/overview.html"
         packagenames="org.apache.zookeeper.*"
         destdir="${build.javadoc}"
         author="true"
         version="true"
         use="true"
         Public="yes"
         windowtitle="${Name} ${version} API"
         doctitle="${Name} ${version} API"
         bottom="Copyright &amp;copy; ${year} The Apache Software Foundation"
         doclet="org.apache.yetus.audience.tools.IncludePublicAnnotationsStandardDoclet"
         docletpath="${ivy.lib}/audience-annotations-${audience-annotations.version}.jar"
         >

        <fileset dir="${java.src.dir}">
          <include name="org/apache/zookeeper/server/quorum/QuorumPeerMain.java"/>
          <include name="org/apache/zookeeper/server/ZooKeeperServerMain.java"/>
          <include name="org/apache/zookeeper/server/LogFormatter.java"/>
          <include name="org/apache/zookeeper/server/PurgeTxnLog.java"/>
          <include name="org/apache/zookeeper/server/SnapshotFormatter.java"/>
          <include name="org/apache/zookeeper/server/upgrade/UpgradeMain.java"/>
        </fileset>
    	<packageset dir="${java.src.dir}">
          <include name="org/apache/**"/>
          <exclude name="org/apache/zookeeper/server/**"/>
    	</packageset>
    	<packageset dir="${src_generated.dir}">
          <include name="org/apache/**"/>
          <exclude name="org/apache/zookeeper/proto"/>
          <exclude name="org/apache/zookeeper/txn"/>
          <exclude name="org/apache/zookeeper/version"/>
          <exclude name="org/apache/zookeeper/server/**"/>
    	</packageset>
        <link href="${javadoc.link.java}"/>
        <classpath>
		<fileset dir="${basedir}">
			<include name="${jar.name}"/>
		</fileset> 
        <path refid="java.classpath"/>
	</classpath>
      </javadoc>
    </target>	

    <!-- ====================================================== -->
    <!-- Make zookeeper.jar                                     -->
    <!-- ====================================================== -->
    <target name="jar" depends="compile">
        <java classname="org.apache.zookeeper.Version" fork="true"
              outputproperty="revision" errorproperty="revision.error" failonerror="true">
            <arg value="--revision" />
            <classpath>
                <pathelement path="${build.classes}" />
                <pathelement path="${clover.jar}" />
            </classpath>
        </java>
        <exec executable="hostname" outputproperty="host.name"/>
        <jar jarfile="${build.dir}/${final.name}.jar">
            <fileset file="LICENSE.txt" />
            <fileset dir="${build.classes}" excludes="**/.generated"/>
            <fileset dir="${java.src.dir}"/>
            <fileset dir="${src_generated.dir}" excludes="**/.generated"/>
            <manifest>
                <attribute name="Main-Class" value="org.apache.zookeeper.server.quorum.QuorumPeerMain" />
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Built-At" value="${build.time}"/>
                <attribute name="Built-On" value="${host.name}" />
                <attribute name="Implementation-Title" value="org.apache.zookeeper"/>
                <attribute name="Implementation-Version" value="${revision}"/> 
                <attribute name="Implementation-Vendor" value="The Apache Software Foundation"/>
            	
            	<!-- The following are OSGi manifest headers -->
            	<!-- currently hardcoded, when things get more complicated we could use BND 
            	http://www.aqute.biz/Code/Bnd to generate them -->
                <attribute name="Bundle-Vendor" value="The Apache Software Foundation"/>
                <attribute name="Bundle-Name" value="ZooKeeper Bundle"/>
                <attribute name="Bundle-SymbolicName" value="org.apache.hadoop.zookeeper"/>
                <attribute name="Bundle-ManifestVersion" value="2"/>
                <attribute name="Bundle-Version" value="${version}"/>
                <attribute name="Bundle-License" value="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
                <attribute name="Bundle-DocURL" value="http://hadoop.apache.org/zookeeper"/>
                <attribute name="Import-Package" value='javax.management;resolution:=optional,javax.security.auth.callback,javax.security.auth.login,javax.security.sasl,org.slf4j;version="[1.6,2)",org.jboss.netty.buffer;resolution:=optional;version="[3.2,4)",org.jboss.netty.channel;resolution:=optional;version="[3.2,4)",org.jboss.netty.channel.group;resolution:=optional;version="[3.2,4)",org.jboss.netty.channel.socket.nio;resolution:=optional;version="[3.2,4)",org.osgi.framework;resolution:=optional;version="[1.5,2)",org.osgi.util.tracker;resolution:=optional;version="[1.4,2)",org.ietf.jgss'/>
                <attribute name="Export-Package" value='org.apache.zookeeper;version="${version}",org.apache.zookeeper.client;version="${version}",org.apache.zookeeper.data;version="${version}",org.apache.zookeeper.version;version="${version}",org.apache.zookeeper.server;version="${version}",org.apache.zookeeper.server.auth;version="${version}",org.apache.zookeeper.server.persistence;version="${version}",org.apache.zookeeper.server.quorum;version="${version}",org.apache.zookeeper.common;version="${version}"'/>
            </manifest>
        </jar>
    </target>
    
    <!-- ====================================================== -->
    <!-- Make zookeeper-bin.jar                                 -->
    <!-- ====================================================== -->
    <target name="bin-jar" depends="compile">
        <java classname="org.apache.zookeeper.Version" fork="true"
              outputproperty="revision" failonerror="true">
            <arg value="--revision" />
            <classpath>
                <pathelement path="${build.classes}" />
                <pathelement path="${clover.jar}" />
            </classpath>
        </java>
        <exec executable="hostname" outputproperty="host.name"/>
        <jar jarfile="${build.dir}/${final.name}-bin.jar">
            <fileset file="LICENSE.txt" />
            <fileset dir="${build.classes}" excludes="**/.generated"/>
            <manifest>
                <attribute name="Main-Class" value="org.apache.zookeeper.server.quorum.QuorumPeerMain" />
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Built-At" value="${build.time}"/>
                <attribute name="Built-On" value="${host.name}" />
                <attribute name="Implementation-Title" value="org.apache.zookeeper"/>
                <attribute name="Implementation-Version" value="${revision}"/> 
                <attribute name="Implementation-Vendor" value="The Apache Software Foundation"/>
            	
            	<!-- The following are OSGi manifest headers -->
            	<!-- currently hardcoded, when things get more complicated we could use BND 
            	http://www.aqute.biz/Code/Bnd to generate them -->
                <attribute name="Bundle-Vendor" value="The Apache Software Foundation"/>
                <attribute name="Bundle-Name" value="ZooKeeper Bundle"/>
                <attribute name="Bundle-SymbolicName" value="org.apache.hadoop.zookeeper"/>
                <attribute name="Bundle-ManifestVersion" value="2"/>
                <attribute name="Bundle-Version" value="${version}"/>
                <attribute name="Bundle-License" value="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
                <attribute name="Bundle-DocURL" value="http://hadoop.apache.org/zookeeper"/>
                <attribute name="Import-Package" value='javax.management;resolution:=optional,javax.security.auth.callback,javax.security.auth.login,javax.security.sasl,org.slf4j;version="[1.6,2)",org.jboss.netty.buffer;resolution:=optional;version="[3.2,4)",org.jboss.netty.channel;resolution:=optional;version="[3.2,4)",org.jboss.netty.channel.group;resolution:=optional;version="[3.2,4)",org.jboss.netty.channel.socket.nio;resolution:=optional;version="[3.2,4)",org.osgi.framework;resolution:=optional;version="[1.5,2)",org.osgi.util.tracker;resolution:=optional;version="[1.4,2)",org.ietf.jgss'/>
                <attribute name="Export-Package" value='org.apache.zookeeper;version="${version}",org.apache.zookeeper.client;version="${version}",org.apache.zookeeper.data;version="${version}",org.apache.zookeeper.version;version="${version}",org.apache.zookeeper.server;version="${version}",org.apache.zookeeper.server.auth;version="${version}",org.apache.zookeeper.server.persistence;version="${version}",org.apache.zookeeper.server.quorum;version="${version}",org.apache.zookeeper.common;version="${version}"'/>
            </manifest>
        </jar>
    </target>

    <!-- ====================================================== -->
    <!-- Make zookeeper-sources.jar                                 -->
    <!-- ====================================================== -->
    <target name="src-jar" depends="build-generated">
        <jar jarfile="${build.dir}/${final.name}-sources.jar">
            <fileset file="LICENSE.txt" />
            <fileset dir="${java.src.dir}"/>
            <fileset dir="${src_generated.dir}" excludes="**/.generated"/>
            <manifest>
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Built-At" value="${build.time}"/>
                <attribute name="Built-On" value="${host.name}" />
                <attribute name="Implementation-Title" value="org.apache.zookeeper"/>
                <attribute name="Implementation-Version" value="${revision}"/> 
                <attribute name="Implementation-Vendor" value="The Apache Software Foundation"/>
            </manifest>
        </jar>
    </target>

	<!-- ====================================================== -->
    <!-- Make zookeeper-javadoc.jar                                 -->
    <!-- ====================================================== -->
    <target name="javadoc-jar" depends="javadoc">
        <jar jarfile="${build.dir}/${final.name}-javadoc.jar">
            <fileset file="LICENSE.txt" />
            <fileset dir="${build.javadoc}"/>
            <manifest>
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Built-At" value="${build.time}"/>
                <attribute name="Built-On" value="${host.name}" />
                <attribute name="Implementation-Title" value="org.apache.zookeeper"/>
                <attribute name="Implementation-Version" value="${revision}"/> 
                <attribute name="Implementation-Vendor" value="The Apache Software Foundation"/>
            </manifest>
        </jar>
    </target>

    <!-- ====================================================== -->
    <!-- Make zookeeper-test.jar                                -->
    <!-- ====================================================== -->
    <target name="test-jar" depends="compile-test">
        <jar jarfile="${build.dir}/${final.name}-test.jar">
            <fileset file="LICENSE.txt" />
            <fileset dir="${test.java.classes}"/>
            <manifest>
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Built-At" value="${build.time}"/>
                <attribute name="Built-On" value="${host.name}" />
                <attribute name="Implementation-Title" value="org.apache.zookeeper"/>
                <attribute name="Implementation-Version" value="${revision}"/> 
                <attribute name="Implementation-Vendor" value="The Apache Software Foundation"/>
            </manifest>
        </jar>
    </target>

	<!-- ================================================================== -->
    <!-- D I S T R I B U T I O N                                            -->
    <!-- ================================================================== -->
    <!--                                                                    -->
    <!-- ================================================================== -->
    <target name="package" 
            depends="jar,bin-jar,src-jar,javadoc-jar,test-jar,api-report,create-cppunit-configure,compile-test"
            description="Build distribution">
      <mkdir dir="${dist.dir}"/>
      <mkdir dir="${dist.dir}/lib"/>
      <mkdir dir="${dist.dir}/contrib"/>
      <mkdir dir="${dist.dir}/recipes"/>
      <mkdir dir="${dist.dir}/bin"/>
      <mkdir dir="${dist.dir}/docs"/>
      <mkdir dir="${dist.dir}/docs/jdiff"/>
      <mkdir dir="${dist.dir}/docs/api"/>

      <copy todir="${dist.dir}/lib" includeEmptyDirs="false">
        <fileset dir="${lib.dir}">
          <exclude name="**/ivy*.jar" />
        </fileset>
        <fileset dir="${ivy.lib}"/>
      </copy>

      <subant target="package">
        <!--Pass down the version in case its needed again and the target
            distribution directory so contribs know where to install to.-->
        <property name="version" value="${version}"/>
        <property name="dist.dir" value="${dist.dir}"/>
        <property name="package.share" value=""/>
        <fileset file="${contrib.dir}/build.xml"/>
        <fileset file="${recipes.dir}/build.xml"/>
      </subant>  	

      <copy todir="${dist.dir}"> 
        <fileset file="${build.dir}/${final.name}.jar"/>
      </copy>

      <checksum file="${dist.dir}/${final.name}.jar" algorithm="md5"/>
      <checksum file="${dist.dir}/${final.name}.jar" algorithm="sha1"/>

      <mkdir dir="${dist.maven.dir}"/>

      <copy file="${build.dir}/${final.name}-bin.jar"
            tofile="${dist.maven.dir}/${final.name}.jar"/> 
      <copy todir="${dist.maven.dir}"> 
        <fileset file="${build.dir}/${final.name}-sources.jar"/>
        <fileset file="${build.dir}/${final.name}-javadoc.jar"/>
      </copy>

      <checksum file="${dist.maven.dir}/${final.name}.jar" algorithm="md5"/>
      <checksum file="${dist.maven.dir}/${final.name}.jar" algorithm="sha1"/>
      <checksum file="${dist.maven.dir}/${final.name}-sources.jar" algorithm="md5"/>
      <checksum file="${dist.maven.dir}/${final.name}-sources.jar" algorithm="sha1"/>
      <checksum file="${dist.maven.dir}/${final.name}-javadoc.jar" algorithm="md5"/>
      <checksum file="${dist.maven.dir}/${final.name}-javadoc.jar" algorithm="sha1"/>

      <ivy:makepom settingsRef="${ant.project.name}" ivyfile="${basedir}/ivy.xml"
                   pomfile="${dist.maven.dir}/${final.name}.pom"
                   templatefile="${basedir}/src/pom.template">
        <mapping conf="default" scope="compile"/>
        <mapping conf="test" scope="test"/>
      </ivy:makepom>
      <checksum file="${dist.maven.dir}/${final.name}.pom" algorithm="md5"/>
      <checksum file="${dist.maven.dir}/${final.name}.pom" algorithm="sha1"/>

      <copy file="${build.dir}/${final.name}-test.jar"
            tofile="${dist.maven.dir}/${final.name}-tests.jar"/> 
      <checksum file="${dist.maven.dir}/${final.name}-tests.jar" algorithm="sha1"/>
      <checksum file="${dist.maven.dir}/${final.name}-tests.jar" algorithm="md5"/>

      <copy todir="${dist.dir}/bin">
        <fileset dir="bin"/>
      </copy>

      <copy todir="${dist.dir}/conf">
        <fileset dir="${conf.dir}" excludes="**/*.template"/>
      </copy>

      <copy todir="${dist.dir}/docs">
        <fileset dir="${docs.dir}" />
        <fileset dir="${build.docs}"/>
      </copy>

      <copy todir="${dist.dir}">
        <fileset file="CHANGES.txt"/>
        <fileset file="README.md"/>
        <fileset file="README_packaging.txt"/>
        <fileset file="build.xml"/>
        <fileset file="ivy.xml"/>
        <fileset file="ivysettings.xml"/>
        <fileset file="src/NOTICE.txt"/>
        <fileset file="src/LICENSE.txt"/>
      </copy>

      <copy todir="${dist.dir}/src" includeEmptyDirs="true">
        <fileset dir="src" excludes="**/*.template **/docs/build/**/* **/ivy*.jar"/>
        <fileset file="src/pom.template"/>
      </copy>
  	  
      <chmod perm="ugo+x" type="file" parallel="false">
        <fileset dir="${dist.dir}/bin"/>
        <fileset dir="${dist.dir}/src/contrib/">
          <include name="*/bin/*" />
        </fileset>
      </chmod>
    </target>

    <target name="bin-package"
            depends="jar,bin-jar,src-jar,javadoc-jar,test-jar,api-report,create-cppunit-configure,compile-test"
            description="Build binary distribution">
      <delete dir="${dist.dir}"/>
      <mkdir dir="${dist.dir}"/>
      <mkdir dir="${dist.dir}/lib"/>
      <mkdir dir="${dist.dir}/libexec"/>
      <mkdir dir="${dist.dir}/share/zookeeper/contrib"/>
      <mkdir dir="${dist.dir}/share/zookeeper/recipes"/>
      <mkdir dir="${dist.dir}/bin"/>
      <mkdir dir="${dist.dir}/docs"/>
      <mkdir dir="${dist.dir}/docs/jdiff"/>
      <mkdir dir="${dist.dir}/docs/api"/>
      <mkdir dir="${dist.dir}/share/zookeeper/templates/conf"/>
      <mkdir dir="${dist.dir}/sbin"/>

      <copy todir="${dist.dir}/share/zookeeper" includeEmptyDirs="false">
        <fileset dir="${lib.dir}">
          <exclude name="**/ivy*.jar" />
          <exclude name="**/deb*.jar" />
        </fileset>
        <fileset dir="${ivy.lib}"/>
      </copy>

      <copy file="${basedir}/src/packages/update-zookeeper-env.sh" tofile="${dist.dir}/sbin/update-zookeeper-env.sh"/>
      <subant target="package">
        <!--Pass down the version in case its needed again and the target
            distribution directory so contribs know where to install to.-->
        <property name="version" value="${version}"/>
        <property name="dist.dir" value="${dist.dir}"/>
        <property name="package.share" value="/share/zookeeper"/>
        <fileset file="${contrib.dir}/build.xml"/>
        <fileset file="${recipes.dir}/build.xml"/>
      </subant>

      <copy todir="${dist.dir}/share/zookeeper"> 
        <fileset file="${build.dir}/${final.name}.jar"/>
      </copy>

      <checksum file="${dist.dir}/share/zookeeper/${final.name}.jar" algorithm="md5"/>
      <checksum file="${dist.dir}/share/zookeeper/${final.name}.jar" algorithm="sha1"/>

      <mkdir dir="${dist.maven.dir}"/>

      <copy file="${build.dir}/${final.name}-bin.jar"
            tofile="${dist.maven.dir}/${final.name}.jar"/> 
      <copy todir="${dist.maven.dir}"> 
        <fileset file="${build.dir}/${final.name}-sources.jar"/>
        <fileset file="${build.dir}/${final.name}-javadoc.jar"/>
      </copy>
      
      <checksum file="${dist.maven.dir}/${final.name}.jar" algorithm="md5"/>
      <checksum file="${dist.maven.dir}/${final.name}.jar" algorithm="sha1"/>
      <checksum file="${dist.maven.dir}/${final.name}-sources.jar" algorithm="md5"/>
      <checksum file="${dist.maven.dir}/${final.name}-sources.jar" algorithm="sha1"/>
      <checksum file="${dist.maven.dir}/${final.name}-javadoc.jar" algorithm="md5"/>
      <checksum file="${dist.maven.dir}/${final.name}-javadoc.jar" algorithm="sha1"/>

      <ivy:makepom settingsRef="${ant.project.name}" ivyfile="${basedir}/ivy.xml"
                   pomfile="${dist.maven.dir}/${name}.pom"
                   templatefile="${basedir}/src/pom.template">
        <mapping conf="default" scope="compile"/>
        <mapping conf="test" scope="test"/>
      </ivy:makepom>
      <checksum file="${dist.maven.dir}/${name}.pom" algorithm="md5"/>
      <checksum file="${dist.maven.dir}/${name}.pom" algorithm="sha1"/>
      
      
      <copy file="${build.dir}/${final.name}-test.jar"
            tofile="${dist.maven.dir}/${final.name}-tests.jar"/>
      <checksum file="${dist.maven.dir}/${final.name}-tests.jar" algorithm="sha1"/>
      <checksum file="${dist.maven.dir}/${final.name}-tests.jar" algorithm="md5"/>


      <copy todir="${dist.dir}/bin">
        <fileset dir="bin" includes="zkCli*"/>
      </copy>

      <copy todir="${dist.dir}/libexec">
        <fileset dir="bin" includes="zkEnv*"/>
      </copy>

      <copy todir="${dist.dir}/sbin">
        <fileset dir="bin" includes="zkServer*"/>
      </copy>

      <copy todir="${dist.dir}/conf">
        <fileset dir="${conf.dir}" excludes="**/*.template"/>
      </copy>

      <copy todir="${dist.dir}/docs">
        <fileset dir="${docs.dir}" />
        <fileset dir="${build.docs}"/>
      </copy>

      <copy todir="${dist.dir}">
        <fileset file="CHANGES.txt"/>
        <fileset file="README.md"/>
        <fileset file="README_packaging.txt"/>
        <fileset file="build.xml"/>
        <fileset file="ivy.xml"/>
        <fileset file="ivysettings.xml"/>
        <fileset file="src/NOTICE.txt"/>
        <fileset file="src/LICENSE.txt"/>
      </copy>

      <copy todir="${dist.dir}/src" includeEmptyDirs="true">
        <fileset dir="src" excludes="**/*.template **/docs/build/**/* **/ivy*.jar"/>
        <fileset file="src/pom.template"/>
      </copy>

      <copy todir="${dist.dir}/${package.share.dir}/templates/conf">
        <fileset dir="src/packages/templates/conf"/>
      </copy>

      <copy file="${basedir}/conf/zoo_sample.cfg" tofile="${dist.dir}/${package.share.dir}/templates/conf/zoo.cfg" />
      <replace file="${dist.dir}/${package.share.dir}/templates/conf/zoo.cfg">
        <replacetoken>/tmp/zookeeper</replacetoken>
        <replacevalue>${VAR_DIR}/data</replacevalue>
      </replace>
  	  
      <chmod perm="ugo+x" type="file" parallel="false">
        <fileset dir="${dist.dir}/bin"/>
        <fileset dir="${dist.dir}/sbin"/>
        <fileset dir="${dist.dir}/src/contrib/">
          <include name="*/bin/*" />
        </fileset>
      </chmod>
    </target>

    <!-- ================================================================== -->
    <!-- Make release tarball                                               -->
    <!-- ================================================================== -->
    <target name="tar" depends="package" description="Make release tarball">
      <macro_tar param.destfile="${build.dir}/${final.name}.tar.gz">
        <param.listofitems>
          <!-- it's unfortunate that the binaries have to be duplicated
               however that's the only way ant currently supports afaik -->
          <tarfileset dir="${build.dir}" mode="664">
            <exclude name="${final.name}/bin/*" />
            <exclude name="${final.name}/contrib/*/bin/*" />

            <exclude name="${final.name}/**/compile" />
            <exclude name="${final.name}/**/config.guess" />
            <exclude name="${final.name}/**/config.sub" />
            <exclude name="${final.name}/**/configure" />
            <exclude name="${final.name}/**/depcomp" />
            <exclude name="${final.name}/**/install-sh" />
            <exclude name="${final.name}/**/ltmain.sh" />
            <exclude name="${final.name}/**/missing" />

            <exclude name="${final.name}/**/*.sh" />

            <include name="${final.name}/**" />
          </tarfileset>
          <tarfileset dir="${build.dir}" mode="755">
            <!-- be sure to add to exclude list above if you add here -->
            <include name="${final.name}/bin/*" />
            <include name="${final.name}/contrib/*/bin/*" />

            <!-- autotools related commands -->
            <include name="${final.name}/**/compile" />
            <include name="${final.name}/**/config.guess" />
            <include name="${final.name}/**/config.sub" />
            <include name="${final.name}/**/configure" />
            <include name="${final.name}/**/depcomp" />
            <include name="${final.name}/**/install-sh" />
            <include name="${final.name}/**/ltmain.sh" />
            <include name="${final.name}/**/missing" />

            <!-- any shell scripts -->
            <include name="${final.name}/**/*.sh" />
          </tarfileset>
        </param.listofitems>
      </macro_tar>
    </target>

    <target name="binary" depends="bin-package"
            description="Make tarball without source and documentation">
      <macro_tar param.destfile="${build.dir}/${final.name}-bin.tar.gz">
        <param.listofitems>
          <tarfileset dir="${build.dir}" mode="664">
            <include name="${final.name}/src/c/**" />
            <exclude name="${final.name}/src/c/generated/**" />
          </tarfileset>
          <tarfileset dir="${build.dir}" mode="664">
            <exclude name="${final.name}/bin/*" />
            <exclude name="${final.name}/src/**" />
            <exclude name="${final.name}/docs/**" />
            <include name="${final.name}/**" />
          </tarfileset>
          <tarfileset dir="${build.dir}" mode="755">
            <include name="${final.name}/bin/*" />
          </tarfileset>
        </param.listofitems>
      </macro_tar>
    </target>

    <target name="package-native" depends="compile-native, bin-package" description="Make C binding tarball">
      <!-- For Unix platforms only, use OS native tar to preserve symlinks -->
      <exec executable="tar" dir="${build.dir}/c/build">
        <arg value="cfzv" />
        <arg value="${build.dir}/${final.name}-lib.tar.gz" />
        <arg value="." />
      </exec>
      <subant target="package">
        <!--Pass down the version in case its needed again and the target
            distribution directory so contribs know where to install to.-->
        <property name="version" value="${version}"/>
        <property name="dist.dir" value="${dist.dir}"/>
        <fileset file="${contrib.dir}/build.xml"/>
        <fileset file="${recipes.dir}/build.xml"/>
      </subant>
    </target>

    <target name="rpm" depends="package-native, tar" description="Make rpm package">
      <!--The RPM spec file format disallows hyphen in the version.  Replace with
          underscore to support version tags like -alpha or -SNAPSHOT.-->
      <loadresource property="rpm.version">
        <propertyresource name="version" />
        <filterchain>
          <tokenfilter>
            <replacestring from="-" to="_" />
          </tokenfilter>
        </filterchain>
      </loadresource>
      <subant target="rpm">
        <!--Pass down the version in case its needed again and the target
            distribution directory so contribs know where to install to.-->
        <property name="version" value="${version}"/>
        <property name="rpm.version" value="${rpm.version}"/>
        <property name="dist.dir" value="${dist.dir}"/>
        <fileset file="${contrib.dir}/build.xml"/>
        <fileset file="${recipes.dir}/build.xml"/>
      </subant>  	
      <path id="c.lib">
        <fileset dir="${build.dir}">
          <include name="${final.name}-lib.tar.gz"/>
        </fileset>
      </path>
      <property name="c.lib" refid="c.lib"/>
      <mkdir dir="${package.buildroot}/BUILD" />
      <mkdir dir="${package.buildroot}/RPMS" />
      <mkdir dir="${package.buildroot}/SRPMS" />
      <mkdir dir="${package.buildroot}/SOURCES" />
      <mkdir dir="${package.buildroot}/SPECS" />
      <copy todir="${package.buildroot}/SOURCES">
        <fileset dir="${build.dir}">
          <include name="${final.name}.tar.gz" />
        </fileset>
        <fileset file="${c.lib}" />
      </copy>
      <copy file="${src.dir}/packages/rpm/spec/zookeeper.spec" todir="${package.buildroot}/SPECS">
        <filterchain>
          <replacetokens>
            <token key="final.name" value="${final.name}" />
            <token key="version" value="${rpm.version}" />
            <token key="package.release" value="${package.release}" />
            <token key="package.build.dir" value="${package.build.dir}" />
            <token key="package.prefix" value="${package.prefix}" />
            <token key="package.conf.dir" value="${package.conf.dir}" />
            <token key="package.log.dir" value="${package.log.dir}" />
            <token key="package.pid.dir" value="${package.pid.dir}" />
            <token key="package.var.dir" value="${package.var.dir}" />
            <token key="c.lib" value="${c.lib}" />
          </replacetokens>
        </filterchain>
      </copy>
      <rpm specFile="zookeeper.spec" command="-ba --buildroot=${package.buildroot}/BUILD" topDir="${package.buildroot}" cleanBuildDir="true" failOnError="true"
/>
      <copy todir="${build.dir}/" flatten="true">
        <fileset dir="${package.buildroot}/RPMS">
          <include name="**/${name}*.rpm" />
        </fileset>
        <fileset dir="${package.buildroot}/SRPMS">
          <include name="**/${name}*.rpm" />
        </fileset>
      </copy>
      <delete dir="${package.buildroot}" quiet="true" verbose="false"/>
    </target>

    <target name="deb" depends="ivy-retrieve-package, package-native, tar" description="Make deb package">
      <subant target="deb">
        <!--Pass down the version in case its needed again and the target
            distribution directory so contribs know where to install to.-->
        <property name="version" value="${version}"/>
        <property name="dist.dir" value="${dist.dir}"/>
        <fileset file="${contrib.dir}/build.xml"/>
        <fileset file="${recipes.dir}/build.xml"/>
      </subant>
      <taskdef name="deb" classname="org.vafer.jdeb.ant.DebAntTask">
        <classpath refid="java.classpath"/>
        <classpath refid="package.classpath"/>
      </taskdef>

      <mkdir dir="${package.build.dir}/zookeeper.control" />
      <copy todir="${package.buildroot}/${package.prefix}">
        <fileset dir="${build.dir}/${final.name}">
          <include name="bin/**" />
          <include name="conf/**" />
          <include name="sbin/**" />
          <include name="share/**" />
        </fileset>
      </copy>
      <copy todir="${package.build.dir}/zookeeper.control">
        <fileset dir="${src.dir}/packages/deb/zookeeper.control">
          <exclude name="control" />
        </fileset>
      </copy>
      <copy file="${src.dir}/packages/deb/zookeeper.control/control" todir="${package.build.dir}/zookeeper.control">
        <filterchain>
          <replacetokens>
            <token key="final.name" value="${final.name}" />
            <token key="version" value="${version}" />
            <token key="package.release" value="${package.release}" />
            <token key="package.build.dir" value="${package.build.dir}" />
            <token key="package.prefix" value="${package.prefix}" />
            <token key="package.conf.dir" value="${package.conf.dir}" />
            <token key="package.log.dir" value="${package.log.dir}" />
            <token key="package.pid.dir" value="${package.pid.dir}" />
            <token key="package.var.dir" value="${package.var.dir}" />
          </replacetokens>
        </filterchain>
      </copy>
      <deb destfile="${package.buildroot}/${name}_${version}-${package.release}_${os.arch}.deb" control="${package.build.dir}/zookeeper.control">
        <tarfileset dir="${build.dir}/${final.name}/share/zookeeper" filemode="644" prefix="${package.prefix}/share/zookeeper">
          <include name="**" />
        </tarfileset>
        <tarfileset dir="${build.dir}/${final.name}/bin" filemode="755" prefix="${package.prefix}/bin">
          <include name="zkCli.sh" />
        </tarfileset>
        <tarfileset dir="${build.dir}/${final.name}/sbin" filemode="755" prefix="${package.prefix}/sbin">
          <include name="**.sh" />
        </tarfileset>
        <tarfileset dir="${build.dir}/${final.name}/libexec" filemode="755" prefix="${package.prefix}/libexec">
          <include name="zkEnv.sh" />
        </tarfileset>
        <tarfileset dir="${build.dir}/c/build/${package.prefix}/include" prefix="${package.prefix}/include">
          <include name="**" />
        </tarfileset> 
        <tarfileset dir="${build.dir}/c/build/${package.prefix}/lib" filemode="755" prefix="${package.prefix}/lib">
          <include name="**" />
        </tarfileset> 
        <tarfileset dir="${build.dir}/${final.name}/conf" filemode="644" prefix="${package.conf.dir}">
          <include name="**" />
        </tarfileset>
        <tarfileset dir="${build.dir}/${final.name}/src/packages/deb/init.d" filemode="755" prefix="/etc/init.d">
          <include name="**" />
        </tarfileset>
      </deb>

      <copy todir="${build.dir}/" flatten="true">
        <fileset dir="${package.buildroot}">
          <include name="**/${name}*.deb" />
        </fileset>
      </copy>
      <delete dir="${package.buildroot}" quiet="true" verbose="false"/>

    </target>

    <!-- ====================================================== -->
    <!-- mvn-deploy. Publishing jars to nexus -->
    <!-- ====================================================== -->

    <macrodef name="deploy" description="macro definition for publishing artifacts to nexus snapshots">
      <attribute name="jars" default="${tests-jar},${sources-jar},${javadoc-jar}"/>
      <attribute name="maven-jar" default="${main-jar}"/>
      <attribute name="repo-url" default="${snapshots_repo_url}"/>
      <attribute name="repo-id" default="${snapshots_repo_id}"/>
      <attribute name="profile" default="-P!gpg"/>
      <attribute name="plugin" default="${deploy-plugin}"/>
      <attribute name="attachas" default="tests,sources,javadoc"/>
      <sequential>
	<artifact:mvn>
	  <arg value="@{plugin}"/>
	  <arg value="-Durl=@{repo-url}"/>
	  <arg value="-DrepositoryId=@{repo-id}"/>
	  <arg value="-Dfiles=@{jars}"/>
	  <arg value="-Dfile=@{maven-jar}"/>
	  <arg value="-Dpackaging=jar"/>
	  <arg value="-DpomFile=${dist.maven.dir}/${name}.pom"/>
	  <arg value="-Dclassifiers=@{attachas}"/>
	  <arg value="-Dtype=jar"/>
	  <arg value="-Dtypes=jar,jar,jar"/>
	  <arg value="@{profile}"/>
	</artifact:mvn>
      </sequential>
    </macrodef>

    <target name="mvn-deploy" depends="mvn-taskdef, bin-package, simpledeploy, signanddeploy"
     description="To deploy jar's to a maven repository"/>

    <target name="signanddeploy" if="staging">
      <deploy repo-url="${staging_repo_url}" repo-id="${staging_repo_id}" plugin="${gpg-plugin}" profile="-Pgpg"/>
    </target> 

    <target name="simpledeploy" unless="staging">
      <deploy plugin="${deploy-plugin}"/>
    </target>

    <!-- ====================================================== -->
    <!-- mvn-install. Installing the jar and pom file to .m2    -->
    <!-- ====================================================== -->
     
     <target name="mvn-taskdef" depends="ivy-retrieve-mvn-ant-task">
        <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
        uri="antlib:org.apache.maven.artifact.ant" classpathref="mvn-ant-task-classpath"/>
     </target>

     <target name="mvn-install" depends="bin-package, mvn-taskdef">
       <echo message="${dist.maven.dir}/${final.name}.pom" />
       <echo message="${dist.maven.dir}/${final.name}.jar" />
       <echo message="${dist.maven.dir}/${final.name}-sources.jar" />
       <echo message="${dist.maven.dir}/${final.name}-javadoc.jar" />
       <echo message="${dist.maven.dir}/${final.name}-tests.jar" />
  
       <artifact:pom id="zookeeper-pom" file="${dist.maven.dir}/${name}.pom"/>
       <echo>The version is ${zookeeper-pom.version}</echo>
       <echo message="${dist.maven.dir}/${final.name}.jar" />
     
       <artifact:install file="${dist.maven.dir}/${final.name}.jar">
         <pom refid="zookeeper-pom" />
         <attach file="${dist.maven.dir}/${final.name}.jar" type="jar"/>
         <attach file="${dist.maven.dir}/${final.name}-sources.jar" type="jar" classifier="sources"/>
         <attach file="${dist.maven.dir}/${final.name}-javadoc.jar" type="jar" classifier="javadoc"/>
         <attach file="${dist.maven.dir}/${final.name}-tests.jar" type="jar" classifier="tests"/>
       </artifact:install>
    </target>

    <!-- ====================================================== -->
    <!-- Clean.  Delete the build files, and their directories  -->
    <!-- ====================================================== -->
    <target name="clean" depends="clean-contrib,clean-recipes"
            description="Clean.  Delete the build files, and their directories">
      <delete dir="${build.dir}"/>
      <delete dir="${docs.src}/build"/>
      <delete dir="${src_generated.dir}" />
      <delete dir="${csrc_generated.dir}" />
      <delete dir="${csharpsrc_generated.dir}"/>
      <delete file="${lib.dir}/Null.java"/>
      <delete file="${lib.dir}/rats.jar" />
      <delete file="${jdiff.xml.dir}/${name}_${version}.xml"/>	
      <delete file="${jar.name}" />
      <delete dir="${distribution}"/>
      <delete dir="${revision.dir}"/>
      <delete>
        <fileset dir="${basedir}" includes="*.jar,*.tar.gz"/>
      </delete>
      <delete dir="${package.buildroot}" />
    </target>

    <target name="clean-contrib">
      <subant target="clean">        
        <fileset file="${contrib.dir}/build.xml"/>
      </subant>  	
    </target>

   <target name="clean-recipes">
     <subant target="clean">
       <fileset file="${recipes.dir}/build.xml"/>
     </subant>
   </target>

    <!-- ====================================================== -->
    <!-- Run unit tests                                         -->
    <!-- ====================================================== -->
    <target name="test-init" depends="jar,compile-test">
        <delete dir="${test.log.dir}" />
        <delete dir="${test.tmp.dir}" />
        <delete dir="${test.data.upgrade.dir}" />
        <delete dir="${test.data.invalid.dir}" />
        <delete dir="${test.data.buffersize.dir}" />
        <delete dir="${test.data.kerberos.dir}" />
        <delete dir="${test.data.dir}" />
        <mkdir dir="${test.log.dir}" />
        <mkdir dir="${test.tmp.dir}" />
        <mkdir dir="${test.data.dir}" />
        <mkdir dir="${test.data.upgrade.dir}" />
        <mkdir dir="${test.data.invalid.dir}" />
        <copy todir="${test.data.upgrade.dir}">
            <fileset dir="${basedir}/src/java/test/data/upgrade"/>
        </copy>
        <copy todir="${test.data.invalid.dir}">
            <fileset dir="${basedir}/src/java/test/data/invalidsnap"/>
        </copy>
        <mkdir dir="${test.data.buffersize.dir}" />
        <copy todir="${test.data.buffersize.dir}">
            <fileset dir="${basedir}/src/java/test/data/buffersize"/>
        </copy>
        <mkdir dir="${test.data.kerberos.dir}" />
        <copy todir="${test.data.kerberos.dir}">
            <fileset dir="${basedir}/src/java/test/data/kerberos"/>
        </copy>
    </target>

    <condition property="quicktest">
      <and>
        <equals arg1="${test.quick}" arg2="yes"/>
        <not>
          <isset property="testcase"/>
        </not>
      </and>
    </condition>
    <condition property="fulltest">
      <and>
        <equals arg1="${test.quick}" arg2="no"/>
        <not>
          <isset property="testcase"/>
        </not>
      </and>
    </condition>

    <target name="junit.run">
        <junit showoutput="${test.output}"
               printsummary="${test.junit.printsummary}"
               haltonfailure="${test.junit.haltonfailure}"
               fork="yes"
               forkmode="${test.junit.fork.mode}"
               maxmemory="${test.junit.maxmem}"
               dir="${basedir}" timeout="${test.timeout}"
               errorProperty="tests.failed" failureProperty="tests.failed">
          <sysproperty key="build.test.dir" value="${test.tmp.dir}" />
          <sysproperty key="test.data.dir" value="${test.data.dir}" />
          <sysproperty key="log4j.configuration"
                       value="file:${basedir}/conf/log4j.properties" />
          <!-- superDigest is used by the tests/main code. If this is not set
               as part of starting the jvm there is no guarantee that the static
               initializers in the java code will see this (esp when running
               with junit fork mode set to "once")-->
          <sysproperty key="zookeeper.DigestAuthenticationProvider.superDigest"
                       value="super:D/InIHSb7yEEbrWz8b9l71RjZJU=" />
          <classpath refid="test.java.classpath"/>
          <classpath>
            <pathelement path="${test.java.classes}" />
          </classpath>
          <formatter type="${test.junit.output.format}" />
          <batchtest todir="${test.log.dir}" if="quicktest">
            <fileset dir="${test.src.dir}">
              <include name="**/*${test.category}Test.java"/>
              <exclude name="**/*HammerTest.java"/>
            </fileset>
          </batchtest>
          <batchtest todir="${test.log.dir}" if="fulltest">
            <fileset dir="${test.src.dir}">
              <include name="**/*${test.category}Test.java"/>
            </fileset>
          </batchtest>
          <batchtest todir="${test.log.dir}" if="testcase">
            <fileset dir="${test.src.dir}" includes="**/${testcase}.java"/>
          </batchtest>
        </junit>
        <antcall target="fail.build.on.test.failure"/>
    </target>
    <target name="fail.build.on.test.failure" if="${test.junit.failbuild.ontestfailure}" >
        <fail if="tests.failed">Tests failed!</fail>
    </target>

    <target name="check-cppunit-configure" depends="init" >
      <condition property="need.cppunit.configure">
        <not> <available file="${c.src.dir}/configure"/> </not>
      </condition>
    </target>	

    <target name="check-cppunit-makefile" depends="init" >
    	<condition property="need.cppunit.makefile">
       		<not> <available file="${test.cppunit.dir}/Makefile"/> </not>
    	</condition>
    </target>

    <!--
       1. If we have a Makefile it will handle up-to-date check and also
          regenerate the configure script if missing. (done)
       2. If we don't have a Makefile use the configure script to 
          regenerate it. (done)
       3. If we don't have a Makefile nor a configure script then it's
          last resort and run autoreconf, then configure (done)
      -->

    <target name="create-cppunit-configure" depends="check-cppunit-configure"
            if="need.cppunit.configure">
      <exec executable="autoreconf" dir="${c.src.dir}" searchpath="yes"
            failonerror="yes">
        <arg value="-if"/>
        <env key="ACLOCAL" value="aclocal -I ${cppunit.m4}"/>
      </exec>
    </target>

    <target name="create-cppunit-makefile" depends="check-cppunit-makefile" 
                                           if="need.cppunit.makefile">
      <antcall target="create-cppunit-configure">
        <param name="cppunit" value="true"/>
      </antcall>
    	<mkdir dir="${test.cppunit.dir}"/>
    	<exec executable="${c.src.dir}/configure" dir="${test.cppunit.dir}"
          	failonerror="yes">
                <env key="base_dir" value="${basedir}"/>
                <env key="CALLER" value="ANT"/>
      		<arg value="--prefix=${test.cppunit.dir}"/>
    	</exec>
    </target>

    <target name="call-test-cppunit" description="to execute cppunit tests">
	<antcall target="create-cppunit-makefile"/>
	<antcall target="test-cppunit">
		<param name="cppunit" value="true"/>
	</antcall>
    </target>			


    <target name="test-cppunit"
            depends="compile_jute, jar, create-cppunit-makefile"
            if="cppunit"
		description="to run cppunit test cases">
        <exec dir="${test.cppunit.dir}" executable="make" failonerror="true">
		<env key="LD_LIBRARY_PATH" value="${env.LD_LIBRARY_PATH};${cppunit.lib}"/>
		<env key="PATH" path="${env.PATH};${c.src.dir};"/>
                <env key="CALLER" value="ANT"/>
                <env key="CLOVER_HOME" value="${clover.home}"/>
                <env key="base_dir" value="${basedir}"/>
		<arg line="clean run-check"/>
	</exec>
    </target>
   
    <target name="test-unit-category">
      <property name="test.category" value="Unit"/>
    </target>
    <target name="test-unit" depends="test-init,test-unit-category,junit.run"/>

    <target name="test-func-category">
      <property name="test.category" value="Func"/>
    </target>
    <target name="test-func" depends="test-init,test-func-category,junit.run"/>

    <target name="test-perf-category">
      <property name="test.category" value="Perf"/>
    </target>
    <target name="test-perf" depends="test-init,test-perf-category,junit.run"/>

    <target name="test-category">
      <property name="test.category" value=""/>
    </target>

    <target name="test" description="to run core and contrib tests">
	<antcall target="test-core"/>
	<antcall target="test-contrib"/>
    </target>
 
    <target name="test-contrib" description="to run contrib tests">
	<!-- yet to implement -->
    </target>
    
    <target name="test-core-java" depends="test-init, test-category, junit.run"/> 

    <target name="test-core-cppunit" depends="test-init, test-category, call-test-cppunit"/> 

    <target name="test-core" depends="test-core-java, test-core-cppunit"/> 

    <!-- ====================================================== -->
    <!-- Run optional third-party tool targets                  -->
    <!-- ====================================================== -->

    <!-- clover code coverage -->
    <target name="clover" depends="clover.setup, clover.info" 
            description="Instrument the Unit tests using Clover.  Requires a Clover license and CLOVER_HOME environment variable set appropriately.  To use, specify -Drun.clover=true on the command line."/>

    <target name="clover.setup" if="clover.enabled">
      <taskdef resource="cloverlib.xml" classpath="${clover.jar}"/>
      <mkdir dir="${clover.db.dir}"/>
      <clover-setup initString="${clover.db.dir}/zookeeper_coverage.db">
        <fileset dir="${java.src.dir}"
                 includes="org/apache/zookeeper/**/*"
                 excludes="org/apache/zookeeper/version/**/*"/>
      </clover-setup>
    </target>

    <target name="clover.info" if="run.clover" unless="clover.present">
      <echo>
        Clover not found. Code coverage reports disabled.
      </echo>
    </target>

    <target name="clover.check">
      <fail unless="clover.present">
        ##################################################################
        Clover not found.
        Please make sure clover.jar is in ANT_HOME/lib, or made available
        to Ant using other mechanisms like -lib or CLASSPATH.
        ##################################################################
      </fail>
    </target>

    <target name="generate-clover-reports" depends="clover.check, clover">
      <mkdir dir="${clover.report.dir}"/>
      <taskdef resource="cloverlib.xml" classpath="${clover.jar}"/> 
      
      <clover-report initString="${clover.db.dir}/zookeeper_coverage.db">
        <current outfile="${clover.report.dir}" title="${final.name}">
          <format type="html"/>
        </current>
      </clover-report>
      <clover-report initString="${clover.db.dir}/zookeeper_coverage.db">
        <current outfile="${clover.report.dir}/clover.xml" title="${final.name}">
          <format type="xml"/>
        </current>
      </clover-report>
    </target>

    <!-- Run with 'ant -Dfindbugs.home="path to Findbugs directory" findbugs -->
    <property name="findbugs.home" value="" />
    <target name="findbugs" depends="check-for-findbugs, jar" if="findbugs.present">
        <property name="findbugs.out.dir" value="${test.java.build.dir}/findbugs" />
        <property name="findbugs.exclude.file" value="${config.dir}/findbugsExcludeFile.xml" />
        <property name="findbugs.report.htmlfile" value="${findbugs.out.dir}/zookeeper-findbugs-report.html" />
        <property name="findbugs.report.xmlfile" value="${findbugs.out.dir}/zookeeper-findbugs-report.xml" />
        <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" 
                classpath="${findbugs.home}/lib/findbugs-ant.jar" />
        <mkdir dir="${findbugs.out.dir}" />
        <findbugs home="${findbugs.home}" output="xml:withMessages" excludeFilter="${findbugs.exclude.file}" 
                outputFile="${findbugs.report.xmlfile}" effort="max" jvmargs="-Xmx512M">
            <auxClasspath>
                <fileset dir="${ivy.lib}">
                    <include name="**/*.jar" />
                </fileset>
            </auxClasspath>
            <sourcePath path="${java.src.dir}" />
            <class location="${build.dir}/${final.name}.jar" />
        </findbugs>
        <xslt style="${findbugs.home}/src/xsl/default.xsl" in="${findbugs.report.xmlfile}" 
                out="${findbugs.report.htmlfile}" />
    </target>

    <target name="check-for-findbugs">
        <available property="findbugs.present" file="${findbugs.home}/lib/findbugs.jar" />
    </target>

    <!-- Code coverage -->
    <target name="cobertura-instrument" depends="compile-test">
      <taskdef resource="tasks.properties">
        <classpath>
          <pathelement path="${lib.dir}/cobertura/cobertura.jar" />
          <fileset dir="${lib.dir}/cobertura/lib">
            <include name="*.jar"/>
          </fileset>
          <fileset dir="${lib.dir}">
            <include name="*.jar"/>
          </fileset>
          <fileset dir="${ivy.lib}">
            <include name="**/*.jar" />
          </fileset>
        </classpath>
      </taskdef>

      <cobertura-instrument todir="${build.dir}/cobertura">
        <fileset dir="${build.classes}">
          <include name="org/apache/zookeeper/**/*.class"/>
        </fileset>
      </cobertura-instrument>
    </target>

    <target name="cobertura-test" depends="test-init,cobertura-instrument">
        <junit showoutput="${test.output}" printsummary="yes" haltonfailure="no" fork="yes" 
               maxmemory="${test.junit.maxmem}" dir="${basedir}" timeout="${test.timeout}"
               errorProperty="tests.failed" failureProperty="tests.failed">
            <sysproperty key="build.test.dir" value="${test.tmp.dir}" />
            <sysproperty key="test.data.dir" value="${test.data.dir}" />
            <sysproperty key="log4j.configuration"
                         value="file:${basedir}/conf/log4j.properties" />
            <classpath>
                <pathelement path="${build.dir}/cobertura" />
                <pathelement path="${lib.dir}/cobertura/cobertura.jar" />
                <fileset dir="${lib.dir}/cobertura/lib">
                    <include name="*.jar"/>
                </fileset>
                <fileset dir="${lib.dir}">
                    <include name="*.jar"/>
                </fileset>
                <fileset dir="${ivy.lib}">
                  <include name="**/*.jar" />
                </fileset>
            </classpath>
            <classpath>
                <pathelement path="${test.java.classes}" />
            </classpath>
            <classpath refid="test.java.classpath"/>
            <classpath>
                <pathelement path="${build.classes}" />
            </classpath>

            <formatter type="${test.junit.output.format}" />
            <batchtest todir="${test.log.dir}" unless="testcase">
                <fileset dir="${test.src.dir}"
                         includes="**/*Test.java"/>
            </batchtest>
            <batchtest todir="${test.log.dir}" if="testcase">
                <fileset dir="${test.src.dir}" includes="**/${testcase}.java"/>
            </batchtest>
        </junit>
        <antcall target="fail.build.on.test.failure"/>
    </target>

    <target name="cobertura-report" depends="cobertura-test">
        <cobertura-report format="${test.cobertura.output.format}"
                          destdir="${coveragereport.dir}" > 
            <fileset dir="${java.src.dir}">
                <include name="**/*.java" />
            </fileset>
            <fileset dir="${src_generated.dir}">
                <include name="**/*.java" />
            </fileset>
        </cobertura-report>
    </target>

    <target name="checkstyle" depends="ivy-retrieve-test" description="Run Checkstyle coding standard checks">
      <taskdef resource="checkstyletask.properties" uri="antlib:com.puppycrawl.tools.checkstyle">
        <classpath>
          <fileset dir="${ivy.test.lib}" includes="*.jar" />
        </classpath>
      </taskdef>
      <mkdir dir="${test.java.build.dir}"/>
      <cs:checkstyle config="${test.src.dir}/checkstyle.xml" failOnViolation="false">
        <fileset dir="${src.dir}/java" includes="**/*.java" excludes="**/generated/**"/>
        <formatter type="xml" toFile="${test.java.build.dir}/checkstyle-errors.xml"/>
      </cs:checkstyle>
      <xslt style="${test.src.dir}/checkstyle-noframes-sorted.xsl" in="${test.java.build.dir}/checkstyle-errors.xml"
            out="${test.java.build.dir}/checkstyle-errors.html"/>
    </target>

    <!-- ================================================================== -->
    <!-- Perform audit activities for the release                           -->
    <!-- ================================================================== -->
    <target name="rats-taskdef" depends="ivy-retrieve-releaseaudit">
      <typedef format="xml" resource="org/apache/rat/anttasks/antlib.xml" uri="antlib:org.apache.rat.anttasks"
               classpathref="releaseaudit-classpath"/>
    </target>

    <target name="owasp-taskdef" depends="ivy-retrieve-owasp">
        <typedef format="properties" resource="dependency-check-taskdefs.properties" uri="antlib:org.owasp.dependencycheck.anttasks" classpathref="owasp-classpath"/>
    </target>

    <target name="owasp" depends="owasp-taskdef,ivy-retrieve" description="OWASP dependency check">
        <property name="owasp.out.dir" value="${test.java.build.dir}/owasp" />

        <owasp:dependency-check xmlns:owasp="antlib:org.owasp.dependencycheck.anttasks"
                          projectname="ZooKeeper"
                          reportoutputdirectory="${owasp.out.dir}"
                          reportformat="ALL"
                          failBuildOnCVSS="0">

            <fileset dir="${ivy.lib}">
                <include name="**/*.jar"/>
            </fileset>

            <fileset dir="${lib.dir}">
                <include name="**/*.jar"/>
            </fileset>
        </owasp:dependency-check>
    </target>

    <target name="releaseaudit" depends="package,rats-taskdef" description="Release Audit activities">
      <rat:report xmlns:rat="antlib:org.apache.rat.anttasks">
        <fileset dir="${dist.dir}">
          <exclude name="**/*.m4"/>
          <exclude name="**/*.md5"/>
          <exclude name="**/*.pom"/>
          <exclude name="**/*.sha1"/>
          <exclude name="**/.gitignore"/>
          <exclude name="**/Makefile**"/>
          <exclude name="**/winconfig.h"/>
          <exclude name="**/configure**"/>
          <exclude name="**/*Doxyfile"/>
          <exclude name="**/*.am"/>
          <exclude name="**/compile"/>
          <exclude name="**/depcomp"/>
          <exclude name="**/install-sh"/>
          <exclude name="**/ltmain.sh"/>
          <exclude name="**/missing"/>
          <exclude name="**/wrappers*.opt"/>
          <exclude name="CHANGES.txt"/>
          <exclude name="**/VERSION"/>
          <exclude name="**/ChangeLog"/>
          <exclude name="**/OldChangeLog"/>
          <exclude name="**/Changes"/>
          <exclude name="**/contrib/zkperl/MANIFEST"/>
          <exclude name="**/conf/*"/>
          <exclude name="**/docs/"/>
          <exclude name="**/lib/jdiff/"/>
          <exclude name="src/c/autom4te.cache/**"/>
          <exclude name="src/c/config**"/>
          <exclude name="src/c/src/hashtable/"/>
          <exclude name="src/java/generated/.generated/"/>
          <exclude name="src/java/test/checkstyle*.xml"/>
          <exclude name="src/java/test/checkstyle*.xsl"/>
          <exclude name="src/java/test/config/findbugs*.xml"/>
          <exclude name="src/**/*.vcproj"/>
          <exclude name="src/**/*.sln"/>
        </fileset>
      </rat:report>
    </target>

    <target name="findbugs.check" depends="check-for-findbugs" unless="findbugs.present">
    	<fail message="'findbugs.home' is not defined. Please pass -Dfindbugs.home=&lt;base of Findbugs installation&gt; 
		to Ant on the command-line." />
    </target>

    <target name="patch.check" unless="patch.file">
  	<fail message="'patch.file' is not defined. Please pass -Dpatch.file=&lt;location of patch file&gt; 
		to Ant on the command-line." />
    </target>

    <target name="test-patch" depends="patch.check,findbugs.check,forrest.check">
  	<exec executable="bash" failonerror="true">
    		<arg value="${test_patch_sh}"/>
    		<arg value="DEVELOPER"/>
    		<arg value="${patch.file}"/>
    		<arg value="${scratch.dir}"/>
    		<arg value="${svn.cmd}"/>
    		<arg value="${grep.cmd}"/>
    		<arg value="${patch.cmd}"/>
    		<arg value="${findbugs.home}"/>
    		<arg value="${forrest.home}"/>
    		<arg value="${basedir}"/>
    		<arg value="${java5.home}"/>
  	</exec>
    </target>

    <target name="hudson-test-patch" depends="findbugs.check,forrest.check">
  	<exec executable="bash" failonerror="true">
    		<arg value="${test_patch_sh}"/>
    		<arg value="HUDSON"/>
    		<arg value="${scratch.dir}"/>
    		<arg value="${ps.cmd}"/>
    		<arg value="${wget.cmd}"/>
    		<arg value="${jiracli.cmd}"/>
    		<arg value="${svn.cmd}"/>
    		<arg value="${grep.cmd}"/>
    		<arg value="${patch.cmd}"/>
    		<arg value="${findbugs.home}"/>
    		<arg value="${forrest.home}"/>
    		<arg value="${basedir}"/>
    		<arg value="${jira.passwd}"/>
    		<arg value="${java5.home}"/>
    		<arg value="${curl.cmd}"/>
    		<arg value="${defect}"/>
    	</exec>
     </target>

   <target name="qa-test-pullrequest" depends="findbugs.check,forrest.check">
        <exec executable="bash" failonerror="true">
                <arg value="${test_pullrequest_sh}"/>
                <arg value="QABUILD"/>
                <arg value="${scratch.dir}"/>
                <arg value="${ps.cmd}"/>
                <arg value="${wget.cmd}"/>
                <arg value="${jiracli.cmd}"/>
                <arg value="${git.cmd}"/>
                <arg value="${grep.cmd}"/>
                <arg value="${patch.cmd}"/>
                <arg value="${findbugs.home}"/>
                <arg value="${forrest.home}"/>
                <arg value="${basedir}"/>
                <arg value="${jira.passwd}"/>
                <arg value="${java5.home}"/>
                <arg value="${curl.cmd}"/>
        </exec>
     </target>


     <!-- this target runs the hudson trunk build -->
     <target name="hudson-test-trunk" depends="docs,tar,findbugs"/>

     <target name="api-xml" depends="ivy-retrieve-jdiff, javadoc, write-null">
       <javadoc>
         <doclet name="jdiff.JDiff"
                 path="${ivy.jdiff.lib}/jdiff-1.0.9.jar:${ivy.jdiff.lib}/xerces-1.4.4.jar">
           <param name="-apidir" value="${jdiff.xml.dir}"/>
           <param name="-apiname" value="${name} ${version}"/>
         </doclet>
         <packageset dir="${java.src.dir}">
           <include name="org/apache/zookeeper"/>
           <exclude name="org/apache/jute"/>
         </packageset>
         <classpath>
           <pathelement location="${build.classes}"/>
           <fileset dir="${lib.dir}">
             <include name="**/*.jar" />
             <exclude name="**/excluded/" />
           </fileset>
           <fileset dir="${ivy.lib}">
             <include name="**/*.jar" />
           </fileset>
         </classpath>
       </javadoc>
     </target>
     
     <target name="write-null">
       <exec executable="touch">
         <arg value="${jdiff.home}/Null.java"/>
       </exec>
     </target> 

     <target name="api-report" depends="api-xml">
       <mkdir dir="${jdiff.build.dir}"/>
       <javadoc sourcepath="${java.src.dir}"
                destdir="${jdiff.build.dir}"
                excludepackagenames="org.apache.jute"	
                sourceFiles="${jdiff.home}/Null.java">
         <doclet name="jdiff.JDiff"
                 path="${ivy.jdiff.lib}/jdiff-1.0.9.jar:${ivy.jdiff.lib}/xerces-1.4.4.jar">
           <param name="-oldapi" value="${name} ${jdiff.stable}"/>
           <param name="-newapi" value="${name} ${version}"/>
           <param name="-oldapidir" value="${jdiff.xml.dir}"/>
           <param name="-newapidir" value="${jdiff.xml.dir}"/>
           <param name="-javadocold" value="${jdiff.stable.javadoc}"/>
           <param name="-javadocnew" value="../../api/"/>
           <param name="-stats"/>
         </doclet>
         <classpath>
           <pathelement location="${build.classes}"/>
           <fileset dir="${lib.dir}">
             <include name="**/*.jar" />
             <exclude name="**/excluded/" />
           </fileset>
           <fileset dir="${ivy.lib}">
             <include name="**/*.jar" />
           </fileset>
         </classpath>
       </javadoc>
     </target>

     <condition property="ant-eclipse.jar.exists">
       <available file="${lib.dir}/ant-eclipse-1.0-jvm1.2.jar"/>
     </condition>

     <target name="ant-eclipse-download" unless="ant-eclipse.jar.exists">
       <get src="https://downloads.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2"
            dest="${src.dir}/java/ant-eclipse-1.0.bin.tar.bz2" usetimestamp="false" />

       <bunzip2 src="${src.dir}/java/ant-eclipse-1.0.bin.tar.bz2"/>

       <untar src="${src.dir}/java/ant-eclipse-1.0.bin.tar"
              dest="${src.dir}/java">
         <patternset>
           <include name="lib/ant-eclipse-1.0-jvm1.2.jar"/>
         </patternset>
       </untar>

       <delete file="${src.dir}/java/ant-eclipse-1.0.bin.tar" />
       <delete file="${src.dir}/java/ant-eclipse-1.0.bin.tar.bz2" />
     </target>

     <target name="eclipse"
             depends="ant-eclipse-download,init,ivy-retrieve,build-generated,ivy-retrieve-test"
             description="Create eclipse project files">
       <ivy:resolve useOrigin="true" conf="test"/>
       <ivy:cachepath pathid="default.path.id" conf="default" />
       <ivy:cachepath pathid="junit.path.id" conf="test" />
       <taskdef name="eclipse"
                classname="prantl.ant.eclipse.EclipseTask"
                classpathref="java.classpath" />
       <eclipse updatealways="true">
         <settings>
           <jdtcore compilercompliance="6.0" />
           <resources encoding="UTF-8" />
         </settings>
         <project name="${ant.project.name}" />
         <classpath>
           <source path="${java.src.dir}"
                   output="${build.dir.eclipse-main-classes}" />
           <source path="${src_generated.dir}"
                   output="${build.dir.eclipse-main-classes}" />
           <source path="${test.src.dir}"
                   output="${build.dir.eclipse-test-classes}" />
           <source path="${systest.src.dir}"
                   output="${build.dir.eclipse-test-classes}" />

           <output path="${build.dir.eclipse-main-classes}" />
           <library pathref="default.path.id" exported="true" />
           <library pathref="junit.path.id" exported="false" />
         </classpath>
       </eclipse>
     </target>

     <target name="clean-eclipse" description="Clean eclipse files">
       <delete file=".classpath" />
       <delete file=".eclipse" />
       <delete file=".project" />
       <delete dir=".settings" />
       <delete dir="${build.dir.eclipse}" />
     </target>

</project>


================================================
FILE: conf/configuration.xsl
================================================
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="configuration">
<html>
<body>
<table border="1">
<tr>
 <td>name</td>
 <td>value</td>
 <td>description</td>
</tr>
<xsl:for-each select="property">
<tr>
  <td><a name="{name}"><xsl:value-of select="name"/></a></td>
  <td><xsl:value-of select="value"/></td>
  <td><xsl:value-of select="description"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


================================================
FILE: conf/log4j.properties
================================================
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE
zookeeper.console.threshold=INFO
zookeeper.log.dir=.
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=DEBUG
zookeeper.tracelog.dir=.
zookeeper.tracelog.file=zookeeper_trace.log

#
# ZooKeeper Logging Configuration
#

# Format is "<default threshold> (, <appender>)+

# DEFAULT: console appender only
log4j.rootLogger=${zookeeper.root.logger}

# Example with rolling log file
#log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE

# Example with rolling log file and tracing
#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE

#
# Log INFO level and above messages to the console
#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

#
# Add ROLLINGFILE to rootLogger to get log file output
#    Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}

# Max log file size of 10MB
log4j.appender.ROLLINGFILE.MaxFileSize=10MB
# uncomment the next line to limit number of backup files
#log4j.appender.ROLLINGFILE.MaxBackupIndex=10

log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n


#
# Add TRACEFILE to rootLogger to get log file output
#    Log DEBUG level and above messages to a log file
log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
log4j.appender.TRACEFILE.Threshold=TRACE
log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file}

log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout
### Notice we are including log4j's NDC here (%x)
log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n


================================================
FILE: conf/zoo_sample.cfg
================================================
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1


================================================
FILE: docs/bookkeeperConfig.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9">
<meta name="Forrest-skin-name" content="pelt">
<title>BookKeeper Administrator's Guide</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
<link type="text/css" href="skin/profile.css" rel="stylesheet">
<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="images/favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
    |breadtrail
    +-->
<div class="breadtrail">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
    |header
    +-->
<div class="header">
<!--+
    |start group logo
    +-->
<div class="grouplogo">
<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
</div>
<!--+
    |end group logo
    +-->
<!--+
    |start Project Logo
    +-->
<div class="projectlogo">
<a href="http://zookeeper.apache.org/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
</div>
<!--+
    |end Project Logo
    +-->
<!--+
    |start Search
    +-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="zookeeper.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
                    <input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
    |end search
    +-->
<!--+
    |start Tabs
    +-->
<ul id="tabs">
<li>
<a class="unselected" href="http://zookeeper.apache.org/">Project</a>
</li>
<li>
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
</li>
</ul>
<!--+
    |end Tabs
    +-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
    |start Subtabs
    +-->
<div id="level2tabs"></div>
<!--+
    |end Endtabs
    +-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<!--+
    |breadtrail
    +-->
<div class="breadtrail">

             &nbsp;
           </div>
<!--+
    |start Menu, mainarea
    +-->
<!--+
    |start Menu
    +-->
<div id="menu">
<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
<div id="menu_1.1" class="menuitemgroup">
<div class="menuitem">
<a href="index.html">Welcome</a>
</div>
<div class="menuitem">
<a href="zookeeperOver.html">Overview</a>
</div>
<div class="menuitem">
<a href="zookeeperStarted.html">Getting Started</a>
</div>
<div class="menuitem">
<a href="releasenotes.html">Release Notes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
<div id="menu_1.2" class="menuitemgroup">
<div class="menuitem">
<a href="api/index.html">API Docs</a>
</div>
<div class="menuitem">
<a href="zookeeperProgrammers.html">Programmer's Guide</a>
</div>
<div class="menuitem">
<a href="javaExample.html">Java Example</a>
</div>
<div class="menuitem">
<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
</div>
<div class="menuitem">
<a href="recipes.html">Recipes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">BookKeeper</div>
<div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="bookkeeperStarted.html">Getting started</a>
</div>
<div class="menuitem">
<a href="bookkeeperOverview.html">Overview</a>
</div>
<div class="menupage">
<div class="menupagetitle">Setup guide</div>
</div>
<div class="menuitem">
<a href="bookkeeperProgrammer.html">Programmer's guide</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
<div id="menu_1.4" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperAdmin.html">Administrator's Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperQuotas.html">Quota Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperJMX.html">JMX</a>
</div>
<div class="menuitem">
<a href="zookeeperObservers.html">Observers Guide</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
<div id="menu_1.5" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperInternals.html">ZooKeeper Internals</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
<div id="menu_1.6" class="menuitemgroup">
<div class="menuitem">
<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER">Wiki</a>
</div>
<div class="menuitem">
<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/FAQ">FAQ</a>
</div>
<div class="menuitem">
<a href="http://zookeeper.apache.org/mailing_lists.html">Mailing Lists</a>
</div>
</div>
<div id="credit"></div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
  |alternative credits
  +-->
<div id="credit2"></div>
</div>
<!--+
    |end Menu
    +-->
<!--+
    |start content
    +-->
<div id="content">
<div title="Portable Document Format" class="pdflink">
<a class="dida" href="bookkeeperConfig.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
        PDF</a>
</div>
<h1>BookKeeper Administrator's Guide</h1>
<h3>Setup Guide</h3>
<div id="front-matter">
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#bk_deployment">Deployment</a>
<ul class="minitoc">
<li>
<a href="#bk_sysReq">System requirements</a>
</li>
<li>
<a href="#bk_runningBookies">Running bookies</a>
</li>
<li>
<a href="#bk_zkMetadata">ZooKeeper Metadata</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
  

  

  

  
<a name="bk_deployment"></a>
<h2 class="h3">Deployment</h2>
<div class="section">
<p>This section contains information about deploying BookKeeper and
    covers these topics:</p>
<ul>
      
<li>
        
<p>
<a href="#bk_sysReq">System requirements</a>
</p>
      
</li>

      
<li>
        
<p>
<a href="#bk_runningBookies">Running bookies</a>
</p>
      
</li>

      
<li>
        
<p>
<a href="#bk_zkMetadata">ZooKeeper Metadata</a>
</p>
      
</li>
    
</ul>
<p> The first section tells you how many machines you need. The second explains how to bootstrap bookies
     (BookKeeper storage servers). The third section explains how we use ZooKeeper and our requirements with
     respect to ZooKeeper.
    </p>
<a name="bk_sysReq"></a>
<h3 class="h4">System requirements</h3>
<p> A typical BookKeeper installation comprises a set of bookies and a set of ZooKeeper replicas. The exact number of bookies
 	   depends on the quorum mode, desired throughput, and number of clients using this installation simultaneously. The minimum number of
 	   bookies is three for self-verifying (stores a message authentication code along with each entry) and four for generic (does not
 	   store a message authentication codewith each entry), and there is no upper limit on the number of bookies. Increasing the number of 
 	   bookies, in fact, enables higher throughput.
 	   </p>
<p> For performance, we require each server to have at least two disks. It is possible to run a bookie with a single disk, but 
 	   performance will be significantly lower in this case. Of course, it works with one disk, but performance is significantly lower. 
 	   </p>
<p> For ZooKeeper, there is no constraint with respect to the number of replicas. Having a single machine running ZooKeeper
 	   in standalone mode is sufficient for BookKeeper. For resilience purposes, it might be a good idea to run ZooKeeper in quorum 
 	   mode with multiple servers. Please refer to the ZooKeeper documentation for detail on how to configure ZooKeeper with multiple
 	   replicas
 	   </p>
<a name="bk_runningBookies"></a>
<h3 class="h4">Running bookies</h3>
<p>
 	   To run a bookie, we execute the following command:
 	   </p>
<p>
<span class="codefrag computeroutput">
		java -cp .:./zookeeper-&lt;version&gt;-bookkeeper.jar:./zookeeper-&lt;version&gt;.jar\
		:../log4j/apache-log4j-1.2.15/log4j-1.2.15.jar -Dlog4j.configuration=log4j.properties\ 
		org.apache.bookkeeper.proto.BookieServer 3181 127.0.0.1:2181 /path_to_log_device/\
		/path_to_ledger_device/
	   </span>
</p>
<p>
 	   The parameters are:
 	   </p>
<ul>
 	   	
<li>
 	   	
<p>
 	   		Port number that the bookie listens on;
 	   	</p>
 	   	
</li>
 	   	
 	   	
<li>
 	   	
<p>
 	   		Comma separated list of ZooKeeper servers with a hostname:port format;
 	   	</p>
 	   	
</li>
 	   	
 	   	
<li>
 	   	
<p>
 	   		Path for Log Device (stores bookie write-ahead log);
 	   	</p>
 	   	
</li>
 	   	
 	   	
<li>
 	   	
<p>
 	   		Path for Ledger Device (stores ledger entries);
 	   	</p>
 	   	
</li>
 	   
</ul>
<p>
 	   Ideally, <span class="codefrag computeroutput">/path_to_log_device/ </span> and <span class="codefrag computeroutput">/path_to_ledger_device/ </span> are each
 	   in a different device. 
 	   </p>
<a name="bk_zkMetadata"></a>
<h3 class="h4">ZooKeeper Metadata</h3>
<p>
 	   For BookKeeper, we require a ZooKeeper installation to store metadata, and to pass the list
 	   of ZooKeeper servers as parameter to the constructor of the BookKeeper class (<span class="codefrag computeroutput">
 	   org.apache.bookkeeper.client,BookKeeper</span>).
 	   To setup ZooKeeper, please check the <a href="index.html">
          ZooKeeper documentation</a>.
 	   </p>
</div>

<p align="right">
<font size="-2"></font>
</p>
</div>
<!--+
    |end content
    +-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
    |start bottomstrip
    +-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<div class="copyright">
        Copyright &copy;
          <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
</div>
<!--+
    |end bottomstrip
    +-->
</div>
</body>
</html>


================================================
FILE: docs/bookkeeperOverview.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9">
<meta name="Forrest-skin-name" content="pelt">
<title>BookKeeper overview</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
<link type="text/css" href="skin/profile.css" rel="stylesheet">
<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="images/favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
    |breadtrail
    +-->
<div class="breadtrail">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
    |header
    +-->
<div class="header">
<!--+
    |start group logo
    +-->
<div class="grouplogo">
<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
</div>
<!--+
    |end group logo
    +-->
<!--+
    |start Project Logo
    +-->
<div class="projectlogo">
<a href="http://zookeeper.apache.org/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
</div>
<!--+
    |end Project Logo
    +-->
<!--+
    |start Search
    +-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="zookeeper.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
                    <input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
    |end search
    +-->
<!--+
    |start Tabs
    +-->
<ul id="tabs">
<li>
<a class="unselected" href="http://zookeeper.apache.org/">Project</a>
</li>
<li>
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
</li>
</ul>
<!--+
    |end Tabs
    +-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
    |start Subtabs
    +-->
<div id="level2tabs"></div>
<!--+
    |end Endtabs
    +-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<!--+
    |breadtrail
    +-->
<div class="breadtrail">

             &nbsp;
           </div>
<!--+
    |start Menu, mainarea
    +-->
<!--+
    |start Menu
    +-->
<div id="menu">
<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
<div id="menu_1.1" class="menuitemgroup">
<div class="menuitem">
<a href="index.html">Welcome</a>
</div>
<div class="menuitem">
<a href="zookeeperOver.html">Overview</a>
</div>
<div class="menuitem">
<a href="zookeeperStarted.html">Getting Started</a>
</div>
<div class="menuitem">
<a href="releasenotes.html">Release Notes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
<div id="menu_1.2" class="menuitemgroup">
<div class="menuitem">
<a href="api/index.html">API Docs</a>
</div>
<div class="menuitem">
<a href="zookeeperProgrammers.html">Programmer's Guide</a>
</div>
<div class="menuitem">
<a href="javaExample.html">Java Example</a>
</div>
<div class="menuitem">
<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
</div>
<div class="menuitem">
<a href="recipes.html">Recipes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">BookKeeper</div>
<div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="bookkeeperStarted.html">Getting started</a>
</div>
<div class="menupage">
<div class="menupagetitle">Overview</div>
</div>
<div class="menuitem">
<a href="bookkeeperConfig.html">Setup guide</a>
</div>
<div class="menuitem">
<a href="bookkeeperProgrammer.html">Programmer's guide</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
<div id="menu_1.4" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperAdmin.html">Administrator's Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperQuotas.html">Quota Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperJMX.html">JMX</a>
</div>
<div class="menuitem">
<a href="zookeeperObservers.html">Observers Guide</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
<div id="menu_1.5" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperInternals.html">ZooKeeper Internals</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
<div id="menu_1.6" class="menuitemgroup">
<div class="menuitem">
<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER">Wiki</a>
</div>
<div class="menuitem">
<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/FAQ">FAQ</a>
</div>
<div class="menuitem">
<a href="http://zookeeper.apache.org/mailing_lists.html">Mailing Lists</a>
</div>
</div>
<div id="credit"></div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
  |alternative credits
  +-->
<div id="credit2"></div>
</div>
<!--+
    |end Menu
    +-->
<!--+
    |start content
    +-->
<div id="content">
<div title="Portable Document Format" class="pdflink">
<a class="dida" href="bookkeeperOverview.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
        PDF</a>
</div>
<h1>BookKeeper overview</h1>
<div id="front-matter">
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#bk_Overview">BookKeeper overview</a>
<ul class="minitoc">
<li>
<a href="#bk_Intro">BookKeeper introduction</a>
</li>
<li>
<a href="#bk_moreDetail">In slightly more detail...</a>
</li>
<li>
<a href="#bk_basicComponents">Bookkeeper elements and concepts</a>
</li>
<li>
<a href="#bk_initialDesign">Bookkeeper initial design</a>
</li>
<li>
<a href="#bk_metadata">Bookkeeper metadata management</a>
</li>
<li>
<a href="#bk_closingOut">Closing out ledgers</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
  

  
  
<a name="bk_Overview"></a>
<h2 class="h3">BookKeeper overview</h2>
<div class="section">
<a name="bk_Intro"></a>
<h3 class="h4">BookKeeper introduction</h3>
<p>
	BookKeeper is a replicated service to reliably log streams of records. In BookKeeper, 
	servers are "bookies", log streams are "ledgers", and each unit of a log (aka record) is a 
	"ledger entry". BookKeeper is designed to be reliable; bookies, the servers that store 
	ledgers, can crash, corrupt data, discard data, but as long as there are enough bookies 
	behaving correctly the service as a whole behaves correctly.
	</p>
<p>
    The initial motivation for BookKeeper comes from the namenode of HDFS. Namenodes have to 
    log operations in a reliable fashion so that recovery is possible in the case of crashes. 
    We have found the applications for BookKeeper extend far beyond HDFS, however. Essentially, 
    any application that requires an append storage can replace their implementations with
    BookKeeper. BookKeeper has the advantage of scaling throughput with the number of servers. 
    </p>
<p>
    At a high level, a bookkeeper client receives entries from a client application and stores it to
    sets of bookies, and there are a few advantages in having such a service:
	</p>
<ul>
    
<li>
    
<p>
    	We can use hardware that is optimized for such a service. We currently believe that such a
      	system has to be optimized only for disk I/O;
    </p>
    
</li>
    
    
<li>
    
<p>
    	We can have a pool of servers implementing such a log system, and shared among a number of servers;
    </p>
    
</li>
    
    
<li>
    
<p>
    	We can have a higher degree of replication with such a pool, which makes sense if the hardware necessary for it is cheaper compared to the one the application uses. 
	</p>
	
</li>
	
</ul>
<a name="bk_moreDetail"></a>
<h3 class="h4">In slightly more detail...</h3>
<p> BookKeeper implements highly available logs, and it has been designed with write-ahead logging in mind. Besides high availability
    due to the replicated nature of the service, it provides high throughput due to striping. As we write entries in a subset of bookies of an
    ensemble and rotate writes across available quorums, we are able to increase throughput with the number of servers for both reads and writes. 
    Scalability is a property that is possible to achieve in this case due to the use of quorums. Other replication techniques, such as 
    state-machine replication, do not enable such a property. 
    </p>
<p> An application first creates a ledger before writing to bookies through a local BookKeeper client instance.   
  	Upon creating a ledger, a BookKeeper client writes metadata about the ledger to ZooKeeper. Each ledger currently 
  	has a single writer. This writer has to execute a close ledger operation before any other client can read from it. 
  	If the writer of a ledger does not close a ledger properly because, for example, it has crashed before having the 
  	opportunity of closing the ledger, then the next client that tries to open a ledger executes a procedure to recover
  	it. As closing a ledger consists essentially of writing the last entry written to a ledger to ZooKeeper, the recovery
  	procedure simply finds the last entry written correctly and writes it to ZooKeeper.	
	</p>
<p>
	Note that currently this recovery procedure is executed automatically upon trying to open a ledger and no explicit action is necessary. 
	Although two clients may try to recover a ledger concurrently, only one will succeed, the first one that is able to create the close znode
	for the ledger.
	</p>
<a name="bk_basicComponents"></a>
<h3 class="h4">Bookkeeper elements and concepts</h3>
<p> 
	BookKeeper uses four basic elements:
	</p>
<ul>
      
<li>
      
<p> 
		
<strong>Ledger</strong>: A ledger is a sequence of entries, and each entry is a sequence of bytes. Entries are
		written sequentially to a ledger and at most once. Consequently, ledgers have an append-only semantics;
	  </p>
	  
</li>
	
	  
<li>
	  
<p> 
		
<strong>BookKeeper client</strong>: A client runs along with a BookKeeper application, and it enables applications
		to execute operations on ledgers, such as creating a ledger and writing to it; 
	  </p>
	  
</li> 
	
	  
<li>
	  
<p>
		
<strong>Bookie</strong>: A bookie is a BookKeeper storage server. Bookies store the content of ledgers. For any given
		ledger L, we call an <em>ensemble</em> the group of bookies storing the content of L. For performance, we store on
		each bookie of an ensemble only a fragment of a ledger. That is, we stripe when writing entries to a ledger such that
		each entry is written to sub-group of bookies of the ensemble.
	  </p>
	  
</li>

	  
<li>
	  
<p> 	
		
<strong>Metadata storage service</strong>: BookKeeper requires a metadata storage service to store information related 
		to ledgers and available bookies. We currently use ZooKeeper for such a task.     
   	  </p>
   	  
</li>
    
</ul>
<a name="bk_initialDesign"></a>
<h3 class="h4">Bookkeeper initial design</h3>
<p>
    A set of bookies implements BookKeeper, and we use a quorum-based protocol to replicate data across the bookies. 
    There are basically two operations to an existing ledger: read and append. Here is the complete API list 
    (mode detail <a href="bookkeeperProgrammer.html">
    	      here</a>):
	</p>
<ul>
	
<li>
	
<p>
    	Create ledger: creates a new empty ledger; 
    </p>
    
</li>
    
    
<li>
	
<p>
    	Open ledger: opens an existing ledger for reading;
    </p>
    
</li>
    
    
<li>
	
<p>
    	Add entry: adds a record to a ledger either synchronously or asynchronously;
    </p>
    
</li>
    
    
<li>
	
<p>
    Read entries: reads a sequence of entries from a ledger either synchronously or asynchronously 
	</p>
    
</li>
	
</ul>
<p>
	There is only a single client that can write to a ledger. Once that ledger is closed or the client fails, 
	no more entries can be added. (We take advantage of this behavior to provide our strong guarantees.) 
	There will not be gaps in the ledger. Fingers get broken, people get roughed up or end up in prison when
	books are manipulated, so there is no deleting or changing of entries.
	</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
<tr>
<td>BookKeeper Overview</td>
</tr>
<tr>
<td>
        
            <img alt="" src="images/bk-overview.jpg">
        
        </td>
</tr>
</table>
<p>
    A simple use of BooKeeper is to implement a write-ahead transaction log. A server maintains an in-memory data structure
    (with periodic snapshots for example) and logs changes to that structure before it applies the change. The application 
    server creates a ledger at startup and store the ledger id and password in a well known place (ZooKeeper maybe). When 
    it needs to make a change, the server adds an entry with the change information to a ledger and apply the change when 
    BookKeeper adds the entry successfully. The server can even use asyncAddEntry to queue up many changes for high change
    throughput. BooKeeper meticulously logs the changes in order and call the completion functions in order.
	</p>
<p>
    When the application server dies, a backup server will come online, get the last snapshot and then it will open the 
    ledger of the old server and read all the entries from the time the snapshot was taken. (Since it doesn't know the 
    last entry number it will use MAX_INTEGER). Once all the entries have been processed, it will close the ledger and 
    start a new one for its use. 
	</p>
<p>
	A client library takes care of communicating with bookies and managing entry numbers. An entry has the following fields:
	</p>
<table class="ForrestTable" cellspacing="1" cellpadding="4">
<caption>Entry fields</caption>
<title>Entry fields</title>
	
	
<tr>
  	
<th>Field</th>
  	<th>Type</th>
  	<th>Description</th>
	
</tr>
	
	
<tr>
  	
<td>Ledger number</td>
  	<td>long</td>
  	<td>The id of the ledger of this entry</td>
	
</tr>
	
<tr>
  	
<td>Entry number</td>
  	<td>long</td>
  	<td>The id of this entry</td>
	
</tr>
	
	
<tr>
  	
<td>last confirmed (<em>LC</em>)</td>
  	<td>long</td>
  	<td>id of the last recorded entry</td>
	
</tr>
	
<tr>
  	
<td>data</td>
  	<td>byte[]</td>
  	<td>the entry data (supplied by application)</td>
	
</tr>
	
<tr>
  	
<td>authentication code</td>
  	<td>byte[]</td>
  	<td>Message authentication code that includes all other fields of the entry</td>
	
</tr>
	
	
	
</table>
<p>
	The client library generates a ledger entry. None of the fields are modified by the bookies and only the first three 
	fields are interpreted by the bookies.
	</p>
<p>
	To add to a ledger, the client generates the entry above using the ledger number. The entry number will be one more 
	than the last entry generated. The <em>LC</em> field contains the last entry that has been successfully recorded by BookKeeper. 
	If the client writes entries one at a time, <em>LC</em> is the last entry id. But, if the client is using asyncAddEntry, there 
	may be many entries in flight. An entry is considered recorded when both of the following conditions are met:
	</p>
<ul>
	
<li>
    
<p>
    	the entry has been accepted by a quorum of bookies
    </p>
    
</li>
    
    
<li>
    
<p>
    	all entries with a lower entry id have been accepted by a quorum of bookies 
	</p>
	
</li>
    
</ul>
<p>
	
<em>LC</em> seems mysterious right now, but it is too early to explain how we use it; just smile and move on.
	</p>
<p>
	Once all the other fields have been field in, the client generates an authentication code with all of the previous fields. 
	The entry is then sent to a quorum of bookies to be recorded. Any failures will result in the entry being sent to a new
	quorum of bookies.
	</p>
<p>
	To read, the client library initially contacts a bookie and starts requesting entries. If an entry is missing or 
	invalid (a bad MAC for example), the client will make a request to a different bookie. By using quorum writes, 
	as long as enough bookies are up we are guaranteed to eventually be able to read an entry.
	</p>
<a name="bk_metadata"></a>
<h3 class="h4">Bookkeeper metadata management</h3>
<p>
	There are some meta data that needs to be made available to BookKeeper clients:
	</p>
<ul>
	
<li>
	
<p>
		The available bookies;
	</p>
	
</li>
	
	
<li>
	
<p>
    	The list of ledgers;
    </p>
    
</li>
    
    
<li>
	
<p>
    	The list of bookies that have been used for a given ledger;
    </p>
    
</li>
    
    
<li>
	
<p>
    	The last entry of a ledger; 
	</p>
	
</li>
	
</ul>
<p>
	We maintain this information in ZooKeeper. Bookies use ephemeral nodes to indicate their availability. Clients 
	use znodes to track ledger creation and deletion and also to know the end of the ledger and the bookies that 
	were used to store the ledger. Bookies also watch the ledger list so that they can cleanup ledgers that get deleted.
	</p>
<a name="bk_closingOut"></a>
<h3 class="h4">Closing out ledgers</h3>
<p>
	The process of closing out the ledger and finding the last ledger is difficult due to the durability guarantees of BookKeeper:
	</p>
<ul>
	
<li>
	
<p>
    	If an entry has been successfully recorded, it must be readable.
    </p>
    
</li>
    
    
<li>
	
<p>
    	If an entry is read once, it must always be available to be read. 
	</p>
	
</li>
	
</ul>
<p>
	If the ledger was closed gracefully, ZooKeeper will have the last entry and everything will work well. But, if the 
	BookKeeper client that was writing the ledger dies, there is some recovery that needs to take place.
	</p>
<p>
	The problematic entries are the ones at the end of the ledger. There can be entries in flight when a BookKeeper client 
	dies. If the entry only gets to one bookie, the entry should not be readable since the entry will disappear if that bookie
	fails. If the entry is only on one bookie, that doesn't mean that the entry has not been recorded successfully; the other
	bookies that recorded the entry might have failed.
	</p>
<p>
	The trick to making everything work is to have a correct idea of a last entry. We do it in roughly three steps:
	</p>
<ol>
	
<li>
	
<p>
		Find the entry with the highest last recorded entry, <em>LC</em>;
	</p>
	
</li>
	
	
<li>
	
<p>
		Find the highest consecutively recorded entry, <em>LR</em>;
	</p>
	
</li>
	
	
<li>
	
<p>
		Make sure that all entries between <em>LC</em> and <em>LR</em> are on a quorum of bookies; 
	</p>
	
</li>
	
	
</ol>
</div>  

<p align="right">
<font size="-2"></font>
</p>
</div>
<!--+
    |end content
    +-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
    |start bottomstrip
    +-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<div class="copyright">
        Copyright &copy;
          <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
</div>
<!--+
    |end bottomstrip
    +-->
</div>
</body>
</html>


================================================
FILE: docs/bookkeeperProgrammer.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9">
<meta name="Forrest-skin-name" content="pelt">
<title>BookKeeper Getting Started Guide</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
<link type="text/css" href="skin/profile.css" rel="stylesheet">
<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="images/favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
    |breadtrail
    +-->
<div class="breadtrail">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
    |header
    +-->
<div class="header">
<!--+
    |start group logo
    +-->
<div class="grouplogo">
<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
</div>
<!--+
    |end group logo
    +-->
<!--+
    |start Project Logo
    +-->
<div class="projectlogo">
<a href="http://zookeeper.apache.org/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
</div>
<!--+
    |end Project Logo
    +-->
<!--+
    |start Search
    +-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="zookeeper.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
                    <input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
    |end search
    +-->
<!--+
    |start Tabs
    +-->
<ul id="tabs">
<li>
<a class="unselected" href="http://zookeeper.apache.org/">Project</a>
</li>
<li>
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
</li>
</ul>
<!--+
    |end Tabs
    +-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
    |start Subtabs
    +-->
<div id="level2tabs"></div>
<!--+
    |end Endtabs
    +-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<!--+
    |breadtrail
    +-->
<div class="breadtrail">

             &nbsp;
           </div>
<!--+
    |start Menu, mainarea
    +-->
<!--+
    |start Menu
    +-->
<div id="menu">
<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
<div id="menu_1.1" class="menuitemgroup">
<div class="menuitem">
<a href="index.html">Welcome</a>
</div>
<div class="menuitem">
<a href="zookeeperOver.html">Overview</a>
</div>
<div class="menuitem">
<a href="zookeeperStarted.html">Getting Started</a>
</div>
<div class="menuitem">
<a href="releasenotes.html">Release Notes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
<div id="menu_1.2" class="menuitemgroup">
<div class="menuitem">
<a href="api/index.html">API Docs</a>
</div>
<div class="menuitem">
<a href="zookeeperProgrammers.html">Programmer's Guide</a>
</div>
<div class="menuitem">
<a href="javaExample.html">Java Example</a>
</div>
<div class="menuitem">
<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
</div>
<div class="menuitem">
<a href="recipes.html">Recipes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">BookKeeper</div>
<div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="bookkeeperStarted.html">Getting started</a>
</div>
<div class="menuitem">
<a href="bookkeeperOverview.html">Overview</a>
</div>
<div class="menuitem">
<a href="bookkeeperConfig.html">Setup guide</a>
</div>
<div class="menupage">
<div class="menupagetitle">Programmer's guide</div>
</div>
</div>
<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
<div id="menu_1.4" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperAdmin.html">Administrator's Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperQuotas.html">Quota Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperJMX.html">JMX</a>
</div>
<div class="menuitem">
<a href="zookeeperObservers.html">Observers Guide</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
<div id="menu_1.5" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperInternals.html">ZooKeeper Internals</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
<div id="menu_1.6" class="menuitemgroup">
<div class="menuitem">
<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER">Wiki</a>
</div>
<div class="menuitem">
<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/FAQ">FAQ</a>
</div>
<div class="menuitem">
<a href="http://zookeeper.apache.org/mailing_lists.html">Mailing Lists</a>
</div>
</div>
<div id="credit"></div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
  |alternative credits
  +-->
<div id="credit2"></div>
</div>
<!--+
    |end Menu
    +-->
<!--+
    |start content
    +-->
<div id="content">
<div title="Portable Document Format" class="pdflink">
<a class="dida" href="bookkeeperProgrammer.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
        PDF</a>
</div>
<h1>BookKeeper Getting Started Guide</h1>
<div id="front-matter">
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#bk_GettingStarted">Programming with BookKeeper</a>
<ul class="minitoc">
<li>
<a href="#bk_instance"> Instantiating BookKeeper.</a>
</li>
<li>
<a href="#bk_createLedger"> Creating a ledger. </a>
</li>
<li>
<a href="#bk_writeLedger"> Adding entries to a ledger. </a>
</li>
<li>
<a href="#bk_closeLedger"> Closing a ledger. </a>
</li>
<li>
<a href="#bk_openLedger"> Opening a ledger. </a>
</li>
<li>
<a href="#bk_readLedger"> Reading from ledger </a>
</li>
<li>
<a href="#bk_deleteLedger"> Deleting a ledger </a>
</li>
</ul>
</li>
</ul>
</div>
</div>
  

  
  
<a name="bk_GettingStarted"></a>
<h2 class="h3">Programming with BookKeeper</h2>
<div class="section">
<ul>
      
<li>
        
<p>
<a href="#bk_instance"> Instantiating BookKeeper.</a>
</p>
      
</li>

      
<li>
        
<p>
<a href="#bk_createLedger"> Creating a ledger. </a>
</p>
      
</li>

      
<li>
        
<p>
<a href="#bk_writeLedger"> Adding entries to a ledger. </a>
</p>
      
</li>

      
<li>
        
<p>
<a href="#bk_closeLedger"> Closing a ledger. </a>
</p>
      
</li>
      
	  
<li>
        
<p>
<a href="#bk_openLedger"> Opening a ledger. </a>
</p>
      
</li>
      
      
<li>
        
<p>
<a href="#bk_readLedger"> Reading from ledger </a>
</p>
      
</li>
      
      
<li>
        
<p>
<a href="#bk_deleteLedger"> Deleting a ledger </a>
</p>
      
</li>
      
    
</ul>
<a name="bk_instance"></a>
<h3 class="h4"> Instantiating BookKeeper.</h3>
<p>
    The first step to use BookKeeper is to instantiate a BookKeeper object:
    </p>
<p>
    
<span class="codefrag computeroutput">
    org.apache.bookkeeper.BookKeeper
    </span>
    
</p>
<p>
    There are three BookKeeper constructors:
    </p>
<p>
    
<span class="codefrag computeroutput">
	public BookKeeper(String servers) 
    	throws KeeperException, IOException    
    </span>
	
</p>
<p>
    where:
    </p>
<ul>
    	
<li>
    	
<p> 
        
<span class="codefrag computeroutput">servers</span> is a comma-separated list of ZooKeeper servers.
    	</p>
    	
</li>
    
</ul>
<p>
    
<span class="codefrag computeroutput">
	public BookKeeper(ZooKeeper zk) 
    	throws InterruptedException, KeeperException    
    </span>
	
</p>
<p>
    where:
    </p>
<ul>
    	
<li>
    	
<p> 
        
<span class="codefrag computeroutput">zk</span> is a ZooKeeper object. This constructor is useful when
        the application also using ZooKeeper and wants to have a single instance of ZooKeeper.  
    	</p>
    	
</li>
    
</ul>
<p>
    
<span class="codefrag computeroutput">
	public BookKeeper(ZooKeeper zk, ClientSocketChannelFactory channelFactory) 
    	throws InterruptedException, KeeperException    
    </span>
	
</p>
<p>
    where:
    </p>
<ul>
    	
<li>
    	
<p> 
        
<span class="codefrag computeroutput">zk</span> is a ZooKeeper object. This constructor is useful when
        the application also using ZooKeeper and wants to have a single instance of ZooKeeper.  
    	</p>
    	
</li>
    	
    	
<li>
    	
<p> 
        
<span class="codefrag computeroutput">channelFactory</span> is a netty channel object 
        (<span class="codefrag computeroutput">org.jboss.netty.channel.socket</span>).  
    	</p>
    	
</li>
    
</ul>
<a name="bk_createLedger"></a>
<h3 class="h4"> Creating a ledger. </h3>
<p> Before writing entries to BookKeeper, it is necessary to create a ledger. 
    With the current BookKeeper API, it is possible to create a ledger both synchronously
    or asynchronously. The following methods belong
    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.BookKeeper</span>.
    </p>
<p>
   	
<strong>Synchronous call:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
    public LedgerHandle createLedger(int ensSize, int qSize, DigestType type,  byte passwd[])
        throws KeeperException, InterruptedException, 
        IOException, BKException
    </span>
	
</p>
<p>
    where:
    </p>
<ul>
    	
<li>
    	
<p> 
    	
<span class="codefrag computeroutput">ensSize</span> is the number of bookies (ensemble size);
    	</p>
    	
</li>
    
    	
<li> 
    	
<p>
    	
<span class="codefrag computeroutput">qSize</span> is the write quorum size;
    	</p>
    	
</li>
    
    	
<li> 
    	
<p>
    	
<span class="codefrag computeroutput">type</span> is the type of digest used with entries: either MAC or CRC32.  
    	</p>
    	
</li>
    	
    	
<li>
    	
<p>
    	
<span class="codefrag computeroutput">passwd</span> is a password that authorizes the client to write to the
    	ledger being created.
    	</p>
    	
</li>
    
</ul>
<p>
    All further operations on a ledger are invoked through the <span class="codefrag computeroutput">LedgerHandle</span>
    object returned.
    </p>
<p>
    As a convenience, we provide a <span class="codefrag computeroutput">createLedger</span> with default parameters (3,2,VERIFIABLE), 
    and the only two input parameters it requires are a digest type and a password.
    </p>
<p>
   	
<strong>Asynchronous call:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
    public void asyncCreateLedger(int ensSize, 
            int qSize, 
            DigestType type,  
            byte passwd[],
            CreateCallback cb,
            Object ctx
            )
    </span>
	
</p>
<p>
	The parameters are the same of the synchronous version, with the
	exception of <span class="codefrag computeroutput">cb</span> and <span class="codefrag computeroutput">ctx</span>. <span class="codefrag computeroutput">CreateCallback</span>
	is an interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
	a class implementing it has to implement a method called <span class="codefrag computeroutput">createComplete</span>
	that has the following signature: 
    </p>
<p>
	
<span class="codefrag computeroutput">
	void createComplete(int rc, LedgerHandle lh, Object ctx);
	</span>    
	
</p>
<p>
	where:
	</p>
<ul>
		
<li>
		
<p>
		
<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKException</span> for a list);
		</p>
		
</li>
	
		
<li>
		
<p>
		
<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
		</p>
		
</li>
		
		
<li>
		
<p>
		
<span class="codefrag computeroutput">ctx</span> is a control object for accountability purposes. It can be essentially any object the application is happy with.
		</p>
		
</li>
	
</ul>
<p>
	The <span class="codefrag computeroutput">ctx</span> object passed as a parameter to the call to create a ledger
	is the one same returned in the callback.
    </p>
<a name="bk_writeLedger"></a>
<h3 class="h4"> Adding entries to a ledger. </h3>
<p>
    Once we have a ledger handle <span class="codefrag computeroutput">lh</span> obtained through a call to create a ledger, we
    can start writing entries. As with creating ledgers, we can write both synchronously and 
    asynchronously. The following methods belong
    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.LedgerHandle</span>.
    </p>
<p>
   	
<strong>Synchronous call:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
	public long addEntry(byte[] data)
    	throws InterruptedException
    </span>
	
</p>
<p>
    where:
    </p>
<ul>
    	
<li>
    	
<p> 
    	
<span class="codefrag computeroutput">data</span> is a byte array;
    	</p>
    	
</li>
    
</ul>
<p>
	A call to <span class="codefrag computeroutput">addEntry</span> returns the status of the operation (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
    </p>
<p>
   	
<strong>Asynchronous call:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
	public void asyncAddEntry(byte[] data, AddCallback cb, Object ctx)
    </span>
	
</p>
<p>
    It also takes a byte array as the sequence of bytes to be stored as an entry. Additionaly, it takes
    a callback object <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement
    the <span class="codefrag computeroutput">AddCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
	a class implementing it has to implement a method called <span class="codefrag computeroutput">addComplete</span>
	that has the following signature: 
    </p>
<p>
	
<span class="codefrag computeroutput">
	void addComplete(int rc, LedgerHandle lh, long entryId, Object ctx);
	</span>    
	
</p>
<p>
	where:
	</p>
<ul>
		
<li>
		
<p>
		
<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
		</p>
		
</li>
	
		
<li>
		
<p>
		
<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
		</p>
		
</li>
		
		
<li>
		
<p>
		
<span class="codefrag computeroutput">entryId</span> is the identifier of entry associated with this request;
		</p>
		
</li>
		
		
<li>
		
<p>
		
<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. It can be any object the application is happy with.
		</p>
		
</li>
	
</ul>
<a name="bk_closeLedger"></a>
<h3 class="h4"> Closing a ledger. </h3>
<p>
    Once a client is done writing, it closes the ledger. The following methods belong
    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.LedgerHandle</span>.
    </p>
<p>
   	
<strong>Synchronous close:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
	public void close() 
    throws InterruptedException
    </span>
	
</p>
<p>
    It takes no input parameters.
    </p>
<p>
   	
<strong>Asynchronous close:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
	public void asyncClose(CloseCallback cb, Object ctx)
    throws InterruptedException
    </span>
	
</p>
<p>
    It takes a callback object <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement
    the <span class="codefrag computeroutput">CloseCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
	a class implementing it has to implement a method called <span class="codefrag computeroutput">closeComplete</span>
	that has the following signature: 
    </p>
<p>
	
<span class="codefrag computeroutput">
	void closeComplete(int rc, LedgerHandle lh, Object ctx)
	</span>    
	
</p>
<p>
	where:
	</p>
<ul>
		
<li>
		
<p>
		
<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
		</p>
		
</li>
	
		
<li>
		
<p>
		
<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
		</p>
		
</li>
		
		
<li>
		
<p>
		
<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. 
		</p>
		
</li>
	
</ul>
<a name="bk_openLedger"></a>
<h3 class="h4"> Opening a ledger. </h3>
<p>
    To read from a ledger, a client must open it first. The following methods belong
    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.BookKeeper</span>.
    </p>
<p>
   	
<strong>Synchronous open:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
	public LedgerHandle openLedger(long lId, DigestType type, byte passwd[])
    throws InterruptedException, BKException
    </span>
	
</p>
<ul>
	
<li>
	
<p>
	
<span class="codefrag computeroutput">ledgerId</span> is the ledger identifier;
	</p>
	
</li>
	
	
<li> 
    
<p>
    
<span class="codefrag computeroutput">type</span> is the type of digest used with entries: either MAC or CRC32.  
    </p>
    
</li>
	
	
<li>
	
<p>
	
<span class="codefrag computeroutput">passwd</span> is a password to access the ledger (used only in the case of <span class="codefrag computeroutput">VERIFIABLE</span> ledgers);
	</p>
	
</li>
	
</ul>
<p>
   	
<strong>Asynchronous open:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
	public void asyncOpenLedger(long lId, DigestType type, byte passwd[], OpenCallback cb, Object ctx)
    </span>
	
</p>
<p>
    It also takes a a ledger identifier and a password. Additionaly, it takes a callback object 
    <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement
    the <span class="codefrag computeroutput">OpenCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
	a class implementing it has to implement a method called <span class="codefrag computeroutput">openComplete</span>
	that has the following signature: 
    </p>
<p>
	
<span class="codefrag computeroutput">
	public void openComplete(int rc, LedgerHandle lh, Object ctx)
	</span>    
	
</p>
<p>
	where:
	</p>
<ul>
		
<li>
		
<p>
		
<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
		</p>
		
</li>
	
		
<li>
		
<p>
		
<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
		</p>
		
</li>
		
		
<li>
		
<p>
		
<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. 
		</p>
		
</li>
	
</ul>
<a name="bk_readLedger"></a>
<h3 class="h4"> Reading from ledger </h3>
<p>
    Read calls may request one or more consecutive entries. The following methods belong
    to <span class="codefrag computeroutput">org.apache.bookkeeper.client.LedgerHandle</span>.
    </p>
<p>
   	
<strong>Synchronous read:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
	public Enumeration&lt;LedgerEntry&gt; readEntries(long firstEntry, long lastEntry) 
    throws InterruptedException, BKException
    </span>
	
</p>
<ul>
	
<li>
	
<p>
	
<span class="codefrag computeroutput">firstEntry</span> is the identifier of the first entry in the sequence of entries to read;
	</p>
	
</li>
	
	
<li>
	
<p>
	
<span class="codefrag computeroutput">lastEntry</span> is the identifier of the last entry in the sequence of entries to read.
	</p>
	
</li>
	
</ul>
<p>
   	
<strong>Asynchronous read:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
	public void asyncReadEntries(long firstEntry, 
            long lastEntry, ReadCallback cb, Object ctx)
    throws BKException, InterruptedException
    </span>
	
</p>
<p>
    It also takes a first and a last entry identifiers. Additionaly, it takes a callback object 
    <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement
    the <span class="codefrag computeroutput">ReadCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
	a class implementing it has to implement a method called <span class="codefrag computeroutput">readComplete</span>
	that has the following signature: 
    </p>
<p>
	
<span class="codefrag computeroutput">
	void readComplete(int rc, LedgerHandle lh, Enumeration&lt;LedgerEntry&gt; seq, Object ctx)
	</span>    
	
</p>
<p>
	where:
	</p>
<ul>
		
<li>
		
<p>
		
<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
		</p>
		
</li>
	
		
<li>
		
<p>
		
<span class="codefrag computeroutput">lh</span> is a <span class="codefrag computeroutput">LedgerHandle</span> object to manipulate a ledger;
		</p>
		
</li>
		
		
<li>
		
<p>
		
<span class="codefrag computeroutput">seq</span> is a <span class="codefrag computeroutput">Enumeration&lt;LedgerEntry&gt; </span> object to containing the list of entries requested;
		</p>
		
</li>

		
<li>
		
<p>
		
<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. 
		</p>
		
</li>
	
</ul>
<a name="bk_deleteLedger"></a>
<h3 class="h4"> Deleting a ledger </h3>
<p>
    Once a client is done with a ledger and is sure that nobody will ever need to read from it again, they can delete the ledger.
    The following methods belong to <span class="codefrag computeroutput">org.apache.bookkeeper.client.BookKeeper</span>.
    </p>
<p>
   	
<strong>Synchronous delete:</strong>
   	
</p>
<p>
    
<span class="codefrag computeroutput">
        public void deleteLedger(long lId) throws InterruptedException, BKException
    </span>
    
</p>
<ul>
	
<li>
	
<p>
	
<span class="codefrag computeroutput">lId</span> is the ledger identifier;
	</p>
	
</li>
	
</ul>
<p>
   	
<strong>Asynchronous delete:</strong>
    
</p>
<p>
      
<span class="codefrag computeroutput">
	 public void asyncDeleteLedger(long lId, DeleteCallback cb, Object ctx) 
      </span>
    
</p>
<p>
    It takes a ledger identifier. Additionally, it takes a callback object 
    <span class="codefrag computeroutput">cb</span> and a control object <span class="codefrag computeroutput">ctx</span>. The callback object must implement
    the <span class="codefrag computeroutput">DeleteCallback</span> interface in <span class="codefrag computeroutput">org.apache.bookkeeper.client.AsyncCallback</span>, and
	a class implementing it has to implement a method called <span class="codefrag computeroutput">deleteComplete</span>
	that has the following signature: 
    </p>
<p>
	
<span class="codefrag computeroutput">
	void deleteComplete(int rc, Object ctx)
	</span>    
	
</p>
<p>
	where:
	</p>
<ul>
		
<li>
		
<p>
		
<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
		</p>
		
</li>
	
		
<li>
		
<p>
		
<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. 
		</p>
		
</li>
	
</ul>
</div>

<p align="right">
<font size="-2"></font>
</p>
</div>
<!--+
    |end content
    +-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
    |start bottomstrip
    +-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<div class="copyright">
        Copyright &copy;
          <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
</div>
<!--+
    |end bottomstrip
    +-->
</div>
</body>
</html>


================================================
FILE: docs/bookkeeperStarted.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9">
<meta name="Forrest-skin-name" content="pelt">
<title>BookKeeper Getting Started Guide</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
<link type="text/css" href="skin/profile.css" rel="stylesheet">
<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="images/favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
    |breadtrail
    +-->
<div class="breadtrail">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
    |header
    +-->
<div class="header">
<!--+
    |start group logo
    +-->
<div class="grouplogo">
<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
</div>
<!--+
    |end group logo
    +-->
<!--+
    |start Project Logo
    +-->
<div class="projectlogo">
<a href="http://zookeeper.apache.org/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
</div>
<!--+
    |end Project Logo
    +-->
<!--+
    |start Search
    +-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="zookeeper.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
                    <input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
    |end search
    +-->
<!--+
    |start Tabs
    +-->
<ul id="tabs">
<li>
<a class="unselected" href="http://zookeeper.apache.org/">Project</a>
</li>
<li>
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
</li>
</ul>
<!--+
    |end Tabs
    +-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
    |start Subtabs
    +-->
<div id="level2tabs"></div>
<!--+
    |end Endtabs
    +-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<!--+
    |breadtrail
    +-->
<div class="breadtrail">

             &nbsp;
           </div>
<!--+
    |start Menu, mainarea
    +-->
<!--+
    |start Menu
    +-->
<div id="menu">
<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
<div id="menu_1.1" class="menuitemgroup">
<div class="menuitem">
<a href="index.html">Welcome</a>
</div>
<div class="menuitem">
<a href="zookeeperOver.html">Overview</a>
</div>
<div class="menuitem">
<a href="zookeeperStarted.html">Getting Started</a>
</div>
<div class="menuitem">
<a href="releasenotes.html">Release Notes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
<div id="menu_1.2" class="menuitemgroup">
<div class="menuitem">
<a href="api/index.html">API Docs</a>
</div>
<div class="menuitem">
<a href="zookeeperProgrammers.html">Programmer's Guide</a>
</div>
<div class="menuitem">
<a href="javaExample.html">Java Example</a>
</div>
<div class="menuitem">
<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
</div>
<div class="menuitem">
<a href="recipes.html">Recipes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_selected_1.3', 'skin/')" id="menu_selected_1.3Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">BookKeeper</div>
<div id="menu_selected_1.3" class="selectedmenuitemgroup" style="display: block;">
<div class="menupage">
<div class="menupagetitle">Getting started</div>
</div>
<div class="menuitem">
<a href="bookkeeperOverview.html">Overview</a>
</div>
<div class="menuitem">
<a href="bookkeeperConfig.html">Setup guide</a>
</div>
<div class="menuitem">
<a href="bookkeeperProgrammer.html">Programmer's guide</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.4', 'skin/')" id="menu_1.4Title" class="menutitle">Admin &amp; Ops</div>
<div id="menu_1.4" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperAdmin.html">Administrator's Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperQuotas.html">Quota Guide</a>
</div>
<div class="menuitem">
<a href="zookeeperJMX.html">JMX</a>
</div>
<div class="menuitem">
<a href="zookeeperObservers.html">Observers Guide</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.5', 'skin/')" id="menu_1.5Title" class="menutitle">Contributor</div>
<div id="menu_1.5" class="menuitemgroup">
<div class="menuitem">
<a href="zookeeperInternals.html">ZooKeeper Internals</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.6', 'skin/')" id="menu_1.6Title" class="menutitle">Miscellaneous</div>
<div id="menu_1.6" class="menuitemgroup">
<div class="menuitem">
<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER">Wiki</a>
</div>
<div class="menuitem">
<a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/FAQ">FAQ</a>
</div>
<div class="menuitem">
<a href="http://zookeeper.apache.org/mailing_lists.html">Mailing Lists</a>
</div>
</div>
<div id="credit"></div>
<div id="roundbottom">
<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
<!--+
  |alternative credits
  +-->
<div id="credit2"></div>
</div>
<!--+
    |end Menu
    +-->
<!--+
    |start content
    +-->
<div id="content">
<div title="Portable Document Format" class="pdflink">
<a class="dida" href="bookkeeperStarted.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
        PDF</a>
</div>
<h1>BookKeeper Getting Started Guide</h1>
<div id="front-matter">
<div id="minitoc-area">
<ul class="minitoc">
<li>
<a href="#bk_GettingStarted">Getting Started: Setting up BookKeeper to write logs.</a>
<ul class="minitoc">
<li>
<a href="#bk_Prerequisites">Pre-requisites</a>
</li>
<li>
<a href="#bk_Download">Download</a>
</li>
<li>
<a href="#bk_localBK">LocalBookKeeper</a>
</li>
<li>
<a href="#bk_setupBookies">Setting up bookies</a>
</li>
<li>
<a href="#bk_setupZK">Setting up ZooKeeper</a>
</li>
<li>
<a href="#bk_example">Example</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
  

  
  
<a name="bk_GettingStarted"></a>
<h2 class="h3">Getting Started: Setting up BookKeeper to write logs.</h2>
<div class="section">
<p>This document contains information to get you started quickly with
    BookKeeper. It is aimed primarily at developers willing to try it out, and
    contains simple installation instructions for a simple BookKeeper installation
    and a simple programming example. For further programming detail, please refer to 
    <a href="bookkeeperProgrammer.html">BookKeeper Programmer's Guide</a>.
    </p>
<a name="bk_Prerequisites"></a>
<h3 class="h4">Pre-requisites</h3>
<p>See <a href="bookkeeperConfig.html#bk_sysReq">
    	      System Requirements</a> in the Admin guide.</p>
<a name="bk_Download"></a>
<h3 class="h4">Download</h3>
<p> BookKeeper is distributed along with ZooKeeper. To get a ZooKeeper distribution, 
			   download a recent
    	    <a href="http://zookeeper.apache.org/releases.html">
        	  stable</a> release from one of the Apache Download
       	 Mirrors.</p>
<a name="bk_localBK"></a>
<h3 class="h4">LocalBookKeeper</h3>
<p> Under org.apache.bookkeeper.util, you'll find a java program
		called LocalBookKeeper.java that sets you up to run BookKeeper on a 
		single machine. This is far from ideal from a performance perspective,
		but the program is useful for both test and educational purposes.
		</p>
<a name="bk_setupBookies"></a>
<h3 class="h4">Setting up bookies</h3>
<p> If you're bold and you want more than just running things locally, then
		you'll need to run bookies in different servers. You'll need at least three bookies
		to start with.  
		</p>
<p>
		For each bookie, we need to execute a command like the following:
		</p>
<p>
<span class="codefrag computeroutput">
		java -cp .:./zookeeper-&lt;version&gt;-bookkeeper.jar:./zookeeper-&lt;version&gt;.jar\
		:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar -Dlog4j.configuration=log4j.properties\ 
		org.apache.bookkeeper.proto.BookieServer 3181 127.0.0.1:2181 /path_to_log_device/\
		/path_to_ledger_device/
		</span>
</p>
<p> "/path_to_log_device/" and "/path_to_ledger_device/" are different paths. Also, port 3181
		is the port that a bookie listens on for connection requests from clients. 127.0.0.1:2181 is the hostname:port 
		for the ZooKeeper server. In this example, the standalone ZooKeeper server is running locally on port 2181.
		If we had multiple ZooKeeper servers, this parameter would be a comma separated list of all the hostname:port
		values corresponding to them.
		</p>
<a name="bk_setupZK"></a>
<h3 class="h4">Setting up ZooKeeper</h3>
<p> ZooKeeper stores metadata on behalf of BookKeeper clients and bookies. To get a minimal 
	  	ZooKeeper installation to work with BookKeeper, we can set up one server running in
	  	standalone mode. Once we have the server running, we need to create a few znodes:
	  	</p>
<ol>
	  	
<li>
	  	
<p>
<span class="codefrag computeroutput">
	  	/ledgers	
	  	</span>
</p>
	  	
</li>
	  	
	  	
<li>
	  	
<p>
<span class="codefrag computeroutput">
	  	/ledgers/available
	  	</span>
</p>
	  	
</li>
	  	
	  	
<li>
	  	
<p> For each bookie, we add one znode such that the name of the znode is the
	  	concatenation of the machine name and the port number that the bookie is 
	  	listening on. For example, if a bookie is running on bookie.foo.com an is listening 
	  	on port 3181, we add a znode 
	  	<span class="codefrag computeroutput">/ledgers/available/bookie.foo.com:3181</span>.  
	  	</p>
	  	
</li>
	  	
</ol>
<a name="bk_example"></a>
<h3 class="h4">Example</h3>
<p>
	    In the following excerpt of code, we:
	    </p>
<ol>
	    	
<li>
	    	
<p>
	    	Create a ledger;
	    	</p>
	    	
</li>
	    	
	    	
<li>
	    	
<p>
	    	Write to the ledger;
	    	</p>
	    	
</li>
	    	
	    	
<li>
	    	
<p>
	    	Close the ledger;
	    	</p>
	    	
</li>
	    	
	    	
<li>
	    	
<p>
	    	Open the same ledger for reading;
	    	</p>
	    	
</li>
	    	
	    	
<li>
	    	
<p>
	    	Read from the ledger;
	    	</p>
	    	
</li>
	    	
	    	
<li>
	    	
<p>
	    	Close the ledger again;
	    	</p>
	    	
</li>
	    
</ol>
<pre class="code">
LedgerHandle lh = bkc.createLedger(ledgerPassword);
ledgerId = lh.getId();
ByteBuffer entry = ByteBuffer.allocate(4);

for(int i = 0; i &lt; 10; i++){
	entry.putInt(i);
	entry.position(0);
	entries.add(entry.array());				
	lh.addEntry(entry.array());
}
lh.close();
lh = bkc.openLedger(ledgerId, ledgerPassword);		
			
Enumeration&lt;LedgerEntry&gt; ls = lh.readEntries(0, 9);
int i = 0;
while(ls.hasMoreElements()){
	ByteBuffer origbb = ByteBuffer.wrap(
				entries.get(i++));
	Integer origEntry = origbb.getInt();
	ByteBuffer result = ByteBuffer.wrap(
				ls.nextElement().getEntry());

	Integer retrEntry = result.getInt();
}
lh.close();
	    </pre>
</div>

<p align="right">
<font size="-2"></font>
</p>
</div>
<!--+
    |end content
    +-->
<div class="clearboth">&nbsp;</div>
</div>
<div id="footer">
<!--+
    |start bottomstrip
    +-->
<div class="lastmodified">
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<div class="copyright">
        Copyright &copy;
          <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
</div>
<!--+
    |end bottomstrip
    +-->
</div>
</body>
</html>


================================================
FILE: docs/bookkeeperStream.html
================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="Apache Forrest" name="Generator">
<meta name="Forrest-version" content="0.9">
<meta name="Forrest-skin-name" content="pelt">
<title>Streaming with BookKeeper</title>
<link type="text/css" href="skin/basic.css" rel="stylesheet">
<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
<link type="text/css" href="skin/profile.css" rel="stylesheet">
<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
<link rel="shortcut icon" href="images/favicon.ico">
</head>
<body onload="init()">
<script type="text/javascript">ndeSetTextSize();</script>
<div id="top">
<!--+
    |breadtrail
    +-->
<div class="breadtrail">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a> &gt; <a href="http://zookeeper.apache.org/">ZooKeeper</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</div>
<!--+
    |header
    +-->
<div class="header">
<!--+
    |start group logo
    +-->
<div class="grouplogo">
<a href="http://hadoop.apache.org/"><img class="logoImage" alt="Hadoop" src="images/hadoop-logo.jpg" title="Apache Hadoop"></a>
</div>
<!--+
    |end group logo
    +-->
<!--+
    |start Project Logo
    +-->
<div class="projectlogo">
<a href="http://zookeeper.apache.org/"><img class="logoImage" alt="ZooKeeper" src="images/zookeeper_small.gif" title="ZooKeeper: distributed coordination"></a>
</div>
<!--+
    |end Project Logo
    +-->
<!--+
    |start Search
    +-->
<div class="searchbox">
<form action="http://www.google.com/search" method="get" class="roundtopsmall">
<input value="zookeeper.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
                    <input name="Search" value="Search" type="submit">
</form>
</div>
<!--+
    |end search
    +-->
<!--+
    |start Tabs
    +-->
<ul id="tabs">
<li>
<a class="unselected" href="http://zookeeper.apache.org/">Project</a>
</li>
<li>
<a class="unselected" href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/">Wiki</a>
</li>
<li class="current">
<a class="selected" href="index.html">ZooKeeper 3.4 Documentation</a>
</li>
</ul>
<!--+
    |end Tabs
    +-->
</div>
</div>
<div id="main">
<div id="publishedStrip">
<!--+
    |start Subtabs
    +-->
<div id="level2tabs"></div>
<!--+
    |end Endtabs
    +-->
<script type="text/javascript"><!--
document.write("Last Published: " + document.lastModified);
//  --></script>
</div>
<!--+
    |breadtrail
    +-->
<div class="breadtrail">

             &nbsp;
           </div>
<!--+
    |start Menu, mainarea
    +-->
<!--+
    |start Menu
    +-->
<div id="menu">
<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
<div id="menu_1.1" class="menuitemgroup">
<div class="menuitem">
<a href="index.html">Welcome</a>
</div>
<div class="menuitem">
<a href="zookeeperOver.html">Overview</a>
</div>
<div class="menuitem">
<a href="zookeeperStarted.html">Getting Started</a>
</div>
<div class="menuitem">
<a href="releasenotes.html">Release Notes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.2', 'skin/')" id="menu_1.2Title" class="menutitle">Developer</div>
<div id="menu_1.2" class="menuitemgroup">
<div class="menuitem">
<a href="api/index.html">API Docs</a>
</div>
<div class="menuitem">
<a href="zookeeperProgrammers.html">Programmer's Guide</a>
</div>
<div class="menuitem">
<a href="javaExample.html">Java Example</a>
</div>
<div class="menuitem">
<a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a>
</div>
<div class="menuitem">
<a href="recipes.html">Recipes</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.3', 'skin
Download .txt
gitextract_87q86p2i/

├── .gitattributes
├── .gitignore
├── LICENSE.txt
├── NOTICE.txt
├── README_packaging.txt
├── bin/
│   ├── README.txt
│   ├── zkCleanup.sh
│   ├── zkCli.cmd
│   ├── zkCli.sh
│   ├── zkEnv.cmd
│   ├── zkEnv.sh
│   ├── zkServer.cmd
│   └── zkServer.sh
├── build.xml
├── conf/
│   ├── configuration.xsl
│   ├── log4j.properties
│   └── zoo_sample.cfg
├── docs/
│   ├── bookkeeperConfig.html
│   ├── bookkeeperOverview.html
│   ├── bookkeeperProgrammer.html
│   ├── bookkeeperStarted.html
│   ├── bookkeeperStream.html
│   ├── broken-links.xml
│   ├── index.html
│   ├── javaExample.html
│   ├── linkmap.html
│   ├── recipes.html
│   ├── releasenotes.html
│   ├── skin/
│   │   ├── CommonMessages_de.xml
│   │   ├── CommonMessages_en_US.xml
│   │   ├── CommonMessages_es.xml
│   │   ├── CommonMessages_fr.xml
│   │   ├── basic.css
│   │   ├── breadcrumbs-optimized.js
│   │   ├── breadcrumbs.js
│   │   ├── fontsize.js
│   │   ├── getBlank.js
│   │   ├── getMenu.js
│   │   ├── images/
│   │   │   └── README.txt
│   │   ├── menu.js
│   │   ├── note.txt
│   │   ├── print.css
│   │   ├── profile.css
│   │   ├── prototype.js
│   │   └── screen.css
│   ├── zookeeperAdmin.html
│   ├── zookeeperHierarchicalQuorums.html
│   ├── zookeeperInternals.html
│   ├── zookeeperJMX.html
│   ├── zookeeperObservers.html
│   ├── zookeeperOtherInfo.html
│   ├── zookeeperOver.html
│   ├── zookeeperProgrammers.html
│   ├── zookeeperQuotas.html
│   ├── zookeeperStarted.html
│   └── zookeeperTutorial.html
├── ivy.xml
├── ivysettings.xml
├── readme.md
└── src/
    ├── LICENSE.txt
    ├── NOTICE.txt
    ├── c/
    │   ├── CMakeLists.txt
    │   ├── ChangeLog
    │   ├── INSTALL
    │   ├── LICENSE
    │   ├── Makefile.am
    │   ├── NOTICE.txt
    │   ├── README
    │   ├── acinclude.m4
    │   ├── aminclude.am
    │   ├── c-doc.Doxyfile
    │   ├── cmake_config.h.in
    │   ├── configure.ac
    │   ├── include/
    │   │   ├── proto.h
    │   │   ├── recordio.h
    │   │   ├── winconfig.h
    │   │   ├── zookeeper.h
    │   │   ├── zookeeper_log.h
    │   │   └── zookeeper_version.h
    │   ├── src/
    │   │   ├── cli.c
    │   │   ├── hashtable/
    │   │   │   ├── LICENSE.txt
    │   │   │   ├── hashtable.c
    │   │   │   ├── hashtable.h
    │   │   │   ├── hashtable_itr.c
    │   │   │   ├── hashtable_itr.h
    │   │   │   └── hashtable_private.h
    │   │   ├── load_gen.c
    │   │   ├── mt_adaptor.c
    │   │   ├── recordio.c
    │   │   ├── st_adaptor.c
    │   │   ├── winport.c
    │   │   ├── winport.h
    │   │   ├── zk_adaptor.h
    │   │   ├── zk_hashtable.c
    │   │   ├── zk_hashtable.h
    │   │   ├── zk_log.c
    │   │   └── zookeeper.c
    │   └── tests/
    │       ├── CollectionUtil.h
    │       ├── CppAssertHelper.h
    │       ├── LibCMocks.cc
    │       ├── LibCMocks.h
    │       ├── LibCSymTable.cc
    │       ├── LibCSymTable.h
    │       ├── MocksBase.cc
    │       ├── MocksBase.h
    │       ├── PthreadMocks.cc
    │       ├── PthreadMocks.h
    │       ├── TestClient.cc
    │       ├── TestClientRetry.cc
    │       ├── TestDriver.cc
    │       ├── TestMulti.cc
    │       ├── TestOperations.cc
    │       ├── TestWatchers.cc
    │       ├── TestZookeeperClose.cc
    │       ├── TestZookeeperInit.cc
    │       ├── ThreadingUtil.cc
    │       ├── ThreadingUtil.h
    │       ├── Util.cc
    │       ├── Util.h
    │       ├── Vector.h
    │       ├── ZKMocks.cc
    │       ├── ZKMocks.h
    │       ├── wrappers-mt.opt
    │       ├── wrappers.opt
    │       └── zkServer.sh
    ├── contrib/
    │   ├── build-contrib.xml
    │   ├── build.xml
    │   ├── fatjar/
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── conf/
    │   │   │   └── mainClasses
    │   │   └── src/
    │   │       └── java/
    │   │           └── org/
    │   │               └── apache/
    │   │                   └── zookeeper/
    │   │                       └── util/
    │   │                           └── FatJarMain.java
    │   ├── huebrowser/
    │   │   ├── README
    │   │   └── zkui/
    │   │       ├── Makefile
    │   │       ├── setup.py
    │   │       └── src/
    │   │           └── zkui/
    │   │               ├── __init__.py
    │   │               ├── forms.py
    │   │               ├── models.py
    │   │               ├── rest.py
    │   │               ├── settings.py
    │   │               ├── static/
    │   │               │   ├── bootstrap.js
    │   │               │   ├── css/
    │   │               │   │   └── zkui.css
    │   │               │   ├── help/
    │   │               │   │   └── index.html
    │   │               │   └── js/
    │   │               │       ├── Source/
    │   │               │       │   └── Zkui/
    │   │               │       │       └── Zkui.js
    │   │               │       └── package.yml
    │   │               ├── stats.py
    │   │               ├── templates/
    │   │               │   ├── clients.mako
    │   │               │   ├── create.mako
    │   │               │   ├── edit.mako
    │   │               │   ├── index.mako
    │   │               │   ├── shared_components.mako
    │   │               │   ├── tree.mako
    │   │               │   └── view.mako
    │   │               ├── urls.py
    │   │               ├── utils.py
    │   │               ├── views.py
    │   │               └── windmilltests.py
    │   ├── loggraph/
    │   │   ├── README.txt
    │   │   ├── bin/
    │   │   │   ├── loggraph-dev.sh
    │   │   │   └── loggraph.sh
    │   │   ├── build.xml
    │   │   ├── ivy.xml
    │   │   ├── src/
    │   │   │   └── java/
    │   │   │       └── org/
    │   │   │           └── apache/
    │   │   │               └── zookeeper/
    │   │   │                   └── graph/
    │   │   │                       ├── FilterException.java
    │   │   │                       ├── FilterOp.java
    │   │   │                       ├── FilterParser.java
    │   │   │                       ├── JsonGenerator.java
    │   │   │                       ├── Log4JEntry.java
    │   │   │                       ├── Log4JSource.java
    │   │   │                       ├── LogEntry.java
    │   │   │                       ├── LogIterator.java
    │   │   │                       ├── LogServer.java
    │   │   │                       ├── LogSkipList.java
    │   │   │                       ├── LogSource.java
    │   │   │                       ├── MeasureThroughput.java
    │   │   │                       ├── MergedLogSource.java
    │   │   │                       ├── RandomAccessFileReader.java
    │   │   │                       ├── TransactionEntry.java
    │   │   │                       ├── TxnLogSource.java
    │   │   │                       ├── filterops/
    │   │   │                       │   ├── AndOp.java
    │   │   │                       │   ├── Arg.java
    │   │   │                       │   ├── EqualsOp.java
    │   │   │                       │   ├── GreaterThanOp.java
    │   │   │                       │   ├── LessThanOp.java
    │   │   │                       │   ├── NotOp.java
    │   │   │                       │   ├── NumberArg.java
    │   │   │                       │   ├── OrOp.java
    │   │   │                       │   ├── StringArg.java
    │   │   │                       │   ├── SymbolArg.java
    │   │   │                       │   └── XorOp.java
    │   │   │                       └── servlets/
    │   │   │                           ├── FileLoader.java
    │   │   │                           ├── Fs.java
    │   │   │                           ├── GraphData.java
    │   │   │                           ├── JsonServlet.java
    │   │   │                           ├── NumEvents.java
    │   │   │                           ├── StaticContent.java
    │   │   │                           └── Throughput.java
    │   │   └── web/
    │   │       └── org/
    │   │           └── apache/
    │   │               └── zookeeper/
    │   │                   └── graph/
    │   │                       ├── log4j.properties
    │   │                       └── resources/
    │   │                           ├── date.format.js
    │   │                           ├── g.bar.js
    │   │                           ├── g.dot.js
    │   │                           ├── g.line.js
    │   │                           ├── g.pie.js
    │   │                           ├── g.raphael.js
    │   │                           ├── loggraph.css
    │   │                           ├── loggraph.js
    │   │                           ├── loggraph.log.js
    │   │                           ├── loggraph.server.js
    │   │                           ├── loggraph.session.js
    │   │                           ├── loggraph.stats.js
    │   │                           ├── loggraph.ui.js
    │   │                           ├── main.html
    │   │                           ├── raphael.js
    │   │                           └── yui-min.js
    │   ├── monitoring/
    │   │   ├── JMX-RESOURCES
    │   │   ├── README
    │   │   ├── cacti/
    │   │   │   └── README
    │   │   ├── check_zookeeper.py
    │   │   ├── ganglia/
    │   │   │   ├── README
    │   │   │   ├── modpython.conf
    │   │   │   ├── zookeeper.pyconf
    │   │   │   └── zookeeper_ganglia.py
    │   │   ├── nagios/
    │   │   │   ├── README.txt
    │   │   │   ├── hostgroups.cfg
    │   │   │   ├── services.cfg
    │   │   │   └── zookeeper.cfg
    │   │   └── test.py
    │   ├── rest/
    │   │   ├── NOTICE.txt
    │   │   ├── README.txt
    │   │   ├── SPEC.txt
    │   │   ├── build.xml
    │   │   ├── conf/
    │   │   │   ├── keys/
    │   │   │   │   ├── README
    │   │   │   │   ├── rest.cer
    │   │   │   │   └── rest.jks
    │   │   │   ├── log4j.properties
    │   │   │   └── rest.properties
    │   │   ├── ivy.xml
    │   │   ├── rest.sh
    │   │   └── src/
    │   │       ├── java/
    │   │       │   └── org/
    │   │       │       └── apache/
    │   │       │           └── zookeeper/
    │   │       │               └── server/
    │   │       │                   └── jersey/
    │   │       │                       ├── RestMain.java
    │   │       │                       ├── ZooKeeperService.java
    │   │       │                       ├── cfg/
    │   │       │                       │   ├── Credentials.java
    │   │       │                       │   ├── Endpoint.java
    │   │       │                       │   ├── HostPort.java
    │   │       │                       │   ├── HostPortSet.java
    │   │       │                       │   └── RestCfg.java
    │   │       │                       ├── filters/
    │   │       │                       │   └── HTTPBasicAuth.java
    │   │       │                       ├── jaxb/
    │   │       │                       │   ├── ZChildren.java
    │   │       │                       │   ├── ZChildrenJSON.java
    │   │       │                       │   ├── ZError.java
    │   │       │                       │   ├── ZPath.java
    │   │       │                       │   ├── ZSession.java
    │   │       │                       │   └── ZStat.java
    │   │       │                       └── resources/
    │   │       │                           ├── JAXBContextResolver.java
    │   │       │                           ├── KeeperExceptionMapper.java
    │   │       │                           ├── RuntimeExceptionMapper.java
    │   │       │                           ├── SessionsResource.java
    │   │       │                           ├── ZErrorWriter.java
    │   │       │                           └── ZNodeResource.java
    │   │       ├── python/
    │   │       │   ├── README.txt
    │   │       │   ├── demo_master_election.py
    │   │       │   ├── demo_queue.py
    │   │       │   ├── test.py
    │   │       │   ├── zk_dump_tree.py
    │   │       │   └── zkrest.py
    │   │       └── test/
    │   │           ├── org/
    │   │           │   └── apache/
    │   │           │       └── zookeeper/
    │   │           │           └── server/
    │   │           │               └── jersey/
    │   │           │                   ├── Base.java
    │   │           │                   ├── CreateTest.java
    │   │           │                   ├── DeleteTest.java
    │   │           │                   ├── ExistsTest.java
    │   │           │                   ├── GetChildrenTest.java
    │   │           │                   ├── GetTest.java
    │   │           │                   ├── RestTestSuite.java
    │   │           │                   ├── RootTest.java
    │   │           │                   ├── SessionTest.java
    │   │           │                   ├── SetTest.java
    │   │           │                   └── WadlTest.java
    │   │           └── zkServer.sh
    │   ├── zkfuse/
    │   │   ├── Makefile.am
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── configure.ac
    │   │   └── src/
    │   │       ├── Makefile.am
    │   │       ├── blockingqueue.h
    │   │       ├── doxygen.cfg
    │   │       ├── event.cc
    │   │       ├── event.h
    │   │       ├── log.cc
    │   │       ├── log.h
    │   │       ├── log4cxx.properties
    │   │       ├── mutex.h
    │   │       ├── thread.cc
    │   │       ├── thread.h
    │   │       ├── zkadapter.cc
    │   │       ├── zkadapter.h
    │   │       └── zkfuse.cc
    │   ├── zkperl/
    │   │   ├── Changes
    │   │   ├── LICENSE
    │   │   ├── MANIFEST
    │   │   ├── Makefile.PL
    │   │   ├── NOTICE
    │   │   ├── README
    │   │   ├── ZooKeeper.pm
    │   │   ├── ZooKeeper.xs
    │   │   ├── build.xml
    │   │   ├── t/
    │   │   │   ├── 10_invalid.t
    │   │   │   ├── 15_thread.t
    │   │   │   ├── 20_tie.t
    │   │   │   ├── 22_stat_tie.t
    │   │   │   ├── 24_watch_tie.t
    │   │   │   ├── 30_connect.t
    │   │   │   ├── 35_log.t
    │   │   │   ├── 40_basic.t
    │   │   │   ├── 45_class.t
    │   │   │   ├── 50_access.t
    │   │   │   ├── 60_watch.t
    │   │   │   └── util.pl
    │   │   └── typemap
    │   ├── zkpython/
    │   │   ├── README
    │   │   ├── build.xml
    │   │   ├── ivy.xml
    │   │   └── src/
    │   │       ├── c/
    │   │       │   ├── pyzk_docstrings.h
    │   │       │   └── zookeeper.c
    │   │       ├── examples/
    │   │       │   ├── README
    │   │       │   └── watch_znode_for_changes.py
    │   │       ├── packages/
    │   │       │   ├── deb/
    │   │       │   │   └── zkpython.control/
    │   │       │   │       └── control
    │   │       │   └── rpm/
    │   │       │       └── spec/
    │   │       │           └── zkpython.spec
    │   │       ├── python/
    │   │       │   ├── setup.py
    │   │       │   └── zk.py
    │   │       └── test/
    │   │           ├── acl_test.py
    │   │           ├── async_test.py
    │   │           ├── callback_test.py
    │   │           ├── clientid_test.py
    │   │           ├── close_deadlock_test.py
    │   │           ├── connection_test.py
    │   │           ├── create_test.py
    │   │           ├── delete_test.py
    │   │           ├── exists_test.py
    │   │           ├── get_set_test.py
    │   │           ├── run_tests.sh
    │   │           ├── zkServer.sh
    │   │           └── zktestbase.py
    │   ├── zktreeutil/
    │   │   ├── Makefile.am
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── configure.ac
    │   │   ├── src/
    │   │   │   ├── Makefile.am
    │   │   │   ├── SimpleTree.h
    │   │   │   ├── ZkAdaptor.cc
    │   │   │   ├── ZkAdaptor.h
    │   │   │   ├── ZkTreeUtil.cc
    │   │   │   ├── ZkTreeUtil.h
    │   │   │   └── ZkTreeUtilMain.cc
    │   │   └── tests/
    │   │       └── zk_sample.xml
    │   └── zooinspector/
    │       ├── NOTICE.txt
    │       ├── README.txt
    │       ├── build.xml
    │       ├── config/
    │       │   ├── defaultConnectionSettings.cfg
    │       │   └── defaultNodeVeiwers.cfg
    │       ├── ivy.xml
    │       ├── lib/
    │       │   ├── jtoaster-1.0.4.jar
    │       │   └── log4j.properties
    │       ├── licences/
    │       │   ├── Apache Software Licence v2.0.txt
    │       │   └── epl-v10.html
    │       ├── src/
    │       │   └── java/
    │       │       └── org/
    │       │           └── apache/
    │       │               └── zookeeper/
    │       │                   ├── inspector/
    │       │                   │   ├── ZooInspector.java
    │       │                   │   ├── encryption/
    │       │                   │   │   ├── BasicDataEncryptionManager.java
    │       │                   │   │   └── DataEncryptionManager.java
    │       │                   │   ├── gui/
    │       │                   │   │   ├── NodeViewersChangeListener.java
    │       │                   │   │   ├── ZooInspectorAboutDialog.java
    │       │                   │   │   ├── ZooInspectorConnectionPropertiesDialog.java
    │       │                   │   │   ├── ZooInspectorIconResources.java
    │       │                   │   │   ├── ZooInspectorNodeViewersDialog.java
    │       │                   │   │   ├── ZooInspectorNodeViewersPanel.java
    │       │                   │   │   ├── ZooInspectorPanel.java
    │       │                   │   │   ├── ZooInspectorTreeViewer.java
    │       │                   │   │   ├── about.html
    │       │                   │   │   └── nodeviewer/
    │       │                   │   │       ├── NodeViewerACL.java
    │       │                   │   │       ├── NodeViewerData.java
    │       │                   │   │       ├── NodeViewerMetaData.java
    │       │                   │   │       └── ZooInspectorNodeViewer.java
    │       │                   │   ├── logger/
    │       │                   │   │   └── LoggerFactory.java
    │       │                   │   └── manager/
    │       │                   │       ├── NodeListener.java
    │       │                   │       ├── Pair.java
    │       │                   │       ├── ZooInspectorManager.java
    │       │                   │       ├── ZooInspectorManagerImpl.java
    │       │                   │       ├── ZooInspectorNodeManager.java
    │       │                   │       ├── ZooInspectorNodeTreeManager.java
    │       │                   │       └── ZooInspectorReadOnlyManager.java
    │       │                   └── retry/
    │       │                       └── ZooKeeperRetry.java
    │       ├── zooInspector-dev.sh
    │       ├── zooInspector.cmd
    │       └── zooInspector.sh
    ├── csharp/
    │   ├── .gitattributes
    │   ├── .gitignore
    │   ├── Directory.Build.props
    │   ├── NuGet.config
    │   ├── ZooKeeperNetEx.sln
    │   ├── ZooKeeperNetEx.snk
    │   ├── src/
    │   │   ├── Directory.Build.props
    │   │   ├── ZooKeeperNetEx/
    │   │   │   ├── .gitignore
    │   │   │   ├── Properties/
    │   │   │   │   └── AssemblyInfo.cs
    │   │   │   ├── ZooKeeperNetEx.csproj
    │   │   │   ├── jute/
    │   │   │   │   ├── BinaryInputArchive.cs
    │   │   │   │   ├── BinaryOutputArchive.cs
    │   │   │   │   ├── Index.cs
    │   │   │   │   ├── InputArchive.cs
    │   │   │   │   ├── OutputArchive.cs
    │   │   │   │   └── Record.cs
    │   │   │   ├── utils/
    │   │   │   │   ├── AwaitableSignal.cs
    │   │   │   │   ├── ByteBuffer.cs
    │   │   │   │   ├── EnumUtil.cs
    │   │   │   │   ├── MiscEx.cs
    │   │   │   │   ├── SignalTask.cs
    │   │   │   │   ├── SocketContext.cs
    │   │   │   │   ├── SocketEx.cs
    │   │   │   │   ├── TimeHelper.cs
    │   │   │   │   ├── VolatileBool.cs
    │   │   │   │   ├── VolatileInt.cs
    │   │   │   │   ├── VolatileLong.cs
    │   │   │   │   ├── VolatileReference.cs
    │   │   │   │   ├── bigEndian/
    │   │   │   │   │   ├── BigEndianBinaryReader.cs
    │   │   │   │   │   ├── BigEndianBinaryWriter.cs
    │   │   │   │   │   └── BigEndianBitConverter.cs
    │   │   │   │   └── log/
    │   │   │   │       ├── ILogConsumer.cs
    │   │   │   │       ├── ILogProducer.cs
    │   │   │   │       ├── LogWriter.cs
    │   │   │   │       ├── NonBlockingFileWriter.cs
    │   │   │   │       ├── TraceWriter.cs
    │   │   │   │       ├── TypeLogger.cs
    │   │   │   │       └── ZooKeeperLogger.cs
    │   │   │   └── zookeeper/
    │   │   │       ├── AsyncResults.cs
    │   │   │       ├── ClientCnxn.cs
    │   │   │       ├── ClientCnxnSocket.cs
    │   │   │       ├── ClientCnxnSocketNIO.cs
    │   │   │       ├── ClientWatchManager.cs
    │   │   │       ├── CreateMode.cs
    │   │   │       ├── KeeperException.cs
    │   │   │       ├── MultiResponse.cs
    │   │   │       ├── MultiTransactionRecord.cs
    │   │   │       ├── Op.cs
    │   │   │       ├── OpResult.cs
    │   │   │       ├── Quotas.cs
    │   │   │       ├── StatsTrack.cs
    │   │   │       ├── Transaction.cs
    │   │   │       ├── WatchedEvent.cs
    │   │   │       ├── Watcher.cs
    │   │   │       ├── ZKUtil.cs
    │   │   │       ├── ZooDefs.cs
    │   │   │       ├── ZooKeeper.cs
    │   │   │       ├── client/
    │   │   │       │   ├── ConnectStringParser.cs
    │   │   │       │   ├── DnsResolver.cs
    │   │   │       │   ├── DynamicHostProvider.cs
    │   │   │       │   ├── HostAndPort.cs
    │   │   │       │   ├── HostProvider.cs
    │   │   │       │   ├── IDnsResolver.cs
    │   │   │       │   └── ResolvedEndPoint.cs
    │   │   │       └── common/
    │   │   │           └── PathUtils.cs
    │   │   └── ZooKeeperNetEx.Recipes/
    │   │       ├── AsyncLock.cs
    │   │       ├── Lock/
    │   │       │   ├── LockListener.cs
    │   │       │   ├── ProtocolSupport.cs
    │   │       │   ├── WriteLock.cs
    │   │       │   ├── ZNodeName.cs
    │   │       │   └── ZooKeeperOperation.cs
    │   │       ├── Properties/
    │   │       │   └── AssemblyInfo.cs
    │   │       ├── ZooKeeperNetEx.Recipes.csproj
    │   │       ├── leader/
    │   │       │   ├── LeaderElectionAware.cs
    │   │       │   ├── LeaderElectionSupport.cs
    │   │       │   └── LeaderOffer.cs
    │   │       └── queue/
    │   │           └── DistributedQueue.cs
    │   └── test/
    │       ├── Directory.Build.props
    │       ├── ZooKeeperNetEx.Recipes.Tests/
    │       │   ├── ZooKeeperNetEx.Recipes.Tests.csproj
    │       │   ├── leader/
    │       │   │   └── LeaderElectionSupportTest.cs
    │       │   ├── lock/
    │       │   │   ├── WriteLockTest.cs
    │       │   │   └── ZNodeNameTest.cs
    │       │   └── queue/
    │       │       └── DistributedQueueTest.cs
    │       ├── ZooKeeperNetEx.Tests/
    │       │   ├── Assert.cs
    │       │   ├── BinaryInputArchiveTest.cs
    │       │   ├── ClientBase.cs
    │       │   ├── LogAndConfigTests.cs
    │       │   ├── MultiResponseTest.cs
    │       │   ├── MultiTransactionRecordTest.cs
    │       │   ├── Properties/
    │       │   │   └── AssemblyInfo.cs
    │       │   ├── TestsSetup.cs
    │       │   ├── ZooKeeperNetEx.Tests.csproj
    │       │   ├── ZooKeeperTest.cs
    │       │   └── test/
    │       │       ├── ACLCountTest.cs
    │       │       ├── ACLRootTest.cs
    │       │       ├── ChrootTest.cs
    │       │       ├── ClientHammerTest.cs
    │       │       ├── ClientTest.cs
    │       │       ├── ConnectStringParserTest.cs
    │       │       ├── CreateModeTest.cs
    │       │       ├── DynamicHostProviderTest.cs
    │       │       ├── EventTypeTest.cs
    │       │       ├── GetChildren2Test.cs
    │       │       ├── KeeperStateTest.cs
    │       │       ├── MultiTransactionTest.cs
    │       │       ├── NullDataTest.cs
    │       │       ├── StatTest.cs
    │       │       ├── SyncCallTest.cs
    │       │       ├── WatchedEventTest.cs
    │       │       ├── WatcherFuncTest.cs
    │       │       └── WatcherTest.cs
    │       └── xunit.runner.json
    ├── docs/
    │   ├── forrest.properties
    │   ├── src/
    │   │   └── documentation/
    │   │       ├── README.txt
    │   │       ├── TODO.txt
    │   │       ├── classes/
    │   │       │   └── CatalogManager.properties
    │   │       ├── conf/
    │   │       │   └── cli.xconf
    │   │       ├── content/
    │   │       │   └── xdocs/
    │   │       │       ├── bookkeeperConfig.xml
    │   │       │       ├── bookkeeperOverview.xml
    │   │       │       ├── bookkeeperProgrammer.xml
    │   │       │       ├── bookkeeperStarted.xml
    │   │       │       ├── bookkeeperStream.xml
    │   │       │       ├── index.xml
    │   │       │       ├── javaExample.xml
    │   │       │       ├── recipes.xml
    │   │       │       ├── site.xml
    │   │       │       ├── tabs.xml
    │   │       │       ├── zookeeperAdmin.xml
    │   │       │       ├── zookeeperHierarchicalQuorums.xml
    │   │       │       ├── zookeeperInternals.xml
    │   │       │       ├── zookeeperJMX.xml
    │   │       │       ├── zookeeperObservers.xml
    │   │       │       ├── zookeeperOtherInfo.xml
    │   │       │       ├── zookeeperOver.xml
    │   │       │       ├── zookeeperProgrammers.xml
    │   │       │       ├── zookeeperQuotas.xml
    │   │       │       ├── zookeeperStarted.xml
    │   │       │       └── zookeeperTutorial.xml
    │   │       ├── resources/
    │   │       │   └── images/
    │   │       │       └── state_dia.dia
    │   │       └── skinconf.xml
    │   └── status.xml
    ├── java/
    │   ├── OldChangeLog
    │   ├── lib/
    │   │   ├── cobertura/
    │   │   │   └── README.txt
    │   │   ├── jdiff/
    │   │   │   └── zookeeper_3.1.1.xml
    │   │   ├── jline-0.9.94.LICENSE.txt
    │   │   ├── log4j-1.2.17.LICENSE.txt
    │   │   └── slf4j-1.7.25.LICENSE.txt
    │   ├── main/
    │   │   ├── org/
    │   │   │   └── apache/
    │   │   │       ├── jute/
    │   │   │       │   ├── BinaryInputArchive.java
    │   │   │       │   ├── BinaryOutputArchive.java
    │   │   │       │   ├── CsvInputArchive.java
    │   │   │       │   ├── CsvOutputArchive.java
    │   │   │       │   ├── Index.java
    │   │   │       │   ├── InputArchive.java
    │   │   │       │   ├── OutputArchive.java
    │   │   │       │   ├── Record.java
    │   │   │       │   ├── RecordReader.java
    │   │   │       │   ├── RecordWriter.java
    │   │   │       │   ├── Utils.java
    │   │   │       │   ├── XmlInputArchive.java
    │   │   │       │   ├── XmlOutputArchive.java
    │   │   │       │   ├── compiler/
    │   │   │       │   │   ├── CGenerator.java
    │   │   │       │   │   ├── CSharpGenerator.java
    │   │   │       │   │   ├── CppGenerator.java
    │   │   │       │   │   ├── JBoolean.java
    │   │   │       │   │   ├── JBuffer.java
    │   │   │       │   │   ├── JByte.java
    │   │   │       │   │   ├── JCompType.java
    │   │   │       │   │   ├── JDouble.java
    │   │   │       │   │   ├── JField.java
    │   │   │       │   │   ├── JFile.java
    │   │   │       │   │   ├── JFloat.java
    │   │   │       │   │   ├── JInt.java
    │   │   │       │   │   ├── JLong.java
    │   │   │       │   │   ├── JMap.java
    │   │   │       │   │   ├── JRecord.java
    │   │   │       │   │   ├── JString.java
    │   │   │       │   │   ├── JType.java
    │   │   │       │   │   ├── JVector.java
    │   │   │       │   │   ├── JavaGenerator.java
    │   │   │       │   │   └── package.html
    │   │   │       │   └── package.html
    │   │   │       └── zookeeper/
    │   │   │           ├── AsyncCallback.java
    │   │   │           ├── ClientCnxn.java
    │   │   │           ├── ClientCnxnSocket.java
    │   │   │           ├── ClientCnxnSocketNIO.java
    │   │   │           ├── ClientWatchManager.java
    │   │   │           ├── CreateMode.java
    │   │   │           ├── Environment.java
    │   │   │           ├── JLineZNodeCompletor.java
    │   │   │           ├── KeeperException.java
    │   │   │           ├── Login.java
    │   │   │           ├── MultiResponse.java
    │   │   │           ├── MultiTransactionRecord.java
    │   │   │           ├── Op.java
    │   │   │           ├── OpResult.java
    │   │   │           ├── Quotas.java
    │   │   │           ├── SaslClientCallbackHandler.java
    │   │   │           ├── ServerAdminClient.java
    │   │   │           ├── Shell.java
    │   │   │           ├── StatsTrack.java
    │   │   │           ├── Transaction.java
    │   │   │           ├── Version.java
    │   │   │           ├── WatchedEvent.java
    │   │   │           ├── Watcher.java
    │   │   │           ├── ZKUtil.java
    │   │   │           ├── ZooDefs.java
    │   │   │           ├── ZooKeeper.java
    │   │   │           ├── ZooKeeperMain.java
    │   │   │           ├── client/
    │   │   │           │   ├── ConnectStringParser.java
    │   │   │           │   ├── FourLetterWordMain.java
    │   │   │           │   ├── HostProvider.java
    │   │   │           │   ├── StaticHostProvider.java
    │   │   │           │   └── ZooKeeperSaslClient.java
    │   │   │           ├── common/
    │   │   │           │   ├── AtomicFileOutputStream.java
    │   │   │           │   ├── IOUtils.java
    │   │   │           │   ├── PathTrie.java
    │   │   │           │   ├── PathUtils.java
    │   │   │           │   └── Time.java
    │   │   │           ├── jmx/
    │   │   │           │   ├── CommonNames.java
    │   │   │           │   ├── MBeanRegistry.java
    │   │   │           │   ├── ManagedUtil.java
    │   │   │           │   └── ZKMBeanInfo.java
    │   │   │           ├── server/
    │   │   │           │   ├── ByteBufferInputStream.java
    │   │   │           │   ├── ByteBufferOutputStream.java
    │   │   │           │   ├── ConnectionBean.java
    │   │   │           │   ├── ConnectionMXBean.java
    │   │   │           │   ├── DataNode.java
    │   │   │           │   ├── DataTree.java
    │   │   │           │   ├── DataTreeBean.java
    │   │   │           │   ├── DataTreeMXBean.java
    │   │   │           │   ├── DatadirCleanupManager.java
    │   │   │           │   ├── ExitCode.java
    │   │   │           │   ├── FinalRequestProcessor.java
    │   │   │           │   ├── LogFormatter.java
    │   │   │           │   ├── NIOServerCnxn.java
    │   │   │           │   ├── NIOServerCnxnFactory.java
    │   │   │           │   ├── NettyServerCnxn.java
    │   │   │           │   ├── NettyServerCnxnFactory.java
    │   │   │           │   ├── ObserverBean.java
    │   │   │           │   ├── PrepRequestProcessor.java
    │   │   │           │   ├── PurgeTxnLog.java
    │   │   │           │   ├── ReferenceCountedACLCache.java
    │   │   │           │   ├── Request.java
    │   │   │           │   ├── RequestProcessor.java
    │   │   │           │   ├── ServerCnxn.java
    │   │   │           │   ├── ServerCnxnFactory.java
    │   │   │           │   ├── ServerConfig.java
    │   │   │           │   ├── ServerStats.java
    │   │   │           │   ├── SessionTracker.java
    │   │   │           │   ├── SessionTrackerImpl.java
    │   │   │           │   ├── SnapshotFormatter.java
    │   │   │           │   ├── Stats.java
    │   │   │           │   ├── SyncRequestProcessor.java
    │   │   │           │   ├── TraceFormatter.java
    │   │   │           │   ├── UnimplementedRequestProcessor.java
    │   │   │           │   ├── WatchManager.java
    │   │   │           │   ├── ZKDatabase.java
    │   │   │           │   ├── ZooKeeperCriticalThread.java
    │   │   │           │   ├── ZooKeeperSaslServer.java
    │   │   │           │   ├── ZooKeeperServer.java
    │   │   │           │   ├── ZooKeeperServerBean.java
    │   │   │           │   ├── ZooKeeperServerListener.java
    │   │   │           │   ├── ZooKeeperServerListenerImpl.java
    │   │   │           │   ├── ZooKeeperServerMXBean.java
    │   │   │           │   ├── ZooKeeperServerMain.java
    │   │   │           │   ├── ZooKeeperServerShutdownHandler.java
    │   │   │           │   ├── ZooKeeperThread.java
    │   │   │           │   ├── ZooTrace.java
    │   │   │           │   ├── auth/
    │   │   │           │   │   ├── AuthenticationProvider.java
    │   │   │           │   │   ├── DigestAuthenticationProvider.java
    │   │   │           │   │   ├── DigestLoginModule.java
    │   │   │           │   │   ├── IPAuthenticationProvider.java
    │   │   │           │   │   ├── KerberosName.java
    │   │   │           │   │   ├── ProviderRegistry.java
    │   │   │           │   │   ├── SASLAuthenticationProvider.java
    │   │   │           │   │   └── SaslServerCallbackHandler.java
    │   │   │           │   ├── package.html
    │   │   │           │   ├── persistence/
    │   │   │           │   │   ├── FileSnap.java
    │   │   │           │   │   ├── FileTxnLog.java
    │   │   │           │   │   ├── FileTxnSnapLog.java
    │   │   │           │   │   ├── SnapShot.java
    │   │   │           │   │   ├── TxnLog.java
    │   │   │           │   │   └── Util.java
    │   │   │           │   ├── quorum/
    │   │   │           │   │   ├── AckRequestProcessor.java
    │   │   │           │   │   ├── AuthFastLeaderElection.java
    │   │   │           │   │   ├── CommitProcessor.java
    │   │   │           │   │   ├── Election.java
    │   │   │           │   │   ├── FastLeaderElection.java
    │   │   │           │   │   ├── Follower.java
    │   │   │           │   │   ├── FollowerBean.java
    │   │   │           │   │   ├── FollowerMXBean.java
    │   │   │           │   │   ├── FollowerRequestProcessor.java
    │   │   │           │   │   ├── FollowerZooKeeperServer.java
    │   │   │           │   │   ├── Leader.java
    │   │   │           │   │   ├── LeaderBean.java
    │   │   │           │   │   ├── LeaderElection.java
    │   │   │           │   │   ├── LeaderElectionBean.java
    │   │   │           │   │   ├── LeaderElectionMXBean.java
    │   │   │           │   │   ├── LeaderMXBean.java
    │   │   │           │   │   ├── LeaderZooKeeperServer.java
    │   │   │           │   │   ├── Learner.java
    │   │   │           │   │   ├── LearnerHandler.java
    │   │   │           │   │   ├── LearnerSessionTracker.java
    │   │   │           │   │   ├── LearnerSyncRequest.java
    │   │   │           │   │   ├── LearnerZooKeeperServer.java
    │   │   │           │   │   ├── LocalPeerBean.java
    │   │   │           │   │   ├── LocalPeerMXBean.java
    │   │   │           │   │   ├── Observer.java
    │   │   │           │   │   ├── ObserverMXBean.java
    │   │   │           │   │   ├── ObserverRequestProcessor.java
    │   │   │           │   │   ├── ObserverZooKeeperServer.java
    │   │   │           │   │   ├── ProposalRequestProcessor.java
    │   │   │           │   │   ├── QuorumBean.java
    │   │   │           │   │   ├── QuorumCnxManager.java
    │   │   │           │   │   ├── QuorumMXBean.java
    │   │   │           │   │   ├── QuorumPeer.java
    │   │   │           │   │   ├── QuorumPeerConfig.java
    │   │   │           │   │   ├── QuorumPeerMain.java
    │   │   │           │   │   ├── QuorumStats.java
    │   │   │           │   │   ├── QuorumZooKeeperServer.java
    │   │   │           │   │   ├── ReadOnlyBean.java
    │   │   │           │   │   ├── ReadOnlyRequestProcessor.java
    │   │   │           │   │   ├── ReadOnlyZooKeeperServer.java
    │   │   │           │   │   ├── RemotePeerBean.java
    │   │   │           │   │   ├── RemotePeerMXBean.java
    │   │   │           │   │   ├── SendAckRequestProcessor.java
    │   │   │           │   │   ├── ServerBean.java
    │   │   │           │   │   ├── ServerMXBean.java
    │   │   │           │   │   ├── StateSummary.java
    │   │   │           │   │   ├── Vote.java
    │   │   │           │   │   ├── auth/
    │   │   │           │   │   │   ├── NullQuorumAuthLearner.java
    │   │   │           │   │   │   ├── NullQuorumAuthServer.java
    │   │   │           │   │   │   ├── QuorumAuth.java
    │   │   │           │   │   │   ├── QuorumAuthLearner.java
    │   │   │           │   │   │   ├── QuorumAuthServer.java
    │   │   │           │   │   │   ├── SaslQuorumAuthLearner.java
    │   │   │           │   │   │   ├── SaslQuorumAuthServer.java
    │   │   │           │   │   │   └── SaslQuorumServerCallbackHandler.java
    │   │   │           │   │   └── flexible/
    │   │   │           │   │       ├── QuorumHierarchical.java
    │   │   │           │   │       ├── QuorumMaj.java
    │   │   │           │   │       └── QuorumVerifier.java
    │   │   │           │   ├── upgrade/
    │   │   │           │   │   ├── DataNodeV1.java
    │   │   │           │   │   ├── DataTreeV1.java
    │   │   │           │   │   ├── UpgradeMain.java
    │   │   │           │   │   ├── UpgradeSnapShot.java
    │   │   │           │   │   └── UpgradeSnapShotV1.java
    │   │   │           │   └── util/
    │   │   │           │       ├── KerberosUtil.java
    │   │   │           │       ├── OSMXBean.java
    │   │   │           │       ├── Profiler.java
    │   │   │           │       ├── SerializeUtils.java
    │   │   │           │       └── ZxidUtils.java
    │   │   │           ├── util/
    │   │   │           │   └── SecurityUtils.java
    │   │   │           └── version/
    │   │   │               └── util/
    │   │   │                   └── VerGen.java
    │   │   └── overview.html
    │   ├── systest/
    │   │   ├── README.txt
    │   │   └── org/
    │   │       └── apache/
    │   │           └── zookeeper/
    │   │               └── test/
    │   │                   └── system/
    │   │                       ├── BaseSysTest.java
    │   │                       ├── DuplicateNameException.java
    │   │                       ├── GenerateLoad.java
    │   │                       ├── Instance.java
    │   │                       ├── InstanceContainer.java
    │   │                       ├── InstanceManager.java
    │   │                       ├── NoAssignmentException.java
    │   │                       ├── NoAvailableContainers.java
    │   │                       ├── QuorumPeerInstance.java
    │   │                       ├── SimpleClient.java
    │   │                       └── SimpleSysTest.java
    │   └── test/
    │       ├── bin/
    │       │   ├── check_compatibility.py
    │       │   ├── test-github-pr.sh
    │       │   ├── test-patch.properties
    │       │   └── test-patch.sh
    │       ├── checkstyle-noframes-sorted.xsl
    │       ├── checkstyle.xml
    │       ├── config/
    │       │   └── findbugsExcludeFile.xml
    │       ├── data/
    │       │   ├── buffersize/
    │       │   │   ├── create/
    │       │   │   │   └── version-2/
    │       │   │   │       ├── log.1
    │       │   │   │       └── snapshot.0
    │       │   │   ├── set/
    │       │   │   │   └── version-2/
    │       │   │   │       ├── log.1
    │       │   │   │       └── snapshot.0
    │       │   │   └── snapshot/
    │       │   │       └── version-2/
    │       │   │           ├── log.1
    │       │   │           ├── snapshot.0
    │       │   │           └── snapshot.2
    │       │   ├── invalidsnap/
    │       │   │   └── version-2/
    │       │   │       ├── log.1
    │       │   │       ├── log.274
    │       │   │       ├── log.63b
    │       │   │       ├── snapshot.0
    │       │   │       ├── snapshot.272
    │       │   │       ├── snapshot.273
    │       │   │       ├── snapshot.639
    │       │   │       └── snapshot.83f
    │       │   ├── kerberos/
    │       │   │   ├── minikdc-krb5.conf
    │       │   │   └── minikdc.ldiff
    │       │   └── upgrade/
    │       │       ├── log.100000001
    │       │       ├── log.100001bf0
    │       │       ├── snapshot.100000000
    │       │       └── snapshot.100001bec
    │       └── org/
    │           └── apache/
    │               ├── jute/
    │               │   └── BinaryInputArchiveTest.java
    │               └── zookeeper/
    │                   ├── ClientReconnectTest.java
    │                   ├── JUnit4ZKTestRunner.java
    │                   ├── JaasConfiguration.java
    │                   ├── MockPacket.java
    │                   ├── MultiResponseTest.java
    │                   ├── MultiTransactionRecordTest.java
    │                   ├── PortAssignment.java
    │                   ├── SaslAuthTest.java
    │                   ├── ServerConfigTest.java
    │                   ├── TestableZooKeeper.java
    │                   ├── VerGenTest.java
    │                   ├── ZKTestCase.java
    │                   ├── ZooKeeperTest.java
    │                   ├── common/
    │                   │   └── TimeTest.java
    │                   ├── server/
    │                   │   ├── CRCTest.java
    │                   │   ├── DataNodeTest.java
    │                   │   ├── DataTreeTest.java
    │                   │   ├── DataTreeUnitTest.java
    │                   │   ├── DatadirCleanupManagerTest.java
    │                   │   ├── DeserializationPerfTest.java
    │                   │   ├── InvalidSnapCountTest.java
    │                   │   ├── InvalidSnapshotTest.java
    │                   │   ├── MockNIOServerCnxn.java
    │                   │   ├── NIOServerCnxnTest.java
    │                   │   ├── NettyServerCnxnTest.java
    │                   │   ├── PrepRequestProcessorTest.java
    │                   │   ├── PurgeTxnTest.java
    │                   │   ├── ReferenceCountedACLCacheTest.java
    │                   │   ├── SerializationPerfTest.java
    │                   │   ├── ServerCnxnFactoryAccessor.java
    │                   │   ├── SessionTrackerTest.java
    │                   │   ├── ToStringTest.java
    │                   │   ├── ZooKeeperServerMainTest.java
    │                   │   ├── ZooKeeperServerStartupTest.java
    │                   │   ├── ZooKeeperServerTest.java
    │                   │   ├── ZooKeeperThreadTest.java
    │                   │   ├── ZxidRolloverTest.java
    │                   │   ├── persistence/
    │                   │   │   ├── FileTxnLogTest.java
    │                   │   │   └── FileTxnSnapLogTest.java
    │                   │   ├── quorum/
    │                   │   │   ├── CnxManagerTest.java
    │                   │   │   ├── EphemeralNodeDeletionTest.java
    │                   │   │   ├── FLEBackwardElectionRoundTest.java
    │                   │   │   ├── FLECompatibilityTest.java
    │                   │   │   ├── FLEDontCareTest.java
    │                   │   │   ├── FLELostMessageTest.java
    │                   │   │   ├── FLETestUtils.java
    │                   │   │   ├── LearnerTest.java
    │                   │   │   ├── QuorumCnxManagerTest.java
    │                   │   │   ├── QuorumPeerMainTest.java
    │                   │   │   ├── QuorumPeerTestBase.java
    │                   │   │   ├── WatchLeakTest.java
    │                   │   │   ├── Zab1_0Test.java
    │                   │   │   └── auth/
    │                   │   │       ├── KerberosSecurityTestcase.java
    │                   │   │       ├── KerberosTestUtils.java
    │                   │   │       ├── MiniKdc.java
    │                   │   │       ├── MiniKdcTest.java
    │                   │   │       ├── QuorumAuthTestBase.java
    │                   │   │       ├── QuorumAuthUpgradeTest.java
    │                   │   │       ├── QuorumDigestAuthTest.java
    │                   │   │       ├── QuorumKerberosAuthTest.java
    │                   │   │       └── QuorumKerberosHostBasedAuthTest.java
    │                   │   └── util/
    │                   │       └── PortForwarder.java
    │                   └── test/
    │                       ├── ACLCountTest.java
    │                       ├── ACLRootTest.java
    │                       ├── ACLTest.java
    │                       ├── AsyncHammerTest.java
    │                       ├── AsyncOps.java
    │                       ├── AsyncOpsTest.java
    │                       ├── AsyncTest.java
    │                       ├── AtomicFileOutputStreamTest.java
    │                       ├── AuthTest.java
    │                       ├── BufferSizeTest.java
    │                       ├── ChrootAsyncTest.java
    │                       ├── ChrootClientTest.java
    │                       ├── ChrootTest.java
    │                       ├── ClientBase.java
    │                       ├── ClientHammerTest.java
    │                       ├── ClientPortBindTest.java
    │                       ├── ClientRetry.java
    │                       ├── ClientTest.java
    │                       ├── ConnectStringParserTest.java
    │                       ├── CreateModeTest.java
    │                       ├── DisconnectableZooKeeper.java
    │                       ├── DisconnectedWatcherTest.java
    │                       ├── EventTypeTest.java
    │                       ├── FLENewEpochTest.java
    │                       ├── FLEPredicateTest.java
    │                       ├── FLERestartTest.java
    │                       ├── FLETest.java
    │                       ├── FLEZeroWeightTest.java
    │                       ├── FollowerResyncConcurrencyTest.java
    │                       ├── FollowerTest.java
    │                       ├── FourLetterWordsQuorumTest.java
    │                       ├── FourLetterWordsTest.java
    │                       ├── FourLetterWordsWhiteListTest.java
    │                       ├── GetChildren2Test.java
    │                       ├── HierarchicalQuorumTest.java
    │                       ├── IntegrityCheck.java
    │                       ├── InvalidSnapshotTest.java
    │                       ├── JMXEnv.java
    │                       ├── KeeperStateTest.java
    │                       ├── LENonTerminateTest.java
    │                       ├── LETest.java
    │                       ├── LoadFromLogNoServerTest.java
    │                       ├── LoadFromLogTest.java
    │                       ├── MaxCnxnsTest.java
    │                       ├── MultiTransactionTest.java
    │                       ├── NioNettySuiteBase.java
    │                       ├── NioNettySuiteHammerTest.java
    │                       ├── NioNettySuiteTest.java
    │                       ├── NonRecoverableErrorTest.java
    │                       ├── NullDataTest.java
    │                       ├── OOMTest.java
    │                       ├── OSMXBeanTest.java
    │                       ├── ObserverHierarchicalQuorumTest.java
    │                       ├── ObserverLETest.java
    │                       ├── ObserverQuorumHammerTest.java
    │                       ├── ObserverTest.java
    │                       ├── QuorumBase.java
    │                       ├── QuorumHammerTest.java
    │                       ├── QuorumQuotaTest.java
    │                       ├── QuorumTest.java
    │                       ├── QuorumUtil.java
    │                       ├── QuorumZxidSyncTest.java
    │                       ├── ReadOnlyModeTest.java
    │                       ├── RecoveryTest.java
    │                       ├── RepeatStartupTest.java
    │                       ├── RestoreCommittedLogTest.java
    │                       ├── SaslAuthDesignatedClientTest.java
    │                       ├── SaslAuthDesignatedServerTest.java
    │                       ├── SaslAuthFailDesignatedClientTest.java
    │                       ├── SaslAuthFailNotifyTest.java
    │                       ├── SaslAuthFailTest.java
    │                       ├── SaslAuthMissingClientConfigTest.java
    │                       ├── SaslClientTest.java
    │                       ├── SessionInvalidationTest.java
    │                       ├── SessionTest.java
    │                       ├── SledgeHammer.java
    │                       ├── StandaloneTest.java
    │                       ├── StatTest.java
    │                       ├── StaticHostProviderTest.java
    │                       ├── SyncCallTest.java
    │                       ├── TestHammer.java
    │                       ├── TestUtils.java
    │                       ├── TruncateTest.java
    │                       ├── UpgradeTest.java
    │                       ├── WatchEventWhenAutoReset.java
    │                       ├── WatchedEventTest.java
    │                       ├── WatcherFuncTest.java
    │                       ├── WatcherTest.java
    │                       ├── ZkDatabaseCorruptionTest.java
    │                       ├── ZooKeeperQuotaTest.java
    │                       └── ZooKeeperTestClient.java
    ├── lastRevision.bat
    ├── lastRevision.sh
    ├── packages/
    │   ├── deb/
    │   │   ├── init.d/
    │   │   │   └── zookeeper
    │   │   └── zookeeper.control/
    │   │       ├── conffile
    │   │       ├── control
    │   │       ├── postinst
    │   │       ├── postrm
    │   │       ├── preinst
    │   │       └── prerm
    │   ├── rpm/
    │   │   ├── init.d/
    │   │   │   └── zookeeper
    │   │   └── spec/
    │   │       └── zookeeper.spec
    │   ├── templates/
    │   │   └── conf/
    │   │       └── zookeeper-env.sh
    │   └── update-zookeeper-env.sh
    ├── pom.template
    ├── recipes/
    │   ├── README.txt
    │   ├── build-recipes.xml
    │   ├── build.xml
    │   ├── election/
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── src/
    │   │   │   └── java/
    │   │   │       └── org/
    │   │   │           └── apache/
    │   │   │               └── zookeeper/
    │   │   │                   └── recipes/
    │   │   │                       └── leader/
    │   │   │                           ├── LeaderElectionAware.java
    │   │   │                           ├── LeaderElectionSupport.java
    │   │   │                           └── LeaderOffer.java
    │   │   └── test/
    │   │       └── org/
    │   │           └── apache/
    │   │               └── zookeeper/
    │   │                   └── recipes/
    │   │                       └── leader/
    │   │                           └── LeaderElectionSupportTest.java
    │   ├── lock/
    │   │   ├── README.txt
    │   │   ├── build.xml
    │   │   ├── src/
    │   │   │   ├── c/
    │   │   │   │   ├── INSTALL
    │   │   │   │   ├── LICENSE
    │   │   │   │   ├── Makefile.am
    │   │   │   │   ├── README.txt
    │   │   │   │   ├── acinclude.m4
    │   │   │   │   ├── aminclude.am
    │   │   │   │   ├── c-doc.Doxyfile
    │   │   │   │   ├── configure.ac
    │   │   │   │   ├── include/
    │   │   │   │   │   └── zoo_lock.h
    │   │   │   │   ├── src/
    │   │   │   │   │   └── zoo_lock.c
    │   │   │   │   └── tests/
    │   │   │   │       ├── TestClient.cc
    │   │   │   │       ├── TestDriver.cc
    │   │   │   │       ├── Util.cc
    │   │   │   │       ├── Util.h
    │   │   │   │       └── zkServer.sh
    │   │   │   └── java/
    │   │   │       └── org/
    │   │   │           └── apache/
    │   │   │               └── zookeeper/
    │   │   │                   └── recipes/
    │   │   │                       └── lock/
    │   │   │                           ├── LockListener.java
    │   │   │                           ├── ProtocolSupport.java
    │   │   │                           ├── WriteLock.java
    │   │   │                           ├── ZNodeName.java
    │   │   │                           └── ZooKeeperOperation.java
    │   │   └── test/
    │   │       └── org/
    │   │           └── apache/
    │   │               └── zookeeper/
    │   │                   └── recipes/
    │   │                       └── lock/
    │   │                           ├── WriteLockTest.java
    │   │                           └── ZNodeNameTest.java
    │   └── queue/
    │       ├── README.txt
    │       ├── build.xml
    │       ├── src/
    │       │   ├── c/
    │       │   │   ├── INSTALL
    │       │   │   ├── LICENSE
    │       │   │   ├── Makefile.am
    │       │   │   ├── README.txt
    │       │   │   ├── acinclude.m4
    │       │   │   ├── aminclude.am
    │       │   │   ├── c-doc.Doxyfile
    │       │   │   ├── configure.ac
    │       │   │   ├── include/
    │       │   │   │   └── zoo_queue.h
    │       │   │   ├── src/
    │       │   │   │   └── zoo_queue.c
    │       │   │   └── tests/
    │       │   │       ├── TestClient.cc
    │       │   │       ├── TestDriver.cc
    │       │   │       ├── Util.cc
    │       │   │       ├── Util.h
    │       │   │       └── zkServer.sh
    │       │   └── java/
    │       │       └── org/
    │       │           └── apache/
    │       │               └── zookeeper/
    │       │                   └── recipes/
    │       │                       └── queue/
    │       │                           └── DistributedQueue.java
    │       └── test/
    │           └── org/
    │               └── apache/
    │                   └── zookeeper/
    │                       └── recipes/
    │                           └── queue/
    │                               └── DistributedQueueTest.java
    └── zookeeper.jute
Download .txt
Showing preview only (636K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (7569 symbols across 680 files)

FILE: docs/skin/breadcrumbs-optimized.js
  function sc (line 36) | function sc(s) {
  function getdirs (line 40) | function getdirs() {
  function getcrumbs (line 49) | function getcrumbs( d )
  function gettrail (line 64) | function gettrail( c )
  function gettrailXHTML (line 75) | function gettrailXHTML( c )

FILE: docs/skin/breadcrumbs.js
  function sentenceCase (line 114) | function sentenceCase( string )
  function getDirectoriesInURL (line 124) | function getDirectoriesInURL()
  function getBreadcrumbs (line 150) | function getBreadcrumbs( dirs )
  function getCrumbTrail (line 180) | function getCrumbTrail( crumbs )
  function getCrumbTrailXHTML (line 203) | function getCrumbTrailXHTML( crumbs )

FILE: docs/skin/fontsize.js
  function init (line 17) | function init()
  function checkBrowser (line 22) | function checkBrowser(){
  function ndeSetTextSize (line 32) | function ndeSetTextSize(chgsize,rs)
  function ndeGetDocTextSize (line 92) | function ndeGetDocTextSize()
  function ndeCreateCookie (line 129) | function ndeCreateCookie(name,value,days)
  function ndeReadCookie (line 145) | function ndeReadCookie(name)

FILE: docs/skin/getBlank.js
  function getBlank (line 28) | function getBlank (form, stdValue){
  function getPrompt (line 34) | function getPrompt (form, stdValue){

FILE: docs/skin/getMenu.js
  function SwitchMenu (line 29) | function SwitchMenu(obj, thePath)

FILE: docs/skin/menu.js
  function SwitchMenu (line 28) | function SwitchMenu(obj)

FILE: docs/skin/prototype.js
  function $ (line 103) | function $() {

FILE: src/c/include/recordio.h
  type buffer (line 34) | struct buffer {
  type buffer (line 40) | struct buffer
  type iarchive (line 42) | struct iarchive {
  type oarchive (line 55) | struct oarchive {
  type oarchive (line 70) | struct oarchive
  type oarchive (line 71) | struct oarchive
  type iarchive (line 72) | struct iarchive
  type iarchive (line 73) | struct iarchive
  type oarchive (line 74) | struct oarchive
  type oarchive (line 75) | struct oarchive

FILE: src/c/include/zookeeper.h
  type ZOO_ERRORS (line 86) | enum ZOO_ERRORS {
  type ZooLogLevel (line 132) | typedef enum {ZOO_LOG_LEVEL_ERROR=1,ZOO_LOG_LEVEL_WARN=2,ZOO_LOG_LEVEL_I...
  type zhandle_t (line 252) | typedef struct _zhandle zhandle_t;
  type clientid_t (line 261) | typedef struct {
  type zoo_op_t (line 275) | typedef struct zoo_op {
  type ACL_vector (line 337) | struct ACL_vector
  type Stat (line 370) | struct Stat
  type zoo_op_result_t (line 391) | typedef struct zoo_op_result {
  type sockaddr (line 517) | struct sockaddr
  type timeval (line 541) | struct timeval
  type timeval (line 544) | struct timeval
  type Stat (line 606) | struct Stat
  type Stat (line 634) | struct Stat
  type String_vector (line 658) | struct String_vector
  type String_vector (line 686) | struct String_vector
  type Stat (line 686) | struct Stat
  type ACL_vector (line 733) | struct ACL_vector
  type Stat (line 734) | struct Stat
  type ACL_vector (line 776) | struct ACL_vector
  type ACL_vector (line 1121) | struct ACL_vector
  type ACL_vector (line 1255) | struct ACL_vector
  type Stat (line 1298) | struct Stat
  type Stat (line 1325) | struct Stat
  type Stat (line 1348) | struct Stat
  type Stat (line 1378) | struct Stat
  type Stat (line 1430) | struct Stat
  type String_vector (line 1450) | struct String_vector
  type String_vector (line 1477) | struct String_vector
  type String_vector (line 1500) | struct String_vector
  type Stat (line 1500) | struct Stat
  type String_vector (line 1530) | struct String_vector
  type Stat (line 1530) | struct Stat
  type ACL_vector (line 1548) | struct ACL_vector
  type Stat (line 1549) | struct Stat
  type ACL_vector (line 1570) | struct ACL_vector

FILE: src/c/src/cli.c
  type timeval (line 58) | struct timeval
  function printProfileInfo (line 68) | static __attribute__ ((unused)) void
  function watcher (line 112) | void watcher(zhandle_t *zzh, int type, int state, const char *path,
  function dumpStat (line 158) | void dumpStat(const struct Stat *stat) {
  function my_string_completion (line 184) | void my_string_completion(int rc, const char *name, const void *data) {
  function my_string_completion_free_data (line 193) | void my_string_completion_free_data(int rc, const char *name, const void...
  function my_data_completion (line 198) | void my_data_completion(int rc, const char *value, int value_len,
  function my_silent_data_completion (line 219) | void my_silent_data_completion(int rc, const char *value, int value_len,
  function my_strings_completion (line 231) | void my_strings_completion(int rc, const struct String_vector *strings,
  function my_strings_stat_completion (line 256) | void my_strings_stat_completion(int rc, const struct String_vector *stri...
  function my_void_completion (line 264) | void my_void_completion(int rc, const void *data) {
  function my_stat_completion (line 271) | void my_stat_completion(int rc, const struct Stat *stat, const void *dat...
  function my_silent_stat_completion (line 279) | void my_silent_stat_completion(int rc, const struct Stat *stat,
  function sendRequest (line 286) | static void sendRequest(const char* data) {
  function od_completion (line 292) | void od_completion(int rc, const struct Stat *stat, const void *data) {
  function startsWith (line 308) | int startsWith(const char *line, const char *prefix) {
  function processline (line 316) | void processline(char *line) {
  function main (line 524) | int main(int argc, char **argv) {

FILE: src/c/src/hashtable/hashtable.c
  type hashtable (line 28) | struct hashtable
  type hashtable (line 33) | struct hashtable
  type hashtable (line 41) | struct hashtable
  type hashtable (line 41) | struct hashtable
  type entry (line 43) | struct entry
  type entry (line 43) | struct entry
  type entry (line 45) | struct entry
  function hash (line 56) | unsigned int
  function hashtable_expand (line 70) | static int
  function hashtable_count (line 129) | unsigned int
  function hashtable_insert (line 136) | int
  type hashtable (line 163) | struct hashtable
  type entry (line 165) | struct entry
  type hashtable (line 181) | struct hashtable
  type entry (line 186) | struct entry
  type entry (line 187) | struct entry
  function hashtable_destroy (line 215) | void

FILE: src/c/src/hashtable/hashtable.h
  type hashtable (line 12) | struct hashtable
  type hashtable (line 80) | struct hashtable
  type hashtable (line 105) | struct hashtable
  type hashtable (line 123) | struct hashtable
  type hashtable (line 141) | struct hashtable
  type hashtable (line 158) | struct hashtable
  type hashtable (line 170) | struct hashtable

FILE: src/c/src/hashtable/hashtable_itr.c
  type hashtable_itr (line 11) | struct hashtable_itr
  type hashtable (line 12) | struct hashtable
  type hashtable_itr (line 15) | struct hashtable_itr
  type hashtable_itr (line 15) | struct hashtable_itr
  type hashtable_itr (line 16) | struct hashtable_itr
  function hashtable_iterator_advance (line 41) | int
  function hashtable_iterator_remove (line 86) | int
  function hashtable_iterator_search (line 115) | int /* returns zero if not found */

FILE: src/c/src/hashtable/hashtable_itr.h
  type hashtable_itr (line 15) | struct hashtable_itr
  type hashtable_itr (line 28) | struct hashtable_itr
  type hashtable (line 29) | struct hashtable
  type hashtable_itr (line 36) | struct hashtable_itr
  type hashtable_itr (line 45) | struct hashtable_itr
  type hashtable_itr (line 55) | struct hashtable_itr
  type hashtable_itr (line 64) | struct hashtable_itr
  type hashtable_itr (line 72) | struct hashtable_itr
  type hashtable (line 73) | struct hashtable

FILE: src/c/src/hashtable/hashtable_private.h
  type entry (line 9) | struct entry
  type hashtable (line 16) | struct hashtable {
  type hashtable (line 28) | struct hashtable
  function indexFor (line 32) | static inline unsigned int

FILE: src/c/src/load_gen.c
  function ensureConnected (line 43) | void ensureConnected(){
  function incCounter (line 51) | void incCounter(int delta){
  function setCounter (line 58) | void setCounter(int cnt){
  function waitCounter (line 65) | void waitCounter(){
  function listener (line 73) | void listener(zhandle_t *zzh, int type, int state, const char *path,void...
  function create_completion (line 84) | void create_completion(int rc, const char *name, const void *data) {
  function doCreateNodes (line 91) | int doCreateNodes(const char* root, int count){
  function createRoot (line 108) | int createRoot(const char* root){
  function write_completion (line 113) | void write_completion(int rc, const struct Stat *stat, const void *data) {
  function doWrites (line 120) | int doWrites(const char* root, int count){
  function read_completion (line 134) | void read_completion(int rc, const char *value, int value_len,
  function doReads (line 149) | int doReads(const char* root, int count){
  function delete_completion (line 163) | void delete_completion(int rc, const void *data) {
  function doDeletes (line 167) | int doDeletes(const char* root, int count){
  function free_String_vector (line 181) | static int free_String_vector(struct String_vector *v) {
  function recursiveDelete (line 195) | int recursiveDelete(const char* root){
  function usage (line 226) | void usage(char *argv[]){
  function main (line 232) | int main(int argc, char **argv) {

FILE: src/c/src/mt_adaptor.c
  function zoo_lock_auth (line 47) | int zoo_lock_auth(zhandle_t *zh)
  function zoo_unlock_auth (line 51) | int zoo_unlock_auth(zhandle_t *zh)
  function lock_buffer_list (line 55) | int lock_buffer_list(buffer_head_t *l)
  function unlock_buffer_list (line 59) | int  unlock_buffer_list(buffer_head_t *l)
  function lock_completion_list (line 63) | int lock_completion_list(completion_head_t *l)
  function unlock_completion_list (line 67) | int unlock_completion_list(completion_head_t *l)
  type sync_completion (line 72) | struct sync_completion
  type sync_completion (line 74) | struct sync_completion
  type sync_completion (line 74) | struct sync_completion
  type sync_completion (line 74) | struct sync_completion
  function wait_sync_completion (line 81) | int wait_sync_completion(struct sync_completion *sc)
  function free_sync_completion (line 91) | void free_sync_completion(struct sync_completion *sc)
  function notify_sync_completion (line 100) | void notify_sync_completion(struct sync_completion *sc)
  function process_async (line 108) | int process_async(int outstanding_sync)
  function handle_error (line 117) | int handle_error(SOCKET sock, char* message)
  function create_socket_pair (line 125) | int create_socket_pair(SOCKET fds[2])
  function set_nonblock (line 174) | static int set_nonblock(SOCKET fd){
  function set_nonblock (line 182) | static int set_nonblock(int fd){
  function wait_for_others (line 189) | void wait_for_others(zhandle_t* zh)
  function notify_thread_ready (line 198) | void notify_thread_ready(zhandle_t* zh)
  function start_threads (line 210) | void start_threads(zhandle_t* zh)
  type adaptor_threads (line 233) | struct adaptor_threads
  function adaptor_finish (line 272) | void adaptor_finish(zhandle_t *zh)
  function adaptor_destroy (line 300) | void adaptor_destroy(zhandle_t *zh)
  function wakeup_io_thread (line 323) | int wakeup_io_thread(zhandle_t *zh)
  function adaptor_send_queue (line 334) | int adaptor_send_queue(zhandle_t *zh, int timeout)
  type timeval (line 347) | struct timeval
  type timeval (line 350) | struct timeval
  type pollfd (line 362) | struct pollfd
  type adaptor_threads (line 363) | struct adaptor_threads
  type timeval (line 371) | struct timeval
  type adaptor_threads (line 398) | struct adaptor_threads
  type timeval (line 404) | struct timeval
  function inc_ref_counter (line 472) | int32_t inc_ref_counter(zhandle_t* zh,int i)
  function fetch_and_add (line 482) | int32_t fetch_and_add(volatile int32_t* operand, int incr)
  function get_xid (line 492) | __attribute__((constructor)) int32_t get_xid()
  function enter_critical (line 501) | int enter_critical(zhandle_t* zh)
  function leave_critical (line 511) | int leave_critical(zhandle_t* zh)

FILE: src/c/src/recordio.c
  function deallocate_String (line 30) | void deallocate_String(char **s)
  function deallocate_Buffer (line 37) | void deallocate_Buffer(struct buffer *b)
  type buff_struct (line 44) | struct buff_struct {
  function resize_buffer (line 50) | static int resize_buffer(struct buff_struct *s, int newlen)
  function oa_start_record (line 65) | int oa_start_record(struct oarchive *oa, const char *tag)
  function oa_end_record (line 69) | int oa_end_record(struct oarchive *oa, const char *tag)
  function oa_serialize_int (line 73) | int oa_serialize_int(struct oarchive *oa, const char *tag, const int32_t...
  function zoo_htonll (line 85) | int64_t zoo_htonll(int64_t v)
  function oa_serialize_long (line 101) | int oa_serialize_long(struct oarchive *oa, const char *tag, const int64_...
  function oa_start_vector (line 113) | int oa_start_vector(struct oarchive *oa, const char *tag, const int32_t ...
  function oa_end_vector (line 117) | int oa_end_vector(struct oarchive *oa, const char *tag)
  function oa_serialize_bool (line 121) | int oa_serialize_bool(struct oarchive *oa, const char *name, const int32...
  function oa_serialize_buffer (line 135) | int oa_serialize_buffer(struct oarchive *oa, const char *name,
  function oa_serialize_string (line 161) | int oa_serialize_string(struct oarchive *oa, const char *name, char **s)
  function ia_start_record (line 183) | int ia_start_record(struct iarchive *ia, const char *tag)
  function ia_end_record (line 187) | int ia_end_record(struct iarchive *ia, const char *tag)
  function ia_deserialize_int (line 191) | int ia_deserialize_int(struct iarchive *ia, const char *tag, int32_t *co...
  function ia_deserialize_long (line 203) | int ia_deserialize_long(struct iarchive *ia, const char *tag, int64_t *c...
  function ia_start_vector (line 216) | int ia_start_vector(struct iarchive *ia, const char *tag, int32_t *count)
  function ia_end_vector (line 220) | int ia_end_vector(struct iarchive *ia, const char *tag)
  function ia_deserialize_bool (line 224) | int ia_deserialize_bool(struct iarchive *ia, const char *name, int32_t *v)
  function ia_deserialize_buffer (line 237) | int ia_deserialize_buffer(struct iarchive *ia, const char *name,
  function ia_deserialize_string (line 260) | int ia_deserialize_string(struct iarchive *ia, const char *name, char **s)
  type iarchive (line 283) | struct iarchive
  type oarchive (line 291) | struct oarchive
  type iarchive (line 299) | struct iarchive
  type iarchive (line 301) | struct iarchive
  type buff_struct (line 302) | struct buff_struct
  type buff_struct (line 305) | struct buff_struct
  type oarchive (line 318) | struct oarchive
  type oarchive (line 320) | struct oarchive
  type buff_struct (line 321) | struct buff_struct
  type buff_struct (line 324) | struct buff_struct
  function close_buffer_iarchive (line 337) | void close_buffer_iarchive(struct iarchive **ia)
  function close_buffer_oarchive (line 344) | void close_buffer_oarchive(struct oarchive **oa, int free_buffer)
  type oarchive (line 357) | struct oarchive
  type buff_struct (line 359) | struct buff_struct
  function get_buffer_len (line 362) | int get_buffer_len(struct oarchive *oa)

FILE: src/c/src/st_adaptor.c
  function zoo_lock_auth (line 27) | int zoo_lock_auth(zhandle_t *zh)
  function zoo_unlock_auth (line 31) | int zoo_unlock_auth(zhandle_t *zh)
  function lock_buffer_list (line 35) | int lock_buffer_list(buffer_head_t *l)
  function unlock_buffer_list (line 39) | int unlock_buffer_list(buffer_head_t *l)
  function lock_completion_list (line 43) | int lock_completion_list(completion_head_t *l)
  function unlock_completion_list (line 47) | int unlock_completion_list(completion_head_t *l)
  type sync_completion (line 51) | struct sync_completion
  type sync_completion (line 53) | struct sync_completion
  type sync_completion (line 53) | struct sync_completion
  function wait_sync_completion (line 55) | int wait_sync_completion(struct sync_completion *sc)
  function free_sync_completion (line 60) | void free_sync_completion(struct sync_completion *sc)
  function notify_sync_completion (line 65) | void notify_sync_completion(struct sync_completion *sc)
  function process_async (line 69) | int process_async(int outstanding_sync)
  function adaptor_init (line 74) | int adaptor_init(zhandle_t *zh)
  function adaptor_finish (line 79) | void adaptor_finish(zhandle_t *zh){}
  function adaptor_destroy (line 81) | void adaptor_destroy(zhandle_t *zh){}
  function adaptor_send_queue (line 85) | int adaptor_send_queue(zhandle_t *zh, int timeout)
  function inc_ref_counter (line 90) | int32_t inc_ref_counter(zhandle_t* zh,int i)
  function get_xid (line 96) | int32_t get_xid()
  function enter_critical (line 105) | int enter_critical(zhandle_t* zh)
  function leave_critical (line 110) | int leave_critical(zhandle_t* zh)

FILE: src/c/src/winport.c
  function pthread_mutex_lock (line 26) | int pthread_mutex_lock(pthread_mutex_t* _mutex ){
  function pthread_mutex_unlock (line 32) | int pthread_mutex_unlock( pthread_mutex_t* _mutex ){
  function pthread_mutex_init (line 37) | int pthread_mutex_init(pthread_mutex_t* _mutex, void* ignoredAttr){
  function pthread_mutex_destroy (line 46) | int pthread_mutex_destroy(pthread_mutex_t* _mutex)
  function pthread_create (line 52) | int pthread_create(pthread_t *thread, const pthread_attr_t *attr, unsign...
  function pthread_equal (line 61) | int pthread_equal(pthread_t t1, pthread_t t2){
  function pthread_t (line 66) | pthread_t pthread_self(){
  function pthread_join (line 73) | int pthread_join(pthread_t _thread, void** ignore)
  function pthread_detach (line 79) | int pthread_detach(pthread_t _thread)
  function pthread_mutexattr_init (line 85) | void pthread_mutexattr_init(pthread_mutexattr_t* ignore){}
  function pthread_mutexattr_settype (line 86) | void pthread_mutexattr_settype(pthread_mutexattr_t* ingore_attr, int ign...
  function pthread_mutexattr_destroy (line 87) | void pthread_mutexattr_destroy(pthread_mutexattr_t* ignore_attr){}
  function pthread_cond_init (line 89) | int
  function pthread_cond_destroy (line 111) | int pthread_cond_destroy(pthread_cond_t *cond)
  function pthread_cond_signal (line 119) | int
  function pthread_cond_broadcast (line 135) | int
  function pthread_cond_wait (line 169) | int
  function pthread_key_create (line 207) | int pthread_key_create(pthread_key_t *key, void (*destructor)(void *) )
  function pthread_key_delete (line 232) | int pthread_key_delete(pthread_key_t key)
  function pthread_setspecific (line 254) | int pthread_setspecific(pthread_key_t key, const void *value)
  function gettimeofday (line 260) | int gettimeofday(struct timeval *tp, void *tzp) {
  function close (line 269) | int close(SOCKET fd) {
  function Win32WSAStartup (line 273) | int Win32WSAStartup()
  function Win32WSACleanup (line 294) | void Win32WSACleanup()

FILE: src/c/src/winport.h
  type HANDLE (line 58) | typedef HANDLE pthread_mutex_t;
  type pthread_t_ (line 60) | struct pthread_t_
  type pthread_t (line 66) | typedef struct pthread_t_ pthread_t;
  type pthread_mutexattr_t (line 67) | typedef int pthread_mutexattr_t;
  type pthread_condattr_t (line 68) | typedef int pthread_condattr_t;
  type pthread_attr_t (line 69) | typedef int pthread_attr_t;
  type pthread_cond_t (line 89) | typedef struct
  type pthread_key_t_ (line 118) | struct pthread_key_t_
  type pthread_key_t (line 124) | typedef struct pthread_key_t_ pthread_key_t;
  type timeval (line 130) | struct timeval

FILE: src/c/src/zk_adaptor.h
  type _buffer_list (line 58) | struct _buffer_list
  type _completion_list (line 59) | struct _completion_list
  type buffer_head_t (line 61) | typedef struct _buffer_head {
  type completion_head_t (line 69) | typedef struct _completion_head {
  type sync_completion (line 83) | struct sync_completion {
  type auth_info (line 113) | typedef struct _auth_info {
  type buffer_list_t (line 125) | typedef struct _buffer_list {
  type connect_req (line 135) | struct connect_req {
  type prime_struct (line 145) | struct prime_struct {
  type adaptor_threads (line 156) | struct adaptor_threads {
  type auth_list_head_t (line 172) | typedef struct _auth_list_head {
  type _zhandle (line 183) | struct _zhandle {
  type sync_completion (line 236) | struct sync_completion
  type sync_completion (line 237) | struct sync_completion
  type sync_completion (line 238) | struct sync_completion
  type sync_completion (line 239) | struct sync_completion

FILE: src/c/src/zk_hashtable.c
  type watcher_object_t (line 27) | typedef struct _watcher_object {
  type _zk_hashtable (line 34) | struct _zk_hashtable {
  type watcher_object_list (line 38) | struct watcher_object_list {
  type hashtable_impl (line 43) | typedef struct hashtable hashtable_impl;
  function hashtable_impl (line 45) | hashtable_impl* getImpl(zk_hashtable* ht){
  function watcher_object_t (line 49) | watcher_object_t* getFirstWatcher(zk_hashtable* ht,const char* path)
  function watcher_object_t (line 58) | watcher_object_t* clone_watcher_object(watcher_object_t* wo)
  function string_hash_djb2 (line 67) | static unsigned int string_hash_djb2(void *str)
  function string_equal (line 78) | static int string_equal(void *key1,void *key2)
  function watcher_object_t (line 83) | static watcher_object_t* create_watcher_object(watcher_fn watcher,void* ...
  function watcher_object_list_t (line 92) | static watcher_object_list_t* create_watcher_object_list(watcher_object_...
  function destroy_watcher_object_list (line 100) | static void destroy_watcher_object_list(watcher_object_list_t* list)
  function zk_hashtable (line 115) | zk_hashtable* create_zk_hashtable()
  function do_clean_hashtable (line 123) | static void do_clean_hashtable(zk_hashtable* ht)
  function destroy_zk_hashtable (line 138) | void destroy_zk_hashtable(zk_hashtable* ht)
  function watcher_object_t (line 150) | static watcher_object_t* search_watcher(watcher_object_list_t** wl,watch...
  function add_to_list (line 161) | static int add_to_list(watcher_object_list_t **wl, watcher_object_t *wo,
  function do_insert_watcher_object (line 180) | static int do_insert_watcher_object(zk_hashtable *ht, const char *path, ...
  type hashtable_itr (line 206) | struct hashtable_itr
  function insert_watcher_object (line 220) | static int insert_watcher_object(zk_hashtable *ht, const char *path,
  function copy_watchers (line 228) | static void copy_watchers(watcher_object_list_t *from, watcher_object_li...
  function copy_table (line 238) | static void copy_table(zk_hashtable *from, watcher_object_list_t *to) {
  function collect_session_watchers (line 252) | static void collect_session_watchers(zhandle_t *zh,
  function add_for_event (line 260) | static void add_for_event(zk_hashtable *ht, char *path, watcher_object_l...
  function do_foreach_watcher (line 272) | static void do_foreach_watcher(watcher_object_t* wo,zhandle_t* zh,
  function watcher_object_list_t (line 285) | watcher_object_list_t *collectWatchers(zhandle_t *zh,int type, char *path)
  function deliverWatchers (line 318) | void deliverWatchers(zhandle_t *zh, int type,int state, char *path, watc...
  function activateWatcher (line 326) | void activateWatcher(zhandle_t *zh, watcher_registration_t* reg, int rc)

FILE: src/c/src/zk_hashtable.h
  type watcher_object_list_t (line 28) | typedef struct watcher_object_list watcher_object_list_t;
  type zk_hashtable (line 29) | typedef struct _zk_hashtable zk_hashtable;
  type zk_hashtable (line 37) | typedef zk_hashtable *(*result_checker_fn)(zhandle_t *, int rc);
  type watcher_registration_t (line 44) | typedef struct _watcher_registration {
  type watcher_object_list (line 63) | struct watcher_object_list

FILE: src/c/src/zk_log.c
  type DWORD (line 27) | typedef DWORD pid_t;
  function freeBuffer (line 47) | void freeBuffer(void* p){
  function prepareTSDKeys (line 51) | __attribute__((constructor)) void prepareTSDKeys() {
  function FILE (line 92) | FILE* getLogStream(){
  function zoo_set_log_stream (line 98) | void zoo_set_log_stream(FILE* stream){
  type timeval (line 103) | struct timeval
  type tm (line 104) | struct tm
  function log_message (line 128) | void log_message(ZooLogLevel curLevel,int line,const char* funcName,
  function zoo_set_debug_level (line 169) | void zoo_set_debug_level(ZooLogLevel level)

FILE: src/c/src/zookeeper.c
  type Id (line 154) | struct Id
  type Id (line 155) | struct Id
  type ACL (line 156) | struct ACL
  type ACL (line 157) | struct ACL
  type ACL (line 158) | struct ACL
  type ACL_vector (line 159) | struct ACL_vector
  type ACL_vector (line 160) | struct ACL_vector
  type ACL_vector (line 161) | struct ACL_vector
  type auth_completion_list_t (line 173) | typedef struct _auth_completion_list {
  type completion_t (line 179) | typedef struct completion {
  type completion_list_t (line 194) | typedef struct _completion_list {
  type sockaddr_storage (line 205) | struct sockaddr_storage
  type iarchive (line 209) | struct iarchive
  type iarchive (line 210) | struct iarchive
  function zookeeper_send (line 238) | static ssize_t zookeeper_send(int s, const void* buf, size_t len)
  function zoo_set_context (line 253) | void zoo_set_context(zhandle_t *zh, void *context)
  function zoo_recv_timeout (line 260) | int zoo_recv_timeout(zhandle_t *zh)
  function auth_info (line 267) | static auth_info* get_last_auth(auth_list_head_t *auth_list) {
  function free_auth_completion (line 279) | static void free_auth_completion(auth_completion_list_t *a_list) {
  function add_auth_completion (line 298) | static void add_auth_completion(auth_completion_list_t* a_list, void_com...
  function get_auth_completions (line 321) | static void get_auth_completions(auth_list_head_t *auth_list, auth_compl...
  function add_last_auth (line 337) | static void add_last_auth(auth_list_head_t *auth_list, auth_info *add_el) {
  function init_auth_info (line 352) | static void init_auth_info(auth_list_head_t *auth_list)
  function mark_active_auth (line 357) | static void mark_active_auth(zhandle_t *zh) {
  function free_auth_info (line 370) | static void free_auth_info(auth_list_head_t *auth_list)
  function is_unrecoverable (line 385) | int is_unrecoverable(zhandle_t *zh)
  function zk_hashtable (line 390) | zk_hashtable *exists_result_checker(zhandle_t *zh, int rc)
  function zk_hashtable (line 400) | zk_hashtable *data_result_checker(zhandle_t *zh, int rc)
  function zk_hashtable (line 405) | zk_hashtable *child_result_checker(zhandle_t *zh, int rc)
  function destroy (line 414) | static void destroy(zhandle_t *zh)
  function setup_random (line 446) | static void setup_random()
  function getaddrinfo_errno (line 483) | static int getaddrinfo_errno(int rc) {
  type sockaddr_storage (line 508) | struct sockaddr_storage
  type hostent (line 548) | struct hostent
  type sockaddr_in (line 550) | struct sockaddr_in
  type sockaddr_in (line 573) | struct sockaddr_in
  function else (line 582) | else if (addr->ss_family == AF_INET6) {
  type addrinfo (line 602) | struct addrinfo
  type sockaddr_storage (line 693) | struct sockaddr_storage
  function clientid_t (line 711) | const clientid_t *zoo_client_id(zhandle_t *zh)
  function null_watcher_fn (line 716) | static void null_watcher_fn(zhandle_t* p1, int p2, int p3,const char* p4...
  function watcher_fn (line 718) | watcher_fn zoo_set_watcher(zhandle_t *zh,watcher_fn newFn)
  type sockaddr (line 729) | struct sockaddr
  type sockaddr (line 730) | struct sockaddr
  function log_env (line 741) | static void log_env() {
  function zhandle_t (line 804) | zhandle_t *zookeeper_init(const char *host, watcher_fn watcher,
  function free_duplicate_path (line 914) | void free_duplicate_path(const char *free_path, const char* path) {
  function buffer_list_t (line 959) | static buffer_list_t *allocate_buffer(char *buff, int len)
  function free_buffer (line 972) | static void free_buffer(buffer_list_t *b)
  function buffer_list_t (line 983) | static buffer_list_t *dequeue_buffer(buffer_head_t *list)
  function remove_buffer (line 999) | static int remove_buffer(buffer_head_t *list)
  function queue_buffer (line 1009) | static void queue_buffer(buffer_head_t *list, buffer_list_t *b, int add_...
  function queue_buffer_bytes (line 1032) | static int queue_buffer_bytes(buffer_head_t *list, char *buff, int len)
  function queue_front_buffer_bytes (line 1041) | static int queue_front_buffer_bytes(buffer_head_t *list, char *buff, int...
  function get_queue_len (line 1050) | static __attribute__ ((unused)) int get_queue_len(buffer_head_t *list)
  function send_buffer (line 1069) | static int send_buffer(int fd, buffer_list_t *buff)
  function free_buffers (line 1180) | void free_buffers(buffer_head_t *list)
  function free_completions (line 1186) | void free_completions(zhandle_t *zh,int callCompletion,int reason)
  function cleanup_bufs (line 1249) | static void cleanup_bufs(zhandle_t *zh,int callCompletion,int rc)
  function handle_error (line 1262) | static void handle_error(zhandle_t *zh,int rc)
  function handle_socket_error_msg (line 1284) | static int handle_socket_error_msg(zhandle_t *zh, int line, int rc,
  function auth_completion_func (line 1301) | static void auth_completion_func(int rc, zhandle_t* zh)
  function send_info_packet (line 1341) | static int send_info_packet(zhandle_t *zh, auth_info* auth) {
  function send_auth_info (line 1362) | static int send_auth_info(zhandle_t *zh) {
  function send_last_auth_info (line 1381) | static int send_last_auth_info(zhandle_t *zh)
  function free_key_list (line 1398) | static void free_key_list(char **list, int count)
  function send_set_watches (line 1408) | static int send_set_watches(zhandle_t *zh)
  function serialize_prime_connect (line 1445) | static int serialize_prime_connect(struct connect_req *req, char* buffer){
  function deserialize_prime_response (line 1473) | static int deserialize_prime_response(struct prime_struct *req, char* bu...
  function prime_connection (line 1500) | static int prime_connection(zhandle_t *zh)
  function calculate_interval (line 1534) | static inline int calculate_interval(const struct timeval *start,
  function get_timeval (line 1545) | static struct timeval get_timeval(int interval)
  function send_ping (line 1561) | int send_ping(zhandle_t* zh)
  type timeval (line 1579) | struct timeval
  type timeval (line 1585) | struct timeval
  type timeval (line 1588) | struct timeval
  type sockaddr (line 1633) | struct sockaddr
  type sockaddr_in6 (line 1633) | struct sockaddr_in6
  type sockaddr (line 1639) | struct sockaddr
  type sockaddr_in (line 1639) | struct sockaddr_in
  function check_events (line 1744) | static int check_events(zhandle_t *zh, int events)
  function api_prolog (line 1832) | void api_prolog(zhandle_t* zh)
  function api_epilog (line 1837) | int api_epilog(zhandle_t *zh,int rc)
  function print_completion_queue (line 1844) | static __attribute__((unused)) void print_completion_queue(zhandle_t *zh)
  function queue_session_event (line 1866) | static int queue_session_event(zhandle_t *zh, int state)
  function completion_list_t (line 1906) | completion_list_t *dequeue_completion(completion_head_t *list)
  function process_sync_completion (line 1922) | static void process_sync_completion(
  function deserialize_multi (line 2021) | static int deserialize_multi(int xid, completion_list_t *cptr, struct ia...
  function deserialize_response (line 2052) | static void deserialize_response(int type, int xid, int failed, int rc, ...
  function process_completions (line 2149) | void process_completions(zhandle_t *zh)
  function isSocketReadable (line 2180) | static void isSocketReadable(zhandle_t* zh)
  function checkResponseLatency (line 2205) | static void checkResponseLatency(zhandle_t* zh)
  function zookeeper_process (line 2221) | int zookeeper_process(zhandle_t *zh, int events)
  function zoo_state (line 2350) | int zoo_state(zhandle_t *zh)
  function watcher_registration_t (line 2357) | static watcher_registration_t* create_watcher_registration(const char* p...
  function destroy_watcher_registration (line 2370) | static void destroy_watcher_registration(watcher_registration_t* wo){
  function completion_list_t (line 2377) | static completion_list_t* create_completion_entry(int xid, int completio...
  function destroy_completion_entry (line 2421) | static void destroy_completion_entry(completion_list_t* c){
  function queue_completion_nolock (line 2430) | static void queue_completion_nolock(completion_head_t *list,
  function queue_completion (line 2454) | static void queue_completion(completion_head_t *list, completion_list_t *c,
  function add_completion (line 2463) | static int add_completion(zhandle_t *zh, int xid, int completion_type,
  function add_data_completion (line 2487) | static int add_data_completion(zhandle_t *zh, int xid, data_completion_t...
  function add_stat_completion (line 2493) | static int add_stat_completion(zhandle_t *zh, int xid, stat_completion_t...
  function add_strings_completion (line 2499) | static int add_strings_completion(zhandle_t *zh, int xid,
  function add_strings_stat_completion (line 2505) | static int add_strings_stat_completion(zhandle_t *zh, int xid,
  function add_acl_completion (line 2511) | static int add_acl_completion(zhandle_t *zh, int xid, acl_completion_t dc,
  function add_void_completion (line 2517) | static int add_void_completion(zhandle_t *zh, int xid, void_completion_t...
  function add_string_completion (line 2523) | static int add_string_completion(zhandle_t *zh, int xid,
  function add_multi_completion (line 2529) | static int add_multi_completion(zhandle_t *zh, int xid, void_completion_...
  function zookeeper_close (line 2535) | int zookeeper_close(zhandle_t *zh)
  function isValidPath (line 2595) | static int isValidPath(const char* path, const int flags) {
  function Request_path_init (line 2643) | static int Request_path_init(zhandle_t *zh, int flags,
  function Request_path_watch_init (line 2661) | static int Request_path_watch_init(zhandle_t *zh, int flags,
  function zoo_aget (line 2676) | int zoo_aget(zhandle_t *zh, const char *path, int watch, data_completion...
  function zoo_awget (line 2682) | int zoo_awget(zhandle_t *zh, const char *path,
  function SetDataRequest_init (line 2720) | static int SetDataRequest_init(zhandle_t *zh, struct SetDataRequest *req,
  function zoo_aset (line 2736) | int zoo_aset(zhandle_t *zh, const char *path, const char *buffer, int bu...
  function CreateRequest_init (line 2765) | static int CreateRequest_init(zhandle_t *zh, struct CreateRequest *req,
  function zoo_acreate (line 2789) | int zoo_acreate(zhandle_t *zh, const char *path, const char *value,
  function DeleteRequest_init (line 2821) | int DeleteRequest_init(zhandle_t *zh, struct DeleteRequest *req,
  function zoo_adelete (line 2832) | int zoo_adelete(zhandle_t *zh, const char *path, int version,
  function zoo_aexists (line 2861) | int zoo_aexists(zhandle_t *zh, const char *path, int watch,
  function zoo_awexists (line 2867) | int zoo_awexists(zhandle_t *zh, const char *path,
  function zoo_awget_children_ (line 2900) | static int zoo_awget_children_(zhandle_t *zh, const char *path,
  function zoo_aget_children (line 2933) | int zoo_aget_children(zhandle_t *zh, const char *path, int watch,
  function zoo_awget_children (line 2939) | int zoo_awget_children(zhandle_t *zh, const char *path,
  function zoo_awget_children2_ (line 2947) | static int zoo_awget_children2_(zhandle_t *zh, const char *path,
  function zoo_aget_children2 (line 2981) | int zoo_aget_children2(zhandle_t *zh, const char *path, int watch,
  function zoo_awget_children2 (line 2987) | int zoo_awget_children2(zhandle_t *zh, const char *path,
  function zoo_async (line 2995) | int zoo_async(zhandle_t *zh, const char *path,
  function zoo_aget_acl (line 3025) | int zoo_aget_acl(zhandle_t *zh, const char *path, acl_completion_t compl...
  function zoo_aset_acl (line 3054) | int zoo_aset_acl(zhandle_t *zh, const char *path, int version,
  function op_result_string_completion (line 3086) | static void op_result_string_completion(int err, const char *value, cons...
  function op_result_void_completion (line 3106) | static void op_result_void_completion(int err, const void *data)
  function op_result_stat_completion (line 3113) | static void op_result_stat_completion(int err, const struct Stat *stat, ...
  function CheckVersionRequest_init (line 3126) | static int CheckVersionRequest_init(zhandle_t *zh, struct CheckVersionRe...
  function zoo_amulti (line 3140) | int zoo_amulti(zhandle_t *zh, int count, const zoo_op_t *ops,
  function zoo_create_op_init (line 3246) | void zoo_create_op_init(zoo_op_t *op, const char *path, const char *value,
  function zoo_delete_op_init (line 3261) | void zoo_delete_op_init(zoo_op_t *op, const char *path, int version)
  function zoo_set_op_init (line 3269) | void zoo_set_op_init(zoo_op_t *op, const char *path, const char *buffer,
  function zoo_check_op_init (line 3281) | void zoo_check_op_init(zoo_op_t *op, const char *path, int version)
  function zoo_multi (line 3289) | int zoo_multi(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_resu...
  function flush_send_queue (line 3310) | int flush_send_queue(zhandle_t*zh, int timeout)
  function zoo_add_auth (line 3433) | int zoo_add_auth(zhandle_t *zh,const char* scheme,const char* cert,
  type sockaddr_storage (line 3478) | struct sockaddr_storage
  type sockaddr_in6 (line 3492) | struct sockaddr_in6
  type sockaddr_in6 (line 3493) | struct sockaddr_in6
  type sockaddr_in (line 3496) | struct sockaddr_in
  type sockaddr_in (line 3497) | struct sockaddr_in
  type in_addr (line 3502) | struct in_addr
  function zoo_deterministic_conn_order (line 3516) | void zoo_deterministic_conn_order(int yesOrNo)
  function zoo_create (line 3524) | int zoo_create(zhandle_t *zh, const char *path, const char *value,
  function zoo_delete (line 3544) | int zoo_delete(zhandle_t *zh, const char *path, int version)
  function zoo_exists (line 3560) | int zoo_exists(zhandle_t *zh, const char *path, int watch, struct Stat *...
  function zoo_wexists (line 3565) | int zoo_wexists(zhandle_t *zh, const char *path,
  function zoo_get (line 3585) | int zoo_get(zhandle_t *zh, const char *path, int watch, char *buffer,
  function zoo_wget (line 3592) | int zoo_wget(zhandle_t *zh, const char *path,
  function zoo_set (line 3620) | int zoo_set(zhandle_t *zh, const char *path, const char *buffer, int buf...
  function zoo_set2 (line 3626) | int zoo_set2(zhandle_t *zh, const char *path, const char *buffer, int bu...
  function zoo_wget_children_ (line 3646) | static int zoo_wget_children_(zhandle_t *zh, const char *path,
  function zoo_wget_children2_ (line 3671) | static int zoo_wget_children2_(zhandle_t *zh, const char *path,
  function zoo_get_children (line 3698) | int zoo_get_children(zhandle_t *zh, const char *path, int watch,
  function zoo_wget_children (line 3704) | int zoo_wget_children(zhandle_t *zh, const char *path,
  function zoo_get_children2 (line 3711) | int zoo_get_children2(zhandle_t *zh, const char *path, int watch,
  function zoo_wget_children2 (line 3717) | int zoo_wget_children2(zhandle_t *zh, const char *path,
  function zoo_get_acl (line 3724) | int zoo_get_acl(zhandle_t *zh, const char *path, struct ACL_vector *acl,
  function zoo_set_acl (line 3751) | int zoo_set_acl(zhandle_t *zh, const char *path, int version,

FILE: src/c/tests/CollectionUtil.h
  function namespace (line 26) | namespace Util

FILE: src/c/tests/LibCMocks.cc
  type hostent (line 34) | struct hostent
  function hostent (line 54) | hostent* Mock_gethostbyname::call(const char* name) {
  function freeList (line 80) | static void freeList(char **list){
  function DECLARE_WRAPPER (line 124) | DECLARE_WRAPPER(void*,calloc,(size_t p1, size_t p2)){
  function DECLARE_WRAPPER (line 150) | DECLARE_WRAPPER(void*,realloc,(void* p, size_t s)){
  function RANDOM_RET_TYPE (line 170) | RANDOM_RET_TYPE random(){
  function srandom (line 176) | void srandom(unsigned long seed){
  function DECLARE_WRAPPER (line 193) | DECLARE_WRAPPER(void,free,(void* p)){
  function socket (line 237) | int socket(int domain, int type, int protocol){
  function close (line 243) | int close(int fd){
  function getsockopt (line 249) | int getsockopt(int s,int level,int optname,void *optval,socklen_t *optlen){
  function setsockopt (line 255) | int setsockopt(int s,int level,int optname,const void *optval,socklen_t ...
  function connect (line 260) | int connect(int s,const struct sockaddr *addr,socklen_t len){
  function send (line 265) | ssize_t send(int s,const void *buf,size_t len,int flags){
  function recv (line 271) | ssize_t recv(int s,void *buf,size_t len,int flags){
  function fcntl (line 281) | int fcntl(int fd,int cmd,...){
  function select (line 295) | int select(int nfds,fd_set *rfds,fd_set *wfds,fd_set *efds,struct timeva...
  function poll (line 306) | int poll(struct pollfd *fds, POLL_NFDS_TYPE nfds, int timeout){
  function __poll_chk (line 318) | int __poll_chk (struct pollfd *__fds, nfds_t __nfds, int __timeout,
  function gettimeofday (line 326) | int gettimeofday(struct timeval *tp, GETTIMEOFDAY_ARG2_TYPE tzp){

FILE: src/c/tests/LibCMocks.h
  function class (line 36) | class Mock_gethostbyname: public Mock
  type std (line 51) | typedef std::vector<HostEntry*> HostEntryCollection;
  function class (line 57) | class MockFailed_gethostbyname: public Mock_gethostbyname
  function class (line 72) | class Mock_calloc: public Mock
  function class (line 91) | class Mock_realloc: public Mock
  function class (line 110) | class Mock_random: public Mock
  function class (line 126) | class Mock_free_noop: public Mock
  function class (line 152) | class Mock_socket: public Mock
  function virtual (line 163) | virtual ~Mock_socket(){mock_=0;}
  function virtual (line 166) | virtual int callSocket(int domain, int type, int protocol){
  function virtual (line 170) | virtual int callClose(int fd){
  function virtual (line 175) | virtual int callGet(int s,int level,int optname,void *optval,socklen_t *...
  function virtual (line 181) | virtual void setSO_ERROR(void *optval,socklen_t len){
  function virtual (line 186) | virtual int callSet(int s,int level,int optname,const void *optval,sockl...
  function virtual (line 191) | virtual int callConnect(int s,const struct sockaddr *addr,socklen_t len){
  function virtual (line 196) | virtual void notifyBufferSent(const std::string& buffer){}
  function virtual (line 200) | virtual ssize_t callSend(int s,const void *buf,size_t len,int flags){
  function virtual (line 218) | virtual ssize_t callRecv(int s,void *buf,size_t len,int flags){
  function class (line 238) | class Mock_fcntl: public Mock
  function class (line 257) | class Mock_select: public Mock
  function class (line 299) | class Mock_poll: public Mock
  function class (line 341) | class Mock_gettimeofday: public Mock
  function virtual (line 377) | virtual void tick(const timeval& howmuch){
  function toMilliseconds (line 404) | inline int32_t toMilliseconds(const timeval& tv){

FILE: src/c/tests/LibCSymTable.cc
  function LibCSymTable (line 26) | LibCSymTable& LibCSymTable::instance(){

FILE: src/c/tests/LibCSymTable.h
  type LibCSymTable (line 63) | struct LibCSymTable

FILE: src/c/tests/MocksBase.h
  function class (line 27) | class Mock

FILE: src/c/tests/PthreadMocks.cc
  function pthread_cond_broadcast (line 26) | int pthread_cond_broadcast (pthread_cond_t *c){
  function pthread_cond_destroy (line 31) | int pthread_cond_destroy (pthread_cond_t *c){
  function pthread_cond_init (line 36) | int pthread_cond_init (pthread_cond_t *c, const pthread_condattr_t *a){
  function pthread_cond_signal (line 41) | int pthread_cond_signal (pthread_cond_t *c){
  function pthread_cond_timedwait (line 46) | int pthread_cond_timedwait (pthread_cond_t *c,
  function pthread_cond_wait (line 52) | int pthread_cond_wait (pthread_cond_t *c, pthread_mutex_t *m){
  function pthread_create (line 57) | int pthread_create (pthread_t *t, const pthread_attr_t *a,
  function pthread_detach (line 63) | int pthread_detach(pthread_t t){
  function pthread_join (line 68) | int pthread_join (pthread_t t, void **r){
  function pthread_mutex_destroy (line 73) | int pthread_mutex_destroy (pthread_mutex_t *m){
  function pthread_mutex_init (line 78) | int pthread_mutex_init (pthread_mutex_t *m, const pthread_mutexattr_t *a){
  function DECLARE_WRAPPER (line 84) | DECLARE_WRAPPER(int,pthread_mutex_lock,(pthread_mutex_t *m)){
  function pthread_mutex_trylock (line 90) | int pthread_mutex_trylock (pthread_mutex_t *m){
  function DECLARE_WRAPPER (line 96) | DECLARE_WRAPPER(int,pthread_mutex_unlock,(pthread_mutex_t *m)){

FILE: src/c/tests/PthreadMocks.h
  function class (line 34) | class MockPthreadsBase: public Mock
  function class (line 62) | class MockPthreadsNull: public MockPthreadsBase
  function virtual (line 88) | virtual int pthread_create(pthread_t * t, const pthread_attr_t *a,
  function virtual (line 98) | virtual int pthread_join(pthread_t t, void ** r){
  function virtual (line 108) | virtual int pthread_detach(pthread_t t){
  function isInitialized (line 116) | bool isInitialized(const T& t){
  function isDestroyed (line 120) | bool isDestroyed(const T& t){
  function getDestroyCounter (line 124) | int getDestroyCounter(const T& t){
  function getInvalidAccessCounter (line 128) | int getInvalidAccessCounter(const T& t){
  function virtual (line 133) | virtual int pthread_cond_broadcast(pthread_cond_t *c){
  function virtual (line 140) | virtual int pthread_cond_destroy(pthread_cond_t *c){
  function virtual (line 148) | virtual int pthread_cond_init(pthread_cond_t *c, const pthread_condattr_...
  function virtual (line 158) | virtual int pthread_cond_signal(pthread_cond_t *c){
  function virtual (line 165) | virtual int pthread_cond_timedwait(pthread_cond_t *c,
  function virtual (line 173) | virtual int pthread_cond_wait(pthread_cond_t *c, pthread_mutex_t *m){
  function virtual (line 180) | virtual int pthread_mutex_destroy(pthread_mutex_t *m){
  function virtual (line 188) | virtual int pthread_mutex_init(pthread_mutex_t *m, const pthread_mutexat...
  function virtual (line 198) | virtual int pthread_mutex_lock(pthread_mutex_t *m){
  function virtual (line 205) | virtual int pthread_mutex_trylock(pthread_mutex_t *m){
  function virtual (line 212) | virtual int pthread_mutex_unlock(pthread_mutex_t *m){
  function class (line 221) | class MockPthreadZKNull: public MockPthreadsNull
  function virtual (line 236) | virtual int pthread_join(pthread_t t, void ** r){
  type ThreadInfo (line 244) | struct ThreadInfo{
  function class (line 269) | class CheckedPthread: public MockPthreadsBase

FILE: src/c/tests/TestClient.cc
  type buff_struct_2 (line 43) | struct buff_struct_2 {
  function Stat_eq (line 49) | static int Stat_eq(struct Stat* a, struct Stat* b)
  function yield (line 65) | static void yield(zhandle_t *zh, int i)
  function yield (line 70) | static void yield(zhandle_t *zh, int seconds)
  type evt (line 118) | struct evt {
  type watchCtx (line 123) | struct watchCtx {
    method watchCtx (line 133) | watchCtx() {
    method evt_t (line 144) | evt_t getEvent() {
    method countEvents (line 154) | int countEvents() {
    method putEvent (line 162) | void putEvent(evt_t evt) {
    method waitForConnected (line 168) | bool waitForConnected(zhandle_t *zh) {
    method waitForDisconnected (line 175) | bool waitForDisconnected(zhandle_t *zh) {
  class Zookeeper_simpleSystem (line 184) | class Zookeeper_simpleSystem : public CPPUNIT_NS::TestFixture
    method watcher (line 208) | static void watcher(zhandle_t *, int type, int state, const char *path...
    method zhandle_t (line 230) | zhandle_t *createClient(watchctx_t *ctx) {
    method zhandle_t (line 234) | zhandle_t *createClient(const char *hp, watchctx_t *ctx) {
    method zhandle_t (line 241) | zhandle_t *createchClient(watchctx_t *ctx, const char* chroot) {
    method Zookeeper_simpleSystem (line 251) | Zookeeper_simpleSystem() {
    method setUp (line 263) | void setUp()
    method startServer (line 269) | void startServer() {
    method stopServer (line 275) | void stopServer() {
    method tearDown (line 281) | void tearDown()
    method default_zoo_watcher (line 286) | static void default_zoo_watcher(zhandle_t *zzh, int type, int state, c...
    method testFirstServerDown (line 293) | void testFirstServerDown() {
    method testHangingClient (line 304) | void testHangingClient() {
    method testPing (line 321) | void testPing()
    method waitForEvent (line 359) | bool waitForEvent(zhandle_t *zh, watchctx_t *ctx, int seconds) {
    method statCompletion (line 373) | static void statCompletion(int rc, const struct Stat *stat, const void...
    method stringCompletion (line 378) | static void stringCompletion(int rc, const char *value, const void *da...
    method create_completion_fn (line 392) | static void create_completion_fn(int rc, const char* value, const void...
    method waitForCreateCompletion (line 397) | static void waitForCreateCompletion(int seconds) {
    method watcher_chroot_fn (line 405) | static void watcher_chroot_fn(zhandle_t *zh, int type,
    method waitForChrootWatch (line 413) | static void waitForChrootWatch(int seconds) {
    method waitForVoidCompletion (line 421) | static void waitForVoidCompletion(int seconds) {
    method voidCompletion (line 429) | static void voidCompletion(int rc, const void *data) {
    method verifyCreateFails (line 435) | static void verifyCreateFails(const char *path, zhandle_t *zk) {
    method verifyCreateOk (line 440) | static void verifyCreateOk(const char *path, zhandle_t *zk) {
    method verifyCreateFailsSeq (line 445) | static void verifyCreateFailsSeq(const char *path, zhandle_t *zk) {
    method verifyCreateOkSeq (line 450) | static void verifyCreateOkSeq(const char *path, zhandle_t *zk) {
    method compareAcl (line 459) | bool compareAcl(struct ACL_vector acl1, struct ACL_vector acl2) {
    method testDeserializeString (line 479) | void testDeserializeString() {
    method testAcl (line 493) | void testAcl() {
    method testAuth (line 515) | void testAuth() {
    method testGetChildren2 (line 637) | void testGetChildren2() {
    method testIPV6 (line 670) | void testIPV6() {
    method testNullData (line 680) | void testNullData() {
    method testPath (line 701) | void testPath() {
    method testPathValidation (line 740) | void testPathValidation() {
    method testChroot (line 791) | void testChroot() {
    method testAsyncWatcherAutoReset (line 888) | void testAsyncWatcherAutoReset()
    method testWatcherAutoReset (line 943) | void testWatcherAutoReset(zhandle_t *zk, watchctx_t *ctxGlobal,
    method testWatcherAutoResetWithGlobal (line 1093) | void testWatcherAutoResetWithGlobal()
    method testWatcherAutoResetWithLocal (line 1112) | void testWatcherAutoResetWithLocal()

FILE: src/c/tests/TestClientRetry.cc
  function yield (line 43) | static void yield(zhandle_t *zh, int i)
  function yield (line 48) | static void yield(zhandle_t *zh, int seconds)
  type evt (line 96) | struct evt {
  type watchCtx (line 101) | struct watchCtx {
    method watchCtx (line 109) | watchCtx() {
    method evt_t (line 120) | evt_t getEvent() {
    method countEvents (line 130) | int countEvents() {
    method putEvent (line 138) | void putEvent(evt_t evt) {
    method waitForConnected (line 144) | bool waitForConnected(zhandle_t *zh) {
    method waitForDisconnected (line 151) | bool waitForDisconnected(zhandle_t *zh) {
  class Zookeeper_clientretry (line 160) | class Zookeeper_clientretry : public CPPUNIT_NS::TestFixture
    method watcher (line 168) | static void watcher(zhandle_t *, int type, int state, const char *path...
    method zhandle_t (line 190) | zhandle_t *createClient(watchctx_t *ctx) {
    method Zookeeper_clientretry (line 201) | Zookeeper_clientretry() {
    method setUp (line 213) | void setUp()
    method tearDown (line 232) | void tearDown()
    method waitForEvent (line 249) | bool waitForEvent(zhandle_t *zh, watchctx_t *ctx, int seconds) {
    method testRetry (line 259) | void testRetry()

FILE: src/c/tests/TestDriver.cc
  function CPPUNIT_NS_BEGIN (line 44) | CPPUNIT_NS_BEGIN
  function CPPUNIT_NS_END (line 73) | CPPUNIT_NS_END
  function endTest (line 84) | void endTest( CPPUNIT_NS::Test *test )
  type timeval (line 98) | struct timeval
  class ZKServer (line 101) | class ZKServer {
    method ZKServer (line 103) | ZKServer() {
  function main (line 121) | int main( int argc, char* argv[] ) {

FILE: src/c/tests/TestMulti.cc
  function yield (line 44) | static void yield(zhandle_t *zh, int i)
  function yield (line 49) | static void yield(zhandle_t *zh, int seconds)
  type evt (line 97) | struct evt {
  type watchCtx (line 102) | struct watchCtx {
    method watchCtx (line 112) | watchCtx() {
    method evt_t (line 123) | evt_t getEvent() {
    method countEvents (line 133) | int countEvents() {
    method putEvent (line 141) | void putEvent(evt_t evt) {
    method waitForConnected (line 147) | bool waitForConnected(zhandle_t *zh) {
    method waitForDisconnected (line 154) | bool waitForDisconnected(zhandle_t *zh) {
  class Zookeeper_multi (line 163) | class Zookeeper_multi : public CPPUNIT_NS::TestFixture
    method watcher (line 184) | static void watcher(zhandle_t *, int type, int state, const char *path...
    method zhandle_t (line 206) | zhandle_t *createClient(watchctx_t *ctx) {
    method zhandle_t (line 210) | zhandle_t *createClient(const char *hp, watchctx_t *ctx) {
    method Zookeeper_multi (line 220) | Zookeeper_multi() {
    method setUp (line 232) | void setUp()
    method tearDown (line 237) | void tearDown()
    method multi_completion_fn (line 243) | static void multi_completion_fn(int rc, const void *data) {
    method multi_completion_fn_no_assert (line 248) | static void multi_completion_fn_no_assert(int rc, const void *data) {
    method waitForMultiCompletion (line 252) | static void waitForMultiCompletion(int seconds) {
    method resetCounter (line 260) | static void resetCounter() {
    method testCreate (line 267) | void testCreate() {
    method testCreateDelete (line 301) | void testCreateDelete() {
    method testInvalidVersion (line 326) | void testInvalidVersion() {
    method testNestedCreate (line 350) | void testNestedCreate() {
    method testSetData (line 388) | void testSetData() {
    method testUpdateConflict (line 439) | void testUpdateConflict() {
    method testDeleteUpdateConflict (line 475) | void testDeleteUpdateConflict() {
    method testAsyncMulti (line 501) | void testAsyncMulti() {
    method testMultiFail (line 533) | void testMultiFail() {
    method testCheck (line 560) | void testCheck() {
    method doMultiInWatch (line 609) | static void doMultiInWatch(zhandle_t *zk, int type, int state, const c...
    method testWatch (line 637) | void testWatch() {
    method testSequentialNodeCreateInAsyncMulti (line 668) | void testSequentialNodeCreateInAsyncMulti() {

FILE: src/c/tests/TestOperations.cc
  class Zookeeper_operations (line 27) | class Zookeeper_operations : public CPPUNIT_NS::TestFixture
    method watcher (line 46) | static void watcher(zhandle_t *, int, int, const char *,void*){}
    method Zookeeper_operations (line 48) | Zookeeper_operations() {
    method setUp (line 60) | void setUp()
    method tearDown (line 68) | void tearDown()
    class AsyncGetOperationCompletion (line 73) | class AsyncGetOperationCompletion: public AsyncCompletion{
      method AsyncGetOperationCompletion (line 75) | AsyncGetOperationCompletion():called_(false),rc_(ZAPIERROR){}
      method dataCompl (line 76) | virtual void dataCompl(int rc, const char *value, int len, const Sta...
    method testConcurrentOperations1 (line 98) | void testConcurrentOperations1()
    method testOperationsAndDisconnectConcurrently1 (line 141) | void testOperationsAndDisconnectConcurrently1()
    method testOperationsAndDisconnectConcurrently2 (line 184) | void testOperationsAndDisconnectConcurrently2()
    class PingCountingServer (line 219) | class PingCountingServer: public ZookeeperServer{
      method PingCountingServer (line 221) | PingCountingServer():pingCount_(0){}
      method onMessageReceived (line 223) | virtual void onMessageReceived(const RequestHeader& rh, iarchive* ia){
    method testPing (line 233) | void testPing()
    method testUnsolicitedPing (line 310) | void testUnsolicitedPing()
    method testTimeoutCausedByWatches1 (line 345) | void testTimeoutCausedByWatches1()
    method testTimeoutCausedByWatches2 (line 392) | void testTimeoutCausedByWatches2()
    class TestGetDataJob (line 448) | class TestGetDataJob: public TestJob{
      method TestGetDataJob (line 450) | TestGetDataJob(ZookeeperServer* svr,zhandle_t* zh, int reps=500)
      method run (line 452) | virtual void run(){
    class TestConcurrentOpJob (line 475) | class TestConcurrentOpJob: public TestGetDataJob{
      method TestConcurrentOpJob (line 478) | TestConcurrentOpJob(ZookeeperServer* svr,zhandle_t* zh):
      method TestJob (line 480) | virtual TestJob* clone() const {
      method validate (line 483) | virtual void validate(const char* file, int line) const{
    method testConcurrentOperations1 (line 487) | void testConcurrentOperations1()
    class ZKGetJob (line 510) | class ZKGetJob: public TestJob{
      method ZKGetJob (line 513) | ZKGetJob(zhandle_t* zh)
      method TestJob (line 515) | virtual TestJob* clone() const {
      method run (line 518) | virtual void run(){
      method validate (line 530) | virtual void validate(const char* file, int line) const{
    method testOperationsAndDisconnectConcurrently2 (line 542) | void testOperationsAndDisconnectConcurrently2()
    class TestConcurrentOpWithDisconnectJob (line 582) | class TestConcurrentOpWithDisconnectJob: public TestGetDataJob{
      method TestConcurrentOpWithDisconnectJob (line 585) | TestConcurrentOpWithDisconnectJob(ZookeeperServer* svr,zhandle_t* zh):
      method TestJob (line 587) | virtual TestJob* clone() const {
      method validate (line 590) | virtual void validate(const char* file, int line) const{
    method testOperationsAndDisconnectConcurrently1 (line 599) | void testOperationsAndDisconnectConcurrently1()
    method testAsyncGetOperation (line 630) | void testAsyncGetOperation()
    class ChangeNodeWatcher (line 653) | class ChangeNodeWatcher: public WatcherAction{
      method ChangeNodeWatcher (line 655) | ChangeNodeWatcher():changed_(false){}
      method onNodeValueChanged (line 656) | virtual void onNodeValueChanged(zhandle_t*,const char* path){
      method SyncedBoolCondition (line 664) | SyncedBoolCondition isNodeChangedTriggered() const{
    class AsyncWatcherCompletion (line 671) | class AsyncWatcherCompletion: public AsyncCompletion{
      method AsyncWatcherCompletion (line 673) | AsyncWatcherCompletion(ZookeeperServer& zkServer):zkServer_(zkServer){}
      method statCompl (line 674) | virtual void statCompl(int rc, const Stat *stat){
    method testAsyncWatcher1 (line 682) | void testAsyncWatcher1(){

FILE: src/c/tests/TestWatchers.cc
  class Zookeeper_watchers (line 26) | class Zookeeper_watchers : public CPPUNIT_NS::TestFixture
    method watcher (line 38) | static void watcher(zhandle_t *, int, int, const char *,void*){}
    method Zookeeper_watchers (line 44) | Zookeeper_watchers() {
    method setUp (line 56) | void setUp()
    method tearDown (line 64) | void tearDown()
    class ConnectionWatcher (line 69) | class ConnectionWatcher: public WatcherAction{
      method ConnectionWatcher (line 71) | ConnectionWatcher():connected_(false),counter_(0){}
      method onConnectionEstablished (line 72) | virtual void onConnectionEstablished(zhandle_t*){
      method SyncedBoolCondition (line 77) | SyncedBoolCondition isConnectionEstablished() const{
    class DisconnectWatcher (line 84) | class DisconnectWatcher: public WatcherAction{
      method DisconnectWatcher (line 86) | DisconnectWatcher():disconnected_(false),counter_(0){}
      method onConnectionLost (line 87) | virtual void onConnectionLost(zhandle_t*){
      method SyncedBoolCondition (line 92) | SyncedBoolCondition isDisconnected() const{
    class CountingDataWatcher (line 99) | class CountingDataWatcher: public WatcherAction{
      method CountingDataWatcher (line 101) | CountingDataWatcher():disconnected_(false),counter_(0){}
      method onNodeValueChanged (line 102) | virtual void onNodeValueChanged(zhandle_t*,const char* path){
      method onConnectionLost (line 106) | virtual void onConnectionLost(zhandle_t*){
    class DeletionCountingDataWatcher (line 115) | class DeletionCountingDataWatcher: public WatcherAction{
      method DeletionCountingDataWatcher (line 117) | DeletionCountingDataWatcher():counter_(0){}
      method onNodeDeleted (line 118) | virtual void onNodeDeleted(zhandle_t*,const char* path){
    class ChildEventCountingWatcher (line 125) | class ChildEventCountingWatcher: public WatcherAction{
      method ChildEventCountingWatcher (line 127) | ChildEventCountingWatcher():counter_(0){}
      method onChildChanged (line 128) | virtual void onChildChanged(zhandle_t*,const char* path){
    method testDefaultSessionWatcher1 (line 138) | void testDefaultSessionWatcher1(){
    method testDefaultSessionWatcher2 (line 171) | void testDefaultSessionWatcher2(){
    method testObjectSessionWatcher1 (line 205) | void testObjectSessionWatcher1(){
    method testObjectSessionWatcher2 (line 247) | void testObjectSessionWatcher2(){
    method testNodeWatcher1 (line 296) | void testNodeWatcher1(){
    method testChildWatcher1 (line 345) | void testChildWatcher1(){
    method testChildWatcher2 (line 395) | void testChildWatcher2(){
    method testDefaultSessionWatcher1 (line 445) | void testDefaultSessionWatcher1(){
    method testDefaultSessionWatcher2 (line 472) | void testDefaultSessionWatcher2(){
    method testObjectSessionWatcher1 (line 509) | void testObjectSessionWatcher1(){
    method testObjectSessionWatcher2 (line 560) | void testObjectSessionWatcher2(){
    method testNodeWatcher1 (line 619) | void testNodeWatcher1(){
    method testChildWatcher1 (line 677) | void testChildWatcher1(){
    method testChildWatcher2 (line 725) | void testChildWatcher2(){

FILE: src/c/tests/TestZookeeperClose.cc
  class Zookeeper_close (line 29) | class Zookeeper_close : public CPPUNIT_NS::TestFixture
    method watcher (line 41) | static void watcher(zhandle_t *, int, int, const char *,void*){}
    method Zookeeper_close (line 45) | Zookeeper_close() {
    method setUp (line 57) | void setUp()
    method tearDown (line 65) | void tearDown()
    class CloseOnSessionExpired (line 70) | class CloseOnSessionExpired: public WatcherAction{
      method CloseOnSessionExpired (line 72) | CloseOnSessionExpired(bool callClose=true):
      method onSessionExpired (line 74) | virtual void onSessionExpired(zhandle_t* zh){
    method testCloseUnconnected (line 85) | void testCloseUnconnected()
    method testCloseUnconnected1 (line 108) | void testCloseUnconnected1()
    method testCloseConnected1 (line 135) | void testCloseConnected1()
    method testCloseFromWatcher1 (line 180) | void testCloseFromWatcher1()
    method testCloseUnconnected (line 226) | void testCloseUnconnected()
    method testCloseUnconnected1 (line 273) | void testCloseUnconnected1()
    method testCloseConnected1 (line 285) | void testCloseConnected1()
    type PointerFreed (line 338) | struct PointerFreed{
      method PointerFreed (line 339) | PointerFreed(Mock_free_noop& freeMock,void* ptr):
    method testCloseFromWatcher1 (line 347) | void testCloseFromWatcher1()
    method testIOThreadStoppedOnExpire (line 403) | void testIOThreadStoppedOnExpire()

FILE: src/c/tests/TestZookeeperInit.cc
  class MockPthreadsNull (line 31) | class MockPthreadsNull
  class Zookeeper_init (line 36) | class Zookeeper_init : public CPPUNIT_NS::TestFixture
    method watcher (line 58) | static void watcher(zhandle_t *, int , int , const char *,void*){}
    method Zookeeper_init (line 61) | Zookeeper_init():zh(0),pthreadMock(0){
    method setUp (line 73) | void setUp()
    method tearDown (line 85) | void tearDown()
    method testBasic (line 93) | void testBasic()
    method testAddressResolution (line 136) | void testAddressResolution()
    method testMultipleAddressResolution (line 152) | void testMultipleAddressResolution()
    method testMultipleAddressWithSpace (line 173) | void testMultipleAddressWithSpace()
    method testNullAddressString (line 194) | void testNullAddressString()
    method testEmptyAddressString (line 200) | void testEmptyAddressString()
    method testOneSpaceAddressString (line 207) | void testOneSpaceAddressString()
    method testTwoSpacesAddressString (line 214) | void testTwoSpacesAddressString()
    method testInvalidAddressString1 (line 221) | void testInvalidAddressString1()
    method testInvalidAddressString2 (line 228) | void testInvalidAddressString2()
    method testNonexistentHost (line 235) | void testNonexistentHost()
    method testOutOfMemory_init (line 247) | void testOutOfMemory_init()
    method testOutOfMemory_getaddrs1 (line 257) | void testOutOfMemory_getaddrs1()
    method testOutOfMemory_getaddrs2 (line 267) | void testOutOfMemory_getaddrs2()
    method testPermuteAddrsList (line 277) | void testPermuteAddrsList()

FILE: src/c/tests/ThreadingUtil.cc
  type Mutex::Impl (line 27) | struct Mutex::Impl{
    method Impl (line 28) | Impl(){
  function atomic_post_incr (line 48) | int32_t atomic_post_incr(volatile int32_t* operand, int32_t incr)
  function atomic_fetch_store (line 62) | int32_t atomic_fetch_store(volatile int32_t *ptr, int32_t value)
  function atomic_post_incr (line 76) | int32_t atomic_post_incr(volatile int32_t* operand, int32_t incr){
  function atomic_fetch_store (line 81) | int32_t atomic_fetch_store(volatile int32_t *ptr, int32_t value)

FILE: src/c/tests/ThreadingUtil.h
  function class (line 37) | class AtomicInt{
  function class (line 84) | class Mutex{
  function class (line 97) | class MTLock{
  function class (line 107) | class Latch {
  function class (line 165) | class TestJob {
  function virtual (line 185) | virtual void join() {
  function signalFinished (line 198) | void signalFinished() {
  function class (line 215) | class TestJobManager {
  function class (line 252) | class Mutex{

FILE: src/c/tests/Util.cc
  function millisleep (line 26) | void millisleep(int ms){
  function FILE (line 33) | FILE *openlogfile(const char* testname) {

FILE: src/c/tests/Util.h
  type T (line 49) | typedef T BareT;
  type T (line 50) | typedef T ArgT;
  type typename (line 57) | typedef typename TypeOp<T>::BareT BareT;
  type typename (line 64) | typedef typename TypeOp<T>::BareT BareT;
  type std (line 72) | typedef std::map<K,V> Map;
  function class (line 110) | class TestConfig{

FILE: src/c/tests/Vector.h
  type std (line 26) | typedef std::vector<U> V;

FILE: src/c/tests/ZKMocks.cc
  function HandshakeRequest (line 35) | HandshakeRequest* HandshakeRequest::parse(const std::string& buf){
  function activeWatcher (line 69) | void activeWatcher(zhandle_t *zh, int type, int state, const char *path,...
  function SyncedBoolCondition (line 90) | SyncedBoolCondition WatcherAction::isWatcherTriggered() const{
  function asyncCompletion (line 96) | void asyncCompletion(int rc, ACL_vector *acl,Stat *stat, const void *data){
  function asyncCompletion (line 100) | void asyncCompletion(int rc, const char *value, int len, const Stat *stat,
  function asyncCompletion (line 105) | void asyncCompletion(int rc, const Stat *stat, const void *data){
  function asyncCompletion (line 109) | void asyncCompletion(int rc, const char *value, const void *data){
  function asyncCompletion (line 113) | void asyncCompletion(int rc,const String_vector *strings, const void *da...
  function asyncCompletion (line 117) | void asyncCompletion(int rc, const void *data){
  function DECLARE_WRAPPER (line 136) | DECLARE_WRAPPER(int,flush_send_queue,(zhandle_t*zh, int timeout))
  function DECLARE_WRAPPER (line 147) | DECLARE_WRAPPER(int32_t,get_xid,())
  function DECLARE_WRAPPER (line 159) | DECLARE_WRAPPER(void,activateWatcher,(zhandle_t *zh, watcher_registratio...
  class ActivateWatcherWrapper (line 169) | class ActivateWatcherWrapper: public Mock_activateWatcher{
    method ActivateWatcherWrapper (line 171) | ActivateWatcherWrapper():ctx_(0),activated_(false){}
    method call (line 173) | virtual void call(zhandle_t *zh, watcher_registration_t* reg, int rc){
    method setContext (line 182) | void setContext(void* ctx){
    method SyncedBoolCondition (line 188) | SyncedBoolCondition isActivated() const{
  function SyncedBoolCondition (line 209) | SyncedBoolCondition WatcherActivationTracker::isWatcherActivated() const{
  function DECLARE_WRAPPER (line 215) | DECLARE_WRAPPER(void,deliverWatchers,(zhandle_t* zh,int type,int state, ...
  type RefCounterValue (line 226) | struct RefCounterValue{
    method RefCounterValue (line 227) | RefCounterValue(zhandle_t* const& zh,int32_t expectedCounter,Mutex& mx):
  class DeliverWatchersWrapper (line 243) | class DeliverWatchersWrapper: public Mock_deliverWatchers{
    method DeliverWatchersWrapper (line 245) | DeliverWatchersWrapper(int type,int state,bool terminate):
    method call (line 248) | virtual void call(zhandle_t* zh,int type,int state, const char* path, ...
    method SyncedBoolCondition (line 268) | SyncedBoolCondition isDelivered() const{
    method resetDeliveryCounter (line 275) | void resetDeliveryCounter(){
    method SyncedIntegerEqual (line 279) | SyncedIntegerEqual deliveryCounterEquals(int expected) const{
  function SyncedBoolCondition (line 305) | SyncedBoolCondition WatcherDeliveryTracker::isWatcherProcessingCompleted...
  function SyncedIntegerEqual (line 313) | SyncedIntegerEqual WatcherDeliveryTracker::deliveryCounterEquals(int exp...
  function string (line 319) | string HandshakeResponse::toString() const {
  function string (line 336) | string ZooGetResponse::toString() const{
  function string (line 358) | string ZooStatResponse::toString() const{
  function string (line 375) | string ZooGetChildrenResponse::toString() const{
  function string (line 397) | string ZNodeEvent::toString() const{
  function string (line 413) | string PingResponse::toString() const{
  function forceConnected (line 507) | void forceConnected(zhandle_t* zh){
  function terminateZookeeperThreads (line 516) | void terminateZookeeperThreads(zhandle_t* zh){

FILE: src/c/tests/ZKMocks.h
  type SyncedBoolCondition (line 42) | struct SyncedBoolCondition
  function class (line 44) | class WatcherAction{
  function class (line 73) | class AsyncCompletion{
  type ClientConnected (line 94) | struct ClientConnected{
  type SessionExpired (line 102) | struct SessionExpired{
  type IOThreadStopped (line 110) | struct IOThreadStopped{
  type SyncedBoolCondition (line 117) | struct SyncedBoolCondition{
  type SyncedIntegerEqual (line 128) | struct SyncedIntegerEqual{
  function execute (line 142) | struct CloseFinally{
  function disarm (line 154) | void disarm(){zh_=0;}
  function clientid_t (line 158) | struct TestClientId: clientid_t{
  function connect_req (line 174) | struct HandshakeRequest: public connect_req
  function class (line 185) | class Mock_flush_send_queue: public Mock
  function class (line 203) | class Mock_get_xid: public Mock
  function virtual (line 211) | virtual int call(){
  function class (line 220) | class Mock_activateWatcher: public Mock{
  function class (line 230) | class WatcherActivationTracker{
  function class (line 243) | class Mock_deliverWatchers: public Mock{
  function class (line 253) | class WatcherDeliveryTracker{
  function class (line 290) | class Response
  function class (line 303) | class HandshakeResponse: public Response
  function class (line 320) | class ZooGetResponse: public Response
  function class (line 338) | class ZooStatResponse: public Response
  function class (line 355) | class ZooGetChildrenResponse: public Response

FILE: src/contrib/fatjar/src/java/org/apache/zookeeper/util/FatJarMain.java
  class FatJarMain (line 40) | public class FatJarMain {
    class Cmd (line 41) | static class Cmd {
      method Cmd (line 42) | Cmd(String cmd, String clazz, String desc) {
    method main (line 65) | public static void main(String[] args) throws IOException, ClassNotFou...
    method doHelp (line 112) | private static void doHelp() {

FILE: src/contrib/huebrowser/zkui/setup.py
  function expand_package_data (line 19) | def expand_package_data(src_dirs, strip=""):

FILE: src/contrib/huebrowser/zkui/src/zkui/forms.py
  class CreateZNodeForm (line 20) | class CreateZNodeForm(forms.Form):
  class EditZNodeForm (line 25) | class EditZNodeForm(forms.Form):

FILE: src/contrib/huebrowser/zkui/src/zkui/rest.py
  class RequestWithMethod (line 24) | class RequestWithMethod(urllib2.Request):
    method __init__ (line 26) | def __init__(self, *args, **kwargs):
    method get_method (line 30) | def get_method(self):
    method set_method (line 34) | def set_method(self, method):
  class ZooKeeper (line 37) | class ZooKeeper(object):
    class Error (line 39) | class Error(Exception): pass
    class NotFound (line 41) | class NotFound(Error): pass
    class ZNodeExists (line 43) | class ZNodeExists(Error): pass
    class InvalidSession (line 45) | class InvalidSession(Error): pass
    class WrongVersion (line 47) | class WrongVersion(Error): pass
    method __init__ (line 49) | def __init__(self, uri = 'http://localhost:9998'):
    method start_session (line 53) | def start_session(self, expire=5, id=None):
    method close_session (line 62) | def close_session(self):
    method heartbeat (line 69) | def heartbeat(self):
    method session (line 76) | def session(self, *args, **kwargs):
    method get (line 81) | def get(self, path):
    method get_children (line 86) | def get_children(self, path):
    method get_children_paths (line 94) | def get_children_paths(self, path, uris=False):
    method create (line 102) | def create(self, path, data=None, sequence=False, ephemeral=False):
    method set (line 129) | def set(self, path, data=None, version=-1, null=False):
    method delete (line 138) | def delete(self, path, version=-1):
    method recursive_delete (line 157) | def recursive_delete(self, path):
    method exists (line 164) | def exists(self, path):
    method _do_get (line 172) | def _do_get(self, uri):
    method _do_post (line 187) | def _do_post(self, uri, data=None):
    method _do_delete (line 209) | def _do_delete(self, uri):
    method _do_put (line 216) | def _do_put(self, uri, data):

FILE: src/contrib/huebrowser/zkui/src/zkui/stats.py
  class Session (line 22) | class Session(object):
    class BrokenLine (line 24) | class BrokenLine(Exception): pass
    method __init__ (line 26) | def __init__(self, session):
  class ZooKeeperStats (line 38) | class ZooKeeperStats(object):
    method __init__ (line 40) | def __init__(self, host='localhost', port='2181', timeout=1):
    method get_stats (line 44) | def get_stats(self):
    method get_clients (line 53) | def get_clients(self):
    method _create_socket (line 77) | def _create_socket(self):
    method _send_cmd (line 80) | def _send_cmd(self, cmd):
    method _parse (line 93) | def _parse(self, data):
    method _parse_stat (line 107) | def _parse_stat(self, data):
    method _parse_line (line 155) | def _parse_line(self, line):

FILE: src/contrib/huebrowser/zkui/src/zkui/utils.py
  function get_cluster_or_404 (line 21) | def get_cluster_or_404(id):

FILE: src/contrib/huebrowser/zkui/src/zkui/views.py
  function _get_global_overview (line 26) | def _get_global_overview():
  function _get_overview (line 32) | def _get_overview(cluster):
  function _group_stats_by_role (line 43) | def _group_stats_by_role(cluster):
  function index (line 56) | def index(request):
  function view (line 61) | def view(request, id):
  function clients (line 70) | def clients(request, host):
  function tree (line 82) | def tree(request, id, path):
  function delete (line 93) | def delete(request, id, path):
  function create (line 104) | def create(request, id, path):
  function edit_as_base64 (line 125) | def edit_as_base64(request, id, path):
  function edit_as_text (line 146) | def edit_as_text(request, id, path):

FILE: src/contrib/huebrowser/zkui/src/zkui/windmilltests.py
  function test_zkui (line 19) | def test_zkui():

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/FilterException.java
  class FilterException (line 20) | public class FilterException extends Exception {
    method FilterException (line 21) | public FilterException(String s) { super(s); }

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/FilterOp.java
  class FilterOp (line 23) | public abstract class FilterOp {
    type ArgType (line 27) | public enum ArgType {
    method FilterOp (line 31) | public FilterOp() {
    method newOp (line 36) | public static FilterOp newOp(String op) throws FilterException {
    method addSubOp (line 55) | public void addSubOp(FilterOp op) {
    method addArg (line 59) | public void addArg(Arg arg) {
    method matches (line 63) | public abstract boolean matches(LogEntry entry) throws FilterException;
    method toString (line 65) | public String toString() {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/FilterParser.java
  class FilterParser (line 27) | public class FilterParser {
    method FilterParser (line 30) | public FilterParser(String s) {
    method readUntilSpace (line 34) | private String readUntilSpace() throws IOException {
    method readStringArg (line 50) | private StringArg readStringArg() throws IOException, FilterException {
    method readNumberArg (line 73) | private NumberArg readNumberArg() throws IOException, FilterException {
    method readSymbolArg (line 87) | private SymbolArg readSymbolArg() throws IOException, FilterException {
    method parse (line 91) | public FilterOp parse() throws IOException, FilterException {
    method main (line 124) | public static void main(String[] args) throws IOException, FilterExcep...

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/JsonGenerator.java
  class JsonGenerator (line 35) | public class JsonGenerator {
    class Message (line 39) | private class Message {
      method Message (line 44) | public Message(int from, int to, long zxid) {
      method equals (line 50) | public boolean equals(Message m) {
    method txnEntry (line 57) | public JSONObject txnEntry(TransactionEntry e) {
    method JsonGenerator (line 74) | public JsonGenerator(LogIterator iter) {
    method toString (line 214) | public String toString() {
    method main (line 218) | public static void main(String[] args) throws Exception {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/Log4JEntry.java
  class Log4JEntry (line 20) | public class Log4JEntry extends LogEntry {
    method Log4JEntry (line 21) | public Log4JEntry(long timestamp, int node, String entry) {
    method getEntry (line 27) | public String getEntry() {
    method toString (line 31) | public String toString() {
    method getNode (line 35) | public int getNode() {
    method getType (line 39) | public Type getType() { return LogEntry.Type.LOG4J; }

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/Log4JSource.java
  class Log4JSource (line 43) | public class Log4JSource implements LogSource {
    method overlapsRange (line 59) | public boolean overlapsRange(long starttime, long endtime) {
    method size (line 63) | public long size() { return size; }
    method getStartTime (line 64) | public long getStartTime() { return starttime; }
    method getEndTime (line 65) | public long getEndTime() { return endtime; }
    method getSkipList (line 66) | public LogSkipList getSkipList() { return skiplist; }
    class Log4JSourceIterator (line 68) | private class Log4JSourceIterator implements LogIterator {
      method Log4JSourceIterator (line 79) | public Log4JSourceIterator(Log4JSource src, long starttime, long end...
      method Log4JSourceIterator (line 83) | public Log4JSourceIterator(Log4JSource src, long starttime, long end...
      method size (line 117) | synchronized public long size() throws IOException {
      method readNextEntry (line 159) | synchronized private LogEntry readNextEntry() {
      method hasNext (line 195) | public boolean hasNext() {
      method next (line 199) | public LogEntry next() throws NoSuchElementException {
      method remove (line 221) | public void remove() throws UnsupportedOperationException {
      method close (line 225) | public void close() throws IOException {
      method toString (line 229) | public String toString() {
    method iterator (line 240) | public LogIterator iterator(long starttime, long endtime) throws Illeg...
    method iterator (line 249) | public LogIterator iterator(long starttime, long endtime, FilterOp fil...
    method iterator (line 258) | public LogIterator iterator() throws IllegalArgumentException {
    method Log4JSource (line 262) | public Log4JSource(String file) throws IOException {
    method timestampFromText (line 270) | private static long timestampFromText(SimpleDateFormat format, String ...
    method init (line 282) | private void init() throws IOException {
    method toString (line 335) | public String toString() {
    method main (line 339) | public static void main(String[] args) throws IOException {
    method getServerId (line 388) | public int getServerId() {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogEntry.java
  class LogEntry (line 23) | public abstract class LogEntry implements Serializable {
    type Type (line 26) | public enum Type { UNKNOWN, LOG4J, TXN }
    method LogEntry (line 28) | public LogEntry(long timestamp) {
    method getTimestamp (line 33) | public long getTimestamp() {
    method getType (line 37) | public abstract Type getType();
    method setAttribute (line 39) | public void setAttribute(String key, Object v) {
    method getAttribute (line 43) | public Object getAttribute(String key) {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogIterator.java
  type LogIterator (line 24) | public interface LogIterator extends Iterator<LogEntry>, Closeable {
    method size (line 25) | long size() throws IOException;

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogServer.java
  class LogServer (line 36) | public class LogServer extends ServletContextHandler {
    method LogServer (line 37) | public LogServer(MergedLogSource src) throws Exception {
    method main (line 50) | public static void main(String[] args) {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSkipList.java
  class LogSkipList (line 33) | public class LogSkipList {
    class Mark (line 38) | public class Mark {
      method Mark (line 43) | public Mark(long time, long bytes, long skipped) {
      method getTime (line 49) | public long getTime() { return this.time; }
      method getBytes (line 50) | public long getBytes() { return this.bytes; }
      method getEntriesSkipped (line 51) | public long getEntriesSkipped() { return this.skipped; }
      method toString (line 53) | public String toString() {
    method LogSkipList (line 58) | public LogSkipList() {
    method addMark (line 65) | public void addMark(long time, long bytes, long skipped) {
    method findMarkBefore (line 75) | public Mark findMarkBefore(long time) throws NoSuchElementException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSource.java
  type LogSource (line 21) | public interface LogSource extends Iterable<LogEntry> {
    method iterator (line 22) | public LogIterator iterator(long starttime, long endtime, FilterOp fil...
    method iterator (line 24) | public LogIterator iterator(long starttime, long endtime) throws Illeg...
    method iterator (line 26) | public LogIterator iterator() throws IllegalArgumentException;
    method overlapsRange (line 28) | public boolean overlapsRange(long starttime, long endtime);
    method size (line 30) | public long size();
    method getStartTime (line 31) | public long getStartTime();
    method getEndTime (line 32) | public long getEndTime();

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MeasureThroughput.java
  class MeasureThroughput (line 28) | public class MeasureThroughput {
    method main (line 33) | public static void main(String[] args) throws IOException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MergedLogSource.java
  class MergedLogSource (line 59) | public class MergedLogSource implements LogSource {
    method overlapsRange (line 66) | public boolean overlapsRange(long starttime, long endtime) {
    method size (line 70) | public long size() { return size; }
    method getStartTime (line 71) | public long getStartTime() { return starttime; }
    method getEndTime (line 72) | public long getEndTime() { return endtime; }
    class MergedLogSourceIterator (line 74) | private class MergedLogSourceIterator implements LogIterator {
      method MergedLogSourceIterator (line 83) | public MergedLogSourceIterator(MergedLogSource src, long starttime, ...
      method MergedLogSourceIterator (line 101) | public MergedLogSourceIterator(MergedLogSource src, long starttime, ...
      method size (line 105) | public long size() throws IOException {
      method hasNext (line 113) | public boolean hasNext() {
      method next (line 120) | public LogEntry next() {
      method remove (line 140) | public void remove() throws UnsupportedOperationException {
      method close (line 144) | public void close() throws IOException {
    method iterator (line 151) | public LogIterator iterator(long starttime, long endtime) throws Illeg...
    method iterator (line 160) | public LogIterator iterator(long starttime, long endtime, FilterOp fil...
    method iterator (line 169) | public LogIterator iterator() throws IllegalArgumentException {
    method MergedLogSource (line 173) | public MergedLogSource(String[] files) throws IOException {
    method addSource (line 180) | public void addSource(String f) throws IOException {
    method toString (line 194) | public String toString() {
    method main (line 202) | public static void main(String[] args) throws IOException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/RandomAccessFileReader.java
  class RandomAccessFileReader (line 34) | public class RandomAccessFileReader extends Reader implements DataInput {
    method RandomAccessFileReader (line 46) | public RandomAccessFileReader(File f) throws FileNotFoundException {
    method fill (line 68) | private int fill() throws IOException {
    method markSupported (line 91) | public boolean markSupported() { return false; }
    method read (line 96) | synchronized public int read(char[] cbuf, int off, int len) throws IOE...
    method read (line 114) | synchronized public int read(byte[] buf, int off, int len) throws IOEx...
    method close (line 148) | public void close() throws IOException {
    method getPosition (line 155) | public long getPosition() {
    method seek (line 159) | synchronized public void seek(long pos) throws IOException {
    method readLine (line 171) | synchronized public String readLine() throws IOException {
    method readFully (line 213) | public void readFully(byte[] b) throws IOException {
    method readFully (line 217) | public void readFully(byte[] b, int off, int len) throws IOException
    method skipBytes (line 230) | public int skipBytes(int n) throws IOException {
    method readBoolean (line 235) | public boolean readBoolean() throws IOException {
    method readByte (line 239) | public byte readByte() throws IOException {
    method readUnsignedByte (line 245) | public int readUnsignedByte() throws IOException {
    method readShort (line 249) | public short readShort() throws IOException {
    method readUnsignedShort (line 255) | public int readUnsignedShort() throws IOException {
    method readChar (line 261) | public char readChar() throws IOException {
    method readInt (line 265) | public int readInt() throws IOException {
    method readLong (line 271) | public long readLong() throws IOException {
    method readFloat (line 281) | public float readFloat() throws IOException {
    method readDouble (line 285) | public double readDouble() throws IOException {
    method readUTF (line 289) | public String readUTF() throws IOException {
    method main (line 299) | public static void main(String[] args) throws IOException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TransactionEntry.java
  class TransactionEntry (line 20) | public class TransactionEntry extends LogEntry {
    method TransactionEntry (line 21) | public TransactionEntry(long timestamp, long clientId, long Cxid, long...
    method TransactionEntry (line 25) | public TransactionEntry(long timestamp, long clientId, long Cxid, long...
    method getClientId (line 34) | public long getClientId() {
    method getCxid (line 38) | public long getCxid() {
    method getZxid (line 42) | public long getZxid() {
    method getOp (line 46) | public String getOp() {
    method getExtra (line 50) | public String getExtra() {
    method toString (line 54) | public String toString() {
    method getType (line 58) | public Type getType() { return LogEntry.Type.TXN; }

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TxnLogSource.java
  class TxnLogSource (line 58) | public class TxnLogSource implements LogSource {
    method overlapsRange (line 69) | public boolean overlapsRange(long starttime, long endtime) {
    method size (line 73) | public long size() { return size; }
    method getStartTime (line 74) | public long getStartTime() { return starttime; }
    method getEndTime (line 75) | public long getEndTime() { return endtime; }
    method getSkipList (line 76) | public LogSkipList getSkipList() { return skiplist; }
    method isTransactionFile (line 78) | public static boolean isTransactionFile(String file) throws IOException {
    class TxnLogSourceIterator (line 88) | private class TxnLogSourceIterator implements LogIterator {
      method TxnLogSourceIterator (line 98) | public TxnLogSourceIterator(TxnLogSource src, long starttime, long e...
      method TxnLogSourceIterator (line 102) | public TxnLogSourceIterator(TxnLogSource src, long starttime, long e...
      method size (line 137) | public long size() throws IOException {
      method readNextEntry (line 161) | private LogEntry readNextEntry() {
      method hasNext (line 238) | public boolean hasNext() {
      method next (line 242) | public LogEntry next() throws NoSuchElementException {
      method remove (line 263) | public void remove() throws UnsupportedOperationException {
      method close (line 267) | public void close() throws IOException {
    method iterator (line 272) | public LogIterator iterator(long starttime, long endtime) throws Illeg...
    method iterator (line 281) | public LogIterator iterator(long starttime, long endtime, FilterOp fil...
    method iterator (line 290) | public LogIterator iterator() throws IllegalArgumentException {
    method TxnLogSource (line 294) | public TxnLogSource(String file) throws IOException {
    method toString (line 351) | public String toString() {
    method main (line 355) | public static void main(String[] args) throws IOException, FilterExcep...

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/AndOp.java
  class AndOp (line 24) | public class AndOp extends FilterOp {
    method matches (line 25) | public boolean matches(LogEntry entry) throws FilterException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/Arg.java
  class Arg (line 22) | public class Arg<T> {
    method Arg (line 26) | protected Arg(ArgType type) {
    method getType (line 30) | public ArgType getType() { return type; }
    method getValue (line 31) | public T getValue() { return value; }
    method toString (line 33) | public String toString() {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/EqualsOp.java
  class EqualsOp (line 24) | public class EqualsOp extends FilterOp {
    method matches (line 25) | public boolean matches(LogEntry entry) throws FilterException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/GreaterThanOp.java
  class GreaterThanOp (line 24) | public class GreaterThanOp extends FilterOp {
    method matches (line 25) | public boolean matches(LogEntry entry) throws FilterException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/LessThanOp.java
  class LessThanOp (line 24) | public class LessThanOp extends FilterOp {
    method matches (line 25) | public boolean matches(LogEntry entry) throws FilterException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NotOp.java
  class NotOp (line 24) | public class NotOp extends FilterOp {
    method matches (line 25) | public boolean matches(LogEntry entry) throws FilterException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NumberArg.java
  class NumberArg (line 22) | public class NumberArg extends Arg<Long> {
    method NumberArg (line 23) | public NumberArg(Long value) {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/OrOp.java
  class OrOp (line 24) | public class OrOp extends FilterOp {
    method matches (line 25) | public boolean matches(LogEntry entry) throws FilterException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/StringArg.java
  class StringArg (line 22) | public class StringArg extends Arg<String> {
    method StringArg (line 23) | public StringArg(String value) {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/SymbolArg.java
  class SymbolArg (line 22) | public class SymbolArg extends Arg<String> {
    method SymbolArg (line 23) | public SymbolArg(String value) {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/XorOp.java
  class XorOp (line 24) | public class XorOp extends FilterOp {
    method matches (line 25) | public boolean matches(LogEntry entry) throws FilterException {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/FileLoader.java
  class FileLoader (line 35) | public class FileLoader extends JsonServlet
    method FileLoader (line 39) | public FileLoader(MergedLogSource src) throws Exception {
    method handleRequest (line 43) | String handleRequest(JsonRequest request) throws Exception

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Fs.java
  class Fs (line 35) | public class Fs extends JsonServlet
    method handleRequest (line 37) | String handleRequest(JsonRequest request) throws Exception

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/GraphData.java
  class GraphData (line 40) | public class GraphData extends JsonServlet
    method GraphData (line 47) | public GraphData(LogSource src) throws Exception {
    method handleRequest (line 51) | String handleRequest(JsonRequest request) throws Exception {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/JsonServlet.java
  class JsonServlet (line 33) | abstract public class JsonServlet extends HttpServlet {
    method handleRequest (line 34) | abstract String handleRequest(JsonRequest request) throws Exception;
    class JsonRequest (line 36) | protected class JsonRequest {
      method JsonRequest (line 39) | public JsonRequest(ServletRequest request) {
      method getNumber (line 43) | public long getNumber(String name, long defaultnum) {
      method getString (line 56) | public String getString(String name, String defaultstr) {
    method doGet (line 66) | protected void doGet(HttpServletRequest request, HttpServletResponse r...

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/NumEvents.java
  class NumEvents (line 41) | public class NumEvents extends JsonServlet
    method NumEvents (line 48) | public NumEvents(LogSource src) throws Exception {
    method handleRequest (line 52) | String handleRequest(JsonRequest request) throws Exception {

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/StaticContent.java
  class StaticContent (line 31) | public class StaticContent extends HttpServlet {
    method doGet (line 32) | protected void doGet(HttpServletRequest request, HttpServletResponse r...

FILE: src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Throughput.java
  class Throughput (line 38) | public class Throughput extends JsonServlet
    method Throughput (line 46) | public Throughput(LogSource src) throws Exception {
    method handleRequest (line 50) | public String handleRequest(JsonRequest request) throws Exception {

FILE: src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/g.dot.js
  function drawAxis (line 8) | function drawAxis(ax) {

FILE: src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/g.line.js
  function shrink (line 8) | function shrink(values, dim) {
  function createColumns (line 119) | function createColumns(f) {
  function createDots (line 159) | function createDots(f) {

FILE: src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/g.pie.js
  function sector (line 30) | function sector(cx, cy, r, startAngle, endAngle, fill) {

FILE: src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/g.raphael.js
  function round (line 355) | function round(a) {

FILE: src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/loggraph.js
  function complete (line 65) | function complete(id, o, args) {
  function success (line 241) | function success(id, o, args) {
  function failure (line 252) | function failure(id, o, args) {

FILE: src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/loggraph.ui.js
  function complete (line 129) | function complete(id, o, args) {
  function complete (line 192) | function complete(id, o, args) {
  function complete (line 319) | function complete(id, o, args) {
  function updateInput (line 345) | function updateInput( e ) {
  function complete (line 369) | function complete(id, o, args) {

FILE: src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/raphael.js
  function cacher (line 212) | function cacher(f, scope, postprocessor) {
  function x_y (line 2554) | function x_y() {
  function along (line 2968) | function along(isBack) {

FILE: src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/yui-min.js
  function A (line 9) | function A(){this._init();this.add.apply(this,arguments);}
  function D (line 10) | function D(K){var J;for(J=0;J<H.length;J+=1){if(K.toLowerCase()===H[J].t...

FILE: src/contrib/monitoring/check_zookeeper.py
  class NagiosHandler (line 40) | class NagiosHandler(object):
    method register_options (line 43) | def register_options(cls, parser):
    method analyze (line 51) | def analyze(self, opts, cluster_stats):
  class CactiHandler (line 95) | class CactiHandler(object):
    method register_options (line 98) | def register_options(cls, parser):
    method analyze (line 106) | def analyze(self, opts, cluster_stats):
  class GangliaHandler (line 136) | class GangliaHandler(object):
    method register_options (line 139) | def register_options(cls, parser):
    method call (line 148) | def call(self, *args, **kwargs):
    method analyze (line 151) | def analyze(self, opts, cluster_stats):
  class ZooKeeperServer (line 163) | class ZooKeeperServer(object):
    method __init__ (line 165) | def __init__(self, host='localhost', port='2181', timeout=1):
    method get_stats (line 169) | def get_stats(self):
    method _create_socket (line 183) | def _create_socket(self):
    method _send_cmd (line 186) | def _send_cmd(self, cmd):
    method _parse (line 199) | def _parse(self, data):
    method _parse_stat (line 213) | def _parse_stat(self, data):
    method _parse_line (line 268) | def _parse_line(self, line):
  function main (line 284) | def main():
  function create_handler (line 299) | def create_handler(name):
  function get_all_handlers (line 306) | def get_all_handlers():
  function dump_stats (line 310) | def dump_stats(cluster_stats):
  function get_cluster_stats (line 319) | def get_cluster_stats(servers):
  function get_version (line 340) | def get_version():
  function parse_cli (line 344) | def parse_cli():

FILE: src/contrib/monitoring/ganglia/zookeeper_ganglia.py
  class ZooKeeperServer (line 33) | class ZooKeeperServer(object):
    method __init__ (line 35) | def __init__(self, host='localhost', port='2181', timeout=1):
    method get_stats (line 39) | def get_stats(self):
    method _create_socket (line 48) | def _create_socket(self):
    method _send_cmd (line 51) | def _send_cmd(self, cmd):
    method _parse (line 64) | def _parse(self, data):
    method _parse_stat (line 78) | def _parse_stat(self, data):
    method _parse_line (line 126) | def _parse_line(self, line):
  function metric_handler (line 142) | def metric_handler(name):
  function metric_init (line 153) | def metric_init(params=None):
  function metric_cleanup (line 200) | def metric_cleanup():

FILE: src/contrib/monitoring/test.py
  class SocketMock (line 61) | class SocketMock(object):
    method __init__ (line 62) | def __init__(self):
    method settimeout (line 65) | def settimeout(self, timeout):
    method connect (line 68) | def connect(self, address):
    method send (line 71) | def send(self, data):
    method recv (line 75) | def recv(self, size):
    method close (line 78) | def close(self): pass
  class ZK33xSocketMock (line 80) | class ZK33xSocketMock(SocketMock):
    method __init__ (line 81) | def __init__(self):
    method recv (line 85) | def recv(self, size):
  class UnableToConnectSocketMock (line 91) | class UnableToConnectSocketMock(SocketMock):
    method connect (line 92) | def connect(self, _):
  function create_server_mock (line 95) | def create_server_mock(socket_class):
  class TestCheckZookeeper (line 101) | class TestCheckZookeeper(unittest.TestCase):
    method setUp (line 103) | def setUp(self):
    method test_parse_valid_line (line 106) | def test_parse_valid_line(self):
    method test_parse_line_raises_exception_on_invalid_output (line 112) | def test_parse_line_raises_exception_on_invalid_output(self):
    method test_parser_on_valid_output (line 117) | def test_parser_on_valid_output(self):
    method test_parse_should_ignore_invalid_lines (line 123) | def test_parse_should_ignore_invalid_lines(self):
    method test_parse_stat_valid_output (line 128) | def test_parse_stat_valid_output(self):
    method test_recv_valid_output (line 144) | def test_recv_valid_output(self):
    method test_socket_unable_to_connect (line 151) | def test_socket_unable_to_connect(self):
    method test_use_stat_cmd_if_mntr_is_not_available (line 156) | def test_use_stat_cmd_if_mntr_is_not_available(self):
  class HandlerTestCase (line 162) | class HandlerTestCase(unittest.TestCase):
    method setUp (line 164) | def setUp(self):
    method tearDown (line 172) | def tearDown(self):
    method output (line 175) | def output(self):
  class TestNagiosHandler (line 180) | class TestNagiosHandler(HandlerTestCase):
    method _analyze (line 182) | def _analyze(self, w, c, k, stats):
    method test_ok_status (line 190) | def test_ok_status(self):
    method test_warning_status (line 199) | def test_warning_status(self):
    method test_critical_status (line 208) | def test_critical_status(self):
    method test_check_a_specific_key_on_all_hosts (line 217) | def test_check_a_specific_key_on_all_hosts(self):
  class TestCactiHandler (line 233) | class TestCactiHandler(HandlerTestCase):
    class Opts (line 234) | class Opts(object):
      method __init__ (line 238) | def __init__(self, leader=False):
    method test_output_values_for_all_hosts (line 241) | def test_output_values_for_all_hosts(self):
    method test_output_single_value_for_leader (line 249) | def test_output_single_value_for_leader(self):
  class TestGangliaHandler (line 258) | class TestGangliaHandler(unittest.TestCase):
    class TestableGangliaHandler (line 260) | class TestableGangliaHandler(GangliaHandler):
      method __init__ (line 261) | def __init__(self):
      method call (line 265) | def call(self, cli):
    method test_send_single_metric (line 268) | def test_send_single_metric(self):

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/RestMain.java
  class RestMain (line 41) | public class RestMain {
    method RestMain (line 48) | public RestMain(RestCfg cfg) {
    method start (line 52) | public void start() throws IOException {
    method stop (line 90) | public void stop() {
    method createJerseyAdapter (line 95) | private ServletAdapter createJerseyAdapter(Endpoint e) {
    method main (line 117) | public static void main(String[] args) throws Exception {
    method printEndpoints (line 135) | private static void printEndpoints(RestCfg cfg) {

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/ZooKeeperService.java
  class ZooKeeperService (line 41) | public class ZooKeeperService {
    class MyWatcher (line 56) | private static class MyWatcher implements Watcher {
      method MyWatcher (line 60) | public MyWatcher(String contextPath) {
      method process (line 68) | synchronized public void process(WatchedEvent event) {
    class SessionTimerTask (line 76) | private static class SessionTimerTask extends TimerTask {
      method SessionTimerTask (line 82) | public SessionTimerTask(int delayInSeconds, String session,
      method SessionTimerTask (line 91) | public SessionTimerTask(SessionTimerTask t) {
      method run (line 95) | @Override
      method reset (line 104) | public void reset() {
    method mapContext (line 115) | synchronized public static void mapContext(String contextPath, Endpoin...
    method resetTimer (line 122) | synchronized public static void resetTimer(String contextPath,
    method close (line 137) | public static void close(String contextPath) {
    method close (line 144) | synchronized public static void close(String contextPath, String sessi...
    method closeAll (line 166) | synchronized public static void closeAll() {
    method isConnected (line 176) | synchronized public static boolean isConnected(String contextPath,
    method getClient (line 184) | public static ZooKeeper getClient(String contextPath) throws IOExcepti...
    method getClient (line 193) | public static ZooKeeper getClient(String contextPath, String session)
    method getClient (line 204) | synchronized public static ZooKeeper getClient(String contextPath,
    method concat (line 235) | private static String concat(String contextPath, String session) {

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/cfg/Credentials.java
  class Credentials (line 23) | public class Credentials extends HashMap<String, String> {
    method join (line 25) | public static Credentials join(Credentials a, Credentials b) {
    method Credentials (line 32) | public Credentials() {
    method Credentials (line 36) | public Credentials(String credentials) {

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/cfg/Endpoint.java
  class Endpoint (line 21) | public class Endpoint {
    method Endpoint (line 28) | public Endpoint(String context, String hostPortList) {
    method getContext (line 33) | public String getContext() {
    method getHostPort (line 37) | public String getHostPort() {
    method getCredentials (line 41) | public Credentials getCredentials() {
    method setCredentials (line 45) | public void setCredentials(String c) {
    method setZooKeeperAuthInfo (line 49) | public void setZooKeeperAuthInfo(String digest) {
    method getZooKeeperAuthInfo (line 53) | public final Credentials getZooKeeperAuthInfo() {
    method equals (line 57) | @Override
    method hashCode (line 63) | @Override
    method toString (line 68) | @Override

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/cfg/HostPort.java
  class HostPort (line 21) | public class HostPort {
    method HostPort (line 26) | public HostPort(String hostPort) {
    method getHost (line 32) | public String getHost() {
    method getPort (line 36) | public int getPort() {
    method equals (line 40) | @Override
    method hashCode (line 46) | @Override

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/cfg/HostPortSet.java
  class HostPortSet (line 24) | public class HostPortSet {
    method HostPortSet (line 29) | public HostPortSet(String hostPortList) {
    method toString (line 46) | @Override

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/cfg/RestCfg.java
  class RestCfg (line 27) | public class RestCfg {
    method RestCfg (line 34) | public RestCfg(String resource) throws IOException {
    method RestCfg (line 38) | public RestCfg(InputStream io) throws IOException {
    method extractCredentials (line 48) | private void extractCredentials() {
    method extractEndpoints (line 54) | private void extractEndpoints() {
    method getPort (line 83) | public int getPort() {
    method useSSL (line 87) | public boolean useSSL() {
    method getEndpoints (line 91) | public final Set<Endpoint> getEndpoints() {
    method getCredentials (line 95) | public final Credentials getCredentials() {
    method getJKS (line 99) | public String getJKS() {
    method getJKS (line 103) | public String getJKS(String def) {
    method getJKSPassword (line 107) | public String getJKSPassword() {

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/filters/HTTPBasicAuth.java
  class HTTPBasicAuth (line 36) | public class HTTPBasicAuth implements Filter {
    method HTTPBasicAuth (line 40) | public HTTPBasicAuth(Credentials c) {
    method doFilter (line 44) | @Override
    method parseAuthorization (line 65) | private String[] parseAuthorization(String authorization) {
    method init (line 79) | @Override
    method destroy (line 83) | @Override

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/jaxb/ZChildren.java
  class ZChildren (line 34) | @XmlRootElement(name="child")
    method ZChildren (line 44) | public ZChildren() {
    method ZChildren (line 49) | public ZChildren(String path, String uri, String child_uri_template,
    method hashCode (line 62) | @Override
    method equals (line 67) | @Override
    method toString (line 76) | @Override

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/jaxb/ZChildrenJSON.java
  class ZChildrenJSON (line 32) | @XmlRootElement(name="child")
    method ZChildrenJSON (line 40) | public ZChildrenJSON() {
    method ZChildrenJSON (line 45) | public ZChildrenJSON(String path, String uri, String child_uri_template,
    method hashCode (line 58) | @Override
    method equals (line 63) | @Override
    method toString (line 72) | @Override

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/jaxb/ZError.java
  class ZError (line 27) | @XmlRootElement(name="error")
    method ZError (line 32) | public ZError(){
    method ZError (line 36) | public ZError(String request, String message) {

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/jaxb/ZPath.java
  class ZPath (line 27) | @XmlRootElement(name="path")
    method ZPath (line 32) | public ZPath(){
    method ZPath (line 36) | public ZPath(String path) {
    method ZPath (line 40) | public ZPath(String path, String uri) {
    method hashCode (line 45) | @Override
    method equals (line 50) | @Override
    method toString (line 59) | @Override

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/jaxb/ZSession.java
  class ZSession (line 23) | @XmlRootElement(name="session")
    method ZSession (line 28) | public ZSession() {
    method ZSession (line 32) | public ZSession(String id, String uri) {
    method hashCode (line 37) | @Override
    method equals (line 42) | @Override
    method toString (line 51) | @Override

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/jaxb/ZStat.java
  class ZStat (line 27) | @XmlRootElement(name="stat")
    method ZStat (line 47) | public ZStat(){
    method ZStat (line 51) | public ZStat(String path, byte[] data64, String dataUtf8)
    method ZStat (line 58) | public ZStat(String path, String uri, byte[] data64, String dataUtf8,
    method hashCode (line 81) | @Override
    method equals (line 91) | @Override
    method toString (line 100) | @Override

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/JAXBContextResolver.java
  class JAXBContextResolver (line 40) | @Provider
    method JAXBContextResolver (line 47) | public JAXBContextResolver() throws Exception {
    method getContext (line 69) | public JAXBContext getContext(Class<?> objectType) {

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/KeeperExceptionMapper.java
  class KeeperExceptionMapper (line 34) | @Provider
    method KeeperExceptionMapper (line 38) | public KeeperExceptionMapper(@Context UriInfo ui) {
    method toResponse (line 42) | public Response toResponse(KeeperException e) {

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/RuntimeExceptionMapper.java
  class RuntimeExceptionMapper (line 33) | @Provider
    method RuntimeExceptionMapper (line 39) | public RuntimeExceptionMapper(@Context UriInfo ui) {
    method toResponse (line 43) | public Response toResponse(RuntimeException e) {

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/SessionsResource.java
  class SessionsResource (line 49) | @Path("sessions/v1/{session: .*}")
    method SessionsResource (line 56) | public SessionsResource(@Context HttpServletRequest request) {
    method keepAliveSession (line 63) | @PUT
    method createSession (line 78) | @POST
    method deleteSession (line 119) | @DELETE
    method throwNotFound (line 127) | private static void throwNotFound(String session, UriInfo ui)

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZErrorWriter.java
  class ZErrorWriter (line 39) | @Produces(MediaType.APPLICATION_OCTET_STREAM)
    method getSize (line 43) | public long getSize(ZError t, Class<?> type, Type genericType,
    method isWriteable (line 48) | public boolean isWriteable(Class<?> type, Type genericType,
    method writeTo (line 53) | public void writeTo(ZError t, Class<?> type, Type genericType,

FILE: src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZNodeResource.java
  class ZNodeResource (line 62) | @Path("znodes/v1{path: /.*}")
    method ZNodeResource (line 66) | public ZNodeResource(@DefaultValue("") @QueryParam("session") String s...
    method ensurePathNotNull (line 85) | private void ensurePathNotNull(String path) {
    method existsZNode (line 91) | @HEAD
    method existsZNodeAsOctet (line 103) | @HEAD
    method getZNodeListJSON (line 122) | @GET
    method getZNodeList (line 133) | @GET
    method getZNodeList (line 144) | private Response getZNodeList(boolean json, String path, String callback,
    method getZNodeListAsOctet (line 199) | @GET
    method setZNode (line 215) | @PUT
    method setZNodeAsOctet (line 256) | @PUT
    method createZNode (line 283) | @POST
    method createZNodeAsOctet (line 339) | @POST
    method deleteZNode (line 383) | @DELETE
    method throwNotFound (line 404) | private static void throwNotFound(String path, UriInfo ui)

FILE: src/contrib/rest/src/python/demo_master_election.py
  class Agent (line 25) | class Agent(threading.Thread):
    method __init__ (line 30) | def __init__(self, id):
    method run (line 35) | def run(self):
    method do_master_work (line 71) | def do_master_work(self):
  function main (line 74) | def main():

FILE: src/contrib/rest/src/python/demo_queue.py
  class Queue (line 33) | class Queue(object):
    method __init__ (line 34) | def __init__(self, root, zk):
    method put (line 39) | def put(self, data):
    method fetch (line 46) | def fetch(self):
  function main (line 73) | def main():

FILE: src/contrib/rest/src/python/test.py
  class ZooKeeperREST_TestCase (line 24) | class ZooKeeperREST_TestCase(unittest.TestCase):
    method setUp (line 28) | def setUp(self):
    method tearDown (line 31) | def tearDown(self):
    method test_get_root_node (line 37) | def test_get_root_node(self):
    method test_get_node_not_found (line 40) | def test_get_node_not_found(self):
    method test_exists_node (line 44) | def test_exists_node(self):
    method test_get_children (line 47) | def test_get_children(self):
    method test_create_znode (line 51) | def test_create_znode(self):
    method test_create_hierarchy (line 58) | def test_create_hierarchy(self):
    method test_create_with_data (line 69) | def test_create_with_data(self):
    method test_delete_znode (line 76) | def test_delete_znode(self):
    method test_delete_older_version (line 82) | def test_delete_older_version(self):
    method test_delete_raise_not_found (line 92) | def test_delete_raise_not_found(self):
    method test_set (line 101) | def test_set(self):
    method test_set_with_older_version (line 109) | def test_set_with_older_version(self):
    method test_set_null (line 118) | def test_set_null(self):
    method test_create_ephemeral_node (line 127) | def test_create_ephemeral_node(self):
    method test_create_session (line 137) | def test_create_session(self):
    method test_session_invalidation (line 141) | def test_session_invalidation(self):
    method test_presence_signaling (line 154) | def test_presence_signaling(self):

FILE: src/contrib/rest/src/python/zk_dump_tree.py
  function dump_node (line 28) | def dump_node(url, depth):
  function zk_dump_tree (line 65) | def zk_dump_tree(url, root):
  function usage (line 73) | def usage():

FILE: src/contrib/rest/src/python/zkrest.py
  class RequestWithMethod (line 24) | class RequestWithMethod(urllib2.Request):
    method __init__ (line 26) | def __init__(self, *args, **kwargs):
    method get_method (line 30) | def get_method(self):
    method set_method (line 34) | def set_method(self, method):
  class ZooKeeper (line 37) | class ZooKeeper(object):
    class Error (line 39) | class Error(Exception): pass
    class NotFound (line 41) | class NotFound(Error): pass
    class ZNodeExists (line 43) | class ZNodeExists(Error): pass
    class InvalidSession (line 45) | class InvalidSession(Error): pass
    class WrongVersion (line 47) | class WrongVersion(Error): pass
    method __init__ (line 49) | def __init__(self, uri = 'http://localhost:9998'):
    method start_session (line 53) | def start_session(self, expire=5, id=None):
    method close_session (line 62) | def close_session(self):
    method heartbeat (line 69) | def heartbeat(self):
    method session (line 76) | def session(self, *args, **kwargs):
    method get (line 81) | def get(self, path):
    method get_children (line 86) | def get_children(self, path):
    method create (line 97) | def create(self, path, data=None, sequence=False, ephemeral=False):
    method set (line 124) | def set(self, path, data=None, version=-1, null=False):
    method delete (line 133) | def delete(self, path, version=-1):
    method exists (line 152) | def exists(self, path):
    method _do_get (line 160) | def _do_get(self, uri):
    method _do_post (line 175) | def _do_post(self, uri, data=None):
    method _do_delete (line 197) | def _do_delete(self, uri):
    method _do_put (line 204) | def _do_put(self, uri, data):

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/Base.java
  class Base (line 42) | public class Base extends TestCase {
    method setUp (line 57) | @Before
    method tearDown (line 76) | @After
    method createBaseZNode (line 85) | protected static String createBaseZNode() throws Exception {

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/CreateTest.java
  class CreateTest (line 46) | @RunWith(Parameterized.class)
    class MyWatcher (line 59) | public static class MyWatcher implements Watcher {
      method process (line 60) | public void process(WatchedEvent event) {
    method data (line 65) | @Parameters
    method CreateTest (line 102) | public CreateTest(String accept, String path, String name, String enco...
    method testCreate (line 116) | @Test

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/DeleteTest.java
  class DeleteTest (line 45) | @RunWith(Parameterized.class)
    class MyWatcher (line 52) | public static class MyWatcher implements Watcher {
      method process (line 53) | public void process(WatchedEvent event) {
    method data (line 58) | @Parameters
    method DeleteTest (line 68) | public DeleteTest(String path, String zpath, ClientResponse.Status sta...
    method verify (line 73) | public void verify(String type) throws Exception {
    method testDelete (line 88) | @Test

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/ExistsTest.java
  class ExistsTest (line 40) | @RunWith(Parameterized.class)
    method data (line 47) | @Parameters
    method ExistsTest (line 57) | public ExistsTest(String path, ClientResponse.Status status) {
    method verify (line 62) | private void verify(String type) {
    method testExists (line 73) | @Test

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetChildrenTest.java
  class GetChildrenTest (line 46) | @RunWith(Parameterized.class)
    method data (line 56) | @Parameters
    method GetChildrenTest (line 90) | public GetChildrenTest(String accept, String path, ClientResponse.Stat...
    method testGetChildren (line 100) | @Test

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetTest.java
  class GetTest (line 41) | @RunWith(Parameterized.class)
    method data (line 51) | @Parameters
    method GetTest (line 88) | public GetTest(String accept, String path, String encoding,
    method testGet (line 98) | @Test

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RestTestSuite.java
  class RestTestSuite (line 27) | @RunWith(Suite.class)
    method setUp (line 32) | @BeforeClass
    method tearDown (line 37) | @AfterClass

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RootTest.java
  class RootTest (line 40) | public class RootTest extends Base {
    method testCreate (line 43) | @Test

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/SessionTest.java
  class SessionTest (line 39) | public class SessionTest extends Base {
    method createSession (line 42) | private ZSession createSession() {
    method createSession (line 46) | private ZSession createSession(String expire) {
    method testCreateNewSession (line 58) | @Test
    method testSessionExpires (line 67) | @Test
    method testDeleteSession (line 79) | @Test
    method testSendHeartbeat (line 94) | @Test
    method testCreateEphemeralZNode (line 112) | @Test

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/SetTest.java
  class SetTest (line 48) | @RunWith(Parameterized.class)
    class MyWatcher (line 59) | public static class MyWatcher implements Watcher {
      method process (line 60) | public void process(WatchedEvent event) {
    method data (line 65) | @Parameters
    method SetTest (line 96) | public SetTest(String accept, String path, String encoding,
    method testSet (line 107) | @Test

FILE: src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/WadlTest.java
  class WadlTest (line 33) | public class WadlTest extends Base {
    method testApplicationWadl (line 36) | @Test

FILE: src/contrib/zkfuse/src/blockingqueue.h
  function USING_ZKFUSE_NAMESPACE (line 27) | USING_ZKFUSE_NAMESPACE

FILE: src/contrib/zkfuse/src/event.cc
  type zkfuse (line 26) | namespace zkfuse {

FILE: src/contrib/zkfuse/src/event.h
  function namespace (line 42) | namespace zkfuse {
  function TimerId (line 403) | TimerId scheduleAfter(int64_t timeFromNow, const T &userData) {
  function TimerId (line 417) | TimerId scheduleAt(int64_t absTime, const T &userData) {
  function getCurrentTimeMillis (line 434) | static int64_t getCurrentTimeMillis() {
  function cancelAlarm (line 448) | bool cancelAlarm(TimerId eventID) {
  function sendAlarms (line 466) | void sendAlarms() {

FILE: src/contrib/zkfuse/src/log.cc
  class LogConfiguration (line 28) | class LogConfiguration {
    method LogConfiguration (line 30) | LogConfiguration(const string &file) {

FILE: src/contrib/zkfuse/src/mutex.h
  function class (line 32) | class Mutex {
  function class (line 60) | class AutoLock {
  function class (line 73) | class AutoUnlockTemp {
  function class (line 85) | class Cond {
  function class (line 130) | class Lock {

FILE: src/contrib/zkfuse/src/thread.h
  function START_ZKFUSE_NAMESPACE (line 29) | START_ZKFUSE_NAMESPACE
  function Join (line 43) | void Join() {
  function run (line 62) | void run(void) {
  function Create (line 85) | void Create(T& obj, FuncPtr func) {

FILE: src/contrib/zkfuse/src/zkadapter.cc
  class InitZooKeeperLogging (line 35) | class InitZooKeeperLogging
    method InitZooKeeperLogging (line 38) | InitZooKeeperLogging() {
  type zk (line 58) | namespace zk
    class RetryHandler (line 64) | class RetryHandler
      method RetryHandler (line 67) | RetryHandler(const ZooKeeperConfig &zkConfig)
      method handleRC (line 84) | bool handleRC(int rc)
      method retryOnError (line 117) | static bool retryOnError(int zkErrorCode)
    function zkWatcher (line 126) | void zkWatcher(zhandle_t *zh, int type, int state, const char *path,
    type timeval (line 465) | struct timeval
    type Stat (line 704) | struct Stat
    function string (line 800) | string

FILE: src/contrib/zkfuse/src/zkadapter.h
  function namespace (line 39) | namespace zk {
  function class (line 179) | class ZKWatcherEvent
  type EventSource (line 254) | typedef EventSource<ZKWatcherEvent> ZKEventSource;
  type EventListener (line 259) | typedef EventListener<ZKWatcherEvent> ZKEventListener;
  function class (line 264) | class ZooKeeperAdapter

FILE: src/contrib/zkfuse/src/zkfuse.cc
  function millisecsToSecs (line 71) | inline
  function secsToMillisecs (line 76) | inline
  function nanosecsToMillisecs (line 81) | inline
  function timespecToMillisecs (line 86) | inline
  class ZkFuseCommon (line 100) | class ZkFuseCommon
    method ZkFuseCommon (line 163) | ZkFuseCommon()
    method setDataFileName (line 199) | void setDataFileName(const std::string & dataFileName)
    method setForceDirSuffix (line 226) | void setForceDirSuffix(const std::string & forceDirSuffix)
    method getCacheSize (line 252) | unsigned getCacheSize() const
    method setCacheSize (line 261) | void setCacheSize(unsigned v)
    method uid_t (line 269) | uid_t getUid() const
    method gid_t (line 277) | gid_t getGid() const
    method getBlkSize (line 285) | unsigned getBlkSize() const
    method ZooKeeperAdapterSharedPtr (line 293) | const ZooKeeperAdapterSharedPtr & getZkAdapter() const
    method setZkAdapter (line 301) | void setZkAdapter(const ZooKeeperAdapterSharedPtr & zkAdapter)
  type ZkFuseNameType (line 310) | enum ZkFuseNameType {
  class ZkFuseFile (line 329) | class ZkFuseFile
    method uid_t (line 1074) | uid_t _getUid() const
    method gid_t (line 1083) | gid_t _getGid() const
    method _getBlkSize (line 1092) | unsigned _getBlkSize() const
    method _numChildrenIncludeMeta (line 1101) | unsigned _numChildrenIncludeMeta() const
    method _numChildrenExcludeMeta (line 1112) | unsigned _numChildrenExcludeMeta() const
    method _hasChildrenIncludeMeta (line 1131) | bool _hasChildrenIncludeMeta() const
    method _hasChildrenExcludeMeta (line 1141) | bool _hasChildrenExcludeMeta() const
    method _hasData (line 1150) | bool _hasData() const
    method _hasChildPath (line 1160) | bool _hasChildPath(const std::string & childPath) const
    method _isMeta (line 1182) | bool _isMeta(const std::string & childName) const
    method _getChildPath (line 1211) | std::string _getChildPath(const std::string & name) const
    method _hasRegMetadata (line 1221) | bool _hasRegMetadata() const
    method _hasDirMetadata (line 1234) | bool _hasDirMetadata() const
    method _isReg (line 1251) | bool _isReg() const
    method _isDir (line 1270) | bool _isDir() const
    method _isRegNameType (line 1287) | bool _isRegNameType(ZkFuseNameType nameType, bool doLock = false) const
    method _isDirNameType (line 1324) | bool _isDirNameType(ZkFuseNameType nameType, bool doLock = false) const
    type Metadata (line 1351) | struct Metadata {
      method Metadata (line 1368) | Metadata()
    method _encodeMetadata (line 1385) | void _encodeMetadata(const Metadata & meta, Data & data) const
    method _decodeMetadata (line 1402) | void _decodeMetadata(const Data & data, Metadata & meta) const
    method _flush (line 1451) | int _flush()
    method _truncate (line 1500) | int _truncate(off_t size)
    method _rmdir (line 1560) | int _rmdir(ZkFuseNameType nameType, bool force)
    method _unlink (line 1628) | int _unlink(ZkFuseNameType nameType)
    method _isInitialized (line 1663) | bool _isInitialized() const
    method _clearChildren (line 1670) | void _clearChildren()
    method _clearData (line 1678) | void _clearData()
    method _isZombie (line 1693) | bool _isZombie() const
    method _isOnlyRegOpen (line 1706) | bool _isOnlyRegOpen() const
    method _getattrNoMetaAccess (line 1722) | int _getattrNoMetaAccess(struct stat & stbuf, ZkFuseNameType nameType)...
    method _getZkContext (line 1775) | ZooKeeperAdapter::ContextType _getZkContext() const
    class DataListener (line 1786) | class DataListener : public ZKEventListener {
      method eventReceived (line 1792) | virtual void eventReceived(const ZKEventSource & source,
    class ChildrenListener (line 1807) | class ChildrenListener : public ZKEventListener {
      method eventReceived (line 1813) | virtual void eventReceived(const ZKEventSource & source,
    method ZkFuseFile (line 1847) | ZkFuseFile(const ZkFuseHandleManager::SharedPtr & manager,
    method isDeleted (line 1890) | bool isDeleted() const
    method string (line 1902) | const string & getPath() const
    method addChild (line 1912) | int addChild(const std::string & childPath)
    method removeChild (line 1944) | int removeChild(const std::string & childPath)
    method clear (line 1978) | void clear(bool clearChildren = true, bool clearData = true)
    method isZombie (line 1999) | bool isZombie() const
    method incRefCount (line 2018) | int incRefCount(int count = 1)
    method decRefCount (line 2046) | int decRefCount(int count = 1)
    method incOpenDirCount (line 2060) | int incOpenDirCount(int count = 1)
    method decOpenDirCount (line 2088) | int decOpenDirCount(int count = 1)
    method isDirNameType (line 2104) | bool isDirNameType(ZkFuseNameType nameType) const
    method isRegNameType (line 2120) | bool isRegNameType(ZkFuseNameType nameType) const
    method getData (line 2130) | void getData(Data & data) const
    method setData (line 2147) | int setData(const Data & data, bool doFlush)
    method update (line 2195) | int update(bool newFile)
    method dataEventReceived (line 2350) | void dataEventReceived(const ZKWatcherEvent & event)
    method childrenEventReceived (line 2448) | void childrenEventReceived(const ZKWatcherEvent & event)
    method truncate (line 2537) | int truncate(off_t size)
    method read (line 2557) | int read(char *buf, size_t size, off_t offset) const
    method write (line 2603) | int write(const char *buf, size_t size, off_t offset)
    method flush (line 2654) | int flush()
    method close (line 2675) | int close()
    method getattr (line 2703) | int getattr(struct stat & stbuf, ZkFuseNameType nameType) const
    method readdir (line 2760) | int readdir(void *buf, fuse_fill_dir_t filler, off_t offset) const
    method utime (line 2868) | int utime(uint64_t atime, uint64_t mtime, ZkFuseNameType nameType)
    method rmdir (line 2934) | int rmdir(ZkFuseNameType nameType, bool force)
    method unlink (line 2970) | int unlink(ZkFuseNameType nameType)
    method buildChildPath (line 2990) | static std::string buildChildPath(const std::string & parent,
  class ZkFuseHandleManagerFactory (line 333) | class ZkFuseHandleManagerFactory
    method create (line 723) | static ZkFuseHandleManager::SharedPtr create(
  class ZkFuseHandleManager (line 365) | class ZkFuseHandleManager : boost::noncopyable
    method ZkFuseHandleManager (line 455) | ZkFuseHandleManager(
    method ZkFuseFilePtr (line 488) | ZkFuseFilePtr getFile(Handle handle) const
    method ZkFuseCommon (line 498) | const ZkFuseCommon & getCommon() const
    type stat (line 632) | struct stat
  class ZkFuseHandleManagerFactory (line 713) | class ZkFuseHandleManagerFactory
    method create (line 723) | static ZkFuseHandleManager::SharedPtr create(
  class ZkFuseAutoHandle (line 741) | class ZkFuseAutoHandle
    method _initFile (line 770) | void _initFile()
    method ZkFuseAutoHandle (line 786) | ZkFuseAutoHandle(
    method ZkFuseAutoHandle (line 801) | ZkFuseAutoHandle(
    method ZkFuseAutoHandle (line 826) | ZkFuseAutoHandle(
    method get (line 850) | int get() const
    method ZkFuseFilePtr (line 858) | ZkFuseFilePtr getFile() const
    method release (line 865) | void release()
  class ZkFuseStat (line 884) | class ZkFuseStat : public Stat
    method ZkFuseStat (line 890) | ZkFuseStat()
    method clear (line 903) | void clear()
  class ZkFuseFile (line 942) | class ZkFuseFile : boost::noncopyable
    method uid_t (line 1074) | uid_t _getUid() const
    method gid_t (line 1083) | gid_t _getGid() const
    method _getBlkSize (line 1092) | unsigned _getBlkSize() const
    method _numChildrenIncludeMeta (line 1101) | unsigned _numChildrenIncludeMeta() const
    method _numChildrenExcludeMeta (line 1112) | unsigned _numChildrenExcludeMeta() const
    method _hasChildrenIncludeMeta (line 1131) | bool _hasChildrenIncludeMeta() const
    method _hasChildrenExcludeMeta (line 1141) | bool _hasChildrenExcludeMeta() const
    method _hasData (line 1150) | bool _hasData() const
    method _hasChildPath (line 1160) | bool _hasChildPath(const std::string & childPath) const
    method _isMeta (line 1182) | bool _isMeta(const std::string & childName) const
    method _getChildPath (line 1211) | std::string _getChildPath(const std::string & name) const
    method _hasRegMetadata (line 1221) | bool _hasRegMetadata() const
    method _hasDirMetadata (line 1234) | bool _hasDirMetadata() const
    method _isReg (line 1251) | bool _isReg() const
    method _isDir (line 1270) | bool _isDir() const
    method _isRegNameType (line 1287) | bool _isRegNameType(ZkFuseNameType nameType, bool doLock = false) const
    method _isDirNameType (line 1324) | bool _isDirNameType(ZkFuseNameType nameType, bool doLock = false) const
    type Metadata (line 1351) | struct Metadata {
      method Metadata (line 1368) | Metadata()
    method _encodeMetadata (line 1385) | void _encodeMetadata(const Metadata & meta, Data & data) const
    method _decodeMetadata (line 1402) | void _decodeMetadata(const Data & data, Metadata & meta) const
    method _flush (line 1451) | int _flush()
    method _truncate (line 1500) | int _truncate(off_t size)
    method _rmdir (line 1560) | int _rmdir(ZkFuseNameType nameType, bool force)
    method _unlink (line 1628) | int _unlink(ZkFuseNameType nameType)
    method _isInitialized (line 1663) | bool _isInitialized() const
    method _clearChildren (line 1670) | void _clearChildren()
    method _clearData (line 1678) | void _clearData()
    method _isZombie (line 1693) | bool _isZombie() const
    method _isOnlyRegOpen (line 1706) | bool _isOnlyRegOpen() const
    method _getattrNoMetaAccess (line 1722) | int _getattrNoMetaAccess(struct stat & stbuf, ZkFuseNameType nameType)...
    method _getZkContext (line 1775) | ZooKeeperAdapter::ContextType _getZkContext() const
    class DataListener (line 1786) | class DataListener : public ZKEventListener {
      method eventReceived (line 1792) | virtual void eventReceived(const ZKEventSource & source,
    class ChildrenListener (line 1807) | class ChildrenListener : public ZKEventListener {
      method eventReceived (line 1813) | virtual void eventReceived(const ZKEventSource & source,
    method ZkFuseFile (line 1847) | ZkFuseFile(const ZkFuseHandleManager::SharedPtr & manager,
    method isDeleted (line 1890) | bool isDeleted() const
    method string (line 1902) | const string & getPath() const
    method addChild (line 1912) | int addChild(const std::string & childPath)
    method removeChild (line 1944) | int removeChild(const std::string & childPath)
    method clear (line 1978) | void clear(bool clearChildren = true, bool clearData = true)
    method isZombie (line 1999) | bool isZombie() const
    method incRefCount (line 2018) | int incRefCount(int count = 1)
    method decRefCount (line 2046) | int decRefCount(int count = 1)
    method incOpenDirCount (line 2060) | int incOpenDirCount(int count = 1)
    method decOpenDirCount (line 2088) | int decOpenDirCount(int count = 1)
    method isDirNameType (line 2104) | bool isDirNameType(ZkFuseNameType nameType) const
    method isRegNameType (line 2120) | bool isRegNameType(ZkFuseNameType nameType) const
    method getData (line 2130) | void getData(Data & data) const
    method setData (line 2147) | int setData(const Data & data, bool doFlush)
    method update (line 2195) | int update(bool newFile)
    method dataEventReceived (line 2350) | void dataEventReceived(const ZKWatcherEvent & event)
    method childrenEventReceived (line 2448) | void childrenEventReceived(const ZKWatcherEvent & event)
    method truncate (line 2537) | int truncate(off_t size)
    method read (line 2557) | int read(char *buf, size_t size, off_t offset) const
    method write (line 2603) | int write(const char *buf, size_t size, off_t offset)
    method flush (line 2654) | int flush()
    method close (line 2675) | int close()
    method getattr (line 2703) | int getattr(struct stat & stbuf, ZkFuseNameType nameType) const
    method readdir (line 2760) | int readdir(void *buf, fuse_fill_dir_t filler, off_t offset) const
    method utime (line 2868) | int utime(uint64_t atime, uint64_t mtime, ZkFuseNameType nameType)
    method rmdir (line 2934) | int rmdir(ZkFuseNameType nameType, bool force)
    method unlink (line 2970) | int unlink(ZkFuseNameType nameType)
    method buildChildPath (line 2990) | static std::string buildChildPath(const std::string & parent,
  type stat (line 3402) | struct stat
  type stat (line 3457) | struct stat
  function zkfuse_getattr (line 3633) | static
  function zkfuse_fgetattr (line 3650) | static
  function zkfuse_access (line 3675) | static
  function zkfuse_readlink (line 3682) | static
  function zkfuse_opendir (line 3689) | static
  function zkfuse_readdir (line 3720) | static int
  function zkfuse_releasedir (line 3745) | static
  function zkfuse_mknod (line 3769) | static
  function zkfuse_mkdir (line 3792) | static int zkfuse_mkdir(const char *path, mode_t mode)
  function zkfuse_unlink (line 3808) | static int zkfuse_unlink(const char *path)
  function zkfuse_rmdir (line 3824) | static int zkfuse_rmdir(const char *path)
  function zkfuse_symlink (line 3841) | static int zkfuse_symlink(const char *from, const char *to)
  function zkfuse_rename (line 3847) | static int zkfuse_rename(const char *from, const char *to)
  function zkfuse_link (line 3864) | static int zkfuse_link(const char *from, const char *to)
  function zkfuse_chmod (line 3870) | static int zkfuse_chmod(const char *path, mode_t mode)
  function zkfuse_chown (line 3879) | static int zkfuse_chown(const char *path, uid_t uid, gid_t gid)
  function zkfuse_truncate (line 3897) | static int zkfuse_truncate(const char *path, off_t size)
  function zkfuse_ftruncate (line 3919) | static
  function zkfuse_utimens (line 3942) | static
  function zkfuse_create (line 3967) | static
  function zkfuse_open (line 3980) | static
  function zkfuse_read (line 4010) | static
  function zkfuse_write (line 4036) | static
  function zkfuse_statfs (line 4062) | static int zkfuse_statfs(const char *path, struct statvfs *stbuf)
  function zkfuse_flush (line 4068) | static
  function zkfuse_release (line 4097) | static
  function zkfuse_fsync (line 4120) | static
  function zkfuse_setxattr (line 4135) | static int zkfuse_setxattr(const char *path, const char *name, const cha...
  function zkfuse_getxattr (line 4144) | static int zkfuse_getxattr(const char *path, const char *name, char *value,
  function zkfuse_listxattr (line 4153) | static int zkfuse_listxattr(const char *path, char *list, size_t size)
  function zkfuse_removexattr (line 4161) | static int zkfuse_removexattr(const char *path, const char *name)
  function zkfuse_lock (line 4170) | static
  function init_zkfuse_oper (line 4180) | static
  class SessionEventListener (line 4224) | class SessionEventListener : public ZKEventListener
    method setManager (line 4238) | void setManager(const ZkFuseHandleManager::SharedPtr & manager)
    method eventReceived (line 4246) | virtual void eventReceived(const ZKEventSource & source,
  function usage (line 4253) | void
  function main (line 4276) | int

FILE: src/contrib/zkpython/src/c/zookeeper.c
  function PyObject (line 51) | PyObject *err_to_exception(int errcode) {
  type pywatcher_t (line 117) | typedef struct {
  function init_zhandles (line 142) | int init_zhandles(int num) {
  function resize_zhandles (line 162) | int resize_zhandles(void) {
  function next_zhandle (line 195) | unsigned int next_zhandle(void) {
  function pywatcher_t (line 215) | pywatcher_t *create_pywatcher(int zh, PyObject* cb, int permanent)
  function free_pywatcher (line 229) | void free_pywatcher(pywatcher_t *pw)
  function PyObject (line 242) | PyObject *build_stat( const struct Stat *stat )
  function PyObject (line 267) | PyObject *build_string_vector(const struct String_vector *sv)
  function check_is_acl (line 298) | int check_is_acl(PyObject *o) {
  function PyObject (line 341) | PyObject *build_acls( const struct ACL_vector *acls )
  function parse_acls (line 361) | int parse_acls(struct ACL_vector *acls, PyObject *pyacls)
  function free_acls (line 403) | void free_acls( struct ACL_vector *acls )
  function watcher_dispatch (line 435) | void watcher_dispatch(zhandle_t *zzh, int type, int state,
  function void_completion_dispatch (line 465) | void void_completion_dispatch(int rc, const void *data)
  function stat_completion_dispatch (line 483) | void stat_completion_dispatch(int rc, const struct Stat *stat, const voi...
  function data_completion_dispatch (line 504) | void data_completion_dispatch(int rc, const char *value, int value_len, ...
  function strings_completion_dispatch (line 525) | void strings_completion_dispatch(int rc, const struct String_vector *str...
  function string_completion_dispatch (line 550) | void string_completion_dispatch(int rc, const char *value, const void *d...
  function acl_completion_dispatch (line 569) | void acl_completion_dispatch(int rc, struct ACL_vector *acl, struct Stat...
  function PyObject (line 597) | static PyObject *pyzookeeper_init(PyObject *self, PyObject *args)
  function PyObject (line 654) | PyObject *pyzoo_acreate(PyObject *self, PyObject *args)
  function PyObject (line 695) | PyObject *pyzoo_adelete(PyObject *self, PyObject *args)
  function PyObject (line 725) | PyObject *pyzoo_aexists(PyObject *self, PyObject *args)
  function PyObject (line 765) | PyObject *pyzoo_aget(PyObject *self, PyObject *args)
  function PyObject (line 807) | PyObject *pyzoo_aset(PyObject *self, PyObject *args)
  function PyObject (line 837) | PyObject *pyzoo_aget_children(PyObject *self, PyObject *args)
  function PyObject (line 877) | PyObject *pyzoo_async(PyObject *self, PyObject *args)
  function PyObject (line 908) | PyObject *pyzoo_aget_acl(PyObject *self, PyObject *args)
  function PyObject (line 938) | PyObject *pyzoo_aset_acl(PyObject *self, PyObject *args)
  function PyObject (line 976) | PyObject *pyzoo_add_auth(PyObject *self, PyObject *args)
  function PyObject (line 1015) | static PyObject *pyzoo_create(PyObject *self, PyObject *args)
  function PyObject (line 1045) | static PyObject *pyzoo_delete(PyObject *self, PyObject *args)
  function PyObject (line 1064) | static PyObject *pyzoo_exists(PyObject *self, PyObject *args)
  function PyObject (line 1097) | static PyObject *pyzoo_get_children(PyObject *self, PyObject *args)
  function PyObject (line 1132) | static PyObject *pyzoo_set(PyObject *self, PyObject *args)
  function PyObject (line 1155) | static PyObject *pyzoo_set2(PyObject *self, PyObject *args)
  function PyObject (line 1187) | static PyObject *pyzoo_get(PyObject *self, PyObject *args)
  function PyObject (line 1233) | PyObject *pyzoo_get_acl(PyObject *self, PyObject *args)
  function PyObject (line 1256) | PyObject *pyzoo_set_acl(PyObject *self, PyObject *args)
  function PyObject (line 1284) | PyObject *pyzoo_close(PyObject *self, PyObject *args)
  function PyObject (line 1300) | PyObject *pyzoo_client_id(PyObject *self, PyObject *args)
  function PyObject (line 1313) | PyObject *pyzoo_get_context(PyObject *self, PyObject *args)
  function PyObject (line 1328) | PyObject *pyzoo_set_context(PyObject *self, PyObject *args)
  function PyObject (line 1352) | PyObject *pyzoo_set_watcher(PyObject *self, PyObject *args)
  function PyObject (line 1379) | PyObject *pyzoo_state(PyObject *self, PyObject *args)
  function PyObject (line 1392) | PyObject *pyzerror(PyObject *self, PyObject *args)
  function PyObject (line 1401) | PyObject *pyzoo_recv_timeout(PyObject *self, PyObject *args)
  function PyObject (line 1412) | PyObject *pyis_unrecoverable(PyObject *self, PyObject *args)
  function PyObject (line 1425) | PyObject *pyzoo_set_debug_level(PyObject *self, PyObject *args)
  function PyObject (line 1477) | PyObject *pyzoo_deterministic_conn_order(PyObject *self, PyObject *args)
  type PyModuleDef (line 1533) | struct PyModuleDef
  function PyMODINIT_FUNC (line 1556) | PyMODINIT_FUNC initzookeeper(void) {

FILE: src/contrib/zkpython/src/examples/watch_znode_for_changes.py
  class MyClass (line 83) | class MyClass(threading.Thread):
    method __init__ (line 86) | def __init__(self, options, args):
    method __del__ (line 99) | def __del__(self):
    method aget (line 102) | def aget(self):
    method handler (line 105) | def handler(self, zh, rc, data, stat):
    method watcher (line 132) | def watcher(self, zh, event, state, path):
    method run (line 162) | def run(self):
  function main (line 167) | def main(argv=None):

FILE: src/contrib/zkpython/src/python/zk.py
  function my_connection_watcher (line 25) | def my_connection_watcher(handle,type,state,path):
  function my_getc_watch (line 40) | def my_getc_watch( handle, type, state, path ):
  function pp_zk (line 54) | def pp_zk(handle,root, indent = 0):

FILE: src/contrib/zkpython/src/test/acl_test.py
  class ACLTest (line 24) | class ACLTest(zktestbase.TestBase):
    method setUp (line 27) | def setUp(self):
    method test_sync_acl (line 35) | def test_sync_acl(self):
    method test_async_acl (line 46) | def test_async_acl(self):
    method test_invalid_acl (line 88) | def test_invalid_acl(self):
    method test_invalid_acl2 (line 97) | def test_invalid_acl2(self):

FILE: src/contrib/zkpython/src/test/async_test.py
  class AsyncTest (line 21) | class AsyncTest(zktestbase.TestBase):
    method setUp (line 24) | def setUp( self ):
    method test_async (line 27) | def test_async(self):

FILE: src/contrib/zkpython/src/test/callback_test.py
  class CallbackTest (line 23) | class CallbackTest(zktestbase.TestBase):
    method setUp (line 28) | def setUp(self):
    method create_callback (line 32) | def create_callback(self, callback):
    method test_none_callback (line 43) | def test_none_callback(self):
    method callback_harness (line 54) | def callback_harness(self, trigger, test):
    method test_dispatch_types (line 61) | def test_dispatch_types(self):
    method test_multiple_watchers (line 104) | def test_multiple_watchers(self):
    method test_lose_scope (line 132) | def test_lose_scope(self):

FILE: src/contrib/zkpython/src/test/clientid_test.py
  class ClientidTest (line 23) | class ClientidTest(zktestbase.TestBase):
    method setUp (line 25) | def setUp(self):
    method testclientid (line 28) | def testclientid(self):

FILE: src/contrib/zkpython/src/test/close_deadlock_test.py
  class CloseDeadlockTest (line 23) | class CloseDeadlockTest(zktestbase.TestBase):
    method deadlock (line 34) | def deadlock():

FILE: src/contrib/zkpython/src/test/connection_test.py
  class ConnectionTest (line 26) | class ConnectionTest(zktestbase.TestBase):
    method setUp (line 28) | def setUp(self):
    method testconnection (line 31) | def testconnection(self):
    method testhandlereuse (line 61) | def testhandlereuse(self):
    method testmanyhandles (line 92) | def testmanyhandles(self):
    method testversionstringexists (line 122) | def testversionstringexists(self):
    method tearDown (line 127) | def tearDown(self):

FILE: src/contrib/zkpython/src/test/create_test.py
  class CreationTest (line 23) | class CreationTest(zktestbase.TestBase):
    method setUp (line 26) | def setUp(self):
    method test_sync_create (line 34) | def test_sync_create(self):
    method test_sync_create_existing (line 46) | def test_sync_create_existing(self):
    method test_exception_paths (line 60) | def test_exception_paths(self):
    method test_async_create (line 79) | def test_async_create(self):

FILE: src/contrib/zkpython/src/test/delete_test.py
  class DeletionTest (line 21) | class DeletionTest(zktestbase.TestBase):
    method test_sync_delete (line 24) | def test_sync_delete(self):
    method test_async_delete (line 40) | def test_async_delete(self):

FILE: src/contrib/zkpython/src/test/exists_test.py
  class ExistsTest (line 22) | class ExistsTest(zktestbase.TestBase):
    method setUp (line 23) | def setUp( self ):
    method test_sync_exists (line 31) | def test_sync_exists(self):
    method test_sync_nexists (line 36) | def test_sync_nexists(self):
    method test_async_exists (line 40) | def test_async_exists(self):

FILE: src/contrib/zkpython/src/test/get_set_test.py
  class GetSetTest (line 25) | class GetSetTest(zktestbase.TestBase):
    method setUp (line 26) | def setUp( self ):
    method test_empty_node (line 35) | def test_empty_node(self):
    method test_sync_getset (line 48) | def test_sync_getset(self):
    method test_stat_deleted_node (line 70) | def test_stat_deleted_node(self):
    method test_sync_get_large_datanode (line 97) | def test_sync_get_large_datanode(self):
    method test_async_getset (line 116) | def test_async_getset(self):
    method test_sync_getchildren (line 154) | def test_sync_getchildren(self):
    method test_async_getchildren (line 160) | def test_async_getchildren(self):
    method test_async_getchildren_with_watcher (line 181) | def test_async_getchildren_with_watcher(self):

FILE: src/contrib/zkpython/src/test/zktestbase.py
  class TestBase (line 23) | class TestBase(unittest.TestCase):
    method __init__ (line 26) | def __init__(self,methodName='runTest'):
    method setUp (line 40) | def setUp(self):
    method newConnection (line 58) | def newConnection(self):
    method ensureDeleted (line 76) | def ensureDeleted(self,path):
    method ensureCreated (line 83) | def ensureCreated(self,path,data="",flags=zookeeper.EPHEMERAL):
    method tearDown (line 93) | def tearDown(self):
    method all (line 97) | def all(self, iterable):

FILE: src/contrib/zktreeutil/src/SimpleTree.h
  function namespace (line 25) | namespace zktreeutil

FILE: src/contrib/zktreeutil/src/ZkAdaptor.cc
  type zktreeutil (line 29) | namespace zktreeutil
    class RetryHandler (line 34) | class RetryHandler
      method RetryHandler (line 37) | RetryHandler(const ZooKeeperConfig &zkConfig) : m_zkConfig(zkConfig)
      method handleRC (line 52) | bool handleRC(int rc)
      method retryOnError (line 82) | static bool retryOnError(int zkErrorCode)
    type timeval (line 216) | struct timeval
    type Stat (line 430) | struct Stat
    type Stat (line 431) | struct Stat
    function string (line 455) | string ZooKeeperAdapter::getNodeData(const string &path) throw(ZooKeep...

FILE: src/contrib/zktreeutil/src/ZkAdaptor.h
  function namespace (line 29) | namespace zktreeutil
  function class (line 174) | class ZooKeeperAdapter

FILE: src/contrib/zktreeutil/src/ZkTreeUtil.cc
  type zktreeutil (line 27) | namespace zktreeutil
    function ZkTreeNodeSptr (line 32) | static ZkTreeNodeSptr loadZkTree_ (ZooKeeperAdapterSptr zkHandle,
    function ZkTreeNodeSptr (line 64) | static ZkTreeNodeSptr loadZkTreeXml_ (xmlNode* xmlNodePtr)
    function writeZkTree_ (line 118) | static void writeZkTree_ (ZooKeeperAdapterSptr zkHandle,
    function addTreeZkAction_ (line 150) | static void addTreeZkAction_ (const ZkTreeNodeSptr zkNodeSptr,
    function xmlNodePtr (line 174) | static xmlNodePtr dumpZkTreeXml_ (const ZkTreeNodeSptr zkNodeSptr)
    function dumpZkTree_ (line 192) | static void dumpZkTree_ (const ZkTreeNodeSptr zkNodeSptr,
    function ZkTreeNodeSptr (line 237) | static ZkTreeNodeSptr traverseBranch_ (const ZkTreeNodeSptr& zkRootSptr,
    function ZkTreeNodeSptr (line 280) | static ZkTreeNodeSptr createAncestors_ (const string& path)
    function ZooKeeperAdapterSptr (line 299) | ZooKeeperAdapterSptr ZkTreeUtil::get_zkHandle (const string& zkHosts)

FILE: src/contrib/zktreeutil/src/ZkTreeUtil.h
  function namespace (line 27) | namespace zktreeutil

FILE: src/contrib/zktreeutil/src/ZkTreeUtilMain.cc
  type option (line 34) | struct option
  function usage (line 50) | static void usage(int argc, char *argv[])
  function main (line 133) | int main(int argc, char **argv)

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/ZooInspector.java
  class ZooInspector (line 34) | public class ZooInspector {
    method main (line 40) | public static void main(String[] args) {

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/encryption/BasicDataEncryptionManager.java
  class BasicDataEncryptionManager (line 23) | public class BasicDataEncryptionManager implements DataEncryptionManager {
    method decryptData (line 32) | public String decryptData(byte[] encrypted) throws Exception {
    method encryptData (line 43) | public byte[] encryptData(String data) throws Exception {

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/encryption/DataEncryptionManager.java
  type DataEncryptionManager (line 23) | public interface DataEncryptionManager {
    method encryptData (line 30) | public byte[] encryptData(String data) throws Exception;
    method decryptData (line 38) | public String decryptData(byte[] encrypted) throws Exception;

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/NodeViewersChangeListener.java
  type NodeViewersChangeListener (line 27) | public interface NodeViewersChangeListener {
    method nodeViewersChanged (line 36) | public void nodeViewersChanged(List<ZooInspectorNodeViewer> newViewers);

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/ZooInspectorAboutDialog.java
  class ZooInspectorAboutDialog (line 38) | public class ZooInspectorAboutDialog extends JDialog {
    method ZooInspectorAboutDialog (line 43) | public ZooInspectorAboutDialog(Frame frame) {

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/ZooInspectorConnectionPropertiesDialog.java
  class ZooInspectorConnectionPropertiesDialog (line 52) | public class ZooInspectorConnectionPropertiesDialog extends JDialog {
    method ZooInspectorConnectionPropertiesDialog (line 66) | public ZooInspectorConnectionPropertiesDialog(
    method loadConnectionProps (line 290) | private void loadConnectionProps(Properties props) {
    method getConnectionProps (line 307) | private Properties getConnectionProps() {

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/ZooInspectorIconResources.java
  class ZooInspectorIconResources (line 26) | public class ZooInspectorIconResources {
    method getTreeLeafIcon (line 31) | public static ImageIcon getTreeLeafIcon() {
    method getTreeOpenIcon (line 38) | public static ImageIcon getTreeOpenIcon() {
    method getTreeClosedIcon (line 45) | public static ImageIcon getTreeClosedIcon() {
    method getConnectIcon (line 52) | public static ImageIcon getConnectIcon() {
    method getDisconnectIcon (line 59) | public static ImageIcon getDisconnectIcon() {
    method getSaveIcon (line 66) | public static ImageIcon getSaveIcon() {
    method getAddNodeIcon (line 73) | public static ImageIcon getAddNodeIcon() {
    method getDeleteNodeIcon (line 80) | public static ImageIcon getDeleteNodeIcon() {
    method getRefreshIcon (line 87) | public static ImageIcon getRefreshIcon() {
    method getInformationIcon (line 94) | public static ImageIcon getInformationIcon() {
    method getChangeNodeViewersIcon (line 101) | public static ImageIcon getChangeNodeViewersIcon() {
    method getUpIcon (line 108) | public static ImageIcon getUpIcon() {
    method getDownIcon (line 115) | public static ImageIcon getDownIcon() {

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/ZooInspectorNodeViewersDialog.java
  class ZooInspectorNodeViewersDialog (line 62) | public class ZooInspectorNodeViewersDialog extends JDialog implements
    method ZooInspectorNodeViewersDialog (line 87) | public ZooInspectorNodeViewersDialog(Frame frame,
    method valueChanged (line 585) | public void valueChanged(ListSelectionEvent e) {

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/ZooInspectorNodeViewersPanel.java
  class ZooInspectorNodeViewersPanel (line 39) | public class ZooInspectorNodeViewersPanel extends JPanel implements
    method ZooInspectorNodeViewersPanel (line 54) | public ZooInspectorNodeViewersPanel(
    method setNodeViewers (line 71) | public void setNodeViewers(List<ZooInspectorNodeViewer> nodeViewers) {
    method reloadSelectedViewer (line 85) | private void reloadSelectedViewer() {
    method valueChanged (line 101) | public void valueChanged(TreeSelectionEvent e) {
    method stateChanged (line 137) | public void stateChanged(ChangeEvent e) {

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/ZooInspectorPanel.java
  class ZooInspectorPanel (line 44) | public class ZooInspectorPanel extends JPanel implements
    method ZooInspectorPanel (line 65) | public ZooInspectorPanel(final ZooInspectorManager zooInspectorManager) {
    method connect (line 237) | public void connect(final Properties connectionProps) {
    method disconnect (line 283) | public void disconnect() {
    method disconnect (line 292) | public void disconnect(boolean wait) {
    method nodeViewersChanged (line 349) | public void nodeViewersChanged(List<ZooInspectorNodeViewer> newViewers) {
    method setdefaultConnectionProps (line 357) | public void setdefaultConnectionProps(Properties connectionProps)

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/ZooInspectorTreeViewer.java
  class ZooInspectorTreeViewer (line 55) | public class ZooInspectorTreeViewer extends JPanel implements NodeListen...
    method ZooInspectorTreeViewer (line 67) | public ZooInspectorTreeViewer(
    method refreshView (line 118) | public void refreshView() {
    method clearView (line 151) | public void clearView() {
    class ZooInspectorTreeCellRenderer (line 159) | private static class ZooInspectorTreeCellRenderer extends
      method ZooInspectorTreeCellRenderer (line 161) | public ZooInspectorTreeCellRenderer() {
    class ZooInspectorTreeNode (line 172) | private class ZooInspectorTreeNode implements TreeNode {
      method ZooInspectorTreeNode (line 177) | public ZooInspectorTreeNode(String nodePath, ZooInspectorTreeNode pa...
      method children (line 193) | public Enumeration<TreeNode> children() {
      method getAllowsChildren (line 211) | public boolean getAllowsChildren() {
      method getChildAt (line 220) | public TreeNode getChildAt(int childIndex) {
      method getChildCount (line 236) | public int getChildCount() {
      method getIndex (line 245) | public int getIndex(TreeNode node) {
      method getParent (line 254) | public TreeNode getParent() {
      method isLeaf (line 263) | public boolean isLeaf() {
      method toString (line 267) | @Override
      method hashCode (line 272) | @Override
      method equals (line 284) | @Override
      method getOuterType (line 308) | private ZooInspectorTreeViewer getOuterType() {
    method getSelectedNodes (line 317) | public List<String> getSelectedNodes() {
    method processEvent (line 344) | public void processEvent(String nodePath, String eventType,

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/nodeviewer/NodeViewerACL.java
  class NodeViewerACL (line 43) | public class NodeViewerACL extends ZooInspectorNodeViewer {
    method NodeViewerACL (line 51) | public NodeViewerACL() {
    method getTitle (line 66) | @Override
    method nodeSelectionChanged (line 78) | @Override
    method setZooInspectorManager (line 181) | @Override

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/nodeviewer/NodeViewerData.java
  class NodeViewerData (line 40) | public class NodeViewerData extends ZooInspectorNodeViewer {
    method NodeViewerData (line 49) | public NodeViewerData() {
    method getTitle (line 87) | @Override
    method nodeSelectionChanged (line 99) | @Override
    method setZooInspectorManager (line 140) | @Override

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/nodeviewer/NodeViewerMetaData.java
  class NodeViewerMetaData (line 45) | public class NodeViewerMetaData extends ZooInspectorNodeViewer {
    method NodeViewerMetaData (line 53) | public NodeViewerMetaData() {
    method getTitle (line 68) | @Override
    method nodeSelectionChanged (line 80) | @Override
    method setZooInspectorManager (line 180) | @Override

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/gui/nodeviewer/ZooInspectorNodeViewer.java
  class ZooInspectorNodeViewer (line 34) | public abstract class ZooInspectorNodeViewer extends JPanel implements
    method setZooInspectorManager (line 46) | public abstract void setZooInspectorManager(
    method nodeSelectionChanged (line 56) | public abstract void nodeSelectionChanged(List<String> selectedNodes);
    method getTitle (line 62) | public abstract String getTitle();
    method getTransferData (line 71) | public Object getTransferData(DataFlavor flavor)
    method getTransferDataFlavors (line 85) | public DataFlavor[] getTransferDataFlavors() {
    method isDataFlavorSupported (line 95) | public boolean isDataFlavorSupported(DataFlavor flavor) {
    method hashCode (line 104) | @Override
    method equals (line 118) | @Override

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/logger/LoggerFactory.java
  class LoggerFactory (line 24) | public class LoggerFactory
    method getLogger (line 31) | public static org.slf4j.Logger getLogger()

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/manager/NodeListener.java
  type NodeListener (line 25) | public interface NodeListener {
    method processEvent (line 35) | public void processEvent(String nodePath, String eventType,

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/manager/Pair.java
  class Pair (line 26) | public class Pair<K, V> {
    method Pair (line 34) | public Pair(K key, V value) {
    method Pair (line 42) | public Pair() {
    method getKey (line 49) | public K getKey() {
    method setKey (line 56) | public void setKey(K key) {
    method getValue (line 63) | public V getValue() {
    method setValue (line 70) | public void setValue(V value) {
    method toString (line 74) | @Override
    method hashCode (line 84) | @Override
    method equals (line 98) | @Override

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/manager/ZooInspectorManager.java
  type ZooInspectorManager (line 34) | public interface ZooInspectorManager extends ZooInspectorNodeManager,
    method connect (line 41) | public boolean connect(Properties connectionProps);
    method disconnect (line 46) | public boolean disconnect();
    method getConnectionPropertiesTemplate (line 61) | public Pair<Map<String, List<String>>, Map<String, String>> getConnect...
    method addWatchers (line 69) | public void addWatchers(Collection<String> selectedNodes,
    method removeWatchers (line 76) | public void removeWatchers(Collection<String> selectedNodes);
    method loadNodeViewersFile (line 87) | public List<String> loadNodeViewersFile(File selectedFile)
    method saveNodeViewersFile (line 98) | public void saveNodeViewersFile(File selectedFile,
    method setDefaultNodeViewerConfiguration (line 107) | public void setDefaultNodeViewerConfiguration(
    method getDefaultNodeViewerConfiguration (line 116) | List<String> getDefaultNodeViewerConfiguration() throws IOException;
    method setLastConnectionProps (line 123) | public void setLastConnectionProps(Properties connectionProps);
    method getLastConnectionProps (line 129) | public Properties getLastConnectionProps();
    method saveDefaultConnectionFile (line 137) | public void saveDefaultConnectionFile(Properties props) throws IOExcep...

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/manager/ZooInspectorManagerImpl.java
  class ZooInspectorManagerImpl (line 55) | public class ZooInspectorManagerImpl implements ZooInspectorManager {
    method ZooInspectorManagerImpl (line 117) | public ZooInspectorManagerImpl() throws IOException {
    method connect (line 128) | public boolean connect(Properties connectionProps) {
    method disconnect (line 193) | public boolean disconnect() {
    method getChildren (line 216) | public List<String> getChildren(String nodePath) {
    method getData (line 238) | public String getData(String nodePath) {
    method getNodeChild (line 263) | public String getNodeChild(String nodePath, int childIndex) {
    method getNodeIndex (line 286) | public int getNodeIndex(String nodePath) {
    method getACLs (line 314) | public List<Map<String, String>> getACLs(String nodePath) {
    method getNodeMeta (line 386) | public Map<String, String> getNodeMeta(String nodePath) {
    method getNumChildren (line 425) | public int getNumChildren(String nodePath) {
    method hasChildren (line 447) | public boolean hasChildren(String nodePath) {
    method isAllowsChildren (line 457) | public boolean isAllowsChildren(String nodePath) {
    method getSessionMeta (line 479) | public Map<String, String> getSessionMeta() {
    method createNode (line 506) | public boolean createNode(String parent, String nodeName) {
    method deleteNode (line 537) | public boolean deleteNode(String nodePath) {
    method setData (line 566) | public boolean setData(String nodePath, String data) {
    method getConnectionPropertiesTemplate (line 586) | public Pair<Map<String, List<String>>, Map<String, String>> getConnect...
    method addWatchers (line 616) | public void addWatchers(Collection<String> selectedNodes,
    method removeWatchers (line 643) | public void removeWatchers(Collection<String> selectedNodes) {
    class NodeWatcher (line 662) | public class NodeWatcher implements Watcher {
      method NodeWatcher (line 679) | public NodeWatcher(String nodePath, NodeListener nodeListener,
      method process (line 691) | public void process(WatchedEvent event) {
      method stop (line 714) | public void stop() {
    method loadNodeViewersFile (line 726) | public List<String> loadNodeViewersFile(File selectedFile)
    method loadDefaultConnectionFile (line 750) | private void loadDefaultConnectionFile() throws IOException {
    method saveDefaultConnectionFile (line 786) | public void saveDefaultConnectionFile(Properties props) throws IOExcep...
    method saveNodeViewersFile (line 816) | public void saveNodeViewersFile(File selectedFile,
    method setDefaultNodeViewerConfiguration (line 848) | public void setDefaultNodeViewerConfiguration(
    method getDefaultNodeViewerConfiguration (line 861) | public List<String> getDefaultNodeViewerConfiguration() throws IOExcep...
    method getLastConnectionProps (line 871) | public Properties getLastConnectionProps() {
    method setLastConnectionProps (line 881) | public void setLastConnectionProps(Properties connectionProps) {

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/manager/ZooInspectorNodeManager.java
  type ZooInspectorNodeManager (line 24) | public interface ZooInspectorNodeManager extends ZooInspectorReadOnlyMan...
    method setData (line 32) | public boolean setData(String nodePath, String data);

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/manager/ZooInspectorNodeTreeManager.java
  type ZooInspectorNodeTreeManager (line 24) | public interface ZooInspectorNodeTreeManager extends
    method createNode (line 34) | public abstract boolean createNode(String parent, String nodeName);
    method deleteNode (line 41) | public abstract boolean deleteNode(String nodePath);

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/inspector/manager/ZooInspectorReadOnlyManager.java
  type ZooInspectorReadOnlyManager (line 27) | public interface ZooInspectorReadOnlyManager {
    method getData (line 34) | public abstract String getData(String nodePath);
    method getNodeMeta (line 41) | public abstract Map<String, String> getNodeMeta(String nodePath);
    method getACLs (line 48) | public abstract List<Map<String, String>> getACLs(String nodePath);
    method getSessionMeta (line 53) | public abstract Map<String, String> getSessionMeta();
    method hasChildren (line 60) | public abstract boolean hasChildren(String nodePath);
    method getNodeIndex (line 67) | public abstract int getNodeIndex(String nodePath);
    method getNumChildren (line 74) | public abstract int getNumChildren(String nodePath);
    method getNodeChild (line 83) | public abstract String getNodeChild(String nodePath, int childIndex);
    method isAllowsChildren (line 90) | public abstract boolean isAllowsChildren(String nodePath);
    method getChildren (line 97) | public abstract List<String> getChildren(String nodePath);

FILE: src/contrib/zooinspector/src/java/org/apache/zookeeper/retry/ZooKeeperRetry.java
  class ZooKeeperRetry (line 36) | public class ZooKeeperRetry extends ZooKeeper {
    method ZooKeeperRetry (line 48) | public ZooKeeperRetry(String connectString, int sessionTimeout,
    method ZooKeeperRetry (line 62) | public ZooKeeperRetry(String connectString, int sessionTimeout,
    method close (line 69) | @Override
    method create (line 75) | @Override
    method delete (line 95) | @Override
    method exists (line 114) | @Override
    method exists (line 129) | @Override
    method getACL (line 144) | @Override
    method getChildren (line 159) | @Override
    method getChildren (line 174) | @Override
    method getData (line 189) | @Override
    method getData (line 204) | @Override
    method setACL (line 219) | @Override
    method setData (line 242) | @Override
    method setRetryLimit (line 268) | public void setRetryLimit(int limit) {
    method testConnection (line 275) | public boolean testConnection() {

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/AsyncLock.cs
  class AsyncLock (line 5) | internal sealed class AsyncLock
    method AsyncLock (line 10) | public AsyncLock()
    method LockAsync (line 15) | public Task<IDisposable> LockAsync()
    class Releaser (line 27) | private sealed class Releaser : IDisposable
      method Releaser (line 30) | internal Releaser(AsyncLock toRelease) { m_toRelease = toRelease; }
      method Dispose (line 31) | public void Dispose() { m_toRelease.m_semaphore.Release(); }

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/Lock/LockListener.cs
  type LockListener (line 11) | public interface LockListener
    method lockAcquired (line 17) | Task lockAcquired();
    method lockReleased (line 23) | Task lockReleased();

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/Lock/ProtocolSupport.cs
  class ProtocolSupport (line 16) | public class ProtocolSupport
    method ProtocolSupport (line 25) | internal  ProtocolSupport(ZooKeeper zookeeper)
    method getZookeeper (line 33) | public ZooKeeper getZookeeper() {
    method retryOperation (line 51) | protected async Task<bool> retryOperation(ZooKeeperOperation operation)
    method ensurePathExists (line 82) | protected Task ensurePathExists(string path)
    method ensureExists (line 93) | private async Task ensureExists(string path, byte[] data, List<ACL> ac...
    class EnsureExists (line 104) | private sealed class EnsureExists : ZooKeeperOperation
      method EnsureExists (line 113) | public EnsureExists(ZooKeeper zookeeper, string path, byte[] data, L...
      method execute (line 122) | public async Task<bool> execute()
    method retryDelay (line 137) | private static async Task retryDelay(int attemptCount)

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/Lock/WriteLock.cs
  class WriteLock (line 19) | public sealed class WriteLock : ProtocolSupport
    method WriteLock (line 39) | public WriteLock(ZooKeeper zookeeper, string dir, List<ACL> acls) : ba...
    method WriteLock (line 55) | public WriteLock(ZooKeeper zookeeper, string dir, List<ACL> acl, LockL...
    method setLockListener (line 63) | public void setLockListener(LockListener lockListener) {
    method unlock (line 73) | public async Task unlock()
    class DeleteNode (line 109) | private sealed class DeleteNode : ZooKeeperOperation
      method DeleteNode (line 113) | public DeleteNode(WriteLock writeLock)
      method execute (line 118) | public async Task<bool> execute()
    class LockWatcher (line 130) | private class LockWatcher : Watcher
      method LockWatcher (line 134) | public LockWatcher(WriteLock outerInstance)
      method process (line 139) | public override async Task process(WatchedEvent @event)
    class LockZooKeeperOperation (line 158) | private sealed class LockZooKeeperOperation : ZooKeeperOperation
      method LockZooKeeperOperation (line 162) | public LockZooKeeperOperation(WriteLock writeLock)
      method findPrefixInChildren (line 175) | private async Task findPrefixInChildren(string prefix, ZooKeeper zoo...
      method execute (line 206) | public async Task<bool> execute()
    method Lock (line 282) | public async Task<bool> Lock()

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/Lock/ZNodeName.cs
  class ZNodeName (line 11) | internal sealed class ZNodeName : IComparable<ZNodeName> {
    method ZNodeName (line 17) | public ZNodeName(string name) {
    method ToString (line 38) | public override string ToString() {
    method Equals (line 42) | public override bool Equals(object obj) {
    method GetHashCode (line 47) | public override int GetHashCode() {
    method CompareTo (line 60) | public int CompareTo(ZNodeName that) {

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/Lock/ZooKeeperOperation.cs
  type ZooKeeperOperation (line 10) | public interface ZooKeeperOperation
    method execute (line 19) | Task<bool> execute();

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/leader/LeaderElectionAware.cs
  type LeaderElectionAware (line 8) | public interface LeaderElectionAware {
    method onElectionEvent (line 16) | Task onElectionEvent(ElectionEventType eventType);

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/leader/LeaderElectionSupport.cs
  class LeaderElectionSupport (line 75) | public sealed class LeaderElectionSupport {
    method LeaderElectionSupport (line 91) | public LeaderElectionSupport(ZooKeeper zooKeeper, string rootNodeName,...
    method getLeaderHostName (line 110) | public async Task<string> getLeaderHostName() {
    method start (line 158) | public async Task start() {
    method stop (line 191) | public async Task stop()
    method makeOffer (line 220) | private async Task makeOffer() {
    method determineElectionStatus (line 235) | private async Task determineElectionStatus() {
    method becomeReady (line 270) | private async Task becomeReady(LeaderOffer neighborLeaderOffer) {
    method becomeLeader (line 299) | private async Task becomeLeader()
    method becomeFailed (line 309) | private Task becomeFailed(Exception e) {
    method toLeaderOffers (line 316) | private async Task<List<LeaderOffer>> toLeaderOffers(List<string> stri...
    class ElectionWatcher (line 338) | private class ElectionWatcher:Watcher
      method ElectionWatcher (line 342) | public ElectionWatcher(LeaderElectionSupport leaderElectionSupport)
      method process (line 347) | public async override Task process(WatchedEvent @event) {
    method dispatchEvent (line 368) | private async Task dispatchEvent(ElectionEventType eventType) {
    method addListener (line 389) | public void addListener(LeaderElectionAware listener) {
    method removeListener (line 397) | public void removeListener(LeaderElectionAware listener) {
    method ToString (line 403) | public override string ToString() {
    type State (line 411) | private enum State {
  type ElectionEventType (line 424) | public enum ElectionEventType

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/leader/LeaderOffer.cs
  class LeaderOffer (line 9) | internal sealed class LeaderOffer {
    method LeaderOffer (line 14) | public LeaderOffer() {
    method LeaderOffer (line 18) | public LeaderOffer(int id, string nodePath, string hostName) {
    method ToString (line 24) | public override string ToString() {
    class IdComparator (line 32) | internal sealed class IdComparator : IComparer<LeaderOffer>
      method Compare (line 34) | public int Compare(LeaderOffer o1, LeaderOffer o2) {

FILE: src/csharp/src/ZooKeeperNetEx.Recipes/queue/DistributedQueue.cs
  class DistributedQueue (line 15) | public sealed class DistributedQueue
    method DistributedQueue (line 32) | public DistributedQueue(ZooKeeper zookeeper, string dir, List<ACL> acl...
    method getOrderedChildren (line 48) | private async Task<SortedDictionary<long, string>> getOrderedChildren(...
    method element (line 82) | public async Task<byte[]> element()
    method remove (line 129) | public async Task<byte[]> remove()
    class LatchChildWatcher (line 166) | private sealed class LatchChildWatcher : Watcher
      method process (line 170) | public override Task process(WatchedEvent @event)
      method getTask (line 177) | public Task getTask()
    method take (line 188) | public async Task<byte[]> take()
    method offer (line 234) | public async Task<bool> offer(byte[] data)
    method peek (line 256) | public async Task<byte[]> peek()
    method poll (line 273) | public async Task<byte[]> poll()

FILE: src/csharp/src/ZooKeeperNetEx/jute/BinaryInputArchive.cs
  class BinaryInputArchive (line 7) | internal class BinaryInputArchive : InputArchive
    method getArchive (line 12) | public static BinaryInputArchive getArchive(BigEndianBinaryReader reader)
    class BinaryIndex (line 17) | private class BinaryIndex : Index
      method BinaryIndex (line 21) | internal BinaryIndex(int nelems)
      method done (line 25) | public bool done()
      method incr (line 29) | public void incr()
    method BinaryInputArchive (line 37) | private BinaryInputArchive(BigEndianBinaryReader reader)
    method readBool (line 42) | public bool readBool(string tag)
    method readInt (line 47) | public int readInt(string tag)
    method readLong (line 52) | public long readLong(string tag)
    method readString (line 57) | public string readString(string tag)
    method readBuffer (line 66) | public byte[] readBuffer(string tag)
    method checkLength (line 78) | private void checkLength(int len)
    method readRecord (line 85) | public void readRecord(Record r, string tag)
    method startVector (line 89) | public Index startVector(string tag)

FILE: src/csharp/src/ZooKeeperNetEx/jute/BinaryOutputArchive.cs
  class BinaryOutputArchive (line 7) | internal class BinaryOutputArchive : OutputArchive
    method getArchive (line 11) | public static BinaryOutputArchive getArchive(BigEndianBinaryWriter wri...
    method BinaryOutputArchive (line 18) | private BinaryOutputArchive(BigEndianBinaryWriter writer)
    method writeBool (line 23) | public void writeBool(bool b, string tag)
    method writeInt (line 28) | public void writeInt(int i, string tag)
    method writeLong (line 33) | public void writeLong(long l, string tag)
    method writeString (line 38) | public void writeString(string s, string tag)
    method writeBuffer (line 50) | public void writeBuffer(byte[] barr, string tag)
    method writeRecord (line 61) | public void writeRecord(Record r, string tag)
    method startVector (line 67) | public void startVector<T>(List<T> v, string tag)
    method endVector (line 77) | public void endVector<T>(List<T> v, string tag) { }

FILE: src/csharp/src/ZooKeeperNetEx/jute/Index.cs
  type Index (line 17) | internal interface Index
    method done (line 19) | bool done();
    method incr (line 20) | void incr();

FILE: src/csharp/src/ZooKeeperNetEx/jute/InputArchive.cs
  type InputArchive (line 8) | internal interface InputArchive
    method readBool (line 10) | bool readBool(string tag);
    method readInt (line 11) | int readInt(string tag);
    method readLong (line 12) | long readLong(string tag);
    method readString (line 13) | string readString(string tag);
    method readBuffer (line 14) | byte[] readBuffer(string tag);
    method readRecord (line 15) | void readRecord(Record r, string tag);
    method startVector (line 16) | Index startVector(string tag);

FILE: src/csharp/src/ZooKeeperNetEx/jute/OutputArchive.cs
  type OutputArchive (line 10) | internal interface OutputArchive
    method writeBool (line 12) | void writeBool(bool b, string tag);
    method writeInt (line 13) | void writeInt(int i, string tag);
    method writeLong (line 14) | void writeLong(long l, string tag);
    method writeString (line 15) | void writeString(string s, string tag);
    method writeBuffer (line 16) | void writeBuffer(byte[] buf, string tag);
    method writeRecord (line 17) | void writeRecord(Record r, string tag);
    method startVector (line 18) | void startVector<T>(List<T> v, string tag);
    method endVector (line 19) | void endVector<T>(List<T> v, string tag);

FILE: src/csharp/src/ZooKeeperNetEx/jute/Record.cs
  type Record (line 8) | internal interface Record
    method serialize (line 10) | void serialize(OutputArchive archive, string tag);
    method deserialize (line 11) | void deserialize(InputArchive archive, string tag);

FILE: src/csharp/src/ZooKeeperNetEx/utils/AwaitableSignal.cs
  class AwaitableSignal (line 11) | internal class AwaitableSignal : INotifyCompletion
    method GetAwaiter (line 19) | public AwaitableSignal GetAwaiter() { return this; }
    method OnCompleted (line 23) | public void OnCompleted(Action continuation)
    method TrySignal (line 31) | public void TrySignal()
    method GetResult (line 41) | public void GetResult()
    method Reset (line 45) | public void Reset()
    method RunContinuation (line 50) | private void RunContinuation(Action action)

FILE: src/csharp/src/ZooKeeperNetEx/utils/ByteBuffer.cs
  class ByteBuffer (line 5) | internal class ByteBuffer
    method ByteBuffer (line 10) | private ByteBuffer() : this(new MemoryStream())
    method ByteBuffer (line 14) | public ByteBuffer(MemoryStream stream)
    method allocate (line 19) | public static ByteBuffer allocate(int capacity)
    method flip (line 25) | public void flip()
    method clear (line 32) | public void clear()
    method limit (line 38) | public int limit()
    method remaining (line 45) | public int remaining()
    method hasRemaining (line 50) | public bool hasRemaining()
    type Mode (line 56) | private enum Mode

FILE: src/csharp/src/ZooKeeperNetEx/utils/EnumUtil.cs
  class EnumUtil (line 13) | internal static class EnumUtil<T>
    method DefinedCast (line 28) | public static T DefinedCast(object enumValue)
    method GetValues (line 36) | public static IEnumerable<T> GetValues()

FILE: src/csharp/src/ZooKeeperNetEx/utils/MiscEx.cs
  class MiscEx (line 7) | internal static class MiscEx {
    method remove (line 8) | public static TValue remove<TKey, TValue>(this IDictionary<TKey, TValu...
    method isAlive (line 15) | public static bool isAlive(this ZooKeeper.States state) {
    method isConnected (line 25) | public static bool isConnected(this ZooKeeper.States state) {
    method size (line 29) | public static int size(this ICollection collection) {
    method addAll (line 33) | public static void addAll<T>(this HashSet<T> hashSet, HashSet<T> anoth...
    method UTF8getBytes (line 37) | public static byte[] UTF8getBytes(this string str) {
    method UTF8bytesToString (line 41) | public static string UTF8bytesToString(this byte[] buffer)
    method ToHexString (line 46) | public static string ToHexString(this long num) {
    method ToHexString (line 49) | public static string ToHexString(this byte num)
    method ToCommaDelimited (line 54) | public static string ToCommaDelimited<T>(this IEnumerable<T> enumerable)

FILE: src/csharp/src/ZooKeeperNetEx/utils/SignalTask.cs
  class SignalTask (line 9) | public class SignalTask
    method Reset (line 21) | public void Reset()
    method TrySet (line 27) | public void TrySet()
    method Set (line 34) | public void Set()

FILE: src/csharp/src/ZooKeeperNetEx/utils/SocketContext.cs
  class SocketContext (line 8) | internal class SocketContext : IDisposable
    method StartConnectAsync (line 23) | public static SocketContext StartConnectAsync(AwaitableSignal awaitabl...
    method SocketContext (line 28) | private SocketContext(AwaitableSignal awaitableSignal, Socket socket, ...
    method StartReceiveAsync (line 40) | public void StartReceiveAsync()
    method StartSocketAction (line 45) | private void StartSocketAction(Func<SocketAsyncEventArgs, bool> socket...
    method Complete (line 54) | private void Complete()
    method GetResult (line 69) | public SocketAsyncOperation GetResult()
    method ThrowIfDisposed (line 89) | private void ThrowIfDisposed()
    method Dispose (line 97) | public void Dispose()

FILE: src/csharp/src/ZooKeeperNetEx/utils/SocketEx.cs
  class SocketEx (line 5) | internal static class SocketEx
    method read (line 7) | public static void read(this Socket socket, ByteBuffer byteBuffer)
    method write (line 26) | public static void write(this Socket socket, ByteBuffer byteBuffer)

FILE: src/csharp/src/ZooKeeperNetEx/utils/TimeHelper.cs
  class TimeHelper (line 5) | internal static class TimeHelper
    method TimeHelper (line 9) | static TimeHelper()

FILE: src/csharp/src/ZooKeeperNetEx/utils/VolatileBool.cs
  class VolatileBool (line 6) | internal class VolatileBool
    method VolatileBool (line 8) | public VolatileBool(bool value)

FILE: src/csharp/src/ZooKeeperNetEx/utils/VolatileInt.cs
  class VolatileInt (line 6) | internal class VolatileInt
    method VolatileInt (line 8) | public VolatileInt(int value)
    method TrySetValue (line 21) | public bool TrySetValue(int preconditionValue, int newValue)
    method SetValue (line 26) | public void SetValue(int preconditionValue, int newValue)
    method Increment (line 33) | public int Increment() {
    method Decrement (line 37) | public int Decrement()

FILE: src/csharp/src/ZooKeeperNetEx/utils/VolatileLong.cs
  class VolatileLong (line 6) | internal class VolatileLong
    method VolatileLong (line 8) | public VolatileLong(long value)

FILE: src/csharp/src/ZooKeeperNetEx/utils/VolatileReference.cs
  class VolatileReference (line 5) | internal class VolatileReference<T> where T : class
    method VolatileReference (line 7) | public VolatileReference(T value)
    method CompareExchange (line 20) | public T CompareExchange(T newValue, T preconditionValue)

FILE: src/csharp/src/ZooKeeperNetEx/utils/bigEndian/BigEndianBinaryReader.cs
  class BigEndianBinaryReader (line 11) | internal class BigEndianBinaryReader
    method BigEndianBinaryReader (line 29) | public BigEndianBinaryReader(Stream stream)
    method ReadBoolean (line 56) | public bool ReadBoolean()
    method ReadInt32 (line 67) | public int ReadInt32()
    method ReadInt64 (line 78) | public long ReadInt64()
    method ReadBytesOrThrow (line 91) | public byte[] ReadBytesOrThrow(int count)
    method ReadInternal (line 108) | void ReadInternal (byte[] data, int size)

FILE: src/csharp/src/ZooKeeperNetEx/utils/bigEndian/BigEndianBinaryWriter.cs
  class BigEndianBinaryWriter (line 9) | internal class BigEndianBinaryWriter
    method BigEndianBinaryWriter (line 25) | internal BigEndianBinaryWriter (Stream stream)
    method Write (line 51) | internal void Write (bool value)
    method Write (line 62) | internal void Write (int value)
    method Write (line 73) | internal void Write (long value)
    method Write (line 83) | internal void Write (byte[] value)
    method WriteInternal (line 102) | private void WriteInternal (byte[] bytes, int length)

FILE: src/csharp/src/ZooKeeperNetEx/utils/bigEndian/BigEndianBitConverter.cs
  class BigEndianBitConverter (line 8) | internal static class BigEndianBitConverter
    method ToBoolean (line 17) | public static bool ToBoolean (byte[] value, int startIndex)
    method ToInt32 (line 29) | public static int ToInt32 (byte[] value, int startIndex)
    method ToInt64 (line 40) | public static long ToInt64 (byte[] value, int startIndex)
    method CheckByteArgument (line 55) | private static void CheckByteArgument(byte[] value, int startIndex, in...
    method CheckedFromBytes (line 75) | static long CheckedFromBytes(byte[] value, int startIndex, int bytesTo...
    method FromBytes (line 89) | private static long FromBytes(byte[] buffer, int startIndex, int bytes...
    method CopyBytes (line 111) | private static void CopyBytes(long value, int bytes, byte[] buffer, in...
    method CopyBytesImpl (line 131) | private static void CopyBytesImpl(long value, int bytes, byte[] buffer...
    method CopyBytes (line 148) | public static void CopyBytes(bool value, byte[] buffer, int index)
    method CopyBytes (line 160) | public static void CopyBytes(int value, byte[] buffer, int index)
    method CopyBytes (line 172) | public static void CopyBytes(long value, byte[] buffer, int index)

FILE: src/csharp/src/ZooKeeperNetEx/utils/log/ILogConsumer.cs
  type ILogConsumer (line 9) | public interface ILogConsumer
    method Log (line 18) | void Log(TraceLevel severity, string className, string message, Except...

FILE: src/csharp/src/ZooKeeperNetEx/utils/log/ILogProducer.cs
  type ILogProducer (line 5) | internal interface ILogProducer
    method debugFormat (line 7) | void debugFormat(string format, params object[] args);
    method debug (line 8) | void debug(object message, Exception e = null);
    method warn (line 9) | void warn(object message, Exception e = null);
    method info (line 10) | void info(object message, Exception e = null);
    method error (line 11) | void error(object message, Exception e = null);
    method isDebugEnabled (line 12) | bool isDebugEnabled();

FILE: src/csharp/src/ZooKeeperNetEx/utils/log/LogWriter.cs
  class LogWriter (line 7) | internal class LogWriter
    method LogWriter (line 13) | public LogWriter()
    method Log (line 27) | public void Log(TraceLevel traceLevel, string className, string messag...
    method PrintDate (line 52) | private static string PrintDate()
    method PrintException (line 71) | private static string PrintException(Exception exception)
    method PrintException_Helper (line 76) | private static string PrintException_Helper(Exception exception, int l...
    method PrintOneException (line 102) | private static string PrintOneException(Exception exception, int level...

FILE: src/csharp/src/ZooKeeperNetEx/utils/log/NonBlockingFileWriter.cs
  class NonBlockingFileWriter (line 11) | internal class NonBlockingFileWriter
    method NonBlockingFileWriter (line 32) | public NonBlockingFileWriter(string filename)
    method Write (line 37) | public void Write(string str)
    method startLogTask (line 53) | private async void startLogTask()
    class StreamWriterWrapper (line 68) | private class StreamWriterWrapper
      method StreamWriterWrapper (line 76) | public StreamWriterWrapper(string filename)
      method WriteAsync (line 81) | public async Task WriteAsync(string msg)
      method Dispose (line 105) | public void Dispose()
      method GetOrCreateLogFile (line 118) | private StreamWriter GetOrCreateLogFile()

FILE: src/csharp/src/ZooKeeperNetEx/utils/log/TraceWriter.cs
  class TraceWriter (line 5) | internal static class TraceWriter
    method Write (line 8) | public static void Write(string msg, TraceLevel traceLevel)

FILE: src/csharp/src/ZooKeeperNetEx/utils/log/TypeLogger.cs
  class TypeLogger (line 6) | internal class TypeLogger<T> : ILogProducer
    method debugFormat (line 12) | public void debugFormat(string format, params object[] args)
    method debug (line 21) | public void debug(object message, Exception e = null)
    method warn (line 26) | public void warn(object message, Exception e = null)
    method info (line 31) | public void info(object message, Exception e = null)
    method error (line 36) | public void error(object message, Exception e = null)
    method isDebugEnabled (line 41) | public bool isDebugEnabled()
    method log (line 46) | private static void log(TraceLevel traceLevel, object message, Excepti...

FILE: src/csharp/src/ZooKeeperNetEx/utils/log/ZooKeeperLogger.cs
  class ZooKeeperLogger (line 6) | internal class ZooKeeperLogger
    method Log (line 29) | internal void Log(TraceLevel sev, string className, string message, Ex...

FILE: src/csharp/src/ZooKeeperNetEx/zookeeper/AsyncResults.cs
  class NodeResult (line 9) | public abstract class NodeResult {
    method NodeResult (line 15) | internal NodeResult(Stat stat) {
  class DataResult (line 23) | public class DataResult : NodeResult {
    method DataResult (line 29) | internal DataResult(byte[] data, Stat stat) : base(stat) {
  class ChildrenResult (line 37) | public class ChildrenResult : NodeResult {
    method ChildrenResult (line 43) | internal ChildrenResult(List<string> children, Stat stat) : base(stat) {
  class ACLResult (line 53) | public class ACLResult: NodeResult {
    method ACLResult (line 60) | internal ACLResult(List<ACL> acls, Stat stat)

FILE: src/csharp/src/ZooKeeperNetEx/zookeeper/ClientCnxn.cs
  class ClientCnxn (line 23) | internal sealed class ClientCnxn {
    class AuthData (line 36) | private class AuthData {
      method AuthData (line 37) | internal AuthData(string scheme, byte[] data) {
    method getSessionId (line 123) | public long getSessionId() {
    method getSessionPasswd (line 127) | public byte[] getSessionPasswd() {
    method getSessionTimeout (line 131) | public int getSessionTimeout() {
    method ToString (line 135) | public override string ToString() {
    class Packet (line 159) | public sealed class Packet : TaskCompletionSource<bool> {
      method SetFinished (line 175) | internal void SetFinished() {
      method Packet (line 183) | internal Packet(RequestHeader requestHeader, ReplyHeader replyHeader,
      method Packet (line 190) | internal Packet(RequestHeader requestHeader, ReplyHeader replyHeader,
      method createBB (line 201) | public void createBB() {
      method ToString (line 227) | public override string ToString() {
    method ClientCnxn (line 267) | internal ClientCnxn(string chrootPath, HostProvider hostProvider, int ...
    method start (line 283) | public void start() {
    class WatcherSetEventPair (line 290) | private class WatcherSetEventPair {
      method WatcherSetEventPair (line 294) | public WatcherSetEventPair(HashSet<Watcher> watchers, WatchedEvent @...
    method queueEvent (line 313) | private void queueEvent(WatchedEvent @event) {
    method queueEventOfDeath (line 330) | private void queueEventOfDeath() {
    method startEventTask (line 335) | private async Task startEventTask() {
    method processEvent (line 360) | private static async Task processEvent(WatcherSetEventPair @event) {
    method finishPacket (line 370) | private static void finishPacket(Packet p) {
    method conLossPacket (line 377) | private void conLossPacket(Packet p) {
    class SessionTimeoutException (line 397) | private class SessionTimeoutException : IOException {
      method SessionTimeoutException (line 398) | public SessionTimeoutException(string msg) : base(msg) {
    class SessionExpiredException (line 402) | private class SessionExpiredException : IOException {
      method SessionExpiredException (line 403) | public SessionExpiredException(string msg) : base(msg) {
    class RWServerFoundException (line 407) | private class RWServerFoundException : IOException {
      method RWServerFoundException (line 408) | public RWServerFoundException(string msg) : base(msg) {
    method readResponse (line 419) | internal void readResponse(ByteBuffer incomingBuffer) {
    method primeConnection (line 523) | internal void primeConnection() {
    method prependChroot (line 598) | private List<string> prependChroot(List<string> paths) {
    method sendPing (line 616) | private void sendPing() {
    method startConnect (line 627) | private void startConnect(ResolvedEndPoint addr) {
    method logStartConnect (line 635) | private static void logStartConnect(ResolvedEndPoint addr) {
    method startSendTask (line 643) | private async Task startSendTask() {
    method pingRwServer (line 779) | private async Task pingRwServer() {
    method cleanup (line 836) | private void cleanup() {
    method onConnected (line 869) | internal void onConnected(int _negotiatedSessionTimeout, long _sessionId,
    method close (line 905) | private void close() {
    method disconnect (line 918) | private void disconnect() {
    method closeAsync (line 936) | internal async Task closeAsync() {
    method getXid (line 967) | public int getXid() {
    method submitRequest (line 971) | public async Task<ReplyHeader> submitRequest(RequestHeader h, Record r...
    method queuePacket (line 981) | internal Packet queuePacket(RequestHeader h, ReplyHeader rep, Record r...
    method addAuthInfo (line 1012) | public void addAuthInfo(string scheme, byte[] auth) {
    method getState (line 1022) | internal ZooKeeper.States getState() {

FILE: src/csharp/src/ZooKeeperNetEx/zookeeper/ClientCnxnSocket.cs
  class ClientCnxnSocket (line 18) | internal abstract class ClientCnxnSocket {
    method ClientCnxnSocket (line 30) | protected ClientCnxnSocket(ClientCnxn cnxn) {
    method introduce (line 48) | internal void introduce(long sessionid) {
    method updateNow (line 52) | internal void updateNow() {
    method getIdleRecv (line 56) | internal int getIdleRecv() {
    method getIdleSend (line 60) | internal int getIdleSe
Condensed preview — 1003 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,977K chars).
[
  {
    "path": ".gitattributes",
    "chars": 403,
    "preview": "# Auto detect text files and perform LF normalization\n*        text=auto\n\n*.cs     text diff=csharp\n*.java   text diff=j"
  },
  {
    "path": ".gitignore",
    "chars": 810,
    "preview": "# Java\nhs_err_pid*\n\n# Git\n*.orij\n*.rej\n\n# SVN\n.svn\n.revision\n\n# Eclipse\n.metadata\n.classpath\n.eclipse/\n.idea/\n.project\n."
  },
  {
    "path": "LICENSE.txt",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "NOTICE.txt",
    "chars": 170,
    "preview": "Apache ZooKeeper\nCopyright 2009-2018 The Apache Software Foundation\n\nThis product includes software developed at\nThe Apa"
  },
  {
    "path": "README_packaging.txt",
    "chars": 1770,
    "preview": "README file for Packaging Notes\n\nRequirement\n-----------\n\ngcc, cppunit and python-setuptools are required to build \nC an"
  },
  {
    "path": "bin/README.txt",
    "chars": 232,
    "preview": "This directory contain scripts that allow easy access (classpath in particular)\nto the ZooKeeper server and command line"
  },
  {
    "path": "bin/zkCleanup.sh",
    "chars": 1937,
    "preview": "#!/usr/bin/env bash\n\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreemen"
  },
  {
    "path": "bin/zkCli.cmd",
    "chars": 1056,
    "preview": "@echo off\r\nREM Licensed to the Apache Software Foundation (ASF) under one or more\r\nREM contributor license agreements.  "
  },
  {
    "path": "bin/zkCli.sh",
    "chars": 1534,
    "preview": "#!/usr/bin/env bash\n\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreemen"
  },
  {
    "path": "bin/zkEnv.cmd",
    "chars": 1759,
    "preview": "@echo off\r\nREM Licensed to the Apache Software Foundation (ASF) under one or more\r\nREM contributor license agreements.  "
  },
  {
    "path": "bin/zkEnv.sh",
    "chars": 2696,
    "preview": "#!/usr/bin/env bash\n\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreemen"
  },
  {
    "path": "bin/zkServer.cmd",
    "chars": 1089,
    "preview": "@echo off\r\nREM Licensed to the Apache Software Foundation (ASF) under one or more\r\nREM contributor license agreements.  "
  },
  {
    "path": "bin/zkServer.sh",
    "chars": 6773,
    "preview": "#!/usr/bin/env bash\n\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreemen"
  },
  {
    "path": "build.xml",
    "chars": 88546,
    "preview": "<?xml version=\"1.0\"?>\n\n<!--\n   Licensed to the Apache Software Foundation (ASF) under one or more\n   contributor license"
  },
  {
    "path": "conf/configuration.xsl",
    "chars": 535,
    "preview": "<?xml version=\"1.0\"?>\n<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n<xsl:output method"
  },
  {
    "path": "conf/log4j.properties",
    "chars": 2161,
    "preview": "# Define some default values that can be overridden by system properties\nzookeeper.root.logger=INFO, CONSOLE\nzookeeper.c"
  },
  {
    "path": "conf/zoo_sample.cfg",
    "chars": 922,
    "preview": "# The number of milliseconds of each tick\ntickTime=2000\n# The number of ticks that the initial \n# synchronization phase "
  },
  {
    "path": "docs/bookkeeperConfig.html",
    "chars": 11162,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/bookkeeperOverview.html",
    "chars": 20127,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/bookkeeperProgrammer.html",
    "chars": 25569,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/bookkeeperStarted.html",
    "chars": 12427,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/bookkeeperStream.html",
    "chars": 13858,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/broken-links.xml",
    "chars": 31,
    "preview": "<broken-links>\n</broken-links>\n"
  },
  {
    "path": "docs/index.html",
    "chars": 11526,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/javaExample.html",
    "chars": 29461,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/linkmap.html",
    "chars": 10732,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/recipes.html",
    "chars": 31802,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/releasenotes.html",
    "chars": 115328,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/skin/CommonMessages_de.xml",
    "chars": 1088,
    "preview": "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!--\n  Licensed to the Apache Software Foundation (ASF) under one or more\n  "
  },
  {
    "path": "docs/skin/CommonMessages_en_US.xml",
    "chars": 1072,
    "preview": "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!--\n  Licensed to the Apache Software Foundation (ASF) under one or more\n  "
  },
  {
    "path": "docs/skin/CommonMessages_es.xml",
    "chars": 1075,
    "preview": "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!--\n  Licensed to the Apache Software Foundation (ASF) under one or more\n  "
  },
  {
    "path": "docs/skin/CommonMessages_fr.xml",
    "chars": 1090,
    "preview": "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!--\n  Licensed to the Apache Software Foundation (ASF) under one or more\n  "
  },
  {
    "path": "docs/skin/basic.css",
    "chars": 2993,
    "preview": "/*\n* Licensed to the Apache Software Foundation (ASF) under one or more\n* contributor license agreements.  See the NOTIC"
  },
  {
    "path": "docs/skin/breadcrumbs-optimized.js",
    "chars": 2981,
    "preview": "/*\n* Licensed to the Apache Software Foundation (ASF) under one or more\n* contributor license agreements.  See the NOTIC"
  },
  {
    "path": "docs/skin/breadcrumbs.js",
    "chars": 6589,
    "preview": "/*\n* Licensed to the Apache Software Foundation (ASF) under one or more\n* contributor license agreements.  See the NOTIC"
  },
  {
    "path": "docs/skin/fontsize.js",
    "chars": 3112,
    "preview": "/*\n* Licensed to the Apache Software Foundation (ASF) under one or more\n* contributor license agreements.  See the NOTIC"
  },
  {
    "path": "docs/skin/getBlank.js",
    "chars": 1605,
    "preview": "/*\n* Licensed to the Apache Software Foundation (ASF) under one or more\n* contributor license agreements.  See the NOTIC"
  },
  {
    "path": "docs/skin/getMenu.js",
    "chars": 1660,
    "preview": "/*\n* Licensed to the Apache Software Foundation (ASF) under one or more\n* contributor license agreements.  See the NOTIC"
  },
  {
    "path": "docs/skin/images/README.txt",
    "chars": 70,
    "preview": "The images in this directory are used if the current skin lacks them.\n"
  },
  {
    "path": "docs/skin/menu.js",
    "chars": 1683,
    "preview": "/*\n* Licensed to the Apache Software Foundation (ASF) under one or more\n* contributor license agreements.  See the NOTIC"
  },
  {
    "path": "docs/skin/note.txt",
    "chars": 1384,
    "preview": "Notes for developer:\n\n--Legend-------------------\nTODO -> blocker\nDONE -> blocker\nToDo -> enhancement bug\ndone -> enhanc"
  },
  {
    "path": "docs/skin/print.css",
    "chars": 1237,
    "preview": "/*\n* Licensed to the Apache Software Foundation (ASF) under one or more\n* contributor license agreements.  See the NOTIC"
  },
  {
    "path": "docs/skin/profile.css",
    "chars": 4143,
    "preview": "\n\n/* ==================== aural ============================ */\n\n@media aural {\n  h1, h2, h3, h4, h5, h6 { voice-family:"
  },
  {
    "path": "docs/skin/prototype.js",
    "chars": 32902,
    "preview": "/*  Prototype JavaScript framework, version 1.4.0_pre4\n *  (c) 2005 Sam Stephenson <sam@conio.net>\n *\n *  THIS FILE IS A"
  },
  {
    "path": "docs/skin/screen.css",
    "chars": 12635,
    "preview": "/*\n* Licensed to the Apache Software Foundation (ASF) under one or more\n* contributor license agreements.  See the NOTIC"
  },
  {
    "path": "docs/zookeeperAdmin.html",
    "chars": 73263,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperHierarchicalQuorums.html",
    "chars": 8069,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperInternals.html",
    "chars": 27116,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperJMX.html",
    "chars": 14871,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperObservers.html",
    "chars": 12181,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperOtherInfo.html",
    "chars": 6612,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperOver.html",
    "chars": 23260,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperProgrammers.html",
    "chars": 74299,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperQuotas.html",
    "chars": 8674,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperStarted.html",
    "chars": 20518,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "docs/zookeeperTutorial.html",
    "chars": 30650,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n<ME"
  },
  {
    "path": "ivy.xml",
    "chars": 8197,
    "preview": "<!--\n   Licensed to the Apache Software Foundation (ASF) under one or more\n   contributor license agreements.  See the N"
  },
  {
    "path": "ivysettings.xml",
    "chars": 1709,
    "preview": "<ivysettings>\n\n <!--\n   Licensed to the Apache Software Foundation (ASF) under one or more\n   contributor license agreem"
  },
  {
    "path": "readme.md",
    "chars": 1079,
    "preview": "# Apache ZooKeeper .NET async Client\n\n<p>\n<img src=\"https://svn.apache.org/repos/asf/comdev/project-logos/originals/zook"
  },
  {
    "path": "src/LICENSE.txt",
    "chars": 11938,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "src/NOTICE.txt",
    "chars": 3132,
    "preview": "Apache ZooKeeper\nCopyright 2009-2018 The Apache Software Foundation\n\nThis product includes software developed at\nThe Apa"
  },
  {
    "path": "src/c/CMakeLists.txt",
    "chars": 6456,
    "preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE f"
  },
  {
    "path": "src/c/ChangeLog",
    "chars": 4341,
    "preview": "Release 2.1.1\n2008-04-30 Andrew Kornev <akornev@users.sourceforge.net>\n\n    * changed the distributino package name to \""
  },
  {
    "path": "src/c/INSTALL",
    "chars": 9416,
    "preview": "Installation Instructions\n*************************\n\nCopyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,"
  },
  {
    "path": "src/c/LICENSE",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "src/c/Makefile.am",
    "chars": 4367,
    "preview": "# need this for Doxygen integration\ninclude $(top_srcdir)/aminclude.am\n\nif SOLARIS\n  SOLARIS_CPPFLAGS = -D_POSIX_PTHREAD"
  },
  {
    "path": "src/c/NOTICE.txt",
    "chars": 1961,
    "preview": "Apache ZooKeeper\nCopyright 2009-2018 The Apache Software Foundation\n\nThis product includes software developed at\nThe Apa"
  },
  {
    "path": "src/c/README",
    "chars": 7400,
    "preview": "                     Zookeeper C client library \n\n\nThis package provides a C client interface to Zookeeper server.\n\nFor "
  },
  {
    "path": "src/c/acinclude.m4",
    "chars": 11533,
    "preview": "# This file is part of Autoconf.                       -*- Autoconf -*-\n\n# Copyright (C) 2004 Oren Ben-Kiki\n# This file "
  },
  {
    "path": "src/c/aminclude.am",
    "chars": 4733,
    "preview": "# Copyright (C) 2004 Oren Ben-Kiki\n# This file is distributed under the same terms as the Automake macro files.\n\n# Gener"
  },
  {
    "path": "src/c/c-doc.Doxyfile",
    "chars": 50794,
    "preview": "# Doxyfile 1.4.7\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
  },
  {
    "path": "src/c/cmake_config.h.in",
    "chars": 4763,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/configure.ac",
    "chars": 4110,
    "preview": "#                                               -*- Autoconf -*-\n# Process this file with autoconf to produce a configur"
  },
  {
    "path": "src/c/include/proto.h",
    "chars": 1361,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/include/recordio.h",
    "chars": 3077,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/include/winconfig.h",
    "chars": 355,
    "preview": "#ifndef WINCONFIG_H_\n#define WINCONFIG_H_\n\n/* Define to `__inline__' or `__inline' if that's what the C compiler\n   call"
  },
  {
    "path": "src/c/include/zookeeper.h",
    "chars": 72869,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/include/zookeeper_log.h",
    "chars": 1747,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/include/zookeeper_version.h",
    "chars": 1055,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/cli.c",
    "chars": 21661,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/hashtable/LICENSE.txt",
    "chars": 1495,
    "preview": "Copyright (c) 2002, 2004, Christopher Clark\nAll rights reserved.\n\nRedistribution and use in source and binary forms, wit"
  },
  {
    "path": "src/c/src/hashtable/hashtable.c",
    "chars": 9031,
    "preview": "/* Copyright (C) 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */\n\n#include \"hashtable.h\"\n#include \"hashtable"
  },
  {
    "path": "src/c/src/hashtable/hashtable.h",
    "chars": 7512,
    "preview": "/* Copyright (C) 2002 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */\n\n#ifndef __HASHTABLE_CWC22_H__\n#define __HA"
  },
  {
    "path": "src/c/src/hashtable/hashtable_itr.c",
    "chars": 5392,
    "preview": "/* Copyright (C) 2002, 2004 Christopher Clark  <firstname.lastname@cl.cam.ac.uk> */\n\n#include \"hashtable.h\"\n#include \"ha"
  },
  {
    "path": "src/c/src/hashtable/hashtable_itr.h",
    "chars": 4160,
    "preview": "/* Copyright (C) 2002, 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */\n\n#ifndef __HASHTABLE_ITR_CWC22__\n#def"
  },
  {
    "path": "src/c/src/hashtable/hashtable_private.h",
    "chars": 2961,
    "preview": "/* Copyright (C) 2002, 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */\n\n#ifndef __HASHTABLE_PRIVATE_CWC22_H_"
  },
  {
    "path": "src/c/src/load_gen.c",
    "chars": 7798,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/mt_adaptor.c",
    "chars": 15112,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/recordio.c",
    "chars": 9849,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/st_adaptor.c",
    "chars": 2282,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/winport.c",
    "chars": 9431,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/winport.h",
    "chars": 4410,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/zk_adaptor.h",
    "chars": 8697,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/zk_hashtable.c",
    "chars": 9434,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/zk_hashtable.h",
    "chars": 2423,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/zk_log.c",
    "chars": 4644,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/src/zookeeper.c",
    "chars": 119044,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/CollectionUtil.h",
    "chars": 6716,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/CppAssertHelper.h",
    "chars": 1573,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/LibCMocks.cc",
    "chars": 9758,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/LibCMocks.h",
    "chars": 11538,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/LibCSymTable.cc",
    "chars": 2412,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/LibCSymTable.h",
    "chars": 4080,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/MocksBase.cc",
    "chars": 1176,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/MocksBase.h",
    "chars": 1126,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/PthreadMocks.cc",
    "chars": 4030,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/PthreadMocks.h",
    "chars": 15487,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/TestClient.cc",
    "chars": 39629,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/TestClientRetry.cc",
    "chars": 7034,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/TestDriver.cc",
    "chars": 5129,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/TestMulti.cc",
    "chars": 21057,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/TestOperations.cc",
    "chars": 27061,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/TestWatchers.cc",
    "chars": 31298,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/TestZookeeperClose.cc",
    "chars": 21693,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/TestZookeeperInit.cc",
    "chars": 10903,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/ThreadingUtil.cc",
    "chars": 2497,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/ThreadingUtil.h",
    "chars": 6749,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/Util.cc",
    "chars": 1455,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/Util.h",
    "chars": 3965,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/Vector.h",
    "chars": 1242,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/ZKMocks.cc",
    "chars": 16662,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/ZKMocks.h",
    "chars": 15521,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/c/tests/wrappers-mt.opt",
    "chars": 107,
    "preview": "-Wl,--wrap -Wl,pthread_mutex_lock\n-Wl,--wrap -Wl,pthread_mutex_trylock\n-Wl,--wrap -Wl,pthread_mutex_unlock\n"
  },
  {
    "path": "src/c/tests/wrappers.opt",
    "chars": 182,
    "preview": "-Wl,--wrap -Wl,calloc\n-Wl,--wrap -Wl,free\n-Wl,--wrap -Wl,flush_send_queue\n-Wl,--wrap -Wl,get_xid\n-Wl,--wrap -Wl,deliverW"
  },
  {
    "path": "src/c/tests/zkServer.sh",
    "chars": 3943,
    "preview": "#!/bin/bash\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  Se"
  },
  {
    "path": "src/contrib/build-contrib.xml",
    "chars": 9907,
    "preview": "<?xml version=\"1.0\"?>\n\n<!--\n   Licensed to the Apache Software Foundation (ASF) under one or more\n   contributor license"
  },
  {
    "path": "src/contrib/build.xml",
    "chars": 3258,
    "preview": "<?xml version=\"1.0\"?>\n\n<!--\n   Licensed to the Apache Software Foundation (ASF) under one or more\n   contributor license"
  },
  {
    "path": "src/contrib/fatjar/README.txt",
    "chars": 167,
    "preview": "This package contains build to create a fat zookeeper jar. You need to run ant to create the fat jar.\nTo run the fatjar "
  },
  {
    "path": "src/contrib/fatjar/build.xml",
    "chars": 2984,
    "preview": "<?xml version=\"1.0\"?>\n\n<!--\n   Licensed to the Apache Software Foundation (ASF) under one or more\n   contributor license"
  },
  {
    "path": "src/contrib/fatjar/conf/mainClasses",
    "chars": 707,
    "preview": "::Client Commands\nclient:org.apache.zookeeper.ZooKeeperMain:Client shell to ZooKeeper\n::Server Commands\nserver:org.apach"
  },
  {
    "path": "src/contrib/fatjar/src/java/org/apache/zookeeper/util/FatJarMain.java",
    "chars": 4472,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/huebrowser/README",
    "chars": 2551,
    "preview": "\nZooKeeper Browser - Hue Application\n===================================\n\nThe ZooKeeper Browser application allows you t"
  },
  {
    "path": "src/contrib/huebrowser/zkui/Makefile",
    "chars": 932,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/setup.py",
    "chars": 1703,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/__init__.py",
    "chars": 784,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/forms.py",
    "chars": 1209,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/models.py",
    "chars": 785,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/rest.py",
    "chars": 7718,
    "preview": "\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/settings.py",
    "chars": 1103,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/static/bootstrap.js",
    "chars": 1129,
    "preview": "// Licensed to the Apache Software Foundation (ASF) under one\n// or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/static/css/zkui.css",
    "chars": 1402,
    "preview": "/*\n Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/static/help/index.html",
    "chars": 1168,
    "preview": "<!--\n   Licensed to the Apache Software Foundation (ASF) under one or more\n   contributor license agreements.  See the N"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/static/js/Source/Zkui/Zkui.js",
    "chars": 1247,
    "preview": "// Licensed to the Apache Software Foundation (ASF) under one\n// or more contributor license agreements.  See the NOTICE"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/static/js/package.yml",
    "chars": 911,
    "preview": "# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements.  See the NOTICE f"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/stats.py",
    "chars": 4911,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/templates/clients.mako",
    "chars": 1481,
    "preview": "<%!\n#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOT"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/templates/create.mako",
    "chars": 1179,
    "preview": "<%!\n#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOT"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/templates/edit.mako",
    "chars": 1184,
    "preview": "<%!\n#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOT"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/templates/index.mako",
    "chars": 1602,
    "preview": "<%!\n#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOT"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/templates/shared_components.mako",
    "chars": 2111,
    "preview": "<%!\n#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOT"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/templates/tree.mako",
    "chars": 2755,
    "preview": "<%!\n#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOT"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/templates/view.mako",
    "chars": 3366,
    "preview": "<%!\n#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOT"
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/urls.py",
    "chars": 1304,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/utils.py",
    "chars": 1120,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/views.py",
    "chars": 4712,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/huebrowser/zkui/src/zkui/windmilltests.py",
    "chars": 1033,
    "preview": "#  Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE "
  },
  {
    "path": "src/contrib/loggraph/README.txt",
    "chars": 4125,
    "preview": "LogGraph README\n\n1 - About\nLogGraph is an application for viewing and filtering zookeeper logs. It can handle transactio"
  },
  {
    "path": "src/contrib/loggraph/bin/loggraph-dev.sh",
    "chars": 1576,
    "preview": "#!/bin/sh\n\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements.  See t"
  },
  {
    "path": "src/contrib/loggraph/bin/loggraph.sh",
    "chars": 1408,
    "preview": "#!/bin/sh\n\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements.  See t"
  },
  {
    "path": "src/contrib/loggraph/build.xml",
    "chars": 2550,
    "preview": "<?xml version=\"1.0\"?>\n\n<!--\n   Licensed to the Apache Software Foundation (ASF) under one or more\n   contributor license"
  },
  {
    "path": "src/contrib/loggraph/ivy.xml",
    "chars": 1877,
    "preview": "<!--\n   Licensed to the Apache Software Foundation (ASF) under one or more\n   contributor license agreements.  See the N"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/FilterException.java",
    "chars": 947,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/FilterOp.java",
    "chars": 2070,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/FilterParser.java",
    "chars": 3713,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/JsonGenerator.java",
    "chars": 6902,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/Log4JEntry.java",
    "chars": 1380,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/Log4JSource.java",
    "chars": 11116,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogEntry.java",
    "chars": 1469,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogIterator.java",
    "chars": 1035,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogServer.java",
    "chars": 2258,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSkipList.java",
    "chars": 2745,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/LogSource.java",
    "chars": 1374,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MeasureThroughput.java",
    "chars": 3176,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/MergedLogSource.java",
    "chars": 6811,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/RandomAccessFileReader.java",
    "chars": 8513,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TransactionEntry.java",
    "chars": 2053,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/TxnLogSource.java",
    "chars": 11384,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/AndOp.java",
    "chars": 1207,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/Arg.java",
    "chars": 1209,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/EqualsOp.java",
    "chars": 1418,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/GreaterThanOp.java",
    "chars": 2381,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/LessThanOp.java",
    "chars": 2276,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NotOp.java",
    "chars": 1253,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/NumberArg.java",
    "chars": 1034,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/OrOp.java",
    "chars": 1209,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/StringArg.java",
    "chars": 1042,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/SymbolArg.java",
    "chars": 1037,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/filterops/XorOp.java",
    "chars": 1305,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/FileLoader.java",
    "chars": 1816,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Fs.java",
    "chars": 2212,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/GraphData.java",
    "chars": 2600,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/JsonServlet.java",
    "chars": 2816,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/NumEvents.java",
    "chars": 2570,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/StaticContent.java",
    "chars": 1944,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/src/java/org/apache/zookeeper/graph/servlets/Throughput.java",
    "chars": 3303,
    "preview": "/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NO"
  },
  {
    "path": "src/contrib/loggraph/web/org/apache/zookeeper/graph/log4j.properties",
    "chars": 493,
    "preview": "log4j.rootLogger=TRACE, CONSOLE\n\n# Print the date in ISO 8601 format\nlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppe"
  },
  {
    "path": "src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/date.format.js",
    "chars": 3885,
    "preview": "/*\n * Date Format 1.2.3\n * (c) 2007-2009 Steven Levithan <stevenlevithan.com>\n * MIT license\n *\n * Includes enhancements"
  },
  {
    "path": "src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/g.bar.js",
    "chars": 13561,
    "preview": "/*\n * g.Raphael 0.4 - Charting library, based on Raphaël\n *\n * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs"
  },
  {
    "path": "src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/g.dot.js",
    "chars": 4851,
    "preview": "/*\n * g.Raphael 0.4 - Charting library, based on Raphaël\n *\n * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs"
  },
  {
    "path": "src/contrib/loggraph/web/org/apache/zookeeper/graph/resources/g.line.js",
    "chars": 9279,
    "preview": "/*\n * g.Raphael 0.4 - Charting library, based on Raphaël\n *\n * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs"
  }
]

// ... and 803 more files (download for full content)

About this extraction

This page contains the full source code of the shayhatsor/zookeeper GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1003 files (7.2 MB), approximately 2.0M tokens, and a symbol index with 7569 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!