This repository has been archived by the owner on Aug 2, 2019. It is now read-only.
forked from Netflix/curator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES.txt
310 lines (221 loc) · 14.1 KB
/
CHANGES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
1.1.15/1.0.16 - July 14, 2012
=============================
* Added ChildReaper. This builds on the newly added Reaper. This utility monitors a single node
and reaps empty children of that node.
* Issue 107: The namespace wrapper was corrupting the path if the EnsurePath handler had an error.
The best thing to do is let the code continue.
* Issue 109: Make duplicate close() calls in CuratorFrameworkImpl a NOP instead of an error.
* A more complete solution for background build-ups. The previous implementation did the retry sleep
in the background process which ends up blocking ZooKeeper. During connection problems, this would
cause ZooKeeper packets/watchers to back up. The new implementation uses a DelayQueue to simulate a
sleep in the background. NOTE: this caused a change to the RetryPolicy APIs.
1.1.14/1.0.15 - July 6, 2012
============================
* Merge #100 from bbeck: Added BoundedExponentialBackoffRetry.
* Merge #102 from artemip: Added REAP_UNTIL_GONE mode to Reaper; Remove items from activePaths once
they are deletes; Tests
* Issue 99: The Double Barrier should allow more than the max to enter the barrier. I don't see any
harm in this.
* Issue 103: Important change/fix for ExhibitorEnsembleProvider: the previous implementation wasn't
handling outages very well. The connectionString could get stuck to an old value if the list of
Exhibitors all went down and couldn't be contacted. Now, a backup provider is required and the backup
is used to update the list of Exhibitors should there be connection problems.
* IMPORTANT NOTE: The 1.0.x branch of Curator is now end of life. There will be a few more releases
but please migrate to the 1.1.x branch.
1.1.13/1.0.14 - June 25, 2012
=============================
* New queue features: a) bounded queues: use setMaxItems() in the builder to set an (approx) upper
bound on the queue size; b) the builder now has an option to turn off background puts; c) queues now
default to flushing remaining puts when closed - this can be controlled in the builder via
finalFlushTime().
* Issue 82: Generalized (and deprecated) nonNamespaceView() by adding the usingNamespace() method
to allow getting a facade of the client that uses a specified namespace.
* createParentsIfNeeded() should now perform better. Instead of "pre" checking, it now only does the
check if KeeperException.NoNodeException is thrown. LockInternals now uses this method and, so, should
perform a bit better.
* Added a new utility: Reaper. This can be used to clean up parent lock nodes so that they don't
stay around as garbage. See the Utilities wiki for details: https://github.com/Netflix/curator/wiki/Utilities
* Unit tests should be a lot less noisy. A system property now turns off most internal error logging.
* Issue 88: Children processor should wait for all nodes to be processed before fetching more items
1.1.12/1.0.13 - June 5, 2012
============================
* Pull Request 81: Avoid invalid ipv6 localhost addresses
* Another big bug: guaranteed deletions were not working with namespaces.
1.1.11/1.0.12 - June 1, 2012
============================
* 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.
* Issue 80: Check for null data before decompressing data in getData().
* Merge from user bbeck - enhanced the testing in-memory ZK server to handle some edge cases. A nice
benefit is that it starts up faster. Thanks Brandon!
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.