Changelog for SpyMemcached
Changes from release 2.3.1 to 2.4

Version 2.4
Changes since the 2.3 series.
Bug Fixes:
* Memcached node tracking.
When a timeout occurs on an operation, the exception indicates the
server node that was the intendend recipient of the operation.
* Fixed reconnect loss on multiple simultaneous connection failures.
This is a rare occurrence, but the wrong thing would happen if two
simultaneous reconnects were requeued for any reason.
* Fixed a race condition that occurred when tearing down a connection.
There was a case where shutting down a connection would cause an NPE
to get logged due to the a race between a selector check and the
selector being shut down. Unlikely to affect a running app, but
it was still wrong.
* Handle initial connect failures.
There were rare cases where an async connect would error instantly
on the first attempt, but that connect wouldn't be retried.
* Sequence number wrapping bug.
If you sent more than 2 billion or so requests to a node, the client
would find itself in an infinite loop trying to cmoe up with a new
opaque value.
* Suboptimal back-off algorithm.
The previous back-off algorithm wouldn't create a reasonable
reconnect curve. The new one is more gradual and has a configurable
maximum ceiling.
Features:
* ConnectionFactoryBuilder
Rather than having to build a custom subclass of
DefaultConnectionFactory to override behaviors, you can now use a
ConnectionFactoryBuilder to easily assemble a ConnectionFactory as
you want it.
* Mutation-only CAS mutator
Previously, the CASMutator required an initial object to use if the
object you were attempting to mutate wasn't found. Now you can
specify this as NULL and CASMutator will *only* mutate an existing
object, but never create a new one.
* CacheLoader
CacheLoader provides a couple of convenient mechanisms for
efficiently loading bulk data. I've seen many benchmarks trying to
see how fast data can go into memcached through the client (as
opposed to normal usage), but they do things to make it
unnecessarily slow. This should satisfy both benchmarking
requirements and legitimate bulk loading requirements.
* KetamaNodeLocator is more configurable.
The node data ketama uses for building a hash is configurable now in
an effort to make consistent hashing work between java and C#.
Performance Enhancements:
* Disable Nagle Algorithm by Default
The usage of the Nagle algorithm (tcpNoDelay) is now configurable
and is configured off by default (Nagle algorithm off = tcpNoDelay
on). This should be more optimal for most configurations.
* Multi-set Escalation in the Binary Protocol
With no changes to the API, multiple sequential sets will be
escalated into a multi-set operation similar to multi-get. In a
bulk load test, this is generally around 2x faster.
* Asynchronous Transcoding Service
A transcoder can request a transcoder service (effectively a
threadpool) to asynchronously decode cache response objects both
outside of the API and outside of the caller thread.
Contributors:
40 Dustin Sallings
1 Joseph Hart
1 Lewis Zimmerman
1 Wang Nan
1 ciaranj
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
iEYEABECAAYFAkrU6jwACgkQeWDnv0PlnVTvRQCfRnwYXIM/ELclluJ2r9t/eLnm
GXsAoI/FFr8b3HN50IlPYFr/OBTtWc/8
=T4x/
-----END PGP SIGNATURE-----
Changes from release 2.3 to 2.3.1

Release 2.3.1
Changes since 2.3:
* Fixed connection observeration.
There was a condition where an exception could occur that wouldn't
be tracked properly. There's no automated test for this, but a test
was constructed to manually verify the behavior with different
server failure conditions.
* Fixed stat parsing for some stats.
Tests were added to confirm that both stat responses that don't
begin with STAT and stat values that contain spaces are handled
correctly.
* Honor transcoder sizes.
This adds a new requirement on the transcoder API to specify how
many bytes the transcoder can store or read. This both allows small
transcoders to put size constraints in that will immediately throw
an IllegalArgumentException when a result is too large to possibly
work as well as allowing users to customize their memcached
instances to allow for larger than normal objects.
Contributors:
4 Dustin Sallings
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
iEYEABECAAYFAknU3IsACgkQeWDnv0PlnVTpggCeP5eeyreCoZxG91G/BqHCuTnw
SCYAmgM37FG/pVg3VqsREqEuR4z64Vgo
=+IGM
-----END PGP SIGNATURE-----
Changes from release 2.2 to 2.3

Release 2.3.
Changes since 2.2:
* A Map interface to memcached
This is somewhat limited, of course, in that you obviously can't
list all of the mappings, but you can replace many Map
usages with a memcached backed map.
* Failure Modes
There are now three failure modes to choose from so you can decide
what you want to do in the case of a node failure. (see
FailureMode in the documentation for more details).
* Connection Observation
You can register for callbacks that will notify you when a node
goes up or down. This is useful for things like notifying
monitoring systems, or preventing a system from starting up until
a required minimum number of memcached servers come online.
* Misc bug fixes and accessibility to memcached functionality.
Contributors:
54 Dustin Sallings
2 raykrueger
1 Nick Brachet
1 Valeri Felberg
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
iEYEABECAAYFAknBXjQACgkQeWDnv0PlnVQvogCgy6VzHZgtr/Q+J/y8dLR84CYb
+nwAn2VflMFw63uAO8Tr0Q6jZm1kifAk
=+GSJ
-----END PGP SIGNATURE-----
Changes from release 2.1 to 2.2

