1.1.11/1.0.12 - xxxxxxxxxxxx
============================
* MAJOR BUG FIX!!!! Many of the Curator recipes rely on the internal class LockInternals. It has
a bug that exhibits when the ZooKeeper cluster is unstable. There is an edge case that causes
LockInternals to leak a node in the lock path that it is managing. This results in a deadlock. The
leak occurs when retries are exhausted. NOTE: TestLockCleanlinessWithFaults now tests for this
condition.

* Added some missing combinations in the backgrounding API

* Added QueueSharder utility. Due to limitations in ZooKeeper's transport layer, a single queue
will break if it has more than 10K-ish items in it. This class provides a facade over multiple
distributed queues. It monitors the queues and if any one of them goes over a threshold, a new
queue is added. Puts are distributed amongst the queues.

1.1.10/1.0.11 - May 17, 2012
============================
* Generalized the ProtectedEphemeralSequential so that it works with any create mode.
withProtectedEphemeralSequential() is deprecated in favor of the new method withProtection().

* Update all uses of Preconditions to make sure they print a reasonable diagnostic message.

* Added a new wrapped Watcher type that can throw exceptions as a convenience. The various
usingWatcher() methods now can take CuratorWatcher instances.

* InterProcessSemaphore and LeaderSelector weren't respecting the default bytes feature.

* Make the default data for nodes be the local IP address. This helps in debugging and enables
the deadlock analysis in Exhibitor.

* New recipe added: DistributedDelayQueue

1.1.9/1.0.10 - May 10, 2012
===========================
* Based on suggestion in Issue 67: Added new concept of UriSpec to the ServiceInstance in the
Service Discovery Curator extension.

* User "Pierre-Luc Bertrand" pointed out a potential race condition that would cause a SysConnected
to get sent before an Expired. So, now I push the event to the parent watcher before resetting
the connection in ConnectionState.process(WatchedEvent)

* New Feature: SessionFailRetryLoop. Huge thanks to Pierre-Luc Bertrand for his work on this.
SessionFailRetryLoop is a special type of retry loop that causes all Curator methods in a thread to
fail when a session failure is detected. This enables sets of Curator operations that must be tied
to a single ZooKeeper session. See Tech Note 3 for details: https://github.com/Netflix/curator/wiki/Tech-Note-3

* Several users have expressed dissatisfaction with the LeaderSelector implementation - requiring a
thread, etc. So, LeaderLatch has been added which behaves a lot like a CountDownLatch but for leader
selection.

1.1.8/1.0.9 - April 17, 2012
============================
* Added methods to compress data via create() and setData() and to decompress data via getData(). The
compression is GZIP by default. You can change this via the CuratorFrameworkFactory by specifying
a CompressionProvider.

* Added ZookeeperFactory to the client as a testing aid.

* Added ACLProvider to make it easier to use ACLs and recipes. It can be set via the
CuratorFrameworkFactory builder.

* Several of the recipes were creating new watcher objects each time they were needed when the watcher(s)
can be created once in the constructor.

* Issue 62: DistributedQueue wasn't handling getting interrupted very well. It was logging an error.

* Issue 64: wasn't handling SASL events. Any non-SysConnected event was being treated as a disconnection.

* Issue 65: Accepted a pull request that fixes a bug in RetryUntilElapsed.

* Issue 66: Bad log string - needed String.format()

1.1.7/1.0.8 - April 6, 2012
===========================
* Accepted a change so that testng is testCompile in Gradle

* Rewrote TestingServer and TestingCluster based on work by Jeremie BORDIER (ahfeel)

* Rewrote the log4j property files

* Moved to ZK 3.4.3

* More work on the Exhibitor integration

1.1.5/1.0.6 - March 23, 2012
============================
* Moved to Gradle as the build system.

* Added SimpleDistributedQueue, a drop-in replacement for the DistributedQueue that comes with the
ZK distribution.

* IMPORTANT CHANGE TO LeaderSelector. Previous versions of Curator overloaded the start() method
to allow re-queueing. THIS IS NO LONGER SUPPORTED. Instead, there is a new method, requeue(), that
does this. Calling start() more than once will now throw an exception.

* LeaderSelector now supports auto re-queueing. In previous versions, it wasn't trivial to requeue
the instance. Now, make a call to autoRequeue() to put the instance in a mode where it will requeue
itself when the leader selector listener returns.

* The mechanism that calls any kind of Curator listener wasn't protected against exceptions. Thus,
an exception in a listener could break the listener event thread.

* deleteDirectoryContents() no longer checks for sym links. This was a major issue in the Guava
version and possibly one of the reasons they removed the method altogether.

1.1.4/1.0.5 - March 12, 2012
============================
* Introduced a parent interface for Queues so that they can have some common methods

* Added new Recipe: DistributedIdQueue - a version of DistributedQueue that allows IDs to be
associated with queue items. Items can then be removed from the queue if needed.

