v1.1.0 Rewrite C backend to use zookeeper_st, the async library * In order to ensure fork safety, a rewrite of the backend was necessary. It was impossible to guarantee with the mt lib that a lock would not be held by a thread when fork() was called, which opened up the possibility for corruption and other badness. This version contains a Continuation class, which allows us to present a synchronous front-end to the asynchronous backend. All features are still supported, no special action is necessary to prepare for a fork, and the post-fork procedure is the same as before: call reopen() in the child, continue on in the parent like nothing happened. v1.0.6 Only include backports if RUBY_VERSION is 1.8.x * 'backports' pollutes too much, use sparingly v1.0.5 Minor cleanup * Fix the InheritedConnectionError message * Clean up the module includes v1.0.3 Linux: Fix hang on reopen after fork * Linux users relying on fork() should upgrade to 1.0.3, as it fixes a bug in the reopen code that would cause a hang in the child. If you're running on linux, you *really* should upgrade v1.0.0 Single Zookeeper namespace * The top level Zookeeper class is now a module, the former Zookeeper class is now Zookeeper::Client * Consolidate the 6 top-level namespaces into one, Zookeeper module ZookeeperCommon -> Zookeeper::Common ZookeeperCallbacks -> Zookeeper::Callbacks ZookeeperConstants -> Zookeeper::Constants ZookeeperExceptions -> Zookeeper::Exceptions ZookeeperACLs -> Zookeeper::ACLs CZookeeper -> Zookeeper::CZookeeper * Added a 'zookeeper/compatibility' file that will define the old names and look up the new constants for users, and print a warning telling them the change has occurred and that they should update their code * Added scripts/upgrade-1.0-sed-alike.rb which will basically do a find-and-replace, changing the old names to the new names (worked on both the Zookeeper and ZK codebases). * Java and C now use different names for the base class, to avoid the possibility of error. Java is now JavaBase, C remains ZookeeperBase. * All client methods are defined in the ClientMethods module and mixed into the constructed Client class. * Fix all requires, no longer monkey with $LOAD_PATH, use require_relative * Bugfix for C client. Because we release the GIL, there's the possibilty that in the middle of a synchronous C call, ruby will have switched thread contexts and one of those threads will call close. It seems that during normal operation, this is not a problem, but during shutdown, this causes CPU to spike to 100% and a deadlock. This fix essentially wraps every call to the C layer in a mutex. There may be a slightly less heavyweight optimization in the future, but this is the safest option at the moment. v0.9.3 Event thread shutdown fix, Windows compatibility fix * Use a 'shutdown thread' to coordinate cleanup if close is called from the event thread (prevents deadlock) * Default Logger now uses $stderr instead of opening /dev/null [#16] * Gemfile/gemspec/Rakefile refactoring. v0.9.2 More efficient and simpler wrappers for GIL release * After a code review by Andrew Wason (rectalogic), use a much simpler technique for creating the arg structs and passing them to the zkrb_gvl_* functions. No malloc(), no free(), no problem. v0.9.1 see v0.8.4 notes, same patch v0.9.0 RELEASE THE KRAK..er, GIL!! * In >= 1.9.2 the ruby interpreter allows you to release the GIL when calling into native code, sounds like a good idea. This release makes use of that code by parsing the zookeeper.h header file and extracting the method signatures of all relevant zoo_* functions, then generating boilerplate that allows us to call those functions via the rb_thread_blocking_region function. 1.8.7 compatibility is maintained by stubbing out that functionality if built under 1.8.7. * 1.8.7 is deprecated! I will continue to support 1.8.7 for the near future but sometime soon, you're gonna have to upgrade. v0.8.4 fix NameError, require 'forwardable' * Really not sure why this didn't come up in tests * issue here https://github.com/slyphon/zk/issues/22 v0.8.3 fix NonLocalJump exception in event delivery thread shutdown code * hit a corner case where we're waiting for the zkc handle setup and the user decides to shutdown, but before we've had a chance to enter the delivery loop. * Cleaned up some nasty code in ZookeeperConstants * removed ZookeeperConstants#print_events and ZookeeperConstants#print_states * changed EVENT_TYPE_NAMES and EVENT_STATE_NAMES in ZookeeperConstants to use string values instead of symbols v0.8.2 fix close after a fork() * The dispatch thread will be dead in this situation, so we need to check to see if it's already dead before waiting on it to exit. v0.8.1 Java client fix, silence warnings v0.8.0 Refactor C implementaion, EventMachine client * separated CZookeeper and ZookeeperBase implementation This solves issues with reopen not working properly, makes for a much cleaner event delivery implementation. ZookeeperBase controls the lifecycle of the event dispatch thread now, rather than it being tied to CZookeeper. * added support for the 'sync' API call * Refactored zookeeper_c.c and zookeeper_lib.c More error checking in zookeeper_lib.c and restructure some things to make logic easier to follow Fix bug in method_get_next_event that made the shutdown case so complicated * Massively simplified EMClient implementation Rather than trying to hook the IO used by zookeeper_lib to notify zookeeper_c about event availabiltiy directly into EventMachine, use the same event delivery thread, but wrap the dispatch call in EM.schedule. * Improve implementation of spin-lock-esque code that waits for the connection to be established before returning. This cut the test runtime down from 1m 20s to 2s. * Java client refactoring, similar correctness changes * Change ZookeeperException base class to StandardError instead of Exception v0.4.5 Upgrade to ZooKeeper 3.3.3 v0.4.4 Fix race condition on close, possible data corruption on async get. v0.4.3 Fix a handful of memory-related bugs, fix SIGSEGV on master change, reduce latency of event handling, fix compilation on OSX. v0.4.2 Add options to Zookeeper#initialize, silence most Zookeeper logs. v0.4.1 Upgrade to ZooKeeper 3.3.2 v0.4.0. More attr-readers (StarvingMarvin) and 1.9 compatibility (tsuraan) v0.3.2. Handle close, closed connections and expired sessions a little more gracefully. v0.3.1. ACL bugfix. v0.3.0. Wickman's rewrite, breaks dependencies from myelin/emaland port. v0.2.2. Fix compatibility with stock Leopard fat-binary Ruby. v0.2.1. No more camelcase classname. v0.2. Bundle C dependencies, like memcached.gem. v0.1. First release. # vim:ft=text:ts=2:sw=2:et