CHANGES.txt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. Trunk
  2. Non-backward compatible changes:
  3. BUGFIXES:
  4. Backward compatibile changes:
  5. BUGFIXES:
  6. ZOOKEEPER-303. Bin scripts dont work on a Mac. (tom white via mahadev)
  7. ZOOKEEPER-330. zookeeper standalone server does not startup with just a
  8. port and datadir. (chris darroch and mahadev)
  9. ZOOKEEPER-319. add locking around auth info in zhandle_t.
  10. (chris darroch via mahadev)
  11. ZOOKEEPER-320. call auth completion in free_completions().
  12. (chris darroch via mahadev)
  13. ZOOKEEPER-334. bookkeeper benchmark (testclient.java) has compiling errors.
  14. (flavio and mahadev)
  15. ZOOKEEPER-281. autoreconf fails for /zookeeper-3.0.1/src/c/ (phunt)
  16. ZOOKEEPER-318. remove locking in zk_hashtable.c or add locking in
  17. collect_keys() (chris darroch via mahadev)
  18. ZOOKEEPER-333. helgrind thread issues identified in mt c client code
  19. (mahadev via phunt)
  20. ZOOKEEPER-309. core dump using zoo_get_acl() (mahadev via phunt)
  21. ZOOKEEPER-341. regression in QuorumPeerMain,
  22. tickTime from config is lost, cannot start quorum (phunt via mahadev)
  23. ZOOKEEPER-360. WeakHashMap in Bookie.java causes NPE (flavio via mahadev)
  24. ZOOKEEPER-362. Issues with FLENewEpochTest. (fix bug in Fast leader election)
  25. (flavio via mahadev)
  26. ZOOKEEPER-363. NPE when recovering ledger with no hint. (flavio via mahadev)
  27. ZOOKEEPER-370. Fix critical problems reported by findbugs.
  28. (flavio via mahadev)
  29. ZOOKEEPER-347. zkfuse uses non-standard String. (patrick hunt via mahadev)
  30. ZOOKEEPER-355. make validatePath non public in Zookeeper client api.
  31. (phunt via mahadev)
  32. ZOOKEEPER-374. Uninitialized struct variable in C causes warning which
  33. is treated as an error (phunt via mahadev)
  34. ZOOKEEPER-337. improve logging in leader election lookForLeader method when
  35. address resolution fails (phunt via mahadev)
  36. ZOOKEEPER-367. RecoveryTest failure - "unreasonable length" IOException
  37. (mahadev via phunt)
  38. IMPROVEMENTS:
  39. ZOOKEEPER-308. improve the atomic broadcast performance 3x.
  40. (breed via mahadev)
  41. ZOOKEEPER-326. standalone server ignores tickTime configuration.
  42. (chris darroch via mahadev)
  43. ZOOKEEPER-279. Allow specialization of quorum config parsing
  44. (e.g. variable expansion in zoo.cfg) (Jean-Daniel Cryans via phunt)
  45. ZOOKEEPER-351. to run checkstyle (giridharan kesavan via mahadev)
  46. ZOOKEEPER-350. to run rats for releaseaudit.
  47. (giridharan kesavan via mahadev)
  48. ZOOKEEPER-352. to add standard ant targets required by test-patch.sh script
  49. (giridharan kesavan via mahadev)
  50. ZOOKEEPER-353. javadoc warnings needs to be fixed.
  51. (giridharan kesavan via mahadev)
  52. ZOOKEEPER-354. to fix javadoc warning in the source files. (mahadev)
  53. ZOOKEEPER-349. to automate patch testing. (giridharan kesavan via mahadev)
  54. ZOOKEEPER-288. Cleanup and fixes to BookKeeper (flavio via mahadev)
  55. ZOOKEEPER-305. Replace timers with semaphores in FLENewEpochTest.
  56. (flavio via mahadev)
  57. ZOOKEEPER-60. Get cppunit tests running as part of Hudson CI.
  58. (girish via mahadev)
  59. ZOOKEEPER-343. add tests that specifically verify the zkmain and
  60. qpmain classes. (phunt via mahadev)
  61. ZOOKEEPER-361. integrate cppunit testing as part of hudson patch process.
  62. (giri via mahadev)
  63. NEW FEATURES:
  64. Release 3.1.0 - 2009-02-06
  65. Non-backward compatible changes:
  66. BUGFIXES:
  67. ZOOKEEPER-255. zoo_set() api does not return stat datastructure.
  68. (avery ching via mahadev)
  69. ZOOKEEPER-246. review error code definition in both source and docs.
  70. (pat via mahadev)
  71. Backward compatibile changes:
  72. BUGFIXES:
  73. ZOOKEEPER-211. Not all Mock tests are working (ben via phunt)
  74. ZOOKEEPER-223. change default level in root logger to INFO.
  75. (pat via mahadev)
  76. ZOOKEEPER-212. fix the snapshot to be asynchronous. (mahadev and ben)
  77. ZOOKEEPER-213. fix programmer guide C api docs to be in sync with latest
  78. zookeeper.h (pat via mahadev)
  79. ZOOKEEPER-219. fix events.poll timeout in watcher test to be longer.
  80. (pat via mahadev)
  81. ZOOKEEPER-217. Fix errors in config to be thrown as Exceptions. (mahadev)
  82. ZOOKEEPER-228. fix apache header missing in DBTest. (mahadev)
  83. ZOOKEEPER-218. fix the error in the barrier example code. (pat via mahadev)
  84. ZOOKEEPER-206. documentation tab should contain the version number and
  85. other small site changes. (pat via mahadev)
  86. ZOOKEEPER-226. fix exists calls that fail on server if node has null data.
  87. (mahadev)
  88. ZOOKEEPER-204. SetWatches needs to be the first message after auth
  89. messages to the server (ben via mahadev)
  90. ZOOKEEPER-208. Zookeeper C client uses API that are not thread safe,
  91. causing crashes when multiple instances are active.
  92. (austin shoemaker, chris daroch and ben reed via mahadev)
  93. ZOOKEEPER-227. gcc warning from recordio.h (chris darroch via mahadev)
  94. ZOOKEEPER-232. fix apache licence header in TestableZookeeper (mahadev)
  95. ZOOKEEPER-249. QuorumPeer.getClientPort() always returns -1.
  96. (nitay joffe via mahadev)
  97. ZOOKEEPER-248. QuorumPeer should use Map interface instead of HashMap
  98. implementation. (nitay joffe via mahadev)
  99. ZOOKEEPER-241. Build of a distro fails after clean target is run.
  100. (patrick hunt via mahadev)
  101. ZOOKEEPER-245. update readme/quickstart to be release tar, rather than
  102. source, based (patrick hunt via mahadev)
  103. ZOOKEEPER-251. NullPointerException stopping and starting Zookeeper servers
  104. (mahadev via phunt)
  105. ZOOKEEPER-250. isvalidsnapshot should handle the case of 0 snapshot
  106. files better. (mahadev via phunt)
  107. ZOOKEEPER-265. remove (deprecate) unused NoSyncConnected from KeeperState.
  108. (phunt via mahadev)
  109. ZOOKEEPER-273. Zookeeper c client build should not depend on CPPUNIT. (pat
  110. and runping via mahadev)
  111. ZOOKEEPER-268. tostring on jute generated objects can cause NPE. (pat via mahadev)
  112. ZOOKEEPER-267. java client incorrectly generating syncdisconnected event when in disconnected state. (pat via breed)
  113. ZOOKEEPER-263. document connection host:port as comma separated list in forrest docs (pat via breed)
  114. ZOOKEEPER-275. Bug in FastLeaderElection. (flavio via mahadev)
  115. ZOOKEEPER-272. getchildren can fail for large number of children. (mahadev)
  116. ZOOKEEPER-16. Need to do path validation. (pat, mahadev)
  117. ZOOKEEPER-252. PurgeTxnLog is not handling the new dataDir directory
  118. structure (mahadev via phunt)
  119. ZOOKEEPER-291. regression for legacy code using KeeperException.Code
  120. constants (due to 246). (pat via mahadev)
  121. ZOOKEEPER-255. zoo_set() api does not return stat datastructure.
  122. (avery ching via mahadev)
  123. ZOOKEEPER-293. zoo_set needs to be abi compatible (3.1 changed the
  124. signature), fix this by adding zoo_set2 (pat via mahadev)
  125. ZOOKEEPER-302. Quote values in JMX objectnames. (tom and pat via mahadev)
  126. IMPROVEMENTS:
  127. ZOOKEEPER-64. Log system env information when initializing server and
  128. client (pat via mahadev)
  129. ZOOKEEPER-243. add SEQUENCE flag documentation to the programming guide.
  130. (patrick hunt via mahadev)
  131. ZOOKEEPER-161. Content needed: "Designing a ZooKeeper Deployment"
  132. (breed via phunt)
  133. ZOOKEEPER-247. fix formatting of C API in ACL section of programmer guide.
  134. (patrick hunt via mahadev)
  135. ZOOKEEPER-230. Improvements to FLE. (Flavio via mahadev)
  136. ZOOKEEPER-225. c client should log an info message in zookeeper_init
  137. detailing connection parameters. (pat via mahadev)
  138. ZOOKEEPER-222. print C client log message timestamp in human readable
  139. form. (pat via mahadev)
  140. ZOOKEEPER-256. support use of JMX to manage log4j configuration at runtime.
  141. (pat via mahadev)
  142. ZOOKEEPER-214. add new "stat reset" command to server admin port.
  143. (pat via mahadev)
  144. ZOOKEEPER-258. docs incorrectly state max client timeout as 60 seconds
  145. (it's based on server ticktime). (phunt via mahadev)
  146. ZOOKEEPER-135. Fat jar build target. (phunt and breed via mahadev)
  147. ZOOKEEPER-234. Eliminate using statics to initialize the sever. Should
  148. allow server to be more embeddable in OSGi enviorments. (phunt)
  149. ZOOKEEPER-259. cleanup the logging levels used (use the correct level)
  150. and messages generated. (phunt via breed)
  151. ZOOKEEPER-210. Require Java 6. (phunt via breed)
  152. ZOOKEEPER-177. needed: docs for JMX (phunt via mahadev)
  153. ZOOKEEPER-253. documentation of DataWatcher state transition is misleading
  154. regarding auto watch reset on reconnect. (phunt via mahadev)
  155. ZOOKEEPER-269. connectionloss- add more documentation to detail. (phunt and
  156. flavio via mahadev)
  157. ZOOKEEPER-260. document the recommended values for server id's
  158. (mahadev via phunt)
  159. ZOOKEEPER-215. expand system test environment (breed via phunt)
  160. ZOOKEEPER-229. improve documentation regarding user's responsibility to
  161. cleanup datadir (snaps/logs) (mahadev via phunt)
  162. ZOOKEEPER-69. ZooKeeper logo
  163. ZOOKEEPER-286. Make GenerateLoad use InstanceContainers. (breed via mahadev)
  164. ZOOKEEPER-220. programming guide watches section should clarify
  165. server/clientlib role in data/child watch maint. (breed via phunt)
  166. ZOOKEEPER-289. add debug messages to nioserver select loop. (mahadev)
  167. NEW FEATURES:
  168. ZOOKEEPER-276. Bookkeeper contribution (Flavio and Luca Telloli via mahadev)
  169. ZOOKEEPER-231. Quotas in ZooKeeper. (mahadev)
  170. Release 3.0.0 - 2008-10-21
  171. Non-backward compatible changes:
  172. ZOOKEEPER-43. Server side of auto reset watches. (breed via mahadev)
  173. ZOOKEEPER-132. Create Enum to replace CreateFlag in ZooKepper.create
  174. method (Jakob Homan via phunt)
  175. ZOOKEEPER-139. Create Enums for WatcherEvent's KeeperState and EventType
  176. (Jakob Homan via phunt)
  177. ZOOKEEPER-18. keeper state inconsistency (Jakob Homan via phunt)
  178. ZOOKEEPER-38. headers (version+) in log/snap files (Andrew Kornev and Mahadev
  179. Konar via breed)
  180. ZOOKEEPER-8. Stat enchaned to include num of children and size
  181. (phunt)
  182. ZOOKEEPER-6. List of problem identifiers in zookeeper.h
  183. (phunt)
  184. ZOOKEEPER-7. Use enums rather than ints for types and state
  185. (Jakob Homan via mahadev)
  186. ZOOKEEPER-27. Unique DB identifiers for servers and clients
  187. (mahadev)
  188. ZOOKEEPER-32. CRCs for ZooKeeper data
  189. (mahadev)
  190. ZOOKEEPER-33. Better ACL management
  191. (mahadev)
  192. Backward compatibile changes:
  193. BUGFIXES:
  194. ZOOKEEPER-203. fix datadir typo in releasenotes (phunt)
  195. ZOOKEEPER-145. write detailed release notes for users migrating from 2.x
  196. to 3.0 (phunt)
  197. ZOOKEEPER-23. Auto reset of watches on reconnect (breed via phunt)
  198. ZOOKEEPER-191. forrest docs for upgrade. (mahadev via phunt)
  199. ZOOKEEPER-201. validate magic number when reading snapshot and transaction
  200. logs (mahadev via phunt)
  201. ZOOKEEPER-200. the magic number for snapshot and log must be different
  202. (currently same) (phunt)
  203. ZOOKEEPER-199. fix log messages in persistence code (mahadev via phunt)
  204. ZOOKEEPER-197. create checksums for snapshots (mahadev via phunt)
  205. ZOOKEEPER-198. apache license header missing from FollowerSyncRequest.java
  206. (phunt)
  207. ZOOKEEPER-5. Upgrade Feature in Zookeeper server. (mahadev via phunt)
  208. ZOOKEEPER-194. Fix terminology in zookeeperAdmin.xml
  209. (Flavio Paiva Junqueira)
  210. ZOOKEEPER-151. Document change to server configuration
  211. (Flavio Paiva Junqueira)
  212. ZOOKEEPER-193. update java example doc to compile with latest zookeeper
  213. (phunt)
  214. ZOOKEEPER-187. CreateMode api docs missing (phunt)
  215. ZOOKEEPER-186. add new "releasenotes.xml" to forrest documentation
  216. (phunt)
  217. ZOOKEEPER-190. Reorg links to docs and navs to docs into related sections
  218. (robbie via phunt)
  219. ZOOKEEPER-189. forrest build not validated xml of input documents
  220. (robbie via phunt)
  221. ZOOKEEPER-188. Check that election port is present for all servers
  222. (Flavio Paiva Junqueira via phunt)
  223. ZOOKEEPER-185. Improved version of FLETest (Flavio Paiva Junqueira)
  224. ZOOKEEPER-184. tests: An explicit include derective is needed for the usage
  225. of memcpy(), memset(), strlen(), strdup() and free() functions
  226. (Maxim P. Dementiev via phunt)
  227. ZOOKEEPER-183. Array subscript is above array bounds in od_completion(),
  228. src/cli.c. (Maxim P. Dementiev via phunt)
  229. ZOOKEEPER-182. zookeeper_init accepts empty host-port string and returns
  230. valid pointer to zhandle_t. (Maxim P. Dementiev via phunt)
  231. ZOOKEEPER-17. zookeeper_init doc needs clarification (phunt)
  232. ZOOKEEPER-181. Some Source Forge Documents did not get moved over:
  233. javaExample, zookeeperTutorial, zookeeperInternals (robbie via phunt)
  234. ZOOKEEPER-180. Placeholder sections needed in document for new topics that
  235. the umbrella jira discusses (robbie via phunt)
  236. ZOOKEEPER-179. Programmer's Guide "Basic Operations" section is missing
  237. content (robbie via phunt)
  238. ZOOKEEPER-178. FLE test. (Flavio Paiva Junqueira)
  239. ZOOKEEPER-159. Cover two corner cases of leader election
  240. (Flavio Paiva Junqueira via phunt)
  241. ZOOKEEPER-156. update programmer guide with acl details from old wiki page
  242. (phunt)
  243. ZOOKEEPER-154. reliability graph diagram in overview doc needs context
  244. (phunt)
  245. ZOOKEEPER-157. Peer can't find existing leader (Flavio Paiva Junqueira)
  246. ZOOKEEPER-155. improve "the zookeeper project" section of overview doc
  247. (phunt)
  248. ZOOKEEPER-140. Deadlock in QuorumCnxManager (Flavio Paiva Junqueira)
  249. ZOOKEEPER-147. This is version of the documents with most of the [tbd...]
  250. scrubbed out (robbie via phunt)
  251. ZOOKEEPER-150. zookeeper build broken (mahadev via phunt)
  252. ZOOKEEPER-136. sync causes hang in all followers of quorum. (breed)
  253. ZOOKEEPER-134. findbugs cleanup (phunt)
  254. ZOOKEEPER-133. hudson tests failing intermittently (phunt)
  255. ZOOKEEPER-144. add tostring support for watcher event, and enums for event
  256. type/state (Jakob Homan via phunt)
  257. ZOOKEEPER-21. Improve zk ctor/watcher (state transition) docs (phunt)
  258. ZOOKEEPER-142. Provide Javadoc as to the maximum size of the data byte
  259. array that may be stored within a znode (Jakob Homan via phunt)
  260. ZOOKEEPER-93. Create Documentation for Zookeeper (phunt)
  261. ZOOKEEPER-117. threading issues in Leader election (fpj via breed)
  262. ZOOKEEPER-137. client watcher objects can lose events (phunt via breed)
  263. ZOOKEEPER-131. Old leader election can elect a dead leader over and over
  264. again (breed via mahadev)
  265. ZOOKEEPER-130. update build.xml to support apache release process
  266. (phunt via mahadev)
  267. ZOOKEEPER-118. findbugs flagged switch statement in
  268. followerrequestprocessor.run() (Flavio Paiva Junqueira via phunt)
  269. ZOOKEEPER-115. Potential NPE in QuorumCnxManager
  270. (Flavio Paiva Junqueira)
  271. ZOOKEEPER-114. cleanup ugly event messages in zookeeper client
  272. (Jakob Homan)
  273. ZOOKEEPER-112. src/java/main ZooKeeper.java has test code embedded into it.
  274. (phunt)
  275. ZOOKEEPER-39. Use Watcher objects rather than boolean on read operations.
  276. (Andrew Kornev)
  277. ZOOKEEPER-97. supports optional output directory in code generator. (Hiram
  278. Chirino via phunt)
  279. ZOOKEEPER-101. Integrate ZooKeeper with "violations" feature on hudson
  280. (phunt)
  281. ZOOKEEPER-105. Catch Zookeeper exceptions and print on the stderr.
  282. (Anthony Urso via Mahadev)
  283. ZOOKEEPER-42. Change Leader Election to fast tcp. (Flavio Paiva Junqueira
  284. via phunt)
  285. ZOOKEEPER-48. auth_id now handled correctly when no auth ids present
  286. (Benjamin Reed via phunt)
  287. ZOOKEEPER-44. Create sequence flag children with prefixes of 0's so that
  288. they can be lexicographically sorted. (Jakob Homan via mahadev)
  289. ZOOKEEPER-108. Fix sync operation reordering on a Quorum.
  290. (Flavio Paiva Junqueira via Mahadev)
  291. ZOOKEEPER-25. Fuse module for Zookeeper. (Swee Lim, Bart, Patrick Hunt and
  292. Andrew Kornev via Mahadev)
  293. ZOOKEEPER-58. Race condition on ClientCnxn.java (breed)
  294. ZOOKEEPER-56. Add clover support to build.xml. (Patrick Hunt via mahadev)
  295. ZOOKEEPER-75. register the ZooKeeper mailing lists with nabble.com (phunt)
  296. ZOOKEEPER-54. remove sleeps in the tests. (phunt)
  297. ZOOKEEPER-55. build.xml failes to retrieve a release number from SVN and
  298. the ant target "dist" fails (Andrew Kornev)
  299. ZOOKEEPER-89. invoke WhenOwnerListener.whenNotOwner() when the ZK
  300. connection fails (james strachan)
  301. ZOOKEEPER-90. invoke WhenOwnerListener.whenNotOwner() when the ZK
  302. session expires and the znode is the leader (james strachan)
  303. ZOOKEEPER-82. Make the ZooKeeperServer more DI friendly. (Hiram Chirino via
  304. mahadev)
  305. ZOOKEEPER-110. Build script relies on svnant, which is not compatible
  306. with subversion 1.5 working copies (Jakob Homan)
  307. ZOOKEEPER-111. Significant cleanup of existing tests. (Patrick Hunt via
  308. mahadev)
  309. ZOOKEEPER-122. Fix NPE in jute's Utils.toCSVString. (Anthony Urso via
  310. mahadev)
  311. ZOOKEEPER-123. Fix the wrong class is specified for the logger. (Jakob Homan
  312. via mahadev)
  313. ZOOKEEPER-2. Fix synchronization issues in QuorumPeer and FastLeader
  314. election. (Flavio Paiva Junqueira via mahadev)
  315. ZOOKEEPER-125. Remove unwanted class declaration in FastLeaderElection.
  316. (Flavio Paiva Junqueira via mahadev)
  317. ZOOKEEPER-61. Address (remove) use of sleep(#) in client/server test cases.
  318. (phunt)
  319. ZOOKEEPER-75. cleanup the library directory (phunt)
  320. ZOOKEEPER-109. cleanup of NPE and Resource issue nits found by static
  321. analysis (phunt)
  322. ZOOKEEPER-76. Commit 677109 removed the cobertura library, but not the
  323. build targets. (phunt)
  324. ZOOKEEPER-63. Race condition in client close() operation. (phunt via breed)
  325. ZOOKEEPER-70. Add skeleton forrest doc structure for ZooKeeper (phunt)
  326. ZOOKEEPER-79. Document jacob's leader election on the wiki recipes page
  327. (Flavio Junqueira)
  328. ZOOKEEPER-73. Move ZK wiki from SourceForge to Apache (phunt)
  329. ZOOKEEPER-72. Initial creation/setup of ZooKeeper ASF site. (phunt)
  330. ZOOKEEPER-71. Determine what to do re ZooKeeper Changelog(s) (mahadev)
  331. ZOOKEEPER-68. parseACLs in ZooKeeper.java fails to parse elements of ACL,
  332. should be lastIndexOf rather than IndexOf (mahadev)
  333. ZOOKEEPER-130. update build.xml to support apache release process.
  334. (phunt via mahadev)
  335. ZOOKEEPER-131. Fix Old leader election can elect a dead leader over and over
  336. again. (breed via mahadev)
  337. ZOOKEEPER-137. client watcher objects can lose events (Patrick Hunt via breed)
  338. ZOOKEEPER-117. threading issues in Leader election (Flavio Junqueira and
  339. Patrick Hunt via breed)
  340. ZOOKEEPER-128. test coverage on async client operations needs to be improved
  341. (phunt)
  342. ZOOKEEPER-127. Use of non-standard election ports in config breaks services
  343. (Mark Harwood and Flavio Junqueira via breed)
  344. ZOOKEEPER-53. tests failing on solaris. (phunt)
  345. ZOOKEEPER-172. FLE Test (Flavio Junqueira via breed)
  346. ZOOKEEPER-41. Sample startup script (mahadev)
  347. ZOOKEEPER-33. Better ACL management (Mahadev Konar)
  348. ZOOKEEPER-49. SetACL does not work (breed)
  349. ZOOKEEPER-20. Child watches are not triggered when the node is deleted
  350. (phunt)
  351. ZOOKEEPER-15. handle failure better in build.xml:test (phunt)
  352. ZOOKEEPER-11. ArrayList is used instead of List (phunt)
  353. ZOOKEEPER-45. Restructure the SVN repository after initial import (phunt)
  354. ZOOKEEPER-1. Initial ZooKeeper code contribution from Yahoo! (phunt)