* Curator can now be configured to poll a cluster of Exhibitor (https://github.com/Netflix/exhibitor)
instances to get the connection string to use with the ZooKeeper client. Should the connection
string change, any new connections will use the new connection string.

1.1.3/1.0.4 - March 7, 2012
===========================
* Issue 27: This bug exposed major problems with the PathChildrenCache. I ended up completely
rewriting it. The original version was very inefficient and prone to herding. This new version
is as efficient as possible and adds some nice new features. The major new feature is that when
calling start(), you can have the cache load an initial working set of data.

* Issue 31: It turns out an instance of InterProcessMutex could not be shared in multiple threads. My
assumption was that users would create a new InterProcessMutex per thread. But, this restriction is
arbitrary. For comparison, the JDK Lock doesn't have this requirement. I've fixed this however it
was a significant change internally. I'm counting on my tests to prove correctness.

* EnsurePath wasn't doing its work in a RetryLoop.

* Added a new class to the Test module, Timing, that is used to better coordinate timings in tests

* LockInternals had a retry loop for all failures when it was only needed if the session expired
and the lock node was lost. So, I refined the code to handle this specific case.

* Issue 34: PathChildrenCache should ensure the path

* Moved to Guava 11.x

* Lots of work on the Gradle build. NOTE: Gradle will soon become the build system for Curator

1.1.2/1.0.3 - Feb. 8, 2012
==========================
* Added listener to Queues to listen for put completion

* Issue 24: If InterProcesMutex.release() failed to delete the node (due to connection errors, etc.)
the instance was left in an inconsistent state that would cause a future call to acquire() to
succeed without actually creating the lock. A new feature (see next bullet) was added to solve this
problem: guaranteed deletes. The various lock-based recipes now use this feature.

* New feature: guaranteed deletes. The delete builder now has a method that will record failed node
deletions and attempt to delete them in the background until successful. NOTE: you will still get
an exception when the deletion fails. But, you can be assured that as long as the CuratorFramework
instance is open attempts will be made to delete the node:
    client.delete().guaranteed() ...

1.1.1/1.0.2 - Jan. 21, 2012
===========================
* Issue 22: Make ServiceCache close itself down properly.

* Issue 21: Move TestNG to the top-level pom and define its scope as test

* Issue 17: ConnectionStateManager should use the builder's thread factory if present

1.1.0 - Jan. 5, 2012
=====================
* 1.1.x marks a separate branch of Curator:
    - 1.0.x will stay compatible with ZooKeeper 3.3.x
    - 1.1.x+ will require ZooKeeper 3.4.x+

* Added support for ZooKeeper 3.4's Transactions:
    - CuratorFramework has a new method: inTransaction() that starts a
      transaction builder
    - See TestTransactions for examples

1.0.1 - Jan. 4, 2012
=====================
* Updated and tested against ZooKeeper 3.4.2

1.0.0 - Dec. 31, 2011
=====================
* Added a REST server for Service Discovery
* Switched to slf4j for logging
* Moved to 1.0 version
* Curator is now feature complete

0.6.4 - Dec. 7, 2011
=====================
* Added Barrier

* Added Double Barrier

* Added Read/Write lock

* Added revocation to InterProcessMutex

* Fixed (hopefully) intermittent failures with testRetry()

* Updates/enhancements to Discovery based on suggestions from Eishay Smith

0.6.3 - Nov. 30, 2011
=====================
* Added Service Discovery

0.6.1 - Nov. 18, 2011
=====================
* Added new methods to LeaderSelector to identify/get all Participants

* Moved to ZooKeeper 3.3.3

* Made the TestingCluster not throw an assertion error due to internal JMX registrations
in ZK. This is done with Javaassist ugliness.

* Refactored listeners in Curator to a common methodology

* Major changes to error handling. Adding a ConnectionStateManager that allows users to
listen for connection changes. Connection loss is first treated as a recoverable Suspension.
If the connection is not re-established, the state changes to connection loss. Any recipes
that are affected by this have been updated.

* PathChildrenCache now handles connection state changes much better.

* All Curator created threads now have a meaningful name.

0.5.2 - Nov. 14, 2011
=====================
* Jérémie Bordier posted on the ZK mailing list about a split brain issue with the Leader Selector.
If the Leader is connected to a server that suffers a network partition, it needs to get notified
that it has lost leadership. Curator handled this somewhat but only if the client application
executed periodic ZooKeeper operations. I've enhanced the CuratorFramework implementation to check
for disconnection and executed a background sync (with retries). This will cause any listener's
unhandledError() method to get called when there is a network partition.

* New utility: TestingCluster. Allows for testing with an in-memory ZK ensemble.

* Reworked distributed atomic implementations. I was unhappy with the complexity of the previous
one. Now, there's a simpler master implementation DistributedAtomicValue that is the basis for the
others. Adding new versions should be simpler as well.

0.5.1 - Nov. 12, 2011
=====================
* Another pass at fixing the semaphore. Went back to the model of the count being merely a
convention. Added a new recipe for a SharedCount that can be used in place of the count convention
with the semaphore. This is the best of both worlds. The semaphore code is a lot simpler and will
perform better. Thanks to Monal Daxini for the idea.