Changes since 2.1:
* Data decoding occurs in caller threads instead of IO thread.
This should greatly improve performance by spreading out the load to
more threads. (Kristian Eide)
* MemcachedClientIF is added as an interface the client represents.
This allows a client making use of the interface to mock the memcached
interaction for better test coverage (Nelz)
* Binary protocol stat support (protocol wasn't complete until October 19).
* Async incr/decr with no default (Nick Brachet)
* Whalin V1 transcoder (Boris Partensky)
* Stats subcommands are now supported.
* Removed delete with hold support (pulled from server in 1.3).
* Miscellaneous bug fixes.
Contributors:
22 Dustin Sallings
2 Boris Partensky
2 Kristian Eide
2 Nelz
2 Nick Brachet
1 Robey Pointer
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
iEYEABECAAYFAkkJR8sACgkQeWDnv0PlnVR6tgCfZIwI3cZRRUsrR8ECQpO/rwYU
pCYAn2BKDsOJw0q/8MzvUo/PqIRn7LkD
=YTZN
-----END PGP SIGNATURE-----
Changes from release 2.0.2 to 2.1

2.1 release
Main features since 2.0:
* Operation timeouts for blocking operations.
* Support for append and prepend.
* Optional Whalin compatible transcoder.
* Canned connection factory for Ketama compatible consistent hashing.
* More tweakability with respect to operation queue sizes.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
iEYEABECAAYFAkg+K0UACgkQeWDnv0PlnVRBTgCcCCAa7/XJej8fbDJfcXJ5VijY
twIAn3ujjpt1bdVlJUhmyb847vIzEfOk
=t9ek
-----END PGP SIGNATURE-----
Changes from release 2.0.1 to 2.0.2

Binary protocol updates.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
iEYEABECAAYFAkgYKl0ACgkQeWDnv0PlnVR+8QCfQfdAZUWrvys6dk4rAyZmsbqM
WxwAn2VcyPEjp8A4uh0vOZR1SkoJj+nx
=wEoe
-----END PGP SIGNATURE-----
Changes from release 2.0 to 2.0.1

Some minor post-2.0 fixes.
* Binary protocol changes re alignment (as released in memcached 1.3.0)
* More input validation when constructing a client.
* Transcoder flag consistency.
* More tests
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
iEYEABECAAYFAkfx0PMACgkQeWDnv0PlnVTBZwCgzG1X1H6gzLE9BFS7XQkNSFqy
g2UAn1dtsFf5fDuDplULfIWSBY2Rsfuu
=Ycwi
-----END PGP SIGNATURE-----
Changes from release 1.4 to 2.0

2.0 has been a long time coming.
The initial reason for it to exist was protocol abstraction (specifically to
implement the binary protocol). The slowness of the binary protocol release
has kept this dangling for quite a while.
Although there still isn't a released binary server, I want to get this release
out because there are a lot of other good things that have happened since:
* CAS
* Hash implementations and tests
* node location algorithms (e.g. ketama consistent hashing)
* Lots of fixes.
There are still things to do, but much of what people have been asking for can
be found within. this release and all of the bugs that have been reported
to-date have been fixed.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
iEYEABECAAYFAkfTlSMACgkQeWDnv0PlnVRUWACgnmNlRgwW8vd4/+LD5TvpYTcT
FnAAn1PeBUmqOr0eCpIVppsU14R1pbRm
=2k6j
-----END PGP SIGNATURE-----
Changes from release 1.3.1 to 1.4

release 1.4
Changes from release 1.3 to 1.3.1

release 1.3.1
Changes from release 1.2 to 1.3

release 1.3
Changes from release 1.1 to 1.2

release 1.2
Changes from release 1.0.44 to 1.1

release 1.1
Changes from release 1.0.43 to 1.0.44

release 1.0.44
Changes from release 1.0.42 to 1.0.43

release 1.0.43
Changes from release 1.0.41 to 1.0.42

release 1.0.42
Changes from release 1.0.40 to 1.0.41

release 1.0.41
Changes from release 1.0.39 to 1.0.40

release 1.0.40
Changes from release 1.0.38 to 1.0.39

release 1.0.39
Changes from release 1.0.37 to 1.0.38

release 1.0.38
Changes from release 1.0.36 to 1.0.37

release 1.0.37
Changes from release 1.0.34 to 1.0.36

release 1.0.36
Release 1.0.34

release 1.0.34