Changelog for SpyMemcached

Changes from release 2.3.1 to 2.4

contributors
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

contributors
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

contributors
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

contributors
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

contributors
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

contributors
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

contributors
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

contributors
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

contributors
release 1.4

Changes from release 1.3 to 1.3.1

contributors
release 1.3.1

Changes from release 1.2 to 1.3

contributors
release 1.3

Changes from release 1.1 to 1.2

contributors
release 1.2

Changes from release 1.0.44 to 1.1

contributors
release 1.1

Changes from release 1.0.43 to 1.0.44

contributors
release 1.0.44

Changes from release 1.0.42 to 1.0.43

contributors
release 1.0.43

Changes from release 1.0.41 to 1.0.42

contributors
release 1.0.42

Changes from release 1.0.40 to 1.0.41

contributors
release 1.0.41

Changes from release 1.0.39 to 1.0.40

contributors
release 1.0.40

Changes from release 1.0.38 to 1.0.39

contributors
release 1.0.39

Changes from release 1.0.37 to 1.0.38

contributors
release 1.0.38

Changes from release 1.0.36 to 1.0.37

contributors
release 1.0.37

Changes from release 1.0.34 to 1.0.36

contributors
release 1.0.36

Release 1.0.34

contributors
release 1.0.34