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