Changes since the 2.5 series:
The main change in 2.6 is logic with respect to timeout handling.
Timeout default is now 2500ms, rather than the old default of
1000ms. The reason for this change is that a single network
retransmit could cause a longer than 1000ms wait, causing an
exception in the client application.
Additionally, some changes were integrated that help the client to
recover faster when a network connection problem does occur. These
changes required interface changes, which is why the version has
been bumped to 2.6.
This change also allows client code to be able to tell if an
operation has timed out after being sent over the network or if
it has timed out before even being written to the network.
See issue 136 for more discussions on this topic.
Another feature relating to timeouts is that the continuous
timeout feature introduced in 2.5 has been moved to the connection
level, rather than for an entire client. The default is that after
1000 timeout operations, a connection will be dropped and
reestablished if possible. This addresses situations where a server
may fail, but the connection is not reset.
There are also performance improvements and new transcoder abilities
with asyncGetBulk now included.
One other significant bug fixed in this release was a problem with
finding an active node when there is a failed node and the
KetamaNodeLocator is in use. With only two nodes, the previous
implementation had a 25% chance of not finding a working node
and failing with a timeout. This has been changed such that now
there is a less than 1% chance it will not find a working node.
It should be noted that spy's algorithm here may be different
than libketama. This is tracked under issue 117. This is not a
new change however, and it's never been reported from running in
production.
Thanks much to all of the new contributors to this release! Thanks
in particular to Taso of Concur who spent much time writing tests
to isolate issue 175.
Andrey Kartashov (1):
Move continuous timeout counter to individual connections.
Blair Zajac (9):
Use a private static final byte array for "\r\n" instead of always
converting the string into a byte array.
No need to call MessageDigest#reset() on a brand new MessageDigest.
Use a faster method to get a MD5 MessageDigest instance.
Delete a duplicate unit test.
Fix compilation with JDK 1.5.
Add an iterator that returns a single element forever.
Allow per-key transcoders to be used with asyncGetBulk().
Minor performance improvement for bulk gets.
Tiny performance improvement.
Boris Partensky (3):
return partial data from timed out getBulk
plug potential file descriptor leak
support timeout based disconnects for bulk ops
Dustin Sallings (5):
Some minor fixes to make eclipse happy with the code again.
Some import cleanups.
Avoid potential NPE as reported by eclipse.
Compilation fix after spring de-generification.
Removed a bit of dead test code.
Eran Harel (1):
Spring FactoryBean support.
Luke Lappin (1):
Do not use generics with Spring Factory Bean, be 2.5 compatible.
Matt Ingenthron (19):
Changed ports in tests for non-listening to something higher.
Do not write timedout operations to the MemcachedNode.
Increased default timeout to 2500ms.
Test for timeout from operation epoch.
Test fixes after adding new timeout logic.
Fix for stats sizes test.
Recognize operation may be null at times. e.g.: flush
Add a TIMEDOUT state to ops and make callbacks correct.
Fixes to testSyncGetTimeouts.
Catch RuntimeException instead.
Changed transcoder logging to more appropriate defaults.
Warn when redistribute cannot find another node.
Fixed small log typo.
Added ability to see if op unsent but timedout.
Fixed minor comment formatting.
Fixed cancellation issue.
Separate the KetamaIterator for future dynamic configuration.
Search more with the KetamaIterator.
Increase the maximum size allowed. Issue 106.
ddlatham (1):
Support daemon mode for TranscodeService threads.
Bugs fixed/closed:
http://code.google.com/p/spymemcached/issues/detail?id=106
http://code.google.com/p/spymemcached/issues/detail?id=136
http://code.google.com/p/spymemcached/issues/detail?id=150
http://code.google.com/p/spymemcached/issues/detail?id=164
http://code.google.com/p/spymemcached/issues/detail?id=175
With others which can be listed here:
http://code.google.com/p/spymemcached/issues/list