Tags: ingenthr/java-memcached-client
Tags
Release of 2.7 Changes since the 2.6 series: The 2.7 series gains significant new capabilities when using binary protocol with Membase or forthcoming updates to memcached. Starting with the 2.7 release, it is now possible to instantiate a MemcachedClient from the REST interface supported by Membase. What this means is that if you have one or more buckets in Membase, you can create MemcachedClient objects to work with the buckets. Furthermore, if the cluster topology changes (i.e. a node is added or removed), the client will automatically adjust to the new topology. This updated client also has support for other new Membase operations, some of which will likely be in memcached as well in a future release: touch - extend the expiration for a given item get and touch (a.k.a. gat) - get and touch an item getl - get and lock an item, with a lock expiration time See http://www.couchbase.org/documentation for further details. Many other minor changes were introduced in support of this work, like handling temporary failures. Notably, this affects testing in that you now need a Membase server running locally with a specific username and password. This is a limitation planned for removal in future releases. Some of these changes affected interfaces, which is why the version number has been raised to 2.7 even though 2.6 was just recently released. To support this new functionality, there are a few new runtime dependencies: netty 3.1.5 GA jettison 1.1 Apache commons-codec 1.4 These are only required if you are using the new REST interface and topology changes from Membase. The majority of contributions to this release were funded by Couchbase, Inc. Thanks to the contributors: Alexander Sokolovsky (9): Integrated jvbucket Added vbucket configuration parser from JSON. Added bucket monitor with response handler. Add a configuration provider for bucket updates. Added VbucketNodeLocator, keyed operation handling. Allow MemcachedClient and connections to be reconfigurable. Bugfixing of NOT_MY_VBUCKET handling Bugfixing not_my_vbucket occurs on optimized set Unit test and javadoc additions. Matt Ingenthron (15): Buildfile changes to support Maven 2 artifact upload. If it is membase, do not test some things. Set the status when receiving ERR_NOT_MY_VBUCKET. Add both hostnames and IPs to the nodes map. Assert the node must exist when finding primary. Added check for moxi when testing. Refactor: not a collection of vbuckets, more of a configuration. Add a ConfigType via an enum. Allow config to handle cache as well. Change client ctor to detect vbucket usage from server. Extracted HTTP auth header to common place. Remove standard Authenticator and replace with simple auth header. Added logging for manipulation of nodesMap in VBucketLocator. Change ConfigType enum for clarity. Change a Bucket instance variable to final. Mike Wiederhold (5): Added TEMP_FAIL handling to set operations Added touch operation Added getl operation Added Get And Touch Command Fixed .classpath file to include all dependencies Bugs fixed/closed: http://code.google.com/p/spymemcached/issues/detail?id=153 http://code.google.com/p/spymemcached/issues/detail?id=172 http://code.google.com/p/spymemcached/issues/detail?id=165 With others which can be listed here: http://code.google.com/p/spymemcached/issues/list
Prerelease of 2.6
Changes since the 2.5 series:
The major change, and the reason for the version bump, is that timeout
handling has been improved. Previously, timed out operations may have
actually been written to the network even after they'd timed out. The
change required some small API changes (generally forward compatible
so minor version bump only) and adds a new operation state of timedout.
Other changes include performance enhancements, transcoder enahncements
and improvements in the continuious timeout counter to be per
connection rather than for the entire MemcachedClient.
Contributors:
10 Matt Ingenthron
9 Blair Zajac
3 Boris Partensky
3 Dustin Sallings
1 Andrey Kartashov
1 ddlatham
Prerelease of 2.5
Changes since the 2.4 series:
The main new feature of the 2.5 release is support for SASL auth
to go along with the same feature in the memcached 1.4.3 and later
servers.
There is also a new feature which can be used in conjunction with the
failure cancel mode to close all connections to memcached servers if
there are timeouts against a server. This helps to recover from
situations where a memcached server in the list may hard fail.
The reason for rc3, and the significant changes over rc2, is that
a number of issues were found where operations could be sent without
allowing SASL to complete.
Contributors:
2 Ahn Seong Hwa
3 Blair Zajac
25 Dustin Sallings
2 Kevin Lafferty
1 Kristian Eide
11 Matt Ingenthron
WIP: A complete auth fix, but planned for rebasing. This commit enhances the MemcachedNode interface, creating nodes which know if they're supposed to auth or not. Then there is special handling with the inputQueue and addOperation based on authentication.
Prerelease of 2.5
Changes since the 2.4 series:
The main new feature of the 2.5 release is support for SASL auth
to go along with the same feature in the memcached 1.4.3 and later
servers.
There is also a new feature which can be used in conjunction with the
failure cancel mode to close all connections to memcached servers if
there are timeouts against a server. This helps to recover from
situations where a memcached server in the list may hard fail.
Contributors:
7 Dustin Sallings
5 Matt Ingenthron
2 Ahn Seong Hwa
1 Blair Zajac
1 Kristian Eide
Release 2.4.2
Changes since 2.4.1:
Dustin Sallings (4):
StorageListener should be public.
Removed a debugging stdout thing.
Handle operations that are writing and reading at the same time.
Allow MemcachedClient and AsciiOperationFactory extensibility.
Kevin Lafferty (2):
MemcachedConnection constructor should catch SocketException
Support byte arrays in WhalinV1Transcoder.
Matt Ingenthron (1):
Some javadoc cleanup in MemcachedClient examples.
Bugs fixed:
http://code.google.com/p/spymemcached/issues/detail?id=98
http://code.google.com/p/spymemcached/issues/detail?id=68
http://code.google.com/p/spymemcached/issues/detail?id=83
http://code.google.com/p/spymemcached/issues/detail?id=74
http://code.google.com/p/spymemcached/issues/detail?id=95
http://code.google.com/p/spymemcached/issues/detail?id=97
http://code.google.com/p/spymemcached/issues/detail?id=94
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
PreviousNext