Hi all, I'm pleased to announce the release of spymemcached 2.7.1 with a couple of new features and a number of bug fixes. All are recommended to upgrade.
We have a couple of new patches recently contributed as well, so we'll probably spin a 2.7.2 up soon. The master branch is under development, and will likely become the 2.8 release at some point. There is a 2.8 preview showing some features compatible with Couchbase Server, namely view access which allows for things like secondary indexes across items. This is in the Couchbase maven repo with more info over on couchbase.org. >From the tag (which also serves as release notes): Release of 2.7.1 The 2.7.1 release is a patch update, including a number of new features. It should be compatible with all 2.7 deployments, with one dependency update required if deployed as a Membase 'smart client'. There are also a number of new features in this release: operation status visibility, a built in TAP client, and new configuration options when using Membase. In the past, when an async operation completed, success or failure could be determined but the reason for a success or failure wasn't clear. Now many of these methods return an OperationFuture instead of simply a Future and have a new method called getStatus(). The OperationStatus can then offer more insight as to what happened with the operation. This release also sports a new TAP client. TAP is a method of either streaming changed items or 'dumping' all items from a Membase cluster. This allows for new ways to get information on changes occurring to, or analyze the data from a Membase cluster. Notably, this technique is used in the Hadoop Sqoop integration with Membase. You may read more about TAP here: http://docs.couchbase.org/membase-manual-1.7.1/membase-architecture.html http://docs.couchbase.org/couchbase-manual-2.0/couchbase-faq.html Another minor new feature, one can now specify a ConnectionFactory when connecting to a Membase cluster (for either memcached or Membase bucket types). This allows for more specific configuration of things like default timeout, reconnect delay, use of optimization, etc. Some notable bugs fixed in this release include: * ClassCastException (spymemcached issue 96) * Bulk operations with Membase (VbucketNodeLocator) * Made client more stable under Membase topology changes * ASCII operations now return a false operation status on failure The aforementioned dependency update is to bring Apache Commons Codec up to 1.5, owing to a bug introduced in 1.4. We had worked around that bug, but the project decided to go back to what had been implemented in commons-codec 1.3. This meant we were dependent on a very specific version of commons-codec. We've now rolled forward following the recommendations from Apache Commons Codec. This requires a dependency update. The development time experience is better in this update. Classic "buildr test" will work just as expected, but it will run only the subset of tests that are appropriate for memcached. Using some environment variables, tests can be run against Membase either locally or remotely or against a remote memcached. Examples: Run tests against a Membase instance on the localhost: buildr test SPYMC_SERVER_TYPE="membase" Run memcached IPv4 tests and try to run IPv6 tests against the specified server: buildr test SPYMC_TEST_SERVER_V4="10.2.1.58" Run a test against the specified IPv4 and IPv6 servers: buildr test SPYMC_TEST_SERVER_V4="10.2.1.58" SPYMC_TEST_SERVER_V6= "some_ipv6_addr" Summary of changes since the 2.6 series: (see the 2.7 release notes for more details) 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 The majority of contributions to this release were funded by Couchbase, Inc. Thanks to the 2.7.1 contributors: Mike Wiederhold (40): Ascii unsupported ops give error message Added unit tests for get and touch Make sure a selector isn't canceled before reading it Changed all binary command opcode values to hexadecimal. Getl no longer removes the key from binary message. Getl no longer users flags field for request messages Removed unused import from GetAndTouchOperationImpl Added unit tests for touch Add touch, get and touch, and get and lock to MemcachedClientIF Fixed broken get and touch test ASCII get operations now return a false operation status on failure Add visibility into operations (status). Add visibility into operations (key) Added all memcached error codes to spymemcached. Removed unused import from ConfigurationProviderHTTP Added serial ID's to exceptions. Fixed issue regarding connecting to a non-existent bucket Removed unused imports in VBucketCacheNodeLocatorTest Added constructor to MemcachedClient that takes a ConnectionFactory Added generic to SingleElementFiniteIterator in MemcachedClient. Added source folder for manuel tests to Eclipse config file Made SyncGetTest failures less sporadic Changed the value size of items used in LongClientTest Made operation timeout longer for QueueOverflowTest Added tap client Removed unused variables in testcases. Refactored Operations to improve correctness of vbucket aware ops Made an addOperation function private in MemcachedConnection Fixed a bug where multi-gets didn't work with vb aware constructor Added a command line parameter for specifying server type Issue 96: ClassPathException fix Excluded Non-memcached tests when testing memcached TapOperation's shouldn't be KeyedOperations. Made TapTest only run against Membase. Made EINTERNAL and ERR2BIG errors throw an exception Added the ability to specify the ip address of the testing server Fixed issue with flags not being added properly to tap messages Added README.markdown. Added ability to do tap dump Tap streams now pause every 10,000 messages. Matt Ingenthron (7): Adding a warmup state for nodes. Also check for RETRY during clone. Encode with commons codec more correctly. Ensure nodesMap updates are safe when topology changes. VBucketNodeLocator should not implement getSequence() Log warnings when retrying due to not my vbucket. Update commons-codec to 1.5 in .classpath for Eclipse. Dustin Sallings (3): Fix dumb thing compiler warning was pointing out Fixed some shadowing parameter warnings. Compiler pointed out ignored exception. :( Nelz Carpentier (1): Adding the repository needed to download netty. Paul Burnstein (1): Spymemcached Issue 134: Performance fix Vitaly Rudenya (1): All NodeLocator's can be reconfigured. Bugs fixed/closed in 2.7.1: http://code.google.com/p/spymemcached/issues/detail?id=96 http://code.google.com/p/spymemcached/issues/detail?id=134 http://code.google.com/p/spymemcached/issues/detail?id=152 http://code.google.com/p/spymemcached/issues/detail?id=171 http://code.google.com/p/spymemcached/issues/detail?id=187 Bugs fixed/closed in 2.7: 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
