commit 8fe2e33708e2a6e4620a8d7e53a17cb4e7aa2eaf
Author: amcreynolds <amcreynolds@ebay.com>
Date:   Sat Feb 25 14:50:00 2017 -0800

    SPY-195: Defer String Concat in handleEmptySelects()
    
    MemcachedConnection.handleEmptySelects() has a debug level log
    statement that doesn't correctly defer the concatentation of
    the argument until it has determined that the level is enabled.
    
    Change-Id: I3c8bb70cfaa9f47eb790f2eb150bacca2ce839b6
    Reviewed-on: http://review.couchbase.org/76567
    Reviewed-by: Michael Nitschinger <michael@nitschinger.at>
    Tested-by: Michael Nitschinger <michael@nitschinger.at>

commit e1979df8f4e585b8afac7c0bae5c0a230eb07bcf
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Nov 16 09:11:36 2016 +0100

    SPY-194: Allow to optionally bound retry queue.
    
    Motivation
    ----------
    If the retry queue might grow very large this can lead to
    uncontrollable side effects (like heap growth), since this
    queue is not accessible from the outside of spymemcached.
    
    Modifications
    -------------
    This change adds the system property "net.spy.retryQueueSize" which
    allows to optionally bound the retry queue to the given size.
    
    Note that to maximize backwards compatibility and to not introduce
    any regressions the actual queue has not been changed but rather
    the code which inserts into this queue is now checking for the
    limit.
    
    If the queue is full the operation is cancelled instead of sending
    it into the retry queue.
    
    Result
    ------
    It is now possible to bound the retry queue.
    
    Change-Id: I86452ef8dcddcf2c4acfc065fd9db94510665ac3
    Reviewed-on: http://review.couchbase.org/69938
    Tested-by: Michael Nitschinger <michael@nitschinger.at>
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>

commit e64b117849ad5e96311f6147f9a88f7f819527c2
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Mar 14 07:53:22 2017 +0100

    SPY-193: Allow to override wakeupDelay
    
    Motivation
    ----------
    As part of SPY-172, a new wakeupDelay setting has been introduced,
    but as part of a mistake it has never been used to actually set
    the wakeup time, which is still hardcoded to 1000.
    
    Modifications
    -------------
    This simple change modifies the code so it accepts the wakeupDelay
    setting, still having the default at 1000 but making it possible
    to override it through the system property.
    
    Result
    ------
    The wakeupDelay can now be configured via a system property.
    
    Change-Id: If1273cb560d49ea2c9c42b7c7b70c84fd9aeebdc
    Reviewed-on: http://review.couchbase.org/75116
    Tested-by: Michael Nitschinger <michael@nitschinger.at>
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>

commit 2b6e3bbc823aa68d7aa5b7f3bb8ece1b2c284d0e
Author: Graham Grochowski <ggrochow@gmail.com>
Date:   Thu Jan 19 22:46:32 2017 -0800

    SPY-192: Ensure connection key is valid before checking if writable.
    
    Motivation
    ----------
    It has been discovered in the wild that sometimes CancelledKeyException are
    received even if the key has been checked for validity before. It turns out
    that the validity can change between the check and the next function call.
    
    Modifications
    -------------
    The changeset makes sure to check if it is valid on both reading and
    subsequent writing, reducing the chance of race conditions and interleaved
    state changes.
    
    Result
    ------
    More stable behavior at runtime and less chance of CancelledKeyException.
    
    Change-Id: Ic0db65f9c7ccc3a7b9738aaff0e3c7e60d7f25c2
    Reviewed-on: http://review.couchbase.org/72270
    Reviewed-by: Michael Nitschinger <michael@nitschinger.at>
    Tested-by: Michael Nitschinger <michael@nitschinger.at>

commit fd7e071a418411cf11cc0ddf290aced073412b3b
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Mar 24 11:51:32 2016 +0100

    SPY-191: Don't force reconnect on E2BIG with binary protocol.
    
    Motivation
    ----------
    In the current codebase, a socket is forcefully reset when the server
    returns an E2BIG response, that is when the document is larger than the
    possible value size.
    
    Modifications
    -------------
    While this needs to be done on the ASCII protocol, doing so is not needed
    with binary protocol and can be considered a bug/leftover.
    
    The code is modified so that E2BIG just translates into a non-success response
    like any other error and the proper error code identifies the cause.
    
    The test cases have been modified for binary to reflect the change.
    
    Result
    ------
    Do not force reconnect / treat the issue as a server error on the binary
    protocol - the ASCII protocol is unaffected.
    
    Change-Id: Idf392d146d30b2e96dc198a93a3cc6598dae3fc6
    Reviewed-on: http://review.couchbase.org/61927
    Reviewed-by: Simon Baslé <simon@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>

commit 905c13c1d3453d882e80f48d18bdfecdeadc6d24
Author: Christian Esken <Christian.Esken@trivago.com>
Date:   Tue Jan 5 15:09:16 2016 +0100

    SPY-190: Remove the no-operation isInterrupted() call. Document interruption policy.
    Motivation
    ----------
    Avoid confusion. Make the interruption policy more clear.
    
    Modifications
    -------------
    Remove the no-operation isInterrupted() call.
    Document interruption policy.
    
    Result
    ------
    Better understandable concurrency code.
    
    Change-Id: Iaf63f8a246c45e9ed9ebfe9c4239043cbe9e2039
    Reviewed-on: http://review.couchbase.org/58266
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 41cf86b39b0804cdb9bdf35574b7f8afbbef7102
Author: Fabien Renaud <fabienrenaud.fr@gmail.com>
Date:   Thu May 28 19:23:28 2015 -0700

    SPY-187: Expose a few more attributes of MemcachedClient
    
    Motivation
    ----------
    Extending MemcachedClient to access some of its protected attributes is
    not always desirable as it makes harder writing mocks for unit testing.
    
    Modifications
    -------------
    MemcachedClient now exposes operationTimeout,
    mconn, tcService and executorService.
    
    Result
    ------
    One does not have to extend MemcachedClient any more to write custom
    commands.
    
    Change-Id: I81932da64d4492512dcf1a11fe1161203fa70c5e
    Reviewed-on: http://review.couchbase.org/51546
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit ce08f5069e3d5c90ea99f682bbd3517250d57ca4
Author: Philipp Fehre <philipp@fehre.co.uk>
Date:   Tue Mar 3 14:29:41 2015 +0000

    Support Libmemcached ketama weighted
    
    - Add support for alternative Ketama Node key format
    
      Libmemcached uses the format for `[hostname or ip][port unless
      default]-[repetition]` while spymemcached has been using
      `[hostname]/[ip]:[port]-[repetition]` the added `KetamaNodeKeyFormat`
      allows to choose either format while retaining the caching
      optimization.
    
    - Add support for weighted ketama
      Straight port of the weighting based on Libmemcached, configured via
      passing a map of node socketaddress to weight to the configuration.
      This code is only active if the weight is actually configured
      otherwise the old ketama code is used.
    
    - Split testLibKetamaCompatTwo into 2 pieces as the length breaks
      compiling on Eclipse and Java 8 "In java a methods can't have more than
      65535 bytes." http://stackoverflow.com/questions/12257398/how-to-fix-the-code-of-method-is-exceeding-the-65535-bytes-limit
    
    Change-Id: I0263b9afc513f9a135d5d17318b3fe6bd4593437
    Reviewed-on: http://review.couchbase.org/47624
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 53d14b34ac9e84e0d2fc6c9a6ded430146453a64
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Mar 11 07:53:45 2015 +0100

    SPY-183: Allow touch operations to be cloned.
    
    Motivation
    ----------
    In case a touch  operation needs to be rescheduled, it needs to
    be cloneable (like any other keyed operation).
    
    Modifications
    -------------
    Apply the same clone logic as with any other keyed operation. Also
    added getter methods to the operations so that the expiration time
    can be extracted on cloning.
    
    Result
    ------
    Correct behavior when a touch op needs to be cloned.
    
    Change-Id: Iad343b4dbdcd5dfd4d9ec53bf5335dcf4775f9c9
    Reviewed-on: http://review.couchbase.org/48076
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Simon Baslé <simon@couchbase.com>

commit 4bb435b7b58b78d650aad5019cd5c1569359257b
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Jan 19 10:08:28 2015 +0100

    Fix spring unit tests.
    
    Motivation
    ----------
    afterPropertiesSet() needs to be called on the factory to actually
    create the client so that it does not result in a NPE.
    
    Change-Id: I483c045451f90ff3ed01d00db7e912e7d2484b64
    Reviewed-on: http://review.couchbase.org/45554
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Simon Baslé <simon@couchbase.com>

commit 0283051a2141668e86e65fddafc14d5dcc905ee8
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Fri Jan 9 11:38:55 2015 +0100

    SPY-181: GetAndLock needs to be cloneable like any other keyed op.
    
    Motivation
    ----------
    In case a getAndLock operation needs to be rescheduled, it needs to
    be cloneable (like any other keyed operation).
    
    Modifications
    -------------
    Apply the same clone logic as with any other keyed operation. Also
    added getter methods to the operations so that the expiration time
    can be extracted on cloning.
    
    Result
    ------
    Correct behavior when a getAndLock op needs to be cloned.
    
    Change-Id: I7f4fdad62af71a42cc203b2a4b7e72f2002a286d
    Reviewed-on: http://review.couchbase.org/45129
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Simon Baslé <simon@couchbase.com>

commit f896fd5349030ca94eea1adc6a8f1dfdfcdfd1df
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Fri Jan 9 11:55:34 2015 +0100

    SPY-182: Avoid WARN logging when handling node not set.
    
    Motivation
    ----------
    The main purpose of setting a continous timeout on a node is to
    properly reconnect when the threshold is reached. Now if auth
    has not happened yet, it could be that ops do not have a handling
    node set yet.
    
    In those cases, it doesn't make any sense to increase the counter,
    so it should be ignored. This also has the side effect of not logging
    warnings to the user which have no impact for him.
    
    Modifications
    -------------
    Ignore the operation when its handling node is not set.
    
    Result
    ------
    No unnecessary warnings printed to the user.
    
    Change-Id: I3643d5e0bfc7474889279d0f8362f287624b89a3
    Reviewed-on: http://review.couchbase.org/45131
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Simon Baslé <simon@couchbase.com>

commit 79189468dcc3d26597b154dba53ff2959b8d046b
Author: Fabien Renaud <fabienrenaud.fr@gmail.com>
Date:   Sat Dec 20 18:14:17 2014 -0800

    Change MemcachedNodeROImpl and BaseGetOpImpl classes to public.
    
    Motivation
    ----------
    Implementing a custom NodeLocator requires to override the getReadonlyCopy
    method which in turn requires to use some MemcachedNode implementation.
    MemcachedNodeROImpl should be reusable outside of its package for that
    purpose. In addition, memcached being an open source project, its
    implementation can be changed or extended and commands such as GET may
    be used differently in these custom versions. The abstract BaseGetOpImpl
    should be flexible enough to be adapted to different but similar GET
    commands.
    
    Modifications
    -------------
    The MemcachedNodeROImpl class accessor changes from package-private to public.
    The BaseGetOpImpl class accessor changes from package-private to public.
    The initialization method and constructors of BaseGetOpImpl changed to
    abstract the string appended to the <GET key> command.
    
    Result
    ------
    Writing a custom NodeLocator outside of the net.spy.memcached package
    and supporting variants of GET commands is now easy.
    
    Change-Id: I49b3efc741ab4fe5780bf74ad5f99b839c9ceb7d
    Reviewed-on: http://review.couchbase.org/44565
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 95833c9927d9996d5f3e781f2441a7df16cb8479
Author: mattbertolini <viper2843@gmail.com>
Date:   Tue Dec 9 09:04:03 2014 -0500

    Update Spring FactoryBean to properly support isSingleton property
    
    Motivation
    ----------
    The current MemcachedClientFactoryBean is marked as a singleton to Spring but
    does not respect the flag. It is creating a new instance with every call to
    getObject(). According to the Spring Javadoc a FactoryBean marked with
    isSingleton true should always return the same reference. By doing this it
    will also expose an ability to safely shutdown a client instance.
    
    Modifications
    -------------
    The class was updated to implement the Spring InitializingBean and
    DesposableBean interfaces. These interfaces provide the two key lifecycle
    methods to create and shutdown the client object. The afterPropertiesSet is
    called after the FactoryBean is constructed and all of the properties have
    been set. This will create the client object and store it in a field so the
    same reference can be returned. The destroy method is called when closing the
    Spring context. It will call the client's shutdown method. I have also added a
    new property that allows a caller to specify the number of seconds to wait
    before shutting down the client. This is a well established Spring pattern
    that is used in many of their own FactoryBean implementations.
    
    Result
    ------
    A more accurate Factory bean that respects the Spring lifecycle and provides
    a safe shutdown mechanism.
    
    Change-Id: I9ae2d71ae7d3fe899bce8ec8200e215aa987400d
    Reviewed-on: http://review.couchbase.org/44144
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 8af3ebbcc2cd74deee6e28350322dbc470f5164f
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Fri Nov 7 11:27:58 2014 +0100

    SPY-179: Reconnect has wrong ceiling, leading to very long reconnect delays.
    
    Motivation
    ----------
    This is a regression which was introduced through the change in SPY-158
    (https://github.com/couchbase/spymemcached/commit/bfaec2b4f1385f20f32fd0ed0736b52ef572e340).
    
    Because the time is now converted to millis right away, but the comparison checks with the 2^n
    still converted to seconds. That way, even with a very high N it is smaller than the default of
    30k.
    
    Modifications
    -------------
    The code now correctly converts the 2^n to milliseconds before comparing it, making it a comparison
    on the same unit of time again.
    
    Result
    ------
    The ceiling is now properly respected and as a result, reconnect delays are properly capped at
    their defined maximum.
    
    Change-Id: I0c976344d0f8e09bc041d94f3544620ef4fb3117
    Reviewed-on: http://review.couchbase.org/42925
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>

commit be9e2ad99a06e4adaf6f133b4d60bff87c27f1fa
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Nov 10 08:57:45 2014 +0100

    SPY-178: KetamaNodeLocator#getReadonlyCopy uses unsafe operations.
    
    Motivation
    ----------
    Users reported java.lang.UnsupportedOperationException when using the
    KetamaNodeLocator#getReadonlyCopy() method. It turns out the error
    only shows up when the JVM is run with the -XX:+AggressiveOpts flag.
    
    Modifications
    -------------
    Changing the iterator to properly update the TreeMap while iterating
    fixes the problem.
    
    Result
    ------
    Correct behavior for KetamaNodeLocator#getReadonlyCopy(), even when
    the -XX:+AggressiveOpts flag is enabled.
    
    Change-Id: I6e7f09892687b8896c9b295a94fb473857ec212f
    Reviewed-on: http://review.couchbase.org/43040
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>

commit 953c322ad254bf6f544bac6738114176040a9c6f
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Jun 23 16:46:19 2014 +0200

    SPY-176: Enhance redistribution logic and avoid possible deadlocks.
    
    Motivation
    ----------
    There have been issues reported that redistribution of operations does
    not work as expected, especially with authentication scenarios. This
    has been tracked down and the following changes have been made:
    
    Modifications
    -------------
    
            - With the old redistribute logic, it could happen that subsequent
              ops in the retry queue got accidentally deleted. With the copy
              first, this cannot happen anymore.
            - On redistribute, if the handling node is still not set, just
              clone the operation to avoid NPEs. A op without a node set
              can happen if it is enqueued to retry because the target node
              is not yet authenticated.
            - Do not try to add operations to a node which is not yet authen
              ticated. This can lead to costly locks with redistributions since
              they are run from the IO thread. Without the change, it can happen
              that the IO thread waits for an auth latch, but is also responsible
              for telling listeners when auth has completed, therefore
              locking everything up until the auth latch wait runs out of time.
    
    Result
    ------
    Much better resilience and performance with redistributions, especially
    if authentication takes longer than expected and from scenarios where the
    operations get redistributed/moved around from within the IO thread.
    
    Change-Id: Icbc5f9e4f568ea885500e8d2baedfa989c8ef801
    Reviewed-on: http://review.couchbase.org/38669
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit ca3c8d4c1d69608bdb7b8b93c0b6a95d3361b947
Author: dominictootell <dominic.tootell@gmail.com>
Date:   Sun May 25 14:21:42 2014 +0100

    SPY-175: Reduce memory use in binary GET
    
    Change-Id: I9b90aab0b54a2ae7d2c262d499ff47482b9d6c6c
    Reviewed-on: http://review.couchbase.org/38359
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 5911705aa18e3bee813fc3f98d6087e1d43a1599
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Jun 17 09:10:20 2014 +0200

    SPY-174: Make sure MultiOperationCallback is threadsafe
    
    First, special thanks goes to @exortech for reporting and fixing the issue
    here: https://github.com/dustin/java-memcached-client/pull/9
    
    Motivation
    ----------
    Certain operations like the multi get callback rely on the multi operation
    callback which has a non-thread safe component to it.
    
    Modification
    ------------
    Make the callback atomic and thread safe.
    
    Result
    ------
    No race conditions with bulk get operation callbacks.
    
    Change-Id: I511a8e5ec6e8fe50168337a4b9bbddf2360bd365
    Reviewed-on: http://review.couchbase.org/38358
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 1afbf5685128fa2d0fc1ccd63866465efbfdd0c4
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Jun 4 17:55:43 2014 +0200

    SPY-172: Addition - test case fix.
    
    Just fixed the port.
    
    Change-Id: I82f55e8cef10c30bac785389b8d3c23d57553206
    Reviewed-on: http://review.couchbase.org/37839
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit a982d0ab35bf24935ad6246e564126a92adec0b5
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Jun 2 12:43:47 2014 +0200

    SPY-172: Wakeup the selector if idle.
    
    Motivation
    ----------
    Waking the selector up from time to time and providing implementations a
    chance to run certain checks helps to improve robustness in certain
    situations.
    
    Modifications
    -------------
    The wakeup time is configurable through a system property, but is low
    impact even if set to a smaller value. If the added queue is empty (which
    means the selector has been woken up but no op has been added) a custom
    method is called where implementations can run custom code like idle polls.
    
    Result
    ------
    Better handling in idle situations.
    
    Change-Id: I43ea722b8a4fc28be4f997674ea85f73f2c66a50
    Reviewed-on: http://review.couchbase.org/37725
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 1a926967ac2ac1eef47e1cc037ee76d1a96e9c6c
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Jun 2 11:47:20 2014 +0200

    SPY-171: More robust shutdown handling characteristics.
    
    Motivation
    ----------
    It has been reported several times that the IO thread kept lingering
    around even after a shutdown() call.
    
    Modifications
    -------------
    Since its run() method is kept alive by the "running" variable, the
    code now makes sure to always set it to false, even if an exception
    occurs during the connection shutdown process.
    
    Also, a slightly misleading IOException has been removed in favor of
    just silently moving on if shutdown is in progress.
    
    Result
    ------
    More stable and predictable shutdown behavior.
    
    Change-Id: I99f3effbbb20a78a2705ee7f3f839e9753fb2a4a
    Reviewed-on: http://review.couchbase.org/37724
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 4aae4c58e6e823f3eaba3fc1e38c2da53a95bbc3
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed May 28 11:00:39 2014 +0200

    Move superfluous log message from info to debug.
    
    Motivation
    ----------
    In every log when connecting, a message like this shows up:
    
    INFO [Memcached IO over {MemcachedConnection to ...}] (?:?) -
    Connection state changed for sun.nio.ch.SelectionKeyImpl@...
    
    This message is superfluous since it does not provide any addition
    information to the user, especially not at INFO level.
    
    Modifications
    -------------
    The message has been moved to DEBUG level so that users are not
    wondering what it means and also to streamline the log a bit.
    
    Result
    ------
    Easier log output to read and analyze for the user.
    
    Change-Id: I13ef691dd435f397dc9d5f08ff40a28202d3ddb7
    Reviewed-on: http://review.couchbase.org/37647
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit de62e2b15464f82e952bcb9d2be006075cec7f3b
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue May 27 10:59:49 2014 +0200

    SPY-170: Fix concurrency issue in StringUtils.isJSONObject()
    
    Motivation
    ----------
    A concurrency issue was reported in the StringUtils class, pointing towards
    the pattern matching of the JSON string.
    
    Modifications
    -------------
    It turned out that the matcher is not thread safe and there is a race condition
    between clearing it and then matching on it. By falling back to the thread-safe
    builder directly the race condition goes away.
    
    Result
    ------
    No concurrency issue anymore in the helper method.
    
    Change-Id: I09729af78bd241ff8dcb0869992d3ff474fb6ec1
    Reviewed-on: http://review.couchbase.org/37603
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit b72840b57fb959ca178a43067a4393374ecfca9a
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed May 28 10:03:03 2014 +0200

    SPY-134: Make sure lastReadTimestamp is concurrency safe.
    
    Motivation
    ----------
    When the last read timestamp is read from each node, there has been some
    suspicion that the (sometimes very long) reported times are flawed.
    
    Tracking it down further, it was discovered that the timestamp was potentially
    accessed by two or more threads, but not volatile.
    
    Modifications
    -------------
    This changeset makes the timstamp volatile and also uses nanoTime instead
    of currentTimeMillis for better accuracy.
    
    Result
    ------
    Since the timestamp is now thread safe, the actual value will now be shown
    to the user.
    
    Change-Id: I39e47408319f8adf3b2875a4a730232ecadeafe2
    Reviewed-on: http://review.couchbase.org/37646
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 2fa095a169bbe31bbf083901cc064bd93f3a11c1
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon May 5 10:39:00 2014 +0200

    SPY-169: Also clone observe calls on redistribute.
    
    Motivation
    ----------
    Observe calls also need to be cloned when redistributed, for example if a socket
    gets closed or the op stil waits for an auth latch.
    
    Modifications
    -------------
    The observe operation now gets cloned similar to get, gets and so on.
    
    Result
    ------
    No assert error is raised if an observe needs to be cloned.
    
    Change-Id: I6269a1d7fb756855f94caa2fe0495133fe1a83b0
    Reviewed-on: http://review.couchbase.org/36698
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit fde7a948c119fd510a41805ff376b133c400b927
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Apr 23 17:54:18 2014 +0200

    SPY-165: Do not cache the selectedKeys.
    
    Motivation
    ----------
    Caching the selected keys may cause issues if the selector is accessed by different
    threads, also the loop for the keys is not using the iterator correct.
    
    Modifications
    -------------
    Make it not cache the keys and also correctly make use of an iterator to loop through
    the keys.
    
    Result
    ------
    No stale/cached selected keys and correctly using the iterator should lead to better
    stability during failure cases.
    
    Thanks to Brad Svee (@sveesible) for suggesting the fix
    
    Change-Id: If82cdfc810c758a4196415cb709a03ebd72c3d15
    Reviewed-on: http://review.couchbase.org/36222
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 206b1980b9fadb96b53d74a676c8c9a26802902a
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Apr 24 10:11:42 2014 +0200

    SPY-166: Only readd a WRITE_QUEUED operation, not clone it in addition.
    
    Motivation
    ----------
    When a WRITE_QUEUED operation is redistributed, it needs to be readded
    but not cloned (since its still in a sendable state).
    
    Modification
    ------------
    Return after adding the operation again.
    
    Result
    ------
    The operation is readded and not cloned afterwards too.
    
    Change-Id: I79fec436aa538a8a4074e82f69b3ed186c5126b7
    Reviewed-on: http://review.couchbase.org/36258
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit df81f17302b520413d5e71713804efbf4f76bfa9
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Apr 23 16:52:12 2014 +0200

    SPY-167: Avoid deadlock on notify listeners.
    
    Motivation
    ----------
    Because of how the addListener and notifyListener works, it could be that
    one deadlocks each other because they are waiting on the same locks from
    different threads.
    
    Modifications
    -------------
    The listeners are copied before notified, moving it out of the synch block.
    
    Result
    ------
    Since notify is not synched anymore, the lock should be not happening anymore.
    
    Note that also the listeners array is set to empty which avoid notifying listeners
    more than once potentially.
    
    Thanks to @adamhonen for pointing out the fix.
    
    Change-Id: I7ebda58c2eadd62d8885e3eeac79d5a971e07979
    Reviewed-on: http://review.couchbase.org/36219
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 386a843c57e9b61629e2d07887a0bf0eab37ad43
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon May 5 08:56:50 2014 +0200

    SPY-168: isJSONObject should handle null or empty input values.
    
    Motivation
    ----------
    Before this change, the isJSONObject was suspect to NPEs and possibly also
    regex match failings on empty strings, although that does not seem to be the
    case on Java 1.7+.
    
    Modifications
    -------------
    Specific null and empty checks have been added to make the method more robust.
    
    Result
    ------
    NPEs are not raised anymore and also empty strings are checked much quicker. Test
    cases have been added to verify functionality.
    
    Side note: An exception like this was reported on empty strings, but could not be
    verified with Java 1.7 onward. It is suspected that this changeset also fixes
    the issue given the input type and code process:
    
    Original Exception: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    Stack trace:
    java.lang.String.charAt(String.java:658)
    java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3715)
    java.util.regex.Pattern$Ques.match(Pattern.java:4079)
    java.util.regex.Pattern$Begin.match(Pattern.java:3472)
    java.util.regex.Matcher.match(Matcher.java:1221)
    java.util.regex.Matcher.matches(Matcher.java:559)
    net.spy.memcached.util.StringUtils.isJsonObject(StringUtils.java:109)
    net.spy.memcached.transcoders.SerializingTranscoder.encode(Seriali
    ...
    
    Change-Id: Icaca2f3fef658cdb2c376b6b4dba12ae0327f240
    Reviewed-on: http://review.couchbase.org/36695
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 68daf93ca0a9958263f637d59e273792704db228
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Apr 23 17:20:44 2014 +0200

    SPY-164: Clone gets correctly.
    
    Motivation
    ----------
    When a gets operation is cloned, it currently gets incorrectly cloned into
    a regular get operation. This can cause issues later on.
    
    Modifications
    -------------
    Make sure that a gets() gets correctly cloned into a new gets().
    
    Result
    ------
    The cloning is now properly done, based on the operation type.
    
    Thanks to Brad Svee (@sveesible) for the fix suggestion.
    
    Change-Id: I7b8820bea20d0a0d9555f1bb9b2a46e5327a5f78
    Reviewed-on: http://review.couchbase.org/36221
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 04285ea97c1b4f61d3285512c53f92d16b4512d2
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Apr 23 09:42:51 2014 +0200

    SPY-163: Count down bulk get latch even when empty key list is provided.
    
    Motivation
    ----------
    When a empty iterator (or empty key list) is passed in to a get bulk operation,
    a result is never returned and the thread is blocked because it waits on a
    latch that will never be counted down (because no response will ever arrive).
    
    Modifications
    -------------
    If no chunks with keys are sent out to the servers, the latch is initialized
    to 0 right away so that the code doesn't need to wait at all.
    
    Result
    ------
    The code now returns properly with an empty map instead of blocking the thread
    forever.
    
    Change-Id: I0711c399d9f15010bc808e0f651ce6ad605c06f0
    Reviewed-on: http://review.couchbase.org/36208
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit f2c370fba4374a5828fcab36df45b313c62d7cf7
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Apr 10 16:34:16 2014 +0200

    SPY-162: Also respect nagle setting on reconnect.
    
    Motivation
    ----------
    If a server connection is reset (because it is lost or a reconnection
    is triggered), the nagle setting is not re-set properly.
    
    Modifications
    -------------
    During the reconnect phase, properly re-set the nagle setting so it is
    respected on the new connection.
    
    Result
    ------
    The custom nagle setting is respected and used even across new connections.
    
    Change-Id: Ic0b513b8538a39710aaf8fd0f0f699a5c561bc09
    Reviewed-on: http://review.couchbase.org/35553
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 38954c132df820b6818e676e1377b86dc2a319a3
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Apr 14 08:35:47 2014 +0200

    Enhanced auth logging on sasl failure.
    
    Motivation:
    -----------
    In case of long-taking auth roundtrips, it could be the case - for one
    reason or another - that a empty sasl list gets returned or the auth
    thread gets interrupted, leading to the same effect. This needs to
    be better debugable from the logs.
    
    Modifications:
    --------------
    Better logging has been added for auth failure scenarios, and also the
    sasl mechs response has been refactored a bit so that the timing is
    also reported in case of an error.
    
    Result:
    -------
    Auth errors are now easier to debug from the logs.
    
    Change-Id: I9f0fff8b2c3a6b1492fb0fd82746ff78f7b006c5
    Reviewed-on: http://review.couchbase.org/35672
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 0e8c594f1baeb073ed0fedac8f2c3b746aaf2282
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Mar 25 10:14:55 2014 +0100

    SPY-161: Cascade op cancellations.
    
    Motivation
    ----------
    When an operation is redistributed (be it because of reconnects
    and/or "not my vbucket" responses, it gets cloned. The problem
    is that the initial callback always points to the original
    operation, not the cloned one. While the clone gets the callback,
    the other way round (like cancelling from user-code) will never
    trickle through to the cloned ops.
    
    Modifications
    -------------
    In order to fix this issue, code has been added which connects
    the original op with the cloned ones, by keeping a list of
    cloned operations in the original op. To prevent overly long
    stack in malicious scenarios, an overall clone-cap of 100
    clones is introduced. If this cap is reached, the operation
    will not be cloned further but cancelled.
    
    Result
    ------
    With this modifications, timeouts and cancellations from user code
    will trickle through to the clone operations, prevent issues when
    cloned operations are around "forever".
    
    Change-Id: I304534a62202b705d78ca5f775f47afcd6be238a
    Reviewed-on: http://review.couchbase.org/34883
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 60b83deb81c7891dfda5cf159bb9ed0cf6a9cd93
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Mar 27 08:31:01 2014 +0100

    SPY-160: Avoid ConcurrentModificationException with the retry queue
    
    Motivation
    ----------
    ConcurrentModificationException will show up since the code can recursively
    modify itself.
    
    Modifications
    -------------
    Copy the original list into a temporary new one to avoid the exception.
    
    Result
    ------
    Redistribute on the retry list will work as expected, without an
    exception.
    
    Change-Id: Ieff1a87136bef38280b7f139192419073d6a878a
    Reviewed-on: http://review.couchbase.org/34977
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 7a8f15eed0a9563cdc5e19f211f346dfdf902602
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Mar 24 09:16:03 2014 +0100

    Add development pom.xml
    
    Motivation
    ----------
    While ivy/ant works for years now, it is a little too hard to get
    started when contributing simple patches with IDE setup. Since most
    IDEs have good maven support, adding a pom.xml to get up and running
    quickly makes it easier to contribute and develop.
    
    Modification
    ------------
    Add a pom.xml which is inteded to get up and running quickly. It is not
    designed to do release management, which still happens through the
    ant/ivy pipeline.
    
    Note that the test case fix is by intention, because otherwise the
    unit tests get messed up when ran through IntelliJ with the maven
    file imported.
    
    Result
    ------
    Contributors and developers can import the project more easily and
    contribute patches.
    
    Change-Id: I837eb73cb07560aef15301490eaab56e484be3a8
    Reviewed-on: http://review.couchbase.org/34845
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 3ba49caa66c3465e51278876b6c1149839dcb075
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Mar 26 14:50:08 2014 +0100

    SPY-160: Queue retry op instead of redistributing it immediately.
    
    Motivation
    ----------
    After making the original SPY-160 changes, the ops were correctly redistributed,
    but if the latch never gets counted down it gets recursively distributed and
    added. Example:
    
              at net.spy.memcached.protocol.TCPMemcachedNodeImpl.addOp(TCPMemcachedNodeImpl.java:344)
              at net.spy.memcached.MemcachedConnection.addOperation(MemcachedConnection.java:1206)
              at net.spy.memcached.MemcachedConnection.redistributeOperation(MemcachedConnection.java:994)
              at net.spy.memcached.protocol.TCPMemcachedNodeImpl.addOp(TCPMemcachedNodeImpl.java:350)
              at net.spy.memcached.MemcachedConnection.addOperation(MemcachedConnection.java:1206)
              at net.spy.memcached.MemcachedConnection.redistributeOperation(MemcachedConnection.java:994)
              at net.spy.memcached.protocol.TCPMemcachedNodeImpl.addOp(TCPMemcachedNodeImpl.java:350)
              at net.spy.memcached.MemcachedConnection.addOperation(MemcachedConnection.java:1206)
              at net.spy.memcached.MemcachedConnection.redistributeOperation(MemcachedConnection.java:994)
    
    Modifications
    -------------
    The changeset, instead of redistributing right now, adds the operation to the retry queue which means
    it will be handled eventually, but gives the IO thread a chance to run other tasks (including retreiving
    auth response information).
    
    Result
    ------
    The operation is queued and is not blocking the IO thread.
    
    Change-Id: I73a8e77255a54bceeb929febcadb0e555febdd67
    Reviewed-on: http://review.couchbase.org/34938
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 73cd03e2a216a28aa06002db8b37650e980c6720
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Mar 26 13:40:04 2014 +0100

    SPY-157: Fix auth logging times.
    
    Motivation
    ----------
    In the previous commit which added logging, it measured nanoseconds and printed
    milliseconds. This also screwed up the debug/warn metric.
    
    Modifications
    -------------
    Correctly convert nanoseconds to milliseconds.
    
    Result
    ------
    Timings are now properly warned and formatted.
    
    Change-Id: Id174a49e03e052f9e32c98cc32aa7ad0b82bbb4d
    Reviewed-on: http://review.couchbase.org/34936
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 6ada2e608c831500527baff866ce4ba783a72336
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Fri Mar 7 10:34:13 2014 +0100

    SPY-156: Expose more async mutate methods.
    
    Motivation
    ----------
    More flexible incr/decr methods are exposed as sync variants than
    with their async counterparts. This patch is an effort to bring them
    on par (almost) completely.
    
    Modifications
    -------------
    More async variants have been exposed, which were already supported
    through the private asyncMutate method. Note that since the ascii
    protocol doesn't support defaults and expiration for incr/decr, those
    return an UnsupportedOperationException, because it is nontrivial to
    fix. Please refer to the sync variants if you need that.
    
    Result
    ------
    When the binary protocol is used, much more asyncIncr/asyncDecr methods
    are exposed, explicitly helping with default values and expiration.
    
    Change-Id: I4403b14d6146afb325afa9c239da28b55e89e935
    Reviewed-on: http://review.couchbase.org/34257
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit e6892a075fa6f018d9b224bce11a1292263cae8b
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Mar 24 13:25:00 2014 +0100

    SPY-160: Redistribute ops when waiting for authentication to complete.
    
    Motivation
    ----------
    When an operation gets added and the node needs to (re)connect, it waits
    for a given amount of time (authWaitTime). If the auth does not complete
    in the period of time, the operation is cancelled. This is suboptimal,
    especially if the operation is not timed out yet, it could wait longer
    until it gets timed out/cancelled.
    
    Modifications
    -------------
    This changeset makes sure that an operation gets redistributed (assuming
    FailureMode is NOT cancel) if the authLatch is not counted down in the
    wait period.
    
    Redistributing will only happen (further down the code stack) if the
    op is 1) not cancelled and 2) not timed out already.
    
    Result
    ------
    Still valid operations will be transparently rescheduled until they
    either go through validly or will eventually time out or get
    cancelled.
    
    Change-Id: I6f849314e11435a6ebc69a4bfc1eab705df850e8
    Reviewed-on: http://review.couchbase.org/34852
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit f82790d8d181ab0a328d7d511a360eae4fed94f4
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Mar 24 10:11:40 2014 +0100

    SPY-157: Add Auth logging.
    
    Motivation
    ----------
    Debugging how long authentication steps take is currently not
    possible. Proper logging needs to be added in order to debug
    authentication timeframes.
    
    Modifications
    -------------
    Added logging infrastructure for the individual steps (list sasl
    mechs, and challenge/response cycles), as well as a total amount
    on a per-node basis.
    
    If an individual step takes over 250ms it is WARNed instead of
    DEBUGed, and if the total auth step takes over 1 second it it also
    WARNed. Note that while these timings are fixed values, in general
    the operation taking this long points to something wrong since it
    is expected to take in the 1ms range.
    
    Result
    ------
    Auth times can now be observed both in development and production,
    better pointing to possible issues.
    
    Change-Id: I3deab53332251263c5a6dcf3e2bfd75538dfb24c
    Reviewed-on: http://review.couchbase.org/34849
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 5de61d7036bcedd454687d3b78300f79c69adda3
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Mar 24 09:37:45 2014 +0100

    SPY-159: Make the auth latch timeout configurable.
    
    Motivation
    ----------
    Currently, the auth latch timeout is fixed to one second and not changeable.
    In certain scenarios (for example with CRAM-MD5 where more roundtrips need
    to be issued), this is too short. Making it configurable allows to adjust the
    setting to latencies in target environments.
    
    Modification
    ------------
    Expose a "authWaitTime" setting in the factory and the builder to allow set
    the value in milliseconds. It still defaults to one second for backwards
    compatibility.
    
    Result
    ------
    The auth timeout can be modified as needed in production deployments.
    
    Change-Id: Id06f4ede00402688c00a283bcff82cde25a7a205
    Reviewed-on: http://review.couchbase.org/34846
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit bfaec2b4f1385f20f32fd0ed0736b52ef572e340
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Mar 20 14:08:34 2014 +0100

    SPY-158: Use Milliseconds instead of Seconds for "max reconnect" delay.
    
    Motivation
    ----------
    Currently, when a reconnection needs to happen against a node, a incremental
    delay for subsequent reconnect tries is selected. Because of the wrong time
    format used (seconds instead of milliseconds), the delay is always capped
    at 30ms, leading to immediate reconnects with no backoff effect.
    
    Modifications
    -------------
    For backwards compatibility, the "second" time unit is kept in the factory,
    and instead in the MemcachedConnection the time is converted to milliseconds.
    
    Result
    ------
    A proper reconnect delay going from 2^0 seconds up to 2^4 seconds, peaking at
    30 seconds by default (as always changeable through the factory)
    
    This changeset makes sure that
    
    Change-Id: I4a348f50e41451a6542b4b0263b915990730c3f8
    Reviewed-on: http://review.couchbase.org/34728
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 6c6588bdb1d85e2182584ceaa052dc92d8b84ead
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Feb 18 10:47:44 2014 +0100

    SPY-154: Also RETRY on binary NMVB response with bulk gets.
    
    This changeset makes sure that even when one of the individual get
    operations in the bulk request fails with a "Not My VBucket", the
    single get operation gets retried.
    
    To make this work, the underlying bulk operation is changed slightly
    to be notified that it has to wait for N more operations before
    notifying the listeners and counting down the latch.
    
    Change-Id: I6413233a3d0289ab728312f8f4edab5df96a0081
    Reviewed-on: http://review.couchbase.org/33700
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit d8cd4e61226ce5f48f1aab8e94602f86defce36f
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Mar 5 14:15:55 2014 +0100

    SPY-127: Optimize StringUtils performance.
    
    This changeset optimizes the individual StringUtils methods, especially
    the isJsonObject method. Before, if no proper JSON was detected, a final
    check against an Integer was performed. If no integer was found, a very
    expensive exception was thrown, killing performance.
    
    This check has been replaced with a faster regex. Also, other parts
    of the methods have been refactored to be more performant.
    
    Change-Id: I7616d2b042896aa76d73d536a3dde1c998990d9b
    Reviewed-on: http://review.couchbase.org/34184
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 0be32615be36794ce664c24324f72b111441796a
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Feb 10 16:19:55 2014 +0100

    SPY-153: Adding a typesafe StatusCode for OperationStatus instances.
    
    This makes it possible to add easier checks on futures, while not
    having to rely on string matching in the status message. This is
    an addition, so old behavior will not be changed, its just more
    convenient and can be better documented (it does not directly rely
    on a server response).
    
    Change-Id: Ie416e317d5fd21af2c3efb177b08b68dd8c45639
    Reviewed-on: http://review.couchbase.org/33405
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit ffe7133fae485b37055864577c82cfe9cb76c357
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Feb 20 13:40:24 2014 +0100

    Add support for replica get with CAS (ReplicaGets).
    
    This changeset adds the underlying operations and clone-logic for
    replica get operations including the underlying CAS value.
    This can be utilized by the upper layers to provide responses that
    not only include the raw value from a replica, but also their
    corresponding CAS value.
    Change-Id: Ib218669b6bbc84f3111e107e14761a03ed2f9728
    Reviewed-on: http://review.couchbase.org/33799
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit eb7c401cd9139104264483492cc991b7453dba5b
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Feb 20 15:29:02 2014 +0100

    SPY-155: Synchronize when future listeners are notified.
    
    This changeset prohibits a possible race condition when listeners
    are called from the callback. Proper sync has been in place for
    both adding and removing, but not for notifying.
    
    Change-Id: I4cfa0036c2b7b89985b0026c5da5dca26cc9fe52
    Reviewed-on: http://review.couchbase.org/33800
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 61ef3f9489df9201986066e0efbf9d6c46a66791
Author: Deepti Dawar <deepti.dawar@globallogic.com>
Date:   Fri Jan 17 13:41:47 2014 +0530

    Changes for the New feature test for credential encryption CRAM-MD5 or PLAIN
    
    Change-Id: Ic777b04e87670f0a9d967b4a439fea205b129e97
    Reviewed-on: http://review.couchbase.org/32588
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Deepti Dawar <deepti.dawar@globallogic.com>

commit 7c5b87d87167bfb4ddfbb0028ffa4a535eeb7298
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Jan 8 11:57:11 2014 +0100

    SPY-148: Do not rename the worker thread for listeners.
    
    It's more explicit if the naming of the threads is left to the
    executor service (through custom thread factory).
    
    Change-Id: I7457d036b70ba6dd30d6d99dd9d8cbcbaa0cf3dd
    Reviewed-on: http://review.couchbase.org/31715
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 850fddb026c9af4a349410cd70e7c14ce7c09edf
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Nov 21 15:56:13 2013 +0100

    CCCP: Implement NOT_MY_VBUCKET handling customization.
    
    This changeset allows MemcachedConnection subclasses to make use
    of any RETRY response that arrives, handing over its body. For
    example, in Couchbase this can be utilize to get the new server
    configuration and pass it over to the configuration management
    subsystem.
    
    Note that all this is happening on the IO thread, so whatever
    method subclasses it should make sure to not block the thread
    at all.
    
    Change-Id: Ia71874207b5a213074e2ca525aa3eb37ff80e24b
    Reviewed-on: http://review.couchbase.org/30448
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 50de69b1257618574d14098a388b3711e33aada3
Author: vgnanasekaran <venkatesh.gnanasekaran@paypal.com>
Date:   Wed Jan 15 12:07:15 2014 -0800

    SPY-150: Check connection status before waiting on the latch.
    
    Change-Id: Ic9de6711a32575c81a499b360923f21d8cfd13ff
    Reviewed-on: http://review.couchbase.org/32337
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 169ddea90f34d15e9b8f273c85a2a6306cafaec9
Author: vgnanasekaran <venkatesh.gnanasekaran@paypal.com>
Date:   Wed Jan 15 11:21:31 2014 -0800

    SPY-151: Interrupt pending AuthThreads during shutdown.
    
    This changeset fixes hanging auth threads while shutting down the
    connection.
    
    Change-Id: I386fea0da2d06b655c7e3cd0d843761d59ee7e28
    Reviewed-on: http://review.couchbase.org/31828
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 95342fa4489ecb58f8f357aedf4a767de4fa4ce4
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Jan 8 18:22:44 2014 +0100

    Add missing import.
    
    Change-Id: I261bcf045264b041bdea8ec0df0fab3c711cd64f
    Reviewed-on: http://review.couchbase.org/31732
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 588043ca697cd0579671db95ead921a6b0b1eed3
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Jan 8 11:37:30 2014 +0100

    SPY-149: Notify Listeners after Complete.
    
    This changeset honors the fact that setting the status and actually
    completing the latch can happen at two different points in time.
    Without this change, effects can be observed that a listener is called
    but the latch has not been counted down yet, leading to weird effects.
    
    Also see https://github.com/mathieuancelin/play2-couchbase/issues/33
    for a dependent issue.
    
    Change-Id: I99686c212d8610299f78078b28d31b7891da8d1c
    Reviewed-on: http://review.couchbase.org/31714
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 50c338d88acc16c65ca6c127f4c841f7261ba620
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Jan 7 15:50:29 2014 +0100

    Cleanup of MemcachedClient.
    
    This changeset adds more @Override annotations and does some minor
    cleanup.
    
    Change-Id: I1a9140635781bf622c6aeba4156f5e1cb7f5b468
    Reviewed-on: http://review.couchbase.org/31670
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 0a79968771b106495fa11c8509b015af6c48ec12
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Jan 7 14:31:05 2014 +0100

    Syncing MemcachedClientIF with MemcachedClient.
    
    This changeset makes sure all implemented methods are available
    in the interface. Also, @Override annotations are added for
    clarity.
    
    Change-Id: Iedb899ed9d70a5d76e7d3891524336a21edf34b8
    Reviewed-on: http://review.couchbase.org/31669
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 7d45580e14f5cb102961a72ea67a220376b0e3b2
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Nov 20 14:53:43 2013 +0100

    SPY-145: Make MemcachedConnection inline properly.
    
    Change-Id: I1be0a3ea410e9bed0a155ac821d41bf64125beac
    Reviewed-on: http://review.couchbase.org/30417
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 908516c03ea5925373621808a9ffcd4b9a11a5c0
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Fri Nov 29 06:53:02 2013 +0100

    SPY-146: Use correct length of key in observe.
    
    This changeset makes sure that the correct length of the key is used in the
    protocol. Since UTF-8 chars like the pound sign (currency) are represented
    in two bytes but are one character in a string, the length of the key needs
    to be determined after it is converted into a byte array.
    
    Change-Id: I48b68127f384e3bcb963a5df1cddd5b5c2d5ca7a
    Reviewed-on: http://review.couchbase.org/30701
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit dcd848d238b38fb35aa360ef7ead073e6dd5539a
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Nov 20 15:45:47 2013 +0100

    SPY-145: Make OperationImpl inline properly.
    
    Change-Id: Ia03701670d9b3bb82d7e8c4798dd5cb99c9e25c7
    Reviewed-on: http://review.couchbase.org/30418
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit e94fbf5db73390a94e93bbe4fd7ce892c393ee3a
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Nov 20 12:36:33 2013 +0100

    This changeset refactors the MemcachedConnection class.
    
    It also breaks out certain large blocks into their own methods
    to make it better readable and easier for the JIT to inline
    the code.
    
    Change-Id: I3369606afeef00b50740e54c01a78e89682cade1
    Reviewed-on: http://review.couchbase.org/30416
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 0f3730a8b3a40aefed2c2d91d5bc88d59c3f1171
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Nov 21 09:43:01 2013 +0100

    Allow OperationImpl to be used elswhere.
    
    Change-Id: I89818f2a94e8e746c562b5a115602f8d3ccfb8d2
    Reviewed-on: http://review.couchbase.org/30447
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 394bd0b90e9fe96b5ab6ae7d63d2a400bd94fa15
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Nov 20 10:29:59 2013 +0100

    SPY-144: Avoid growing callstack on get* clones.
    
    This changeset makes sure that if an operation gets cloned over
    and over again (which is not the norm, but can happen in certain
    failure scenarios), it will not lead to a stack overflow.
    
    Special thanks to Kirill Safonov for pointing out the right fix.
    
    Change-Id: I6846fe9b23d43d9f2e257a5206a511f941aed8ff
    Reviewed-on: http://review.couchbase.org/30415
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 6253c00ff3845ce3dddc77c4ed011ba5d56ea2fd
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Oct 21 10:37:41 2013 +0200

    SPY-136: Do not timeout when waiting on the sasl mechs.
    
    Since we also dont timeout on the return of the auth op, keeping
    the process consistent. This avoids the situation where the server
    is potentially rebooting and the timeout occurs. In combination with
    code depending on the sasl list, exceptions can occur and the auth
    thread dies.
    
    Change-Id: I270e91e0794ea7de10cd26a9dafc85e35f87095d
    Reviewed-on: http://review.couchbase.org/29657
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 333c56b1ab01e383b800baf573792f122ef82313
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Oct 16 15:59:03 2013 +0200

    SPY-106: Allow GetAndTouchOperation to be cloned.
    
    This fixes an issue where GAT called during rebalance, causing it
    to be cloned potentially, fails the IO threads since its not
    supported in there properly.
    
    Change-Id: I3ff86456c5f2f28e206612890c08834fc96935f1
    Reviewed-on: http://review.couchbase.org/29585
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit f95bc4935e46ec8bebecae540d6e22f7552853fe
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Oct 16 09:59:13 2013 +0200

    SPY-141: Do not assume positive CAS.
    
    This changeset makes sure that when loading the CAS value, there
    is no assumption of the actual value done on the client side.
    Especially, -1 is a valid CAS and can cause issues when running
    with -ea in production (since the callback is executed on the
    IO thread, it can die for no reason).
    
    Change-Id: Ic944bca9c7e005fb793edc0ddb3a51674f2d2be0
    Reviewed-on: http://review.couchbase.org/29584
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 27cdee2edd33d443f66d03796b3c2e740fa7a26d
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Oct 14 15:18:09 2013 +0200

    SPY-140: Use LinkedBlockingQueue for listener task queuing.
    
    Change-Id: I3e3db7861a6e6e6c24c61c40ea02b19c8bc57fab
    Reviewed-on: http://review.couchbase.org/29548
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit f6f76efad6fdeaea9e67939036c58562e0a035f6
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Oct 7 15:58:09 2013 +0200

    SPY-137: Properly shutdown executorService on shutdown().
    
    Change-Id: I23bf0a30cc96c5721d6ed0d5c16bdfc2113c0fe4
    Reviewed-on: http://review.couchbase.org/29372
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 38f7a6cbe3061d07f798c84f69196b2b68265f1f
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Oct 7 17:23:49 2013 +0200

    SPY-138: Allow the ExecutorService to be overridden.
    
    Change-Id: I6f9c577f734c33f2d6004031253dd561b6302b4c
    Reviewed-on: http://review.couchbase.org/29373
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit bc740692ebfb46953166db26e6981f543fb4ca6c
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Oct 3 06:08:13 2013 +0200

    SPY-135: Expose asyncCAS with Expiration and default transcoder.
    
    Change-Id: I99ecf0b293a9d52871b81e9166f07a35f90c712a
    Reviewed-on: http://review.couchbase.org/29346
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit fb6e0f01cfae13a180127cd65dbec7b025cfbc8e
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Aug 8 17:19:11 2013 +0200

    SPY-132: Adding Callbacks to Futures.
    
    This changeset adds a onComplete callback to futures and executes
    the callback in a configurable ExecutorService. By default, this
    is a fixed size thread pool (threads = num of processors), but
    configurable through the Factory.
    
    Change-Id: I516af74918e57521542a0bad2ff7142b75ab7b13
    Reviewed-on: http://review.couchbase.org/28025
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 17d412de3e3df1de40d64e7f12bef477eaa5af5b
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Sep 4 17:52:39 2013 +0200

    Remove unreliable tests.
    
    These tests fail/not fail on a constant basis and are therefore
    not reliable and lead to false positivies. They are removed for
    now and can be considered to be readded later with different
    implementations.
    
    Change-Id: Ic94d7a3a2ce4cd8c17f2aeb94b57eb670e2a41a5
    Reviewed-on: http://review.couchbase.org/28792
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit d3a6d571344f594ae2dab8ed6d5485910182584c
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Aug 26 09:07:20 2013 +0200

    SPY-133: Add additional metrics support.
    
    This changeset adds basic metrics for performance measurement and
    debug support. It is optional and can be enabled through the factory
    or via a system property.
    
    The collected values can be exported through:
     - The Console
     - JMX
     - CSV
     - SLF4J
    
    These output reporters can also be configured through properties, by
    default the console reporter will be used.
    
    Change-Id: If206f0be0c0bd6c6ff11d63f1be25debab2e524e
    Reviewed-on: http://review.couchbase.org/28575
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 903a4535e1dadaada93a92e0ec620668739bf4e1
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Sep 3 17:33:28 2013 +0200

    Ignore intellij directory on ant clean.
    
    Change-Id: If564fdb8eee84ff2f1fe39718588bbe5fb98f4a6
    Reviewed-on: http://review.couchbase.org/28765
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>

commit 75d0c4761b98cf0a745d5ac4bd4dd8845f5fd724
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Sep 2 11:38:01 2013 +0200

    Ignore IntelliJ Idea .idea directory.
    
    Change-Id: Ief5af0aa2267665e763972f39bd27e7ca6894e7b
    Reviewed-on: http://review.couchbase.org/28738
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>

commit 5d4daecc878bad88daacd612f7e99213614ff1a2
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Aug 8 13:17:38 2013 +0200

    SPY-131: Expose cas with expiration.
    
    This changeset simply exposes the expiration time on cas() without
    a custom transcoder and adds tests to verify the correct behavior.
    
    Change-Id: I2fb28d96121c5bd337ec1c33c8e907a13e3a8bfa
    Reviewed-on: http://review.couchbase.org/28018
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit e6af57ec27c4a0c2e3447ef9d210fbf8c95ede00
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Fri Aug 16 10:44:11 2013 +0200

    JCBC-346: Supporting CRAM-MD5 as a SASL mechanism.
    
    This changeset implements support for CRAM-MD5 as SASL mechanism,
    by sending a "list sasl mechs" first. Depending on the response,
    either CRAM-MD5 or PLAIN will be used.
    
    Regular memcached servers wil make use of PLAIN as before, but
    systems that support it (like couchbase) will use the more secure
    variant.
    
    The list sasl mechs process will only proceed if the AuthDescriptor
    either gets null or an empty list of mechanisms in order to be
    backwards compatible, so no changes to code need to be done when
    upgrading to a new version.
    
    Change-Id: I7c7e935e4307c181f98e5ff5615b18cba3f403b4
    Reviewed-on: http://review.couchbase.org/28292
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit d07bbbdf2aa7c7020670a115ec3ea23334384e43
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sat May 4 11:24:40 2013 -0700

    SPY-118: Include more information in the timeout message.
    
    Note: there isn't coherency in this commit, but that is somewhat
    intentional to not take on the overhead. The message is on the user's
    thread and the updates of last read are on the IO thread.
    
    Change-Id: Ia0a7cdc9296ea1de34d23a4d67c8a6bd1db7ba93
    Reviewed-on: http://review.couchbase.org/26101
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 00f2e785d9724f121f71c6ba20e33e79a8a055aa
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Feb 20 16:54:30 2013 +0100

    SPY-113: Implement underlying foundation for replica read.
    
    This changeset implements the facilities that need to be in place
    to handle replica reads up the stack (typically inside the
    couchbase client library).
    
    Change-Id: I7ba237ec559c14b6f1b9876b058fff583b56d020
    Reviewed-on: http://review.couchbase.org/24749
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 98ca257ae6255edb10a2f75c4a3f26240baee2b3
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Jun 25 13:00:25 2013 +0200

    SPY-128: Adding support for CAS Delete.
    
    This changeset uses the functionality that was already there and
    just exposes it to the outside. It is now possible to use delete
    with CAS if needed.
    
    Change-Id: I72652587424297b3373bf4914a5c54799ebd6179
    Reviewed-on: http://review.couchbase.org/27107
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit af62d1301dd9d915cd0cc70839b5c2e9ae869233
Author: Matt Weiden <weiden@soundcloud.com>
Date:   Fri May 17 11:13:08 2013 +0200

    Add touch to the ASCII protocol.
    
    Touch is defined for the ASCII memcached protocol, but not implemented in
    spymemcached. This commit adds the missing touch functionality.
    
    This changeset also modifies the binary touch to make it work even when
    assertions are enabled.
    
    Change-Id: I4227441cf42f4e75b770952aa8c8f8e5efa30e66
    Reviewed-on: http://review.couchbase.org/26513
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 4d416e94961a7767bf72b96d73a55a6ff3c03d4b
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Jun 20 16:02:57 2013 +0200

    Properly encode test case as UTF-8.
    
    Change-Id: Id3a213079291e9855e8d968fc0b290413d7f413f
    Reviewed-on: http://review.couchbase.org/27047
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Deepti Dawar <dawardeepti@gmail.com>

commit b01539560578fe10bda6964119eec7e2e9fccbc6
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Jun 6 11:20:49 2013 +0200

    Modifying ant buildfile to also remote stage test packages.
    
    Change-Id: Ibfea3cb0a4703718deb5457eb6d7e047d99011fa
    Reviewed-on: http://review.couchbase.org/26779
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit c812f4b6d8ef5804b4a0324db7a35455be3c7f06
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Jun 4 13:27:59 2013 +0200

    Extend build.xml to support maven central publishing.
    
    Change-Id: I40343dbbf78b370b09c008a95ab77cd9cf8bfeab
    Reviewed-on: http://review.couchbase.org/26714
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Deepti Dawar <deepti.dawar@globallogic.com>

commit 6e2416bfa77355803d20f5a000abb385cb935396
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Fri Dec 21 09:27:24 2012 +0100

    JCBC-196: Allow Append/Prepend without CAS
    
    To align the append and prepend commands with the others, this
    changeset adds method signatures to be used without the CAS
    value. This is done by passing 0 as the CAS to the others down
    the stack making it essentially ignore it.
    
    Change-Id: I5e5e4f9b0a0853f768a3446107107e8b99b4e847
    Reviewed-on: http://review.couchbase.org/26712
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>

commit 730fe4f285887ed074c78da84ef58a85bf8abd4d
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue May 7 09:26:02 2013 +0200

    SPY-120: Adding support for SLF4J logging.
    
    This changeset adds support for SLF4J logging. The Logger API
    has been modified to contain only very small backwards breaking
    changes, it only adds TRACE support to the interface. People
    not implementing the Interface directly but just implementing
    the AbstractLogger only need to add the new isTraceEnabled()
    method and inside the log() method also check for the TRACE
    level.
    
    As SLF4J implies, this changeset does not ship with an
    actual SLF4J implementation but lets you choose it at runtime
    with just adding the impl to the classpath.
    
    Change-Id: I178ef8c8dd7417a33d0e3914a644632b98c4a265
    Reviewed-on: http://review.couchbase.org/26149
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit b90bc111c59e7c37038ef8a36dc12cb6ca42db15
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue May 7 10:42:27 2013 +0200

    SPY-121: Make NOOP send optional on connect.
    
    This changeset makes the NOOP sending before AUTH
    on connect optional, because this may have issues
    with other systems and therefore lead to non-working
    systems.
    
    The check can be activated by setting the
    net.spy.verifyAliveOnConnect system property to
    true.
    
    Change-Id: If26439c024c3c50f02e992aaa80ba39fa683aed0
    Reviewed-on: http://review.couchbase.org/26151
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Deepti Dawar <deepti.dawar@globallogic.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 87c002a06d3fb084701bf79531906dc5dcb3df5d
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed May 22 12:38:00 2013 +0200

    SPY-123: Fix Race Condition that kills IO Thread
    
    This changeset makes sure that a potential race condition when
    adding/removing nodes the same time does not kill the IO thread.
    The Exception is caught and the code block is tried again.
    
    Also, as a safety net, the IO thread at the topmost level catches
    this error and proceeds, since this type of exception is considered
    to be transient and does not persist.
    
    Change-Id: I04bfea7f38327c96019f2fcccddcaccfe5b791d3
    Reviewed-on: http://review.couchbase.org/26464
    Reviewed-by: Deepti Dawar <deepti.dawar@globallogic.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 036081f046261c2f75eee6414bfacc915f450dda
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed May 8 07:31:14 2013 +0200

    SPY-122: Change groupID from spy to net.spy
    
    This changeset ensures that compatibility with maven central
    is achieved and can be published there too.
    
    Change-Id: I030f0741a8ccd0bf6e96b3f323b366c152274807
    Reviewed-on: http://review.couchbase.org/26181
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit e78bc662af2644d9fab3d5dc741572ddf003cd3a
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Mar 26 07:42:22 2013 +0100

    SPY-115: Rename javadocs to javadoc for IDE compat.
    
    Change-Id: I14c5daff7ad5f386e033283929d50daa46a3babb
    Reviewed-on: http://review.couchbase.org/25343
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 7392f53946f8b8f69b2f3157bb520aac8953af53
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Apr 17 10:35:02 2013 +0200

    Wakeup the Selector on node add.
    
    This can lead to an issue when no traffic is going through the
    system that a newly added node does not get properly included
    in the cluster landscape on the client side.
    
    This has no effect if there is already going traffic through
    the system.
    
    Change-Id: Iebcf70bb7b3c093985b6fa4f6056a4153937b8cd
    Reviewed-on: http://review.couchbase.org/25722
    Reviewed-by: Deepti Dawar <deepti.dawar@globallogic.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 1af31ce88b787b50535af756e3eb0a05d5c801d9
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Feb 18 07:44:22 2013 +0100

    Renaming javadocs to javadoc for standard compl.
    
    This changeset renames the resulting mvn jar files for javadocs
    from javadocs to javadoc to conform with IDE and repository
    standards.
    
    Change-Id: Ib17f52bcff3b903236be839d6cae3e34bba685f9
    Reviewed-on: http://review.couchbase.org/24653
    Reviewed-by: Tugdual Grall <tugdual@gmail.com>
    Reviewed-by: Deepti Dawar <deepti.dawar@globallogic.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 8ed6519ed10bd62ec6447802f1bed6a13d4357a0
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue May 7 10:25:27 2013 +0200

    Force 1.6 Java Compat even with 1.7 and up.
    
    Change-Id: I968446387a0fb9b9edf69ddce9e79da21f5fa153
    Reviewed-on: http://review.couchbase.org/26150
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Deepti Dawar <deepti.dawar@globallogic.com>

commit 156faec1e10c459693ea76ae86937b7b0aac8af5
Author: Blair Zajac <blair@orcaware.com>
Date:   Mon Feb 11 11:30:20 2013 -0800

    Document correct logger class name system property.
    
    Change-Id: Iad90149f1bbdae113b681c32027ac261ffe6298c
    Reviewed-on: http://review.couchbase.org/24509
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 2dbadca63b6f0d9e1ded89195ecb4a167c721ba2
Author: Blair Zajac <blair@orcaware.com>
Date:   Mon Feb 11 11:31:06 2013 -0800

    Add .gitreview for gerrit-review and git-review scripts.
    
    Change-Id: I6b4ab17f484784d3e34c60de0e57cdf321134918
    Reviewed-on: http://review.couchbase.org/24510
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit e86779d82ee0ad0c2ee3f68c04debfdda0407105
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Apr 15 11:24:00 2013 +0200

    Fix typo in spymemcached-test ivy config for junit.
    
    Change-Id: Iccbc0367a89a09e0401d57a9fda6df115a928e27
    Reviewed-on: http://review.couchbase.org/25657
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Deepti Dawar <deepti.dawar@globallogic.com>

commit 191660989a151e419dad8bfaaf94915771ffb789
Author: Deepti Dawar <deepti.dawar@globallogic.com>
Date:   Mon Mar 25 12:20:34 2013 +0530

    Create directories for docjar, srcjar and jar targets
    
    Change-Id: I1c5523e0014c781bee41180f42b66da715d18bde
    Reviewed-on: http://review.couchbase.org/25329
    Tested-by: Deepti Dawar <deepti.dawar@globallogic.com>
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 84ebf9ad0d0d8a64497d956f6e75bf74cd7883de
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Feb 18 08:26:39 2013 +0100

    SPY-112: Throw CancellationException when future is cancelled.
    
    This changeset throws the semantically more correct
    CancellationException when a operation future is cancelled. Old
    code that catches RuntimeExceptions will still work, but it allows
    for more flexible catching on the application level.
    
    Change-Id: I476f06e8989f06423be6e186c6565179e270df13
    Reviewed-on: http://review.couchbase.org/24654
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 781cb7e18ea72127872dbfbf6881fb6fda9d35fc
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Tue Feb 5 16:09:04 2013 +0100

    Small checkstyle fix.
    
    Change-Id: I3b6e8613489c3d0b3dc969336121dcbb3e178531
    Reviewed-on: http://review.couchbase.org/24405
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 6e8c47d38c178cf6e3d763c625ed0be08102e246
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Jan 28 16:57:44 2013 +0100

    Skipping reconnect when not in cluster anymore.
    
    This changeset skips the reconnect phase when the to be
    reconnected node is not part of the cluster anymore. This
    information is based on the locator.
    
    Change-Id: I949ec1e78fd6b5fa73851d5461cbf3a70de11027
    Reviewed-on: http://review.couchbase.org/24232
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 65cf4b068456e97306b88dbaaaf1811efaf9d008
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Jan 28 15:28:02 2013 +0100

    SPY-111: Check if the node belongs to cluster before connect.
    
    This changeset makes sure a node belongs to the cluster (by
    verifying against the node locator), before trying to (re)-
    connect. This helps in situations where a node is scheduled
    for shutdown and therfore not part of the cluster, but is
    still alive and may be connectable. In this case, it will
    result in NPE or AssertionExceptions down the stack.
    
    Change-Id: Ib825b487fcd77c5cb9cf7d50e5b8b3c9c227cab5
    Reviewed-on: http://review.couchbase.org/24230
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 5ca6904eb7357dee35ba53444f3cd542a1ed6f75
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Thu Jan 24 14:18:50 2013 +0100

    SPY-110: Update KetamaNodeLocator allNodes on reconfigure.
    
    This changeset updates the KetamaNodeLocator to also change the
    allNodes on reconfigure, not only the ketamaNodes. This fixes
    an issue where broadcast operations (which rely on the allNodes
    collection) were sent to the wrong targets.
    
    Change-Id: I1184ab8f3c564d181d832cad37e63ede2dabc631
    Reviewed-on: http://review.couchbase.org/24180
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 821844d72c47812de4823bc9632baf830e835c83
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Wed Jan 16 09:07:33 2013 +0100

    Minor checkstyle fixes.
    
    Change-Id: I0ead0bc582f99ce2b7c39db1ca1124f72d744c4d
    Reviewed-on: http://review.couchbase.org/23980
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 39d1a8dfca5f78e0a31bed96da669965833de7e4
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Jan 10 00:22:39 2013 -0800

    SPY-108: Verify connections are sound before completing them entirely.
    
    Without this change, the client considers the connection to be
    good any time a connection has been established.  This is not the
    case in some critical situations, such as a hung process or a very
    busy remote server.
    
    Solution is to ping the server with a version op, since that can happen
    before auth, and use that as a way to verify the thing is actually
    alive.
    
    Note there is also a refactoring in here renaming the variable for
    the node.
    
    Change-Id: Ie3c0bc967b0705df6e58bf8ef81b158db8576bf3
    Reviewed-on: http://review.couchbase.org/23840
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 10a40576c32cd6f7e81d2a62a224de1a0349a140
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Jan 8 20:48:06 2013 -0800

    SPY-107: Ensure state of timedout is known across IO and user threads.
    
    After seeing this in a log, I re-thought through the series of events here.
    
    This flag on the op is known by user threads and the IO thread.  Thus it
    is modified in these two different ways:
    
    * operation is created and enqueued
    * OperationFuture is returned
    * .get() is called on OF
     **timed out**
    
    * operation is removed from input queue
    * elapsed time is checked
      **timed out**
    
    Change-Id: I879f9b6459aa2fce1ddd97c5803da8c5392453a5
    Reviewed-on: http://review.couchbase.org/23798
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit b25e989ed4a11e5e5064713036c29e8a719282a7
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Mon Oct 29 12:11:41 2012 -0700

    Fix checkstyle and javadocs errors
    
    Change-Id: I26c70eeb11b881ea0890a2ae8b1919a2169cbdc6
    Reviewed-on: http://review.couchbase.org/22054
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 4072cf46c39cf7dae7cf13a368d1a0cc93935fdb
Author: Aaron Miller <apage43@ninjawhale.com>
Date:   Wed Oct 3 16:12:28 2012 -0700

    SPY-63 Keys can be anything over binary protocol
    
    Change-Id: I8fcd92bac797f7bb610fd6bc42a8b78d27700785
    Reviewed-on: http://review.couchbase.org/21323
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Nitschinger <michael.nitschinger@couchbase.com>

commit 4f8f0dfda6d3d97b441f062fca223c0827043e5f
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Wed Sep 26 16:23:58 2012 -0700

    Don't increment volatile variables
    
    Incrementing a volitile int is not thread safe since it follows
    the read/modify/update pattern.
    
    Change-Id: Idd389ea6dd576376a6b4a01cd2d38e9a7ef7733c
    Reviewed-on: http://review.couchbase.org/21151
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit f0e976235a9bf95f74d71d294b499a2bde8cbb9b
Author: Michael Nitschinger <michael@nitschinger.at>
Date:   Mon Oct 8 10:33:09 2012 +0200

    JCBC-128: Add ZERO to the PersistTo ENUM.
    
    This small changeset is the prerequisite for a larger change
    in the JCBC client, so that it is possible to only wait for
    proper replication and not for persistence too. See the
    proper commit in couchbase-java-client tagged with JCBC-128
    for more details and tests.
    
    Change-Id: I3b1385a7a9553170a46d7ef72d6b537c0997b351
    Reviewed-on: http://review.couchbase.org/21415
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit aedb00dd74296140e00133a19de2f9f354562494
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Fri Sep 28 12:13:24 2012 -0700

    JCBC-105: Add stats key operation
    
    This only allows you to do stats key on the active vbucket, but
    we add the ability to get stats from the replica vbuckets
    later.
    
    Change-Id: I903741a5f31bc3653e313185f2193708876d029e
    Reviewed-on: http://review.couchbase.org/21200
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit d584446c647b89f0bb433fea43fbe983a709aee1
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Wed Sep 26 16:31:43 2012 -0700

    Make unsynchronized LoggerFactory field syncronized
    
    Because the compiler or processor may reorder instructions, threads
    are not guaranteed to see a completely initialized object if the
    init function is called by two different threads.
    
    Change-Id: I33342891fe098f84791bf8358e82f31a4bc99d92
    Reviewed-on: http://review.couchbase.org/21152
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 388fd0edbdbd1eba90299c36c2d7dede284cfd65
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Wed Sep 26 16:37:56 2012 -0700

    Use Arrays.toString() when printing the contents of an array
    
    Just printing an array will print a useless value. Calling the
    Arrays.toString() function will at least try to print something
    useful.
    
    Change-Id: Ifd6a3da495835694b300cf7f94b96c79ee03f4bd
    Reviewed-on: http://review.couchbase.org/21153
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 495b4ee213684c68717085034328220475bb7711
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Thu Sep 13 18:12:58 2012 -0700

    JCBC-110: Delete operation in MemcachedClient now returns it's cas
    
    Change-Id: Id70241db2e4111f335b76ed9e6c6179d266aee94
    Reviewed-on: http://review.couchbase.org/20852
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 7d35d126c6473dd74f63ede0371f21672f92eef9
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Thu Sep 13 18:11:49 2012 -0700

    JCBC-110: Observe operations return their handling node in gotData
    
    Change-Id: I56f5f1844f0388a750ab5b5b4703e616b1e2aa10
    Reviewed-on: http://review.couchbase.org/20851
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 217c9af4747de735d5f5531478a74ef915321a4b
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Thu Sep 13 18:06:18 2012 -0700

    JCBC-110: Add accessor funcitons to observe enum classes
    
    Change-Id: If6c8ecd0fd5be178001db7db229b94a9184a8a2f
    Reviewed-on: http://review.couchbase.org/20849
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 50d1b369fe6e2e1a9cfdb6b1e605cda69fd9505f
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Thu Sep 13 17:50:10 2012 -0700

    JCBC-110: Fix getCas function in operation future
    
    We need to wait for the operation to complete if we call getCas
    and the operation is not finished otherwise calling this function
    will incorrectly throw an exception.
    
    Change-Id: Iefd90f04f8ebdeaf569b69be6dea7deac03a2c80
    Reviewed-on: http://review.couchbase.org/20848
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit aae7719bb6ef36c5d7b2579bff0d8ff2262b5340
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Fri Sep 7 16:55:42 2012 -0700

    Broadcast operations only send to specified nodes
    
    This was causing observe replica broadcast to always have a positive
    countdown latch and timeout.
    
    Change-Id: I4b49cb094ede8875757eb4b09d7b5a5ee50e848a
    Reviewed-on: http://review.couchbase.org/20655
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit c1acdae69166fcb8699f0dd5a8cfb7dad84bef09
Author: Raghavan Srinivas <rags@acm.org>
Date:   Thu Aug 30 00:19:52 2012 -0400

    Change cas for Observe Statuses, return OperationFuture on async.
    
    Change-Id: I11990b82473604406d0db9d1cdca000692023ed7
    Reviewed-on: http://review.couchbase.org/20327
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit b1a7ece3f8b6ea3982599cf4eb89c297c1001a99
Author: Raghavan Srinivas <rags@acm.org>
Date:   Mon Aug 20 20:33:12 2012 -0400

    Fixed issues with the Observe Method(s)
    
    Change-Id: Id2a1483bc1c75268f579b3df88ae4e8d488b6f46
    Reviewed-on: http://review.couchbase.org/19919
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 52c767d5d8dd0d4df39cea5ff05580f7d07c753a
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Aug 19 14:00:34 2012 -0700

    Add the node back to connected during reconnect.  Issue 225.
    
    The connection was being added back a bit later than its
    reconnect, causing operations to continue to timeout.  It's
    not clear if this is platform specific or not, but this change
    is reported to work.
    
    See http://code.google.com/p/spymemcached/issues/detail?id=225
    
    Change-Id: I47960883b515a1d2b571e5b286179337dd960b2e
    Reviewed-on: http://review.couchbase.org/19847
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 4b27226dc2e7f1d29b7d268570d68169f1ec0bb2
Author: Raghavan Srinivas <rags@acm.org>
Date:   Mon Aug 13 02:21:50 2012 -0400

    Fixed failing Unlock test
    
    Note this isn't a complete fix for handling unlock.  Several
    possible responses are ignored.  That is tracked under SPY-97
    for now.
    
    Change-Id: I20b0e9734c7fa170edcd38c76e59f353f4a4df41
    Reviewed-on: http://review.couchbase.org/19538
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 9455c1ae7935d62581ced73397ce9d89a40645d6
Author: Raghavan Srinivas <rags@acm.org>
Date:   Mon Aug 13 01:48:20 2012 -0400

    Changes for Observe.
    
    Change-Id: I94a0709e0856b5dd72d108feec9574b0836b4fbf
    Reviewed-on: http://review.couchbase.org/19537
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 43f3ad81fb592e06973879b7ed2d170439832875
Author: Raghavan Srinivas <rags@acm.org>
Date:   Sun Aug 12 17:45:51 2012 -0400

    Adding a getCas() for Store functions
    
    Change-Id: Ieced868b0b9870838801fd45eee010f61e215fd6
    Reviewed-on: http://review.couchbase.org/19534
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit bda95eccd29f881c5c7f4fc92ed1efa2e42d1890
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Jul 30 15:06:39 2012 -0700

    Fixed misc checkstyle errors which crept in.
    
    Change-Id: I72161b5867b12aa31206a8924f46651cc0566d11
    Reviewed-on: http://review.couchbase.org/19035
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>

commit 807e2eaa13c4bdbf45ef343ee8a02fbc2b12025c
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sat Jul 28 11:59:20 2012 -0700

    Change selection key logging to debug level.
    
    I was debugging with package net.spy.memcached at the INFO
    level and it was rather annoying seeing these selection key
    messages for each operation.  I believe they should be
    debug level
    
    Change-Id: Ifbb7b619f1e9d85433ff6c7a07ea4cc292737285
    Reviewed-on: http://review.couchbase.org/18996
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit b70d1a0c16a0d6da9d57880e558dc87e430253ed
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Jul 23 01:02:08 2012 -0700

    Revert ErrorCode and OperationStatus changes.
    
    This is a squashed revert of two separate commits. After
    disabling optimization, I still found failing tests. I had
    thought it was related at first, but after doing a bisect
    it clearly identified the "Create an ErrorCode class" as
    the culprit. In combination with the OperationState
    correctly being volatile, it would regularly fail in the
    midst of bulk operations.
    
    This commit reverts:
    "OperationStatus now has an error code"
     commit cdc26cdfaeecc63714c1edcf297d6ffc2c9b8554 and
    "Create an ErrorCode class for error codes"
     commit 82ad6cb4629a2c98fdebc55ad10f058cd2767ff9.
    
    Change-Id: Id6e04ed1787e140c5072a78cece682c45fe06313
    Reviewed-on: http://review.couchbase.org/18683
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Tested-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>

commit 568149bf02d37a761932c97100bf54dca5a3448b
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sat Jul 21 14:02:37 2012 -0700

    Disable optimization by default, remove assert. SPY-88.
    
    This is only a workaround at the moment for SPY-88, but
    it was found that the addition of the assert with a
    javadoc change and changing OperationState to volatile
    would cause failures in test cases like the
    testParallelSetGet() indicating there is a thread
    safety issue.
    
    While trying to find the specific cause, it seems the best
    approach for now is to disable optimization.
    
    The assert, while correct, is also being disabled since
    it seems to trigger issues with getBulk which seems to
    call the complete() more frequently than it should.
    
    This combination of changes seems to be a tested, stable
    workaround until a proper fix may be implemented.
    
    Change-Id: I755b18aa487247a445657726ae2dc8dad6a27991
    Reviewed-on: http://review.couchbase.org/18670
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 8fa20606020d440d755f2aed473011db17d7c3bf
Author: Marty Schoch <marty.schoch@gmail.com>
Date:   Thu Feb 23 17:43:06 2012 -0800

    add support for TAP request/response with checkpoint info
    
    Change-Id: If646c70aaa345f3dd1191257dfcedc1aaacdc7b1
    Reviewed-on: http://review.couchbase.org/13571
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit b9cf1f4fcf8a7c067b0fdcd1b6b9d5c8d3112b12
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Jul 23 01:13:32 2012 -0700

    Correct test for StringUtils.join().
    
    Change-Id: I9c320db96a1a1587d39696195f44a1d775cdd0a8
    Reviewed-on: http://review.couchbase.org/18682
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Michael Nitschinger <michael@nitschinger.at>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 7cb614f27a3d05af0253e0ae846a738cdcf8c356
Author: Marty Schoch <marty.schoch@gmail.com>
Date:   Thu Feb 23 17:33:01 2012 -0800

    add TAP Opcodes for start/end checkpoint
    
    Change-Id: Ic90fee141df1485ac55e6fdfc5a922f6a158803b
    Reviewed-on: http://review.couchbase.org/13570
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Marty Schoch <marty.schoch@gmail.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 4fd6985e3cc2a59909fb5d0dc6a3107ea634cbd7
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Jun 26 09:48:34 2012 -0700

    Let offline try to work with already downloaded mvn.
    
    Change-Id: I7d41ef0e1781fc1c1f3b3ca01cf07edf5b3d3639
    Reviewed-on: http://review.couchbase.org/17667
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit d7139e702bfd3c7535690547a460472af335254d
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Tue Jul 10 19:48:18 2012 -0700

    JCBC-72: Make OperationException extendable
    
    This change is needed for a ViewException object in
    Couchbase Client.
    
    Change-Id: I7730bf378e9437d6575d5e9880295a25571d28f6
    Reviewed-on: http://review.couchbase.org/18196
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 5bcaab0ceb11b77335c95622018593ce395a5e03
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Jun 3 22:11:58 2012 -0700

    Comment correction in MemcachedConnection.  Non-javadoc.
    
    Change-Id: Idf5f35739cb286a8e808891a202964ca67e685cf
    Reviewed-on: http://review.couchbase.org/17666
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 144edb4878d01dfdabe7a4750e1db883cb6caa5e
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Sun Jun 10 18:51:44 2012 -0700

    JCBC-52: Fix StringUtils.join()
    
    This function was implemented incorrectly. It was returning
    a,b,c,
    
    when it should have been returning
    a,b,c
    
    This change fixes this issue.
    
    Change-Id: I822bd3accc2dd2b122b1b44dfe79d8ed36250cf2
    Reviewed-on: http://review.couchbase.org/17027
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 5d84027b6025a8f4e431b42c240321346a70e13f
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Tue Jun 26 14:37:13 2012 -0700

    Fixed parsing of delete tap packet
    
    We weren't taking the revid into account
    
    Change-Id: Ice82717ada14c7e85b6191470d7174189f878073
    Reviewed-on: http://review.couchbase.org/17640
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 40f700f7ed4e4530cac831b30fd5bba68236cc0b
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Sun Jun 10 18:53:16 2012 -0700

    SPY-90: getStats() can return an error
    
    Change-Id: Ida7f9ec4aa101873d464a42db9e5b2b55f2910fa
    Reviewed-on: http://review.couchbase.org/17028
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit cead32ee3601a166aa5c473ed41d483a8bd88718
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Sun Jun 10 18:31:47 2012 -0700

    Check if op is null before asserting in OperationFuture
    
    On another note, the change Matt put in that added this causes
    two other test failures that I didn't have time to fix. I should
    have run make test before pushing his change.
    
    Change-Id: I8bc580f3305191521949a28ce70bca0da8b24d2b
    Reviewed-on: http://review.couchbase.org/17026
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 3c03623ce22949be83ca4211b89e746defbbf2ab
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu May 17 10:23:51 2012 -0700

    Add javadoc for OperationFuture.
    
    Change-Id: I9cce09cb58bf8e7ee4afe33f70ec01638b126d85
    Reviewed-on: http://review.couchbase.org/16256
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit ad74d96fdad7680ecaad9526d2c297409b3091a3
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu May 17 10:23:29 2012 -0700

    Make the OperationState volatile.  SPY-88
    
    Change-Id: Id8a871c018a6a6372367129b8924e5a833f83644
    Reviewed-on: http://review.couchbase.org/16255
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit cdc26cdfaeecc63714c1edcf297d6ffc2c9b8554
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Sat May 12 13:19:49 2012 -0700

    OperationStatus now has an error code
    
    Having error codes will make it easier for users who get errors
    to test for what error it is. Right now we only have the message
    string and this can actually be different for the same error type.
    
    Change-Id: I067e3145d5d95b09d7ca0ad0445bcfa5d5784d51
    Reviewed-on: http://review.couchbase.org/15949
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 82ad6cb4629a2c98fdebc55ad10f058cd2767ff9
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Fri May 11 15:27:28 2012 -0700

    Create an ErrorCode class for error codes
    
    This allows us to use error codes in other places than just
    operations. This class defines all of the Memcached error codes
    as well as two client specific codes (timed out and canceled). The
    reason for client specific error codes is that is gives the user
    something definitive to test against when error cases happen.
    
    Change-Id: I6b4b21ec8448444103d8e73b440df6085bdc1e33
    Reviewed-on: http://review.couchbase.org/15948
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 2ee17b256a25e5cc68832473cd245a075fc67a84
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Sat May 12 13:17:33 2012 -0700

    Fixed tap message test cases
    
    The flags were wrong here. We were passing a long, but the flag said
    it was an int.
    
    Change-Id: I58af8a9899025fc54db4d374bce6ca5d29b309af
    Reviewed-on: http://review.couchbase.org/15947
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 87158efd76ab3af2bd03ff4685e1add535ea3ea6
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue May 22 16:47:08 2012 -0700

    Make queueReconnect protected so subclasses can request reconnects.
    
    In fixing JCBC-53 on the Couchbase Java client, a need to queue
    reconnections in some cluster configuration updates was found to be
    required.  This change allows that.
    
    Change-Id: I25ce3945b4e5e6527dd680031237be22faed69ee
    Reviewed-on: http://review.couchbase.org/16335
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit ac6ccd8206aa69825822b611286adf350a03193c
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon May 21 11:24:52 2012 -0700

    Change vbucket retry logging to debug level. SPY-87
    
    Change-Id: I31aa045ff6d328858fa44e53720e38b20b8d38dc
    Reviewed-on: http://review.couchbase.org/16257
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 52274c7668c7ffc70e3507b7b9b0cb0da856eab4
Author: Mike Wiederhold <mike@couchbase.com>
Date:   Sun May 20 23:30:12 2012 -0700

    Retry not my vbucket error for optimized sets. SPY-88
    
    Change-Id: I729781636917f80714cf8d9460e4523e876e1258
    Reviewed-on: http://review.couchbase.org/16251
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit abcb8b32d7559ffdefa097ac0e53a4f429a10fdd
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sat Feb 18 22:57:37 2012 -0800

    Added toString() for ResponseMessage.
    
    Change-Id: Ie627cd14631a01a0258d67337251c552e90aa3bc
    Reviewed-on: http://review.couchbase.org/13361
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 0c5bacddda66ede2ee80971b19255bfe8643c4b4
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Mar 21 09:29:08 2012 -0700

    Make log4j, spring-beans optional in our maven artifacts.
    
    Change-Id: I579a5832fc4ff0ed9d4303c80b309a25dc8cfbaf
    Reviewed-on: http://review.couchbase.org/14159
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 9cc52e60f4e01a1d15ed93a300b9b821098bb49f
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Mar 21 09:22:30 2012 -0700

    Bump log4j to 1.2.16 to get rid of transitive JMS deps.
    
    Change-Id: Ie98c136a0c1d450ba3aa5ccd12dfc40650653131
    Reviewed-on: http://review.couchbase.org/14158
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit d11c66725d63467fd8d53888a656e99a66460477
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Mar 20 23:46:12 2012 -0700

    Complete the removal of stats cachedump.
    
    Unfortunately, late night coding means I put up a change and
    marked it verified, but it makes the project not compile.  Not
    worth rewriting history for these 5 commits or so, but need
    to fix it.
    
    See also http://review.couchbase.org/#change,14142
    
    Change-Id: I975a79774fe7d8ec0484fb69c0910525ed164b02
    Reviewed-on: http://review.couchbase.org/14143
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit c544245e18e945e58a199693da073dd1e3f32b73
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Mar 15 17:48:12 2012 -0700

    Add test coverage for ResponseMessage and fix to get bytes.
    
    This adds test coverage to the ResponseMessage.  This test was used
    for finding and addressing a number of recent fixes and verifying
    correct support for requesting the flags to be sent correctly in
    network byte order.  These other fixes were added in recent commits.
    
    Change-Id: I68355b5ea10437c144a7b4a46adb7d005edfa0fc
    Reviewed-on: http://review.couchbase.org/13996
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 66367ecb910aae124bd0f6bc06815a23e095966e
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Feb 22 21:48:13 2012 -0800

    Decode TAP mutation flags as host byte order.
    
    In trying to decode the item flags from a tap mutation, it was found
    that the flags are stored in the server in network byte order, but
    when sent over tap it goes through htonl() conversion, making it a
    double conversion.
    
    Future versions of the server now allow for the client to specify
    it would like the flags sent correctly, via a TAP flag, and the
    server will set a flag to say they're being sent correctly.  With
    this change, we now request things to be correct and if we don't
    receive a flag saying it's correct, we swap the bytes (assuming we
    are talking to a 'broken' server).
    
    In developing this change, a test was also developed but to
    complete the test correctly, some other issues had to be fixed.
    Thus the test isn't in this commit, but rather in it's own commit
    after cleaning up the mess.
    
    Change-Id: I63b69273cac194163b784211474ec2ff77bd7959
    Reviewed-on: http://review.couchbase.org/13510
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 501847427bd44ff16febd0b2311c3d7609043ac6
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Mar 15 17:44:24 2012 -0700

    Fixed handling of TAP flags.
    
    The request and response messages for flags were not following the defined
    protocol for their data size.  Also, the logic in the setting of the flags
    was incorrect, meaning it wasn't actually possible to determine which
    flags were set.
    
    A test that verifies correct behavior will be added in a later commit
    that introduces test coverage for the ResponseMessage class.
    
    Change-Id: I20ae1b176cb3bc764e993ab98254b15f69cba9ea
    Reviewed-on: http://review.couchbase.org/13995
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 1a4cbeaf5ecadfb26db49ce97a6c1d33b9be94c6
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Feb 22 21:47:56 2012 -0800

    Wait longer on tap data received.
    
    Change-Id: I5279eec0f642688013c9a8d98ca4a7922cae9d42
    Reviewed-on: http://review.couchbase.org/13509
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit b93ff8f7f18893972976df363b785134dc7ba6d4
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Mar 20 22:48:22 2012 -0700

    Remove test for "stats cachedump".
    
    In the most recent memcached memcached branch, stats cachedump
    has been removed.  It now returns an error saying it's not supported.
    
    See also:
    http://code.google.com/p/memcached/issues/detail?id=207
    http://www.couchbase.com/issues/browse/MB-4058
    http://review.couchbase.org/#change,13854
    
    Change-Id: Ib3d344e7a0db28994017c515e1c56c4efdcfae19
    Reviewed-on: http://review.couchbase.org/14142
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 98aafe173f15fd25b68fc85a925112b5b174314b
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sat Feb 18 23:00:11 2012 -0800

    Enhanced TapTest, ensuring success with random leftovers.
    
    Change-Id: Ia5ed0e3a6a2074a1dac229904826fdd838e06b37
    Reviewed-on: http://review.couchbase.org/13362
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 12771b87486c76df32ffa9f2ba5522ba6be5d827
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Feb 7 19:31:37 2012 -0800

    Made TapAck its own class
    
    This will help reduce having duplicate code.
    
    Change-Id: I96f7fb126ab3f7879e590131ded7229f9f75bc31
    Reviewed-on: http://review.couchbase.org/13084
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 680f227582aab17b75a6ef6eaf9e887c65d8a8ea
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Feb 7 18:42:25 2012 -0800

    Created TapStream abstraction
    
    Previously when we created a tap stream we would only send it
    to a single node in the memcached cluster. This fix creates
    a tap stream abstraction that aggregates the tap streams
    sent to each server and treats them as a single tap stream.
    
    Change-Id: I68650e187eec5f79952dab1374bad0e07d5a6c30
    Reviewed-on: http://review.couchbase.org/13081
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit c3f32fb1395026d6faecbe0c5a8649039d99bfc5
Author: Raghavan Srinivas <rags@acm.org>
Date:   Tue Jan 31 19:19:26 2012 -0500

    Added support for unl command
    
    Based on patch submitted by Brent Ryan
    
    Change-Id: I9da7cc17eb5adedc9c2cac79ab562bab0fc7ba52
    Reviewed-on: http://review.couchbase.org/12908
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>

commit 01fe32e1a3a86be181b347cfdcdb80d47f2e3588
Author: Ted Crossman <tedoc2000@gmail.com>
Date:   Wed Jan 11 09:46:56 2012 -0800

    Add Iterator versions of getAsyncBulk and getBulk
    
    Add the following methods to Memcached/MemcachedIF:
    - <T> BulkFuture<Map<String, T>> asyncGetBulk(Iterator<String> keys,
          Iterator<Transcoder<T>> tcs);
    - <T> BulkFuture<Map<String, T>> asyncGetBulk(Iterator<String> keys,
          Transcoder<T> tc);
    - BulkFuture<Map<String, Object>> asyncGetBulk(Iterator<String> keys);
    - <T> Map<String, T> getBulk(Iterator<String> keys, Transcoder<T> tc);
    - Map<String, Object> getBulk(Iterator<String> keys);
    
    Some times it is more convenient/memory efficent to pass in an
    Iterator of keys than it is to have a Collection of them.
    
    Example:
    
    public PrefixAdderIterator implements Iterator<String> {
    
      private final String prefix;
      private final Iterator<String> iterator;
      public PrefixAdderIterator(String prefix,
             Iterator<String> iterator) {
        this.prefix = prefix;
        this.iterator = iterator;
      }
      ...
      public String next() {
        return prefix+iterator.next();
      }
     ...
    }
    
    rather than
    
     List<String> prefixedKeys = new ArrayList<String>();
     for (String key: keys) {
      prefixedKeys.add(prefix+key);
     }
    
    Change-Id: I15821983ea2ebd07fd98feeb968ce9fa578ded0b
    Reviewed-on: http://review.couchbase.org/12283
    Reviewed-by: Ted Crossman <tedoc2000@gmail.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 3740d617733ba94e8f27ef6ca7a5816ac3ec115e
Author: Raghavan Srinivas <rags@acm.org>
Date:   Sun Jan 22 11:06:11 2012 -0500

    Changes to do a staging of Maven locally
    
    Incorporated chanes Ife95d2f4, I34b46bc0, Ib71d9ab4 from
    couchbase-java-client.
    
    Change-Id: I2523f96e6e0fe1791876001bbc345a23674ba6dc
    Reviewed-on: http://review.couchbase.org/12581
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit ffa140a96a5220c207c92a4cfa848c38ddd171fc
Author: Raghavan Srinivas <rags@acm.org>
Date:   Sat Jan 21 23:44:52 2012 -0500

    Added Javadocs JAR publication
    
    Change-Id: I90f78654835939305bb0342f8442ea8a54cabd14
    Reviewed-on: http://review.couchbase.org/12575
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 57cbc134f5f3fd4495e150370a62eecc6218358e
Author: Raghavan Srinivas <rags@acm.org>
Date:   Sat Jan 21 19:28:37 2012 -0500

    Changes to stage Maven repository locally
    
    Added a target mvn-stage to stage repository to {user.home}/mvn-stage
    Based on http://draconianoverlord.com/2010/07/18/publishing-to-maven-repos-with-ivy.html
    
    Change-Id: I90eaf4107ef8942855cb9c125d2428fe6076e538
    Reviewed-on: http://review.couchbase.org/12573
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 8df59cfd1a74b244629579f4b1394201ca4ed540
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jan 11 16:33:40 2012 -0800

    Split tap flags class into request and response
    
    Tap requests and responses flags have different meanings. They
    should be represented by two different classes.
    
    Change-Id: Ib5f8d76aa6ce05cf8f5c15980f29b8e93100d6a8
    Reviewed-on: http://review.couchbase.org/12298
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 1cfc1c29d79af22b91adbcbd946ef691972c197a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sun Jan 8 19:05:20 2012 -0800

    Added a tap client back to Spymemcached
    
    The tap client was removed from Spymemcached when we split the
    project in two. Since Spymemcached supports some of tap I have
    moved back only the code that makes sense. After this commit
    Spymemcached will support only the tap dump command. Note I
    have also left the tap custom function in case future versions
    of memcached support more tap options and Spymemcached is unable
    to keep up. This tapCustom function will also allow people who
    write their own engines for memcached to take full advantage of
    the tap protocol.
    
    Change-Id: Ief2909d0177c944dc39023b205f5fad03f3acb97
    Reviewed-on: http://review.couchbase.org/12158
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Tested-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>

commit 3de49732cf330883332ee308d940d055b8a2177a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Jan 7 21:59:57 2012 -0800

    Fixed javadoc warnings
    
    Change-Id: I401beb3473631024d9362451cb5f3b0a4f72277d
    Reviewed-on: http://review.couchbase.org/12143
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 1675e185b284ac5627ff0038a80c68f69747c60a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Jan 7 21:21:04 2012 -0800

    Made getNodeLocator() public
    
    We are refactoring the package names in couchbase client and
    need access to this function from outside of the package space.
    
    Change-Id: Idbab18ffa7d30400fb7c066f3ccdace2e93201e2
    Reviewed-on: http://review.couchbase.org/12049
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 7d6bcb454634453e81fb4bf466dc64e73140b799
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Jan 7 21:08:59 2012 -0800

    Moved addOp() to MemcachedConnection
    
    Change-Id: Ia2b64253cb24331e73806ebd92a2501f029439c4
    Reviewed-on: http://review.couchbase.org/12142
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 406f5d947b1a1e006695e65b3d4541f67f5eebbb
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jan 5 17:03:25 2012 -0800

    Removed server.type parameter
    
    Spymemcached is only meant to work against memcached now so we
    don't need the ability to include/exclude tests.
    
    Change-Id: I816a86405c4d0d4d696f72bcf115e98b1e8632aa
    Reviewed-on: http://review.couchbase.org/12141
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 055f40cc7f4c3f5fec0e6b897e582f44015f6fc8
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Jan 7 19:33:10 2012 -0800

    Moved validateKey function to StringUtils class
    
    Change-Id: I194dc2f7feb59d49579ec5123e21d17bbf3b6ef9
    Reviewed-on: http://review.couchbase.org/12139
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 74416155e514007178bfb222efdc36ba6524513d
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Jan 7 20:48:47 2012 -0800

    Provide test type default value and print it at test time
    
    Fixed checkstyle errors as well
    
    Change-Id: Ie28277585c7da21e8ab4dbf5d738e69e24597a02
    Reviewed-on: http://review.couchbase.org/12137
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 36e4014c208e96a6957adaaf7efc92968ddff289
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Jan 7 20:11:54 2012 -0800

    Added the capability to test based on different ports
    
    Memcached can start on different ports and the tests can be configured to
    run correctly than using the default 11211
    Fixed checkstyle errors as well.
    
    Change-Id: Ie2a589dc5040d465eb74bb7918f866165109d011
    Reviewed-on: http://review.couchbase.org/12127
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 2d78bce808cfe6f56aa456cb7b33584863efb6fd
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Jan 7 19:25:17 2012 -0800

    Fixed checkstyle errors
    
    Change-Id: I497286aa37a37b251681e42a8fcdd45ce8dc5577
    Reviewed-on: http://review.couchbase.org/12138
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit ab2395c37ea90c77b91e1966d15ff376c74fe2a5
Author: Raghavan Srinivas <rags@acm.org>
Date:   Thu Jan 5 18:56:34 2012 -0500

    Added options to selectively run some tests for CI
    
    Change-Id: Ia6606f73d9fd8006ee4b714bbfc25e320370d414
    Reviewed-on: http://review.couchbase.org/12088
    Tested-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 38214966c5d641fca926e4a797584d76af9860b8
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jan 4 13:57:08 2012 -0800

    SPY-69: Fixed CASMutator expiration issue
    
    The cas call in this class wasn't using the function that allows
    the expiration to be specified. As a result, if the CASMutator was
    used and an item was already in memcached then the expiration would
    be set to 0.
    
    Change-Id: I49e28b2c89555ebbc24dc8db109fc5c0a7b40cf4
    Reviewed-on: http://review.couchbase.org/12052
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 94eed0045389ce25db6f6a483efdac5cef2ed5d4
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 17:02:51 2011 -0800

    Fixed project description
    
    Change-Id: I9b10e2b4fbed283aa124f7db8a5ee91a163c2f40
    Reviewed-on: http://review.couchbase.org/11109
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 727e0b6a3dc5ec23cd6e69139fbb99ab5b61718c
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 15:44:28 2011 -0800

    Don't put test after ther version # on test jars
    
    Change-Id: I3cb98b7fe7be52e59fb96fe9fdd6ef04ce25ed04
    Reviewed-on: http://review.couchbase.org/11108
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Tested-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>

commit afa4cb4f611505d8fa1130a9e51a5fd5f099bb35
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 15:41:19 2011 -0800

    Don't hardcode "spymemcached" the buildfile
    
    Change-Id: I35b144c70d382da5a862119cf762ca6383323f95
    Reviewed-on: http://review.couchbase.org/11107
    Tested-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>

commit 03c44bc14c345f263bd6a2e9fce6e5b147fa3a38
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 15:19:03 2011 -0800

    Only generate a version once in the build file
    
    Change-Id: I90619ff869d49b31c09a227bb96e9f1d6dbe0d7b
    Reviewed-on: http://review.couchbase.org/11106
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 8e6018d88d870c911eb112ba8765b47d399364d1
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 15:18:42 2011 -0800

    Remove tests that checked for Membase/Couchbase
    
    Change-Id: I0dd8e0acbe9eecc06542ca4fee45de99c1844227
    Reviewed-on: http://review.couchbase.org/11105
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit b11b4e9ee028a431ac87fd5104faa522c8d35dff
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 12:12:52 2011 -0800

    POM files now generate the correct scopes
    
    Change-Id: I924eb5b3df30241b21b4dd101f5962268ea05911
    Reviewed-on: http://review.couchbase.org/11104
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 1fc7482164d17a305aba91ace617cf8cacd5fb95
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 12:09:56 2011 -0800

    Remove unused dependencies
    
    Change-Id: Ie1bdaa247966a42d830fdce51b770fb36f4db324
    Reviewed-on: http://review.couchbase.org/11103
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 647df7595325abc98d4485d055b0d7e59fe26bb9
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 11:29:06 2011 -0800

    mvn-install publishes spymemcached test cases
    
    Since we will be creating projects based on Spymemcached
    we will want to be able to import the Spymemcached test
    cases into those projects so we can extend and use some of
    the existing test cases. This change allows us to publish
    a jar of Spymemcached tests into maven.
    
    Change-Id: Ida7f38c0bb94a420e24ec935a3b68e1d70cae6aa
    Reviewed-on: http://review.couchbase.org/11102
    Reviewed-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>
    Tested-by: Raghavan N. Srinivas <raghavan.srinivas@gmail.com>

commit 5a0fa153a45fdea60bb304810d9d041d1a2f5d01
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 11:00:07 2011 -0800

    Added variable names for versions to spymemcached.xml
    
    Change-Id: I65ea6f1aaf6c501e2f7746ec9027f20f517751ec
    Reviewed-on: http://review.couchbase.org/11101
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit f4c3552e942889106d4f3ed259e7b256405091d3
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 10:37:45 2011 -0800

    Rewrote javadocs file attachment for mvn-install
    
    This shouldn't have it's own artifact:install function
    since it can be included in the one that already exists.
    
    Change-Id: I1512cdc6b76409796085ffdf8182a6d73fd4319b
    Reviewed-on: http://review.couchbase.org/11100
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 5e83890efb7dc279f50a39c4898bfe978de815b1
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Nov 17 10:12:17 2011 -0800

    Removed all Membase and Couchbase support
    
    We are splitting up this project into two seperate projects. One
    project will support memcached and the other will support Membase
    and Couchbase.
    
    Change-Id: I383dfcde9b5c1fbd0225e5a5e8ee001e8e3ada60
    Reviewed-on: http://review.couchbase.org/11099
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 037de21fb287981d1873634590a8d846e1834100
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sun Oct 23 17:57:06 2011 -0700

    Use variables for jar version names
    
    I just realized I +2'ed a commit that had these hard coded. The
    only place a version number should be hard coded is in the
    ivy/library.properties file.
    
    Change-Id: I033dcc36ffdb0795463794c2838dad651aeb4e3b
    Reviewed-on: http://review.couchbase.org/10304
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 2c8875e70993ceafadbd73bfaf60a573db1680de
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Oct 23 15:50:08 2011 -0700

    Update maven dependencies and metadata for more completion and accuracy.
    
    Change-Id: I3e5de47f609b52dd2dfe8d3cfc3803cee4c46f92
    Reviewed-on: http://review.couchbase.org/10302
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 2d2395c4e9023a7ff76bbc151d0b027e74844390
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Oct 23 14:43:11 2011 -0700

    Update maven pom generation with more detail.
    
    Change-Id: I80dca6250f7b3f72c6175dce7769f91908f74770
    Reviewed-on: http://review.couchbase.org/10301
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 9d5a1967f62848b9912f0c4b00c4ed21d9c3f362
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Oct 23 14:40:19 2011 -0700

    Update to Netty 3.2.0.Final.
    
    We have already updated 2.7.3 to Netty 3.2.0 and added compatibility
    with either 3.1.5.GA or 3.2.0.Final.
    
    In 2.8, we will support only 3.2.0.Final, though 2.7.x will continue
    to support 3.1.5.GA.
    
    Change-Id: I86ca4471c3b845a2f4edd0004a4ec9ad9d766e7b
    Reviewed-on: http://review.couchbase.org/10300
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 2141420d6d8c3be1a6d441c6369e0d7e09ac2bcb
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Oct 23 14:08:34 2011 -0700

    Skip all ConfigurationProvider tests when testing against memcached.
    
    Change-Id: I85bef0e42146e90c58082a4c175b41d47112f5b5
    Reviewed-on: http://review.couchbase.org/10299
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 22133f296515805436ecc32c4af70ead5e234c43
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Oct 23 13:18:09 2011 -0700

    Rename and fix VBucketMemcachedClientTest to VBucketMembaseClientTest.
    
    This test was causing other test failures because it didn't clean up
    after itself.  When trying to determine why the test was even used
    here, I realized it had not been renamed in the refactoring between
    2.7 and 2.8.
    
    Change-Id: Icf3fb6a3750572685d9806aa6f90af23f25eadc6
    Reviewed-on: http://review.couchbase.org/10297
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 4f2880a13c476f23ca002c698d6971d2e396b727
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Oct 20 17:49:36 2011 -0700

    SPY-58: Don't compress json objects
    
    We don't actually parse the whole object. Instead we look
    at the first character and if it looks like json then we
    don't compress it.
    
    Change-Id: If60423b56ebf22c4529bffe95496ffe8b833a65f
    Reviewed-on: http://review.couchbase.org/10260
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 1675bdbfe472b8e0f1e75a7009450b9a01e39d0f
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Oct 22 12:54:15 2011 -0700

    Fixed a typo when computing vbucketlist size for tap messages.
    
    Change-Id: I2e3807f976363e8b8bd985e9b6faa283875ed7f1
    Reviewed-on: http://review.couchbase.org/10294
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 1a0a992f0d36912517248d56d3fd4c40aba3a349
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Sep 15 13:32:09 2011 -0700

    Fixed testOverflowing ReadQueue in QueueOverflowTest
    
    The issue with this test failing inconsistently has to do with
    how many operations are in the input queue when the first
    queue overflow occurs. The queue size is 5 and if there are more
    than 5 operations in the input queue then this will cause a second
    queue overflow when we try to do our final operation. This fix
    corrects the error by making sure that we drain all of the
    operations from the write queue and therefore make sure that there
    is actually space for the last operation.
    
    Change-Id: I1e793514e8b1df1dbcdb133fba7cec837994b6d9
    Reviewed-on: http://review.couchbase.org/9613
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit faa0dba9b4b31d5a1756920465c7f9f3aefb6290
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 26 11:08:15 2011 -0700

    SPY-4: Get CouchDB config info from config
    
    Change-Id: I00472392dd0c9a892f3f5ed2dd62249844ab92e8
    Reviewed-on: http://review.couchbase.org/9760
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 05a12e093b0596687b9b2e1c74a48846a0a2de46
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Oct 18 18:49:50 2011 -0700

    Fixed checkstyle issues from merge with refresh
    
    Change-Id: If8d61bd1e016afbac8f79c8b5481f1bb60c79b06
    Reviewed-on: http://review.couchbase.org/10202
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 954e62632811aa7aa46da9ddf3b42501600c838b
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 5 15:27:06 2011 -0700

    SPY-48: Incr/Decr param "by" should be able to take a long
    
    Change-Id: I4291caf70e28db19adb1754b5db6cdd364ef836a
    Reviewed-on: http://review.couchbase.org/9389
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 927858dfddde6fe35c5f1f24322f8eeb1cd36e29
Merge: 890add2 7cb63b8
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Oct 17 18:49:22 2011 -0700

    Merge branch 'refresh'
    
    Note there are three public variables that don't pass our
    checkstyle.  I'm proposing they be merged as is and then
    fixed in subsequent changes.
    
    * refresh:
      Continue to other URIs if one in the list is down. SPY-60.
      Revert "SPY-37 & SPY-38: Fixed redistribution performance issue"
      No need for old debugging string in test.
      Add compatibility with netty 3.2.0+.
      Refactored tap message classes.
      SPY-37 & SPY-38: Fixed redistribution performance issue
      Made vbmap in MultiKey operation synchronized
      Don't reconnect when a tap connection finishes.
      Flush the PrintWriter in TapMessagePrinter
      Removed extra variables in tapCustom header
      Removed a print line statement from TestConfig
    
    Change-Id: Icfc3f78fe00d1254f5ed30e1776301171b5e54a7

commit 7cb63b805c78a8b73f1cbd80ec2a785f41b6ccaf
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Fri Sep 30 15:29:00 2011 -0700

    Continue to other URIs if one in the list is down. SPY-60.
    
    Change-Id: Ic68ba9db5b5f645d3affc6964f7b2b90d309e519
    Reviewed-on: http://review.couchbase.org/10026
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 890add2c28afe1b5da1ec3714a54cc7e7a0432d8
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Oct 12 09:43:08 2011 -0700

    Format the readme correctly.
    
    Change-Id: I4e7b13fcb0a925277761c32373b3696eed9daa0a
    Reviewed-on: http://review.couchbase.org/10098
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 2393d4f84f256d27df99981c451ea28eb38aec6d
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Oct 10 21:04:04 2011 -0700

    Revert "SPY-37 & SPY-38: Fixed redistribution performance issue"
    
    This reverts commit 48e7e62b75c93925647a6acd6bcfe06b1b89f492.
    
    Change-Id: I9f6bc488406fc9c5ce537454b773d9baf21e379d
    Reviewed-on: http://review.couchbase.org/10059
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 3f6281abf8d36e27fecdfe0cecab65fdf933765f
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Oct 9 00:21:29 2011 -0700

    No need for old debugging string in test.
    
    Change-Id: I31ad1af2e6d0a33fa8534fa09e3f30175b931408
    Reviewed-on: http://review.couchbase.org/10027
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 4b8e1debbfb91287b02fe3a904dfd1f56f75edf4
Author: Martin Grotzke <martin.grotzke@googlemail.com>
Date:   Thu Sep 29 12:00:35 2011 +0200

    Add compatibility with netty 3.2.0+.
    
    Netty 3.2.0+ (NETTY-281) changed HttpMessage.setHeader(String, String) to
    setHeader(String, Object), which causes NoSuchMethodErrors when spymemcached is
    used with such a newer netty version. To prevent spymemcached users from other
    library incompatibilities the netty dependency is not upgraded, but the
    appropriate setHeader method is selected and invoked at runtime. This was
    discussed on the mailing list:
    http://groups.google.com/group/spymemcached/browse_thread/thread/4b9f0638bbcc96fb
    
    Change-Id: I1d2e7c4a3e6db6648d175364950eab6076a45e5f
    Reviewed-on: http://review.couchbase.org/9852
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 591a84097f930d77df35cb9b98ecce0faccd29e1
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Sep 22 11:13:41 2011 -0700

    Refactored tap message classes.
    
    These needed to be more readable and were horribly coded (by me). I
    started seeing issues with conversion from bytes on the wire to
    variables in spy so I changed how this was done.
    
    Change-Id: I583c43216643b111b6256f39ca475582b37267c6
    Reviewed-on: http://review.couchbase.org/9712
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 0186c404653f2d872b632237a9ed20ba52d79aa2
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Oct 6 11:53:49 2011 -0700

    Recognize a query is using a json object and don't quote it
    
    This fixes an issue where sending json object as the value to the
    key argument in a query was getting quotes put around it. We now
    check to see if something is a json object before we decide to
    put quotes around it.
    
    Change-Id: Icc9b70a068af8383a4da3045628e999a8df811d8
    Reviewed-on: http://review.couchbase.org/9986
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 48e7e62b75c93925647a6acd6bcfe06b1b89f492
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sun Sep 11 20:19:04 2011 -0700

    SPY-37 & SPY-38: Fixed redistribution performance issue
    
    This issue was caused by a O(n^3) algorithm used when redistributing
    operations among nodes. It turns out that one of the loops was not
    necessary because the clone operation is guaranteed to return a
    list of single key operations. Multi-key operations are never
    returned as part of this list.
    
    The fix involves removing the one of these loops. which frequently
    queued duplicate operations for transmission. Since the
    operations are all single key, the list returned by the call
    getKeys() is guaranteed to have only one operation.
    
    Change-Id: Id8cf17132bff06dba78935cbb8b81d83f58b4bc2
    Reviewed-on: http://review.couchbase.org/9514
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 6bb9ffd7ac4c02e58b75a5fcc62f4e496b32d2c9
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 26 11:50:35 2011 -0700

    Updated README.markdown to reflect the new build file
    
    Change-Id: I33890737d862ec38e29e1c5e09f3d338652e97f2
    Reviewed-on: http://review.couchbase.org/9765
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit a2a5216979785a025b05cfbaa9623a100df1ffad
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 26 14:20:35 2011 -0700

    Made vbmap in MultiKey operation synchronized
    
    There was a concurrency issue here that has to do with accessing a
    two threads accessing the same set. One thread is iterating over
    the set and the other is modifying the set. This modification
    causes iteration to undefined and therefore java throws an error.
    
    Change-Id: I17ea7a0146443ed1ef4578fb04cab431a3e723d7
    Reviewed-on: http://review.couchbase.org/9769
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 126f34782b00d35ae1041280ed0e775964f134a2
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 26 11:41:57 2011 -0700

    The jar target now builds a jar of all of the test classes
    
    Change-Id: I1c2e862699f1784bde1294ad62996ebfacfbe1bf
    Reviewed-on: http://review.couchbase.org/9764
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 90dbc5208a8205e0d5bf9da1cb1f1d78a22f03ba
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 26 11:33:58 2011 -0700

    Install javadocs java into local maven when doing ant mvn-install
    
    Change-Id: Ie63b1479bb6dfa4959f78429159c4eb45573d2a5
    Reviewed-on: http://review.couchbase.org/9763
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 5dff04e3e996db86ae432142e98795b38cdde1a2
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 26 11:28:14 2011 -0700

    Made package the default target and made it build all jars
    
    Change-Id: Iaa0490030d869897b837e6f5bd38ba5332e34827
    Reviewed-on: http://review.couchbase.org/9762
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 00ca4d41aa66579c74849ec939fc48e3c09c0471
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 26 11:27:24 2011 -0700

    Added a docsjar target
    
    This target creates a javadoc jar file from the generated docs
    
    Change-Id: I65c4084df0a4b0ea0e2cedbd934eb0dab2ea378d
    Reviewed-on: http://review.couchbase.org/9761
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 83f708a3107175f9b15bc78aa3000c084a7c3706
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Sep 7 12:38:59 2011 -0700

    SPY-26: Add Getl Tests
    
    Change-Id: I3d512837f31d5e4d46096235a49f65245895de77
    Reviewed-on: http://review.couchbase.org/9452
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 4dfaceaf8be010a1f7da26fb3b581667ad6a1f27
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Sep 21 19:08:24 2011 -0700

    Don't reconnect when a tap connection finishes.
    
    Change-Id: I7c70697bdd8f67f451c514193ae2d6fa2856dfc7
    Reviewed-on: http://review.couchbase.org/9711
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 7655ad6ade7e8bd8693988530cb781f551f4475b
Merge: ffe0eed c273117
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Sep 24 19:53:14 2011 +0000

    Merge "Merge branch 'refresh'"

commit 878c31fa0518fef331fa4aa2115db99831dea9ed
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Sep 21 18:56:11 2011 -0700

    Flush the PrintWriter in TapMessagePrinter
    
    This doesn't print anything until you flush.
    
    Change-Id: Icc98b26ecb1da4c9f3dbf96f9e827801f3b807b1
    Reviewed-on: http://review.couchbase.org/9710
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit a00fc238b166f41f91fd04b71d92def2325e0a68
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Sep 20 12:07:31 2011 -0700

    Removed extra variables in tapCustom header
    
    We abandoned my rudamentry key/value filter change a while ago but
    the tapCustom signature was never updated.
    
    Change-Id: I76cea19b3b74cceee3316f39d0565b9959547867
    Reviewed-on: http://review.couchbase.org/9674
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 11c89e4906a5841abc2e172a561c2a1e15fb7b4e
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Sep 21 19:12:51 2011 -0700

    Removed a print line statement from TestConfig
    
    Change-Id: I9f060ab36a407eb91dd3a8b784cd7c854e2d706d
    Reviewed-on: http://review.couchbase.org/9713
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit ffe0eed15127f85d3c1f4a78c231f48c29bdd3ee
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Sep 20 14:45:40 2011 -0700

    Fixed ASCII getl issue.
    
    When processing errors Spymemcached had no notion of what
    LOCK_ERROR was. This fix allows Spy to handle the LOCK_ERROR.
    
    Change-Id: I07fcc169a34dd5d14156c82ebdc1a99c785992de
    Reviewed-on: http://review.couchbase.org/9678
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit c273117682dae0e3be10671bd7db0a15d3123fa8
Merge: e94e9c8 1445b53
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Sep 20 12:03:08 2011 -0700

    Merge branch 'refresh'
    
    Changes Merged:
            Made cmd variable a byte for binary operations
            SPY-51: Bug in OperationImpl's decodeLong(2)
    
    Change-Id: I9ee8170c20f668d804d083a6d89832c73ad119ee

commit 1445b53e1ca37b401334c97e012ecc7fcfdf8e67
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Sep 8 15:14:26 2011 -0700

    Made cmd variable a byte for binary operations
    
    This variable should have never been an int since it is defined in
    the protocol as a byte. The reason for the change is that when we
    have opcode that is greater have 127 the value of a byte and an int
    are different (Ex. int = 128 byte = -127). This was causing an
    assertion to fail, in this case for the getl command (0x94).
    
    Change-Id: Ia6b32a4af94ed2e8dc973237132f3fd291655634
    Reviewed-on: http://review.couchbase.org/9476
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 5c2c773a361f34034a569a6f5bd2c53a5f252527
Author: sanada0670 <sanada0670@gmail.com>
Date:   Tue Sep 6 16:06:16 2011 -0700

    SPY-51: Bug in OperationImpl's decodeLong(2)
    
    We were incrrectly decoding long values here. For example,
    
    0 0 0 1 0 0 0 0
    
    was being decoded as 1, but should have been 4294967296.
    
    Change-Id: I1a5eed9d8f96d9d9dd83d251794b68840f595621
    Reviewed-on: http://review.couchbase.org/9428
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>

commit e94e9c8f9759ead10d89debb96f71a3a2701b53a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Fri Sep 16 12:58:39 2011 -0700

    Deleted files that accidentally got included in the last merge
    
    Change-Id: Ib5acb8514da7f1df7893936dd3ed9ab7b4884b1e
    Reviewed-on: http://review.couchbase.org/9641
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 353a3564fd4b0455dc940617b4de36b88ede44c9
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Sep 13 16:28:31 2011 -0700

    Operations statuses on errors are now handled by the operation
    
    When asking for the status the future will no longer have to call
    the get() function to get the status. This is also much cleaner
    code than what was previously done.
    
    Change-Id: I0776f3c24fcb6ff64993da2b3b065e381459ab21
    Reviewed-on: http://review.couchbase.org/9576
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 51a0f1fce7f870d6d232664df84fa0ed4c8bdb05
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 12 16:25:17 2011 -0700

    Added function to get number of vBuckets to MembaseClient
    
    This is needed by the Couchbase-Hadoop connector.
    
    Change-Id: Idca74e4ca51b99216779f1c3b8d6c5dc83feaea2
    Reviewed-on: http://review.couchbase.org/9531
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 9ee7dbee486b0f43f1bde1369ab74e75353869a1
Merge: d495119 49ea781
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Sep 16 07:16:53 2011 +0000

    Merge "Merge branch 'refresh'"

commit d49511988e2b37df12fc16a37ab9f3c20a4fa90a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Sep 14 14:01:09 2011 -0700

    Fixed test failure issue in testIPv6Host() in AddrUtilTest
    
    And ipv6 address can return a hostname of 0:0:0:0:0:0:0:1 so
    it needs to be added to the list of valid hostnames that can
    be returned.
    
    Change-Id: I13830b22f58bfa132891a2111e5b4675a297ec51
    Reviewed-on: http://review.couchbase.org/9591
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Dustin Sallings <dustin@spy.net>

commit 49ea78144e4390b490e480330dd69137b67afe1e
Merge: ad2bbe7 bb1dc92
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Sep 13 14:18:12 2011 -0700

    Merge branch 'refresh'
    
    Changes Merged:
            Send an ack for all tap opaque messages
            SPY-54: getBulk() shouldn't log a warning when a key is not found
            SPY-47: Client object should have toString()
            Added toString() functions to ConnectionFactory classes
            SPY-39: Added toString() to operation heirarchy
            Change getBytes() to getData() in CASOperation
    
    Change-Id: I1a8fab0229fd29b1545ffe5e826b5769f5bbfe00

commit bb1dc926948b439e528c846e5e902346ec7f3acd
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Sep 12 11:56:47 2011 -0700

    Send an ack for all tap opaque messages
    
    Previously we ignored tap opaque and no-op messages. This caused
    us to hang tap streams in some cases. One example is when doing a
    tap dump. The server would send an opaque message and wait for an
    ack after transmitting all of the data. Since we ignored the opaque
    message the server would wait for an ack that would never be sent.
    This would cause the connection to hang.
    
    Change-Id: If8fc5e7f8b6aeb41ed68c2acb03fba5b7e503836
    Reviewed-on: http://review.couchbase.org/9526
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 37f14f5f677bb947176f979699b54182831f9066
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sun Sep 11 19:50:29 2011 -0700

    SPY-54: getBulk() shouldn't log a warning when a key is not found
    
    A key not being found is not incorrect behavior for memcached so
    having a warning here is incorrect.
    
    Change-Id: I9fc07dd898205612b384f8c4e9820cb186f8e550
    Reviewed-on: http://review.couchbase.org/9513
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit ad2bbe7ff96f4384cecf56482d3c6d87c1d6514b
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Sep 7 15:50:04 2011 -0700

    SPY-50: Set viewmode programatically
    
    We can now set properties programatically and I allowed the
    properties file to be found in the classpath (which I thought
    I did before, but I guess I didn't). There is now a heirarchy
    for how this parameter can be defined. The list is below from
    highest priority to lowest:
    
    1. Set in user code - System.setProperty(2)
    2. Set on the command line
    3. Set in the cbclient.properties file
    
    Change-Id: I1dc91641016fa31e5cdd51f5bba85bd7cd68bd45
    Reviewed-on: http://review.couchbase.org/9462
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 33f2f3e33602b637410e69c785973c5cf3344811
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Sep 8 11:40:18 2011 -0700

    SPY-47: Client object should have toString().
    
    The toString() method in MemcachedClient now prints out it's
    configuration eg. the information of the ConnectionFactory it
    is using.
    
    Change-Id: Ic8f3741bdcdc97d5bb46b2c4a68caec998903fde
    Reviewed-on: http://review.couchbase.org/9473
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 6d9c441e3ba3d80a4f020b05a087f190ec2eee34
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Sep 8 11:30:01 2011 -0700

    Added toString() functions to ConnectionFactory classes.
    
    This will allow us to see how users have configured their client
    and will greatly help in debugging issues from customers.
    
    Change-Id: I840259953d1d5192f1038e734103b63281e68ed0
    Reviewed-on: http://review.couchbase.org/9472
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit d7df97e76f22c8eee4210b9f83c14220e0e7e4d3
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Sep 8 14:21:33 2011 -0700

    SPY-39: Added toString() to operation heirarchy
    
    Change-Id: Ie3ea5b8d04b683303fe8e5f4d5b7b22d7d5bd18b
    Reviewed-on: http://review.couchbase.org/9475
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 69f353fd7bcd7979443418363529cad98d23ed49
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Sep 6 17:22:48 2011 -0700

    Change getBytes() to getData() in CASOperation
    
    The getBytes function was incorrectly named in the CASOperation
    class for two reasons. First the function actually gets the
    data field from a message so getData() is a better name. Second,
    in the StoreOperation class and other classes the name of the
    function is getData() so this improves consistency. This issue
    was notice when I was looking at the StoreOperation and saw that
    this class had two different functions that did exactly the same
    thing.
    
    Change-Id: I4d0c95f309a6f1bb1ccde52ffdf6e9ab1958bebe
    Reviewed-on: http://review.couchbase.org/9474
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 2821166132e2a7ff25d44fa58c21baca7e987796
Merge: 595c195 193a684
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Sep 8 17:09:30 2011 -0700

    Merge branch 'refresh'
    
    Changes Merged:
            Removed unused variables in GetOperationImpl
            SPY-49: BaseSerializingTranscoder does not close resources.
            Remove assertions that assert a completed op isn't timed out
            Add support for commons-codec 1.3, 1.4, and 1.5
            Use direct buffers in TCPMemcachedNodeImpl
            Fix concurrent access to operations objects, especially near timeouts
            Improved performance of write queue processing during timeouts
            SPY-125: Significant performance issue large number of sets
            Operations can't timeout when writing to the write buffer.
            Updated Commons-codec to 1.5 in .classpath for Eclipse
            Log warnings when retrying due to not my vbucket
            Spymemcached Issue 134: Performance fix
    
    Conflicts:
            .classpath
            src/main/java/net/spy/memcached/MemcachedConnection.java
            src/main/java/net/spy/memcached/internal/BulkGetFuture.java
            src/main/java/net/spy/memcached/ops/BaseOperationFactory.java
            src/main/java/net/spy/memcached/ops/OperationState.java
            src/main/java/net/spy/memcached/protocol/BaseOperationImpl.java
            src/main/java/net/spy/memcached/protocol/TCPMemcachedNodeImpl.java
            src/main/java/net/spy/memcached/protocol/ascii/AsciiMemcachedNodeImpl.java
            src/main/java/net/spy/memcached/protocol/binary/BinaryMemcachedNodeImpl.java
            src/main/java/net/spy/memcached/protocol/binary/GetOperationImpl.java
            src/main/java/net/spy/memcached/transcoders/BaseSerializingTranscoder.java
            src/main/java/net/spy/memcached/vbucket/ConfigurationProviderHTTP.java
    
    Change-Id: I322433f6eafbdc9261cc40f322b8362e113646b7

commit 193a684209041b2e2f0cae97d0955e0c6c8703fb
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Sep 7 13:50:14 2011 -0700

    Removed unused variables in GetOperationImpl
    
    Change-Id: I3c52dfd21b7b02ea4e9d5f97fd7ed9b034ca0237
    Reviewed-on: http://review.couchbase.org/9455
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 5ca2ed1565e2b1ec504389ad1fef7185a807990a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Sep 7 13:47:36 2011 -0700

    SPY-49: BaseSerializingTranscoder does not close resources.
    
    Change-Id: Ifa6b356a9faaad39f12f2cf28d34fbc837faa7b7
    Reviewed-on: http://review.couchbase.org/9454
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 6a383c540ce0371166671f6a0e2e2ce03d3de0bb
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Sep 6 17:04:22 2011 -0700

    Remove assertions that assert a completed op isn't timed out
    
    Matt was trying to assure we weren't erroneously marking something
    timedout that had been completed. The timeout can come from either
    the IO thread or the latch from the asynch call. Now that we have
    synchronized methods this shouldn't happen.
    
    Change-Id: I4b7e02f839074f80909d4f0fb44b707b76a1a5d5
    Reviewed-on: http://review.couchbase.org/9436
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit a77c9fd23bbd529d7b2bc8dd05df9a84602cf7da
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Sep 6 18:48:26 2011 -0700

    Add support for commons-codec 1.3, 1.4, and 1.5
    
    Some versions of commons-codec append a \r\n onto the end
    of Base64 encoded strings. This fix checks the encoding for
    a trailing \r\n and if it finds one, removes if from the
    string.
    
    Change-Id: I9b23a19608bfa91cba64e0d579fb49f20612b286
    Reviewed-on: http://review.couchbase.org/9443
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 02d2f3e05f7100b09c99f58c85cf3d41ee80bbb3
Author: Daniel Martin <dtm@google.com>
Date:   Mon Aug 22 09:32:55 2011 -0400

    Use direct buffers in TCPMemcachedNodeImpl
    
    Since the buffers in a TCPMemcachedNodeImpl are allocated rarely (only
    on client creation or reconfigure), and are passed to Channel.read()
    and Channel.write() repeatedly, it's best to use direct buffers to
    avoid http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6214569
    
    Change-Id: I4fafa41e9072aa514e2da97a977c6ac6adc759d5
    Reviewed-on: http://review.couchbase.org/9435
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit a9035c9e8243aec93d9516c88f33f6e62d4020c7
Author: Daniel Martin <dtm@google.com>
Date:   Fri Aug 19 14:57:23 2011 -0400

    Fix concurrent access to operations objects, especially near timeouts
    
    We discovered that having one thread call get() on futures with a
    timeout much shorter than the timeout built into the client could
    (after a while) reliably kill off the IO thread with a
    NullPointerException. After restarting with assertions enabled, we
    found many other ways to make the IO thread die relating mostly to
    operations that were canceled or timed out in one thread while they
    were being used in another thread.
    
    The solution to this is to make "timing out" an operation something
    similar to "cancel" - that is, not a state of the operation's state
    machine, but just a flag. Then, since this flag (as with the cancelled
    flag) can be read and set from multiple threads, synchronize the
    methods that do that.
    
    Ideally, transitionState and getState would never be called outside
    the IO thread; however, since at least getState is currently, both
    getState and transitionState should then also be synchronized.
    
    With these changes, we don't end up killing off the IO thread anymore.
    
    Change-Id: Ice7bac2ba1e2dbcd2004f5d7920944eef6bbbcb8
    Reviewed-on: http://review.couchbase.org/9431
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 60a1e05ce35c4920c07fcafd8876ab4f563719b4
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Aug 24 15:11:51 2011 -0700

    Improved performance of write queue processing during timeouts
    
    There were two major issues here. First if there are a lot of
    timeouts in a row then we processing the write queue we removed
    them only one at a time. We now are able to process the entire
    write queue each time the handleIO function is called. The
    second issue was that it is possible to send timed out requests
    to the server. This would happen if there was one not timed out
    request followed by some timed out requests. Since in the while
    loop we don't check to see if an operation is timed out (or
    cancelled) we would send it anyways. This commit addresses both
    of these issues by adding a getNextWritable() op which only
    operations that should be written. If the write queue is empty
    it returns null.
    
    Change-Id: I427e5a47cf2e8ad89e3f59c895f3ef8e0ad36550
    Reviewed-on: http://review.couchbase.org/9429
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit c02c042bcc7d4f25545faf82d7a56e6e627091a9
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Aug 24 15:08:13 2011 -0700

    SPY-125: Significant performance issue large number of sets
    
    We now add an operation to the read queue when we transistion it
    into a WRITING state. This guarentees that the operation is added
    to the read queue once. As a result we no longer have to check to
    see if the operation has already been added to the read queue
    
    Change-Id: I0b21d3e1ac7ff7792afabc57c1a8a26c6b757c12
    Reviewed-on: http://review.couchbase.org/9425
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit e69df0cb876c2501a0fd77a288370252b4de788d
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Aug 24 14:47:03 2011 -0700

    Operations can't timeout when writing to the write buffer.
    
    We implemented a mechanism for operations to be able to timeout
    while waiting to be written to a socket, but failed to take into
    account the fact that an item can timeout while in the middle
    of writing to that buffer.
    
    This commit adds a new OperationState called WRITE_QUEUED that
    specifies that the operation is waiting to be written to the
    write buffer. When an operation begins writing to the write
    buffer it goes into the WRITING state. When an operation is in
    the WRITING state it cannot time out
    
    Change-Id: Ib4ed9e1764c31e9270f79206b11574d98638e989
    Reviewed-on: http://review.couchbase.org/9424
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 595c1957bc0317b00842b9487baa6702f07fd6e5
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Aug 23 11:21:59 2011 -0700

    Perf Improvement: Changed String +'ing to StringBuffer in Query class.
    
    Change-Id: I3b6ec598ae1032b6bab525651f660f01823bfa1b
    Reviewed-on: http://review.couchbase.org/9199
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit b5516fdb2361d220a955f23e436dbf03a74bf51e
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Aug 24 15:20:43 2011 -0700

    Alphabetized the .gitignore file
    
    Change-Id: I30806fd456e24761e8e88a1e5f4688e7f63290a6
    Reviewed-on: http://review.couchbase.org/9227
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 8385d745c51668a2a15017639665194f3d72935f
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Aug 22 11:26:06 2011 -0700

    Updated .gitignore to exclude bin/ directory
    
    Change-Id: I9584668161636935bfa7b7a8d69347e99f7d3c6f
    Reviewed-on: http://review.couchbase.org/9162
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 710423801ee7ceb07a46323031111aefef9452fa
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Aug 22 11:24:08 2011 -0700

    Added a mvn-install target to build.xml
    
    Allows users to install the latest source jars to their local
    maven repository
    
    Change-Id: I0af0c9ce60c28a8838266d9b0d67855f773ac51f
    Reviewed-on: http://review.couchbase.org/9161
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit b61ff17da1e94886ae4bf3c0db3821e8b1f690a5
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Aug 18 14:55:14 2011 -0700

    Added pagination.
    
    Change-Id: I970ee3e93332ef5f562bdf932564ca4d25d4cc26
    Reviewed-on: http://review.couchbase.org/9111
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit de38d8fa2337992a42e4e2faba312d38c08b8198
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Aug 18 14:50:08 2011 -0700

    Fixed issue with the CouchDB connection not closing.
    
    MemcachedConnection was returning false when the shutdown
    function was called even when the connection was closed correctly.
    As a result the CouchConnection wasn't shutting down properly. The
    issue had to do with having false be the default return value when
    it should have been true.
    
    Change-Id: I59f47614bbf555ce6104ea26117d83bfa0b091fe
    Reviewed-on: http://review.couchbase.org/9110
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 38d83b289336ec554c945598e5dc793a9bd3fcc3
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Aug 15 16:12:39 2011 -0700

    Changed buildfile to ivy/ant
    
    The new ant script is integrated with git, provides better
    junit test reports, allows us to check coding style, adds
    findbugs functionality to help improved code performance
    and eliminate bugs, and generates eclipse project files
    for developers using eclipse
    
    Change-Id: I8617ac733a874063c6c5b1699f3d44e286bda750
    Reviewed-on: http://review.couchbase.org/8973
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit d18560a434a1d08972d3867d3b2886865fdae194
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Aug 16 10:30:41 2011 -0700

    Consolidated query functions in CouchbaseClient.
    
    Now there is only one query function
    
    Change-Id: I21b0ababa452ff760e3c0b8ddf72a9a8ed3fdc24
    Reviewed-on: http://review.couchbase.org/9006
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 4e7831a5fd3b2dc2b9ff148ded859301f50425e1
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Aug 16 10:29:10 2011 -0700

    Refactored ViewResponse classes
    
    ViewResponse is now an abstract class
    
    Change-Id: Iafd910ca8e837fc5d14b9041adc9fc267e324fbe
    Reviewed-on: http://review.couchbase.org/9005
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 7b5665402ebc006dde4f09b6ed10a906d71ea691
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Aug 11 13:49:28 2011 -0700

    Consolidated view operation classes into a single ViewOperation class.
    
    Change-Id: I36387306a28818f8b20a49760dce2da60fd57f65
    Reviewed-on: http://review.couchbase.org/9004
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 2fbde028fe60e223002ef1a61667936f26664d94
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Aug 11 13:25:45 2011 -0700

    Changed View(s)Operation to View(s)FetcherOperation
    
    This renaming makes more sense for what the classes really do. These
    are also non-user facing classes so the long name will only be an
    issue
    
    Change-Id: I5961da892c7327cc8981d19dcc2a31758b30bb95
    Reviewed-on: http://review.couchbase.org/9003
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit d11d151744b74d03bc5c2b64b92e6d4658688287
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Aug 11 11:19:22 2011 -0700

    Made ViewResponse classes more general
    
    We now return a ViewResponse Object from all view calls
    from CouchbaseClient.
    
    Change-Id: I5338af0d014211b3c954cb7394bba38b268205b3
    Reviewed-on: http://review.couchbase.org/9002
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit d81f1fa949dd8c4c732c6e506a2ba3fb85326bb0
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Aug 10 15:31:34 2011 -0700

    Renamed view row classes (now more descriptive).
    
    RowWithDocs -> ViewRowWithDocs
    RowNoDocs   -> ViewRowNoDocs
    RowReduced  -> ViewRowReduced
    
    Change-Id: I1231f645fad28e19e1f6c80c5e7eac634dcd671a
    Reviewed-on: http://review.couchbase.org/9001
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 47758e17d7531c6b14fd76b64fdc5374ec0c5063
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Aug 10 15:25:38 2011 -0700

    ViewFuture now extends HttpFuture
    
    Now developers only have to worry about using HttpFuture's. This
    simplifies the codebase
    
    Change-Id: I5fb681e5fd8e958ec701703999a1cd9a2a729f86
    Reviewed-on: http://review.couchbase.org/9000
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 8a0c0d6b61b9475d627912b5f44262008ec14e5d
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Aug 10 15:21:22 2011 -0700

    Don't use + when appending to StringBuffer in ViewResponse classes
    
    Using + inside the append function completely takes away the point
    of using a StringBuffer in the first place. This code will perform
    better
    
    Change-Id: I6c70fa7b478d17bf6fe16c9626567bd2844c3e0d
    Reviewed-on: http://review.couchbase.org/8999
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit af9d86a292529ed1a1385c3efbf8d3c65f016b9c
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Aug 10 15:16:41 2011 -0700

    Added interface for view rows called ViewRow
    
    Each row type that can be sent back from a view now has
    getter functions for every possible field. If a field doesn't
    exist for that view row an UnsupportedOperationException is
    thrown. This new interface is now the only user facing object
    that will be seen when dealing with view rows and as a result
    makes the code simpler to use
    
    Change-Id: Ie8a9548846932d2a11570a1ed2b7a5fdac1d3723
    Reviewed-on: http://review.couchbase.org/8998
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit e8ca28c4f1b0592eb93496259857378400430ebf
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Aug 16 14:19:27 2011 -0700

    SPY-29: Default mode should be production mode
    
    CouchbaseClient is now configured to be in produciton mode by
    default instead of being in development mode as it previously
    was
    
    Change-Id: Ie08828974e0f3ea090abb708951eb425ce99821c
    Reviewed-on: http://review.couchbase.org/9015
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 1f02d731b866353fb828b858df22f6128920a27d
Author: Paul Marynchev <paulisio@gmail.com>
Date:   Mon Aug 1 12:18:42 2011 -0400

    Uptick JUnit version in the buildfile to match .classpath
    
    Change-Id: Ia3ea8d3b6825ed5558ce08f78adf0ae3579966e8
    Reviewed-on: http://review.couchbase.org/8561
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 7d40455e86f3d58dfd2c8388d73e1dbc5c25c074
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Aug 16 14:09:31 2011 -0700

    HashAlgorithm registry to add new algorithms from config
    
    Change-Id: Ie323151b67608e454b726050bd80b097cfba724c
    Reviewed-on: http://review.couchbase.org/8560
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 6aa23327871e904ad6932e64b22b027763478959
Author: Paul Marynchev <paulisio@gmail.com>
Date:   Fri Aug 5 22:46:44 2011 -0400

    HashAlgorithm is now an interface
    
    This is preferable over an Enum in order to allow client hash function
    customization
    
    Change-Id: I0c992186e7b7701929e0dc60341430d8d2255ba7
    Reviewed-on: http://review.couchbase.org/8559
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 051d39ec387f7b4e1aab1a28184c9cc8490db424
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Aug 16 09:56:28 2011 -0700

    Update commons-codec to 1.5 in .classpath for Eclipse.
    
    Change-Id: I5342fcbdd31a0ed93b58a3e6ee8be9f6f9f75259
    Reviewed-on: http://review.couchbase.org/8995
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 65ebc2cf8747dc3700c567098363d2d3f7ac9206
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Aug 16 10:00:26 2011 -0700

    Log warnings when retrying due to not my vbucket.
    
    The existing behavior with not my vbucket errors prior to this
    change would warn when it receives an error to the log, but it
    would not followup that warning with any indication of what it
    did with the operation.  This can cause confusion end users
    are logging what's happening, so give the logging some symmetry
    by logging any retries due to not-my-vbucket.
    
    This was brought over from the 2.7 refresh branch manually,
    owing to the formatting change making it hard to cherry-pick.
    
    Change-Id: I233c3c854adcfe4886e879e69f568807def595a7
    Reviewed-on: http://review.couchbase.org/8997
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 8fa4dbeb684fd016c2b5c7a94b88fbfcef4f7153
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Aug 14 11:05:27 2011 -0700

    Log warnings when retrying due to not my vbucket.
    
    The existing behavior with not my vbucket errors prior to this
    change would warn when it receives an error to the log, but it
    would not followup that warning with any indication of what it
    did with the operation.  This can cause confusion end users
    are logging what's happening, so give the logging some symmetry
    by logging any retries due to not-my-vbucket.
    
    Change-Id: I14a1a93db924728b087161cdbb98a5e34f9c3f73
    Reviewed-on: http://review.couchbase.org/8984
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit fd7ce14565b3243ac630bd39b2c147eaa4e35289
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Aug 4 11:19:05 2011 -0700

    Formatted code.
    
    Change-Id: Ib5700f44129e5be33fee86f05b153527f66e9c01
    Reviewed-on: http://review.couchbase.org/8644
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 31511c8a7466335d86803f5632090c4c0588b2be
Author: Paul Burnstein <Paul.Burstein@gmail.com>
Date:   Fri Aug 5 15:09:26 2011 -0700

    Spymemcached Issue 134: Performance fix
    
    Change-Id: I07a57fb676f91f14b74db1499f4cdc17fcd960ab
    Reviewed-on: http://review.couchbase.org/8680
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit b406daa1c6c4d5d7d2f49f0f8fc91cdc4a0c4d75
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Aug 2 14:54:49 2011 -0700

    SPY-8: Added a limit on how many gets can be optimized
    
    We have a limit on the amount of sets that can be optimized so we
    should have a limit on how many gets can be optimized as well. This
    way people don't run into any issues with optimizing too many get
    requests and having the client timeout as a result of the server
    being too slow trying to fill all of the requests in the multi-
    get.
    
    The max number of gets that can be optimized into a single
    request is 4096.
    
    Change-Id: I23c107ca3459e3386270c53f9ce20450d7ee8830
    Reviewed-on: http://review.couchbase.org/8599
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit ab28ee3c6a53b3afe3399277d2dd384c273a84bb
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Aug 2 14:34:39 2011 -0700

    Added syncronous calls to CouchbaseClient for views
    
    Developers now have the option to make calls to Couchbase views
    both synchronously and asynchronously.
    
    Change-Id: Ica3d3d70f838bd619d8a9d8a5a40fb7dfca8d4e1
    Reviewed-on: http://review.couchbase.org/8597
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 803a5cbbe219fbfe86254c176f0d1aa630dc81df
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Aug 2 14:10:52 2011 -0700

    SPY-17: setStale() and setGroup(bool, int) make bad query params
    
    This issue was found by a user and is now fixed. I also added a bunch
    of unit tests that test each function in the Query class builds a set
    of query parameters correctly
    
    Change-Id: I809da61f485a96312756ec26715e79f27199511c
    Reviewed-on: http://review.couchbase.org/8595
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 0fb68f1cf353ef3662e90ed1304934f2e7ba58fb
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Aug 2 14:08:16 2011 -0700

    Views results will now be null when an error occurs
    
    Previously view results were returned whether there was an error
    or not, the result would just contain empty lists. The new behavior
    of returning null is more consistent to the way spymemcached handles
    things and it is easier for developers to detect when they have made
    an error.
    
    Change-Id: Icec6b7c4aceb6ce6319672bb3a033921960488ad
    Reviewed-on: http://review.couchbase.org/8594
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 85de9087b0b36005ad71eb728afa6881f3283ad4
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Jul 28 17:06:58 2011 -0700

    Exclude membase tests when specifying memcached build type.
    
    Change-Id: Ie0dd1e4f848b256bb7df077fb2c01f1d2f858991
    Reviewed-on: http://review.couchbase.org/8524
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 9064a7488e0f68b40cd2da0d17d893c66329061c
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 28 13:33:06 2011 -0700

    Changes operationTimeout for http operations to 60 seconds.
    
    This is a temporary change for the developer preview release
    of Couchbase. The timeouts will be lowered and will not be
    hardcoded in the future
    
    Change-Id: Ib396064fccbc02c6cd49056685310cdb167977e7
    Reviewed-on: http://review.couchbase.org/8508
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 54a64e5ff9937f6964ec288facdf26b2b75a5696
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 28 12:33:24 2011 -0700

    Added the ability to have a properties file with config info
    
    The only info we currently put into this file is whether or
    not we want our views running in production or development
    mode
    
    Change-Id: I7b6da04d84d0f16ca309b37038971f0a822bc1df
    Reviewed-on: http://review.couchbase.org/8503
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 1eb7441f31e61f188d3388cfb0cf20efe73dd2d4
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jul 27 20:02:17 2011 -0700

    Moved protocol.couchdb package to protocol.couch
    
    mv src/main/java/src/net/spy/memcached/protocol/couchdb
    to
    src/main/java/src/net/spy/memcached/protocol/couch
    
    Change-Id: I33ab5a4ad3e3f9d14486e446aef1e65b58832759
    Reviewed-on: http://review.couchbase.org/8480
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 74f92940a5226b5383d6d7fd7e08274e5af4e259
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jul 27 15:33:53 2011 -0700

    Added the ability for Spy to handle errors in views
    
    If a node is down or an item is unavailable then Couchbase
    will return a view response that contains a mix of errors
    and successes. Previously Spy could only handle responses
    that contained only successes. This commit adds the ability
    to handle a mix of errors and successes returned in the same
    view result.
    
    Change-Id: I2795962b8bf56a81f7a2c9ebacf4c90aaad4ce3c
    Reviewed-on: http://review.couchbase.org/8461
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit f7b8fbb65fd4c092379b5f2353703b438e3b4972
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jul 27 19:53:31 2011 -0700

    Made MembaseClient and CouchbaseClient reconfigurable
    
    Theses two client classes will now handle topology changes
    gracefully.
    
    Change-Id: I6c339c0300d666a32fa958aa273536209f51b8e6
    Reviewed-on: http://review.couchbase.org/8478
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit ff1df813876059540ffd6898fe5fad4e8a80a50e
Author: Paul Burnstein <Paul.Burstein@gmail.com>
Date:   Wed Jul 27 22:36:00 2011 -0700

    Spymemcached Issue 134: Performance fix
    
    Change-Id: I90aba04cb81909ce2077c71c44643c15ab5c2425
    Reviewed-on: http://review.couchbase.org/8483
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit df686c75917c2a4d8e5702581bc3e4ad362976ed
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jul 26 23:12:59 2011 -0700

    A few javadoc fixes.
    
    Buildr complains(warns) about these before creating jars and I
    got tired of seeing the warnings.
    
    Change-Id: Ib0e07e048b2cfb35d5fca18ced933caf37963db1
    Reviewed-on: http://review.couchbase.org/8422
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 06b54179c6761af67ea099560c7eca993e8752c6
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jul 26 18:09:05 2011 -0700

    Added Couchbase Views
    
    Change-Id: I09d4f8751ca8f308e986d07954d7e755af6aa2d8
    Reviewed-on: http://review.couchbase.org/8401
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit fee988c39b6d7473659d442774c778137b60fa00
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jul 26 17:34:00 2011 -0700

    Added new test configuration args for Couchbase Server.
    
    Change-Id: I6dae0f29d0c55c5a7e2caa69904f22ba44e608b8
    Reviewed-on: http://review.couchbase.org/8399
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 98778ece340403a0e58a988af888961f7c4776d0
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Jul 25 18:38:00 2011 -0700

    Updated eclipse classpath to include commons-codec 1.5
    
    Previously it was commons-codec 1.4 and the upgrade to 1.5 fixed
    and issue pertaining to commons-codec 1.4.
    
    Change-Id: I43b0934d25f6da5e94a6b5a5720d7edccf37152b
    Reviewed-on: http://review.couchbase.org/8359
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 60875906fe4d9855aa64910540f7f5903d41f84d
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jul 26 00:16:11 2011 -0700

    Add HTTP Subsystem
    
    This http subsystem is based on the reactor model used by the
    apache httpcomponents HTTPCore-NIO library.
    
    Change-Id: If3d13aec9145e459498087507877bb15de45ec78
    Reviewed-on: http://review.couchbase.org/8243
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 7068f857fde7e5aae8ee24707c013824009de141
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sun Jul 17 17:55:39 2011 -0700

    Removed warnings from LoggerFactory
    
    Change-Id: I4f33f74c344775e9dfb0804eae8d7a7bbf341322
    Reviewed-on: http://review.couchbase.org/8242
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit dd7aa77b4b02d24ebf9206b5cdfb9718c2f190cd
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 14 17:27:22 2011 -0700

    Changed IO thread from MemcachedClient to MemcachedConnection
    
    This change will allow us to have multiple IO thread running within
    a client. This is paricularly important for being able to have
    a CouchbaseClient since we will need a connection to memcached and
    a connection to CouchDB.
    
    Change-Id: I1b25d5bb3726ecef28354d5ee8173c82879a4f7d
    Reviewed-on: http://review.couchbase.org/8241
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit a9da817d1abf9d233ac5118acf862e6314742886
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 14 14:20:50 2011 -0700

    Changed MemcachedConnection varibale from conn to mconn
    
    In the future we will have multiple connections do this name
    change will distiguish it from those other connections.
    
    Change-Id: I9d2a168a031b6ed2c3cf3b44af26ec415ba36d75
    Reviewed-on: http://review.couchbase.org/8240
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit e720c5d002c25022e97c59c98407f7d0f4bce370
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sun Jul 10 15:55:56 2011 -0700

    Added MembaseClient Object
    
    The MembaseClient object should be used when making connections
    to Membase clusters. This commit also includes a new
    MembaseConnectionFactory and adds adds the coresponding builder
    code to ConnectionFactoryBuilder. Test support is also added
    for connections specific to Membase clusters
    
    Change-Id: I98a562a8da8bff70c6f953d44d0b3863f493e472
    Reviewed-on: http://review.couchbase.org/8239
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 5583fd0969152b9447eb3f127f3be57e63ae1f98
Author: Vitaly Rudenya <vitaly.rudenya@altoros.com>
Date:   Mon Jul 18 23:14:33 2011 +0300

    All NodeLocator's can be reconfigured.
    
    Change-Id: I51b3b72eb46c781eb3766435f43e57ded683514b
    Reviewed-on: http://review.couchbase.org/8115
    Reviewed-by: Vitaly Rudenya <vitaly.rudenya@altoros.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 90801e0fa4d5ddb565cfa0e7ac77051802b7c360
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Jul 20 22:40:20 2011 -0700

    VBucketNodeLocator should not implement getSequence()
    
    Change-Id: Ia0a5c54abca51933995dc307bb5318ebf7dddbce
    Reviewed-on: http://review.couchbase.org/8196
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit c9539e0307deb096ac125cef23c0d1fcf89a88d2
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Jul 12 22:33:27 2011 -0700

    Ensure nodesMap updates are safe when topology changes.
    
    This change much more closely (perhaps too defensively)
    couples the Config and the list of nodes.  It also ensures
    that the Map<String, MemcachedNode> is less prone to
    concurrency problems and fixes a concurrency problem which
    allowed nodes to be removed when receiving a not-my-vbucket
    response.
    
    This indicates we need to make some changes to how the entire
    object model and config list are handled, but just to quickly
    fix a race found, tie together the config and node list when
    locating the right node.
    
    Testing for this is rather manual at the moment.
    
    Change-Id: Ida002fd1d510d20c432e77e01eefbc530d3b34b1
    Reviewed-on: http://review.couchbase.org/8195
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 96d1d2e38a2a915fae7095af3b6a33639a6830c8
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Jul 18 15:43:02 2011 -0700

    Encode with commons codec more correctly.
    
    Apache Commons Codec had introduced a change in 1.4 that had it
    inadvertantly adding extra CRLF to encode responses.  We had worked
    around this issue when writing the initial HTTP authorization
    code, but it turns out commons codec has reverted to the behavior
    in 1.3 with the release of 1.5.
    
    For more info, see https://issues.apache.org/jira/browse/CODEC-89
    
    This change updates commons codec, adds a test to verify correct
    behavior, and addresses potential error handling issues with the
    character set.
    
    Change-Id: I655adc5090249180c3e75fbd35036b15252d093f
    Reviewed-on: http://review.couchbase.org/8125
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit a276efab24dcd0d84b2411e0fabceb0f4dddc485
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Jul 12 20:02:06 2011 -0700

    Also check for RETRY during clone.
    
    Change-Id: I23953356c77e72e0fa3ce0a1745dee7eb8faba3f
    Reviewed-on: http://review.couchbase.org/8194
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 28e713c304a3b1799324705ad1bd7f1656e1d2b6
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Jul 18 12:59:47 2011 -0700

    Tap streams now pause every 10,000 messages.
    
    In the previous code I was sending acks back to the server
    immediately and this kind of behavior could cause a heap overflow
    for users who start tap streams but don't process the messages. Now
    the ack messages are queued with the responses and only sent back
    to the server after all mutations sent before the ack was recieved
    are processed.
    
    Change-Id: I0c7c84c2ae5c9cc68d4e9c6f925f9ac6885fae6b
    Reviewed-on: http://review.couchbase.org/8114
    Reviewed-by: Chiyoung Seo <chiyoung.seo@gmail.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit eae60d3b4292c399c3fa93cc37aab26a335679ef
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Jul 11 18:03:08 2011 -0700

    Added ability to do tap dump
    
    Change-Id: I8d761b5cd1e0d5a44c1db5cbd62c74167ff51a64
    Reviewed-on: http://review.couchbase.org/7898
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit b26ab482efe8f9bc2f77d01fd500a4c174a3e924
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Jul 18 15:22:53 2011 -0700

    Added README.markdown.
    
    Change-Id: I4cd6a9924b9faf0361fbd496dc68a95a01bf6597
    Reviewed-on: http://review.couchbase.org/8121
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 3d6b55461e6bfd1b92698e6c0a59f361b220589a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Jul 16 15:41:24 2011 -0700

    Fixed issue with flags not being added properly to tap messages
    
    Change-Id: I17156e804155809cab54569c0906c64afeea99c9
    Reviewed-on: http://review.couchbase.org/8074
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 828307ba4b35df8f3f35456b3f84da28639ba454
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 14 17:16:33 2011 -0700

    Added the ability to specify the ip address of the testing server
    
    We now have the ability to specify the ip address of the server we
    want to test against on the command line. If none is specified then
    the tests will run against localhost. The command line parameters to
    specify the testing server are 'SPYMC_TEST_SERVER_V4' and
    'SPYMC_TEST_SERVER_V6. An example usecase is below.
    
    buildr test SPYMC_TEST_SERVER_V4="10.2.1.58" SPYMC_TEST_SERVER_V6=
    "some_ipv6_addr"
    
    Change-Id: If32bc87f381276bee3f9531090ed9c129369ca4e
    Reviewed-on: http://review.couchbase.org/7650
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 5c8848e3a630a0699f32e926a304a29db055bee2
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 14 16:32:04 2011 -0700

    Made EINTERNAL and ERR2BIG errors throw an exception
    
    This fix will revert a change that broke user code. These errors
    will now cause the connection to Membase to be reset.
    
    Change-Id: I6fb7d41cc612ef1620ed678f7139ca002dfa2625
    Reviewed-on: http://review.couchbase.org/8006
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 35b78c784222055fc0d13414a737e0bb189908f0
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jul 12 21:30:15 2011 -0700

    Made TapTest only run against Membase.
    
    I'm aware that tap works for memcached, but since most people
    are still on a tapless version I don't want to run the tests
    against memcached yet.
    
    Change-Id: Ia5d1d943a59d91ec59419643e9c0af10ae5166ba
    Reviewed-on: http://review.couchbase.org/7936
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 2dbba2ce9a06dfb6b4fb70b9414f8eee887eb572
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Jul 11 15:55:53 2011 -0700

    TapOperation's shouldn't be KeyedOperations.
    
    Change-Id: I4e884755321e68da099be6a9a1a1d22305931e26
    Reviewed-on: http://review.couchbase.org/7890
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 3e633250ad2da39c82b9451f0bdcfd47935a397d
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 14 14:56:51 2011 -0700

    Excluded Non-memcached tests when testing memcached
    
    Change-Id: Iae2bb6381a8a7dd8732cd878a5d9016dc512a627
    Reviewed-on: http://review.couchbase.org/8004
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 5f01535c0c09e4d7cf5586bad19f533a37cd30ed
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Jul 11 12:45:32 2011 -0700

    Issue 96: ClassPathException fix
    
    The issue here was that we were combinding multiple types of
    get operations in the same class, but each operation would
    have a different Callback type. When we would go to optimize
    get operations it would optimize get, getl, gat, and gets
    operations and since they have different callback types we
    would throw an exception.
    
    Each operation now has its own class.
    
    Change-Id: I4ca0da4f9638f7fe3a69bbe55dfb3edf30ae13cc
    Reviewed-on: http://review.couchbase.org/7877
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit e50ec2dba706b82cf1a5d0775c08f331c933b447
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jun 30 14:41:41 2011 -0700

    Added a command line parameter for specifying server type
    
    The user naow has the ability to specify the server type that
    they are testing against by adding the parameter 'SPYMC_SERVER_TYPE'
    to the command line. The default type is memcached and there are
    three valid types, memcached, membase, and couchbase. An example
    of how to use the parameter is below
    
    buildr test SPYMC_SERVER_TYPE="membase"
    
    Change-Id: I8d4750053cf52734c703bfe80d8c2d42ca353bb0
    Reviewed-on: http://review.couchbase.org/7651
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 754466cc60d2087d0a1b11a4be26d433d88733ba
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 7 18:19:27 2011 -0700

    Fixed a bug where multi-gets didn't work with vb aware constructor
    
    This fix adds vbucket information to multiget operations
    
    Change-Id: Iee8bea445fe45ef3d822e0f2d0fb9cb8eb20f536
    Reviewed-on: http://review.couchbase.org/7803
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 8acd712c474f82efea1c175cd68829250d68a984
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 7 18:15:42 2011 -0700

    Made an addOperation function private in MemcachedConnection
    
    addOperation(MemcachedNode, Operation)
    
    This function isn't used outside of MemcachedConnection and it is
    the only one that doesn't put vbucket information into operations.
    It is a helper function of the addOperation(String, Operation) call
    so it doesn't need to add vbucket data but calling it from outside
    the MemcachedClient scope could cause issues
    
    Change-Id: I68fd4bb331fecf89655904396e825b0f42d7a17c
    Reviewed-on: http://review.couchbase.org/7802
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 4f534006eec7fd782e85d1a02ce05f181d13907d
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jul 7 17:21:33 2011 -0700

    Refactored Operations to improve correctness of vbucket aware ops
    
    Previously we had operations that implemented classes that they
    should not have been implemented. For example, there were ASCII
    operations that implementing the VBucketAware interface. Since
    ASCII operations must go through moxi and don't contain vbucket
    numbers there is no reason for them to implement this interface.
    
    This commit also contains the addition of SingleKeyOperationImpl
    and MultiKeyOperationImpl which subclass OperationImpl and are
    superclasses to binary operations that contain one or more keys
    correspondingly. This abstraction allows these type of operations
    to deal with vBucket awareness and the amount of keys the operation
    contains in different ways.
    
    Change-Id: Ic7d002ec8e77e2fccc31987fcb1cba1ca14715da
    Reviewed-on: http://review.couchbase.org/7801
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit d03a74e3284c271e9933ef46c339e59ec873163d
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jun 30 15:00:36 2011 -0700

    Removed unused variables in testcases.
    
    Change-Id: Id9f7154bc40df5e9a6b05a4d52422bd893952d2f
    Reviewed-on: http://review.couchbase.org/7672
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit ab10e07cecd714d893e8d9d4532233d1835c200a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jun 8 01:31:32 2011 -0700

    Added tap client
    
    The tap client currently supports doing tap backfill as well as
    being able to specify custom tap streams. Unit tests are included
    to test backfill functionality.
    
    Change-Id: I214d39b2c16ea68867f42a3c75aac565d36e8c21
    Reviewed-on: http://review.couchbase.org/6873
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 17caef5f7c9a4346a1d580ea01b68fd946a6a2cc
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sat Jul 9 13:08:46 2011 -0700

    Adding a warmup state for nodes.
    
    At some point, the REST interface added warmup as a possible state
    for a node alongside healthy and unhealthy.  This will allow the
    config to understand that state.
    
    Change-Id: Iaa56af63d4ac1182235bf8727296198d1b687688
    Reviewed-on: http://review.couchbase.org/7846
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 97d2a1bfa13d1819a69ad7d9f255659263ec115a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jun 29 18:33:29 2011 -0700

    Made operation timeout longer for QueueOverflowTest
    
    In order to support being able to test spymemcached against servers
    residing on the network we need to increase the timeout of this test
    
    Change-Id: I8760f888138667f42027222ac569bda9bff50c40
    Reviewed-on: http://review.couchbase.org/7649
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit a57948c838101966c559863c02958e3a9bbe1b39
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jun 29 18:23:08 2011 -0700

    Changed the value size of items used in LongClientTest
    
    The 32k value used previously worked fine when we were only testing
    clients against localhost, but in the future we want to be able to
    test spymemcached against servers on the network. This high value
    along with the large number of multi-gets done in this test causes
    failures due to not being able to read and write data fast enough.
    As a result timeouts were caused.
    
    The value has been lowered to something more reasonable for now, but
    in the future we should devise a test that will be able to test spy's
    ability to handle multi-gets with large values over a network.
    
    Change-Id: I94c7d61bfb6dd76abf4afccd0796dca99fd4bd0a
    Reviewed-on: http://review.couchbase.org/7647
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 3053471051d7b3835e62f0fcfb92cde378dd3d59
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jun 29 18:15:10 2011 -0700

    Made SyncGetTest failures less sporadic
    
    Moved the code that sets the items for this test so that it could
    use a MemcachedClient that had a regular timeout. This allows us to
    avoid a possible failure resulting from using the connection that
    has a short timeout. Now only the get (which is surposed to fail)
    uses this short timeout connection
    
    Change-Id: Ic085218bcd6fa53348f70eae13e219a9882b6442
    Reviewed-on: http://review.couchbase.org/7646
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 5e55ce25dfde930de253b7488011c26a1d0cb119
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Fri Jun 24 17:51:22 2011 -0700

    Added source folder for manuel tests to Eclipse config file
    
    Change-Id: If8cf813fae0e04a138f0eccd908373ccf4331ccb
    Reviewed-on: http://review.couchbase.org/7576
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit d36f6dff833f40bf4668a2e0da19b1495c22b8f8
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jun 29 13:20:31 2011 -0700

    Compiler pointed out ignored exception. :(
    
    Change-Id: I8247911a9e766cfdee615c2c97e9d75a11ee4f52
    Reviewed-on: http://review.couchbase.org/7643
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 3e17c4e35874519c203cad559078fbd7e647fc0c
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jun 29 13:11:01 2011 -0700

    Fixed some shadowing parameter warnings.
    
    Change-Id: I187088c114ec00ee2d561a47ae4381e3646aada8
    Reviewed-on: http://review.couchbase.org/7642
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit 5ef4754e974eca1b500edc884a6b42875b2f161d
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jun 29 13:07:23 2011 -0700

    Fix dumb thing compiler warning was pointing out
    
    We don't need to assert identity property of strings.  :)
    
    Change-Id: Ie418e1e7ba59a21240b1c59f5b3bc25ce0a21539
    Reviewed-on: http://review.couchbase.org/7641
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 80f11e1b0b748d03756b126ddae1fae8b9584c62
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jun 21 13:59:06 2011 -0700

    Added generic to SingleElementFiniteIterator in MemcachedClient.
    
    Change-Id: Ic3036e6c7929221768bae4069cfcae23b7bedf7f
    Reviewed-on: http://review.couchbase.org/7105
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 0a2fa7c69d598006c932d5f9717ef27a68da0f04
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jun 28 15:27:21 2011 -0700

    Added constructor to MemcachedClient that takes a ConnectionFactory
    
    Previously users of the vBucket Aware MemcachedClient of smart client
    were unable to specify specific values for how connections are
    createded. This commit allows uses to pass a ConnectionFactory into
    a vBucket Aware constructor in the MemcachedClient object.
    
    Change-Id: I01653385c1d125ad868e9e018db311597b6ce725
    Reviewed-on: http://review.couchbase.org/7626
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 98cae1034540bb4ff2cd99d2a06f82842b5fc639
Author: Nelz Carpentier <nelz9999@gmail.com>
Date:   Fri Jun 24 12:58:05 2011 -0700

    Adding the repository needed to download netty.
    
    Change-Id: I89e021d74048c7364ed209838eb5533c8a40ae86
    Reviewed-on: http://review.couchbase.org/7587
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit ab3ff72da98c6bb0875ab80c8390af4e1e07edd1
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jun 21 14:36:54 2011 -0700

    Removed unused imports in VBucketCacheNodeLocatorTest
    
    Change-Id: Id44167d6f669e656a7b0333289e782c835b32c93
    Reviewed-on: http://review.couchbase.org/7108
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 9819e419045b5c165deb2115f0f63e0c85c20060
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Fri Jun 24 17:16:40 2011 -0700

    Fixed issue regarding connecting to a non-existent bucket
    
    Connecting to a Membase server correctly, but specifying a
    bucket that doesn't exist causes the BufferedReader in the
    readToString function to be null. This causes a NPE when we
    attempt to close the reader.
    
    Change-Id: I7f82596156c697b57b061bf066686aded16b772a
    Reviewed-on: http://review.couchbase.org/7575
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 24e0091b45400895bff6113fabb3ef8f1437837d
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jun 21 14:33:26 2011 -0700

    Added serial ID's to exceptions.
    
    Change-Id: I8f8696e694eb10c6d327c67197bbccacabb35959
    Reviewed-on: http://review.couchbase.org/7107
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 9c0c8af3d28f2d0a3017e154f3a436f28284b83b
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jun 21 13:55:08 2011 -0700

    Removed unused import from ConfigurationProviderHTTP
    
    Change-Id: I2f7eb419790f3d44d0471efcdac818f17171ebe2
    Reviewed-on: http://review.couchbase.org/7104
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 6ce52d246f322d6b312c28df4dc38d0f986b921c
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jun 15 15:44:02 2011 -0700

    Added all memcached error codes to spymemcached.
    
    Previously we only checked a subset of the error codes that
    memcached can send back to a client. This created an issue because
    if a user recieves an error code that it doesn't expect it resets
    the connection. This commit adds all error codes.
    
    Change-Id: I9317eccd688b6fa1e7113847cd7c7ef160a6624f
    Reviewed-on: http://review.couchbase.org/7006
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit d6008b775ef07231cea208bc8a8742210d817d6f
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jun 16 16:31:44 2011 -0700

    Add visibility into operations (key)
    
    This commit adds the ability for the user to be able access
    the key that the operation asked for if one is present. This allows
    users to be able to easily resend an operaiton on a given key since
    they will no longer have to keep key-operation data structures
    around in the case of failures.
    
    Change-Id: I2db360abbc0e4577526ac057a4945eb55d0dbd10
    Reviewed-on: http://review.couchbase.org/7045
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 0fa50b7ec172424f1e4d34ccd5698533748e0a3a
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jun 16 16:19:28 2011 -0700

    Add visibility into operations (status).
    
    This commit allows the functionality for users to issue requests
    and then check to see whether or not they succeeded. They can also
    now access the error message that the server sends back to them
    so they can see why the server rejected their request. Operation
    status's also take into account operation timeouts and exceptions
    so if an operation times out the operation says so. Also if an
    exception is thrown while processing the operation the operation
    status reports the message from that exception.
    
    Change-Id: I62af7450cf6cd1c9d1bf171e5063b3d8a1c919ce
    Reviewed-on: http://review.couchbase.org/7044
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 020e85b804ed8c5b2f35c8a759f473681a1db5ef
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jun 16 13:10:05 2011 -0700

    ASCII get operations now return a false operation status on failure
    
    get in ASCII always returns END at the end of the result from
    memcached. In the current implementation of spy seeing END caused
    spy to return operation success. We now check to see if a value
    is returned before END and if one if not we return a failure
    for OperationStatus of NOT_FOUND.
    
    Change-Id: Ia84df9398e258ae1edba7a11dee55a4c265414d9
    Reviewed-on: http://review.couchbase.org/7040
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit bc892d226629addabb179acd59d08363a46671aa
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jun 15 16:46:02 2011 -0700

    Fixed broken get and touch test
    
    I was testing these throuh eclipse before and I didn't have
    assertions turned on so I falsely verifed the last commit that I
    checked in
    
    Change-Id: I01ca86771041b13e63f5073193eb3c49ed2947c9
    Reviewed-on: http://review.couchbase.org/7009
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 48941d37a2b0a719f09c0734f22138360c356f1c
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jun 14 17:01:34 2011 -0700

    Add touch, get and touch, and get and lock to MemcachedClientIF
    
    These operations were not added to the MemcachedClientIF interface
    in the original commit
    
    Change-Id: I72a670d61a7fa776facf11e2630332facdf4277a
    Reviewed-on: http://review.couchbase.org/6982
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit e93aef248894e3f6229220eaa41da89f9aff1890
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jun 15 17:20:53 2011 -0700

    Added unit tests for touch
    
    Added a unit test for touch. Due to dependency issues the unit
    tests for the touch operation could not be checked in with the
    code for the operation.
    
    Change-Id: Icbffd0be4419fe57a3d4cd8fef879be810a79c30
    Reviewed-on: http://review.couchbase.org/6906
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 07e6f7f397868cec3f5f61e3e969a353a7c6bf39
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Wed Jun 15 15:50:23 2011 -0700

    Removed unused import from GetAndTouchOperationImpl
    
    Change-Id: I96dd2bae2153021ee6f140910ca7f472514245f6
    Reviewed-on: http://review.couchbase.org/7007
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 2e732371db9cdd6129cc6fece54f382560089adc
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sun Jun 12 18:39:11 2011 -0700

    Getl no longer users flags field for request messages
    
    Bug MB-3960 in Membase server has been fixed. As a result the flags
    field is no longer used in getl messages since it makes it more
    consistent with other get operations.
    
    Change-Id: I1bcbe5d0dfb253256242818f05f6ab72440c20c6
    Reviewed-on: http://review.couchbase.org/6952
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 3615441643ace89224dca8250ac1815dd58508ac
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sun Jun 12 16:53:23 2011 -0700

    Getl no longer removes the key from binary message.
    
    Due to MB-3689 in Membase server we were required to provide a hack
    in spymemcached that striped the key out of the body field of a
    binary response message
    
    Change-Id: Ida71e6557f45c73287f12ba44040553024b7a4a1
    Reviewed-on: http://review.couchbase.org/6949
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 090da9593ced54cda0624467cdd01e31872d68be
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sun Jun 12 17:17:37 2011 -0700

    Changed all binary command opcode values to hexadecimal.
    
    We intermixed hexidecimal and base 10 values throughout the code
    for any given binary operation. This commit changes all the base
    10 values to hexadecimal. This way the opcode definitions match
    up better with the code in the memcached project.
    
    Change-Id: Ida6d144411c5c9257358a92fb2eaadc2527a94f7
    Reviewed-on: http://review.couchbase.org/6950
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 0e5c16c3e79d21beefda0cef6601022866943845
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jun 9 14:00:57 2011 -0700

    Make sure a selector isn't canceled before reading it
    
    If a selector is canceled then isReadable will throw an exception.
    To avoid this exception and do the right thing make sure that the
    selector is valid before checking if it is readable.
    
    Change-Id: If3f9542e371eaeddf2bdea05b14b6d7263803e6a
    Reviewed-on: http://review.couchbase.org/6920
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit f552ef9c2c60316966fcd843f93cabbcc58c285f
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jun 9 13:03:19 2011 -0700

    Added unit tests for get and touch
    
    Due to dependency issues when I submited the code for get and
    touch I couldn't submit unit tests for it. Here is a unit test
    that covers all of the cases for this operation I can think of
    
    Change-Id: Ibe1cf3ea83e4a26fdccea125fef605b6dc63c8dd
    Reviewed-on: http://review.couchbase.org/6905
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit b716213a97e382c4f415b5f53750f53ad352ccd4
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Thu Jun 9 12:49:32 2011 -0700

    Ascii unsupported ops give error message
    
    Ascii operations that are not supported currently don't all
    give a reason why they are unsupported. This change add reasons
    to these exceptions
    
    Change-Id: I00f51964918c2f18726debec26b816849100e447
    Reviewed-on: http://review.couchbase.org/6904
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 60b5dfaad399282c758ed098c9bb11c44c3e8595
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Jun 7 21:48:08 2011 -0700

    Change a Bucket instance variable to final.
    
    Change-Id: I3d505cd6f16bf2b18571f36960f957acea31dabc
    Reviewed-on: http://review.couchbase.org/6868
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 50383b656e5babfc9c7a561cd0fb017b5830183c
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Jun 7 16:55:51 2011 -0700

    Change ConfigType enum for clarity.
    
    The word CACHE is a bit too overloaded, even here.  Going to
    MEMCACHE will make things clearer, and so will more docs.
    
    Change-Id: Icace3e363bdab30b15df7e0f9946a8355fa02cc4
    Reviewed-on: http://review.couchbase.org/6867
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 10ece6929593a30e34c6bd47353f2112f000c5f4
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Fri Mar 18 12:53:01 2011 -0700

    Added logging for manipulation of nodesMap in VBucketLocator.
    
    Some situations have come up which are unexepctedly causing the
    nodesMap to return a null when identifying the primary for a given
    key.  We will now debug log how we build that map and look at the
    insides of the nodesMap if this situation occurs.
    
    Change-Id: Ia70079265863f17acdb93cc0115e8d43a8930e13
    Signed-off-by: Matt Ingenthron <ingenthr@cep.net>
    Reviewed-on: http://review.couchbase.org/6866
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 34a77218dc7e19c4017c42a179a2a04513aee0fd
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Fri Feb 25 17:20:00 2011 -0800

    Remove standard Authenticator and replace with simple auth header.
    
    It was found that the Authenticator was caching within the process
    in some cases and in others just plain wasn't working.  Since
    nothing more than HTTP Basic is required at the moment, just add
    our own header.
    
    Change-Id: I6bfce8ba7b51b76c8b99149405b0caadbe60816e
    Signed-off-by: Matt Ingenthron <ingenthr@cep.net>
    Reviewed-on: http://review.couchbase.org/6865
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit e4dc8e37fe1a73649342b20b6c59a90536bd0280
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Fri Feb 25 17:12:18 2011 -0800

    Extracted HTTP auth header to common place.
    
    Change-Id: I530cd25641cfebbb0aebfe13fd250c19a851f8be
    Signed-off-by: Matt Ingenthron <ingenthr@cep.net>
    Reviewed-on: http://review.couchbase.org/6864
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 019932fd7e6d28152123f1d4c9dd91e057a3c25f
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Fri Feb 25 00:34:21 2011 -0800

    Change client ctor to detect vbucket usage from server.
    
    The question about whether or not to use vbuckets is really a
    funciton of the type of configuration the server will hand out.
    There should be no reason to give a URI, bucket name and whether
    or not it's vbucket capable.  That should be discernable from the
    configuration supplied by the server.
    
    This is believed to be compatible with how moxi detects cache
    buckets from membase buckets.
    
    Change-Id: I640fefc37bc863bf5991aa84c6f9fc7e181f5660
    Reviewed-on: http://review.couchbase.org/6863
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit b01e698cdf9a1c0b8be818f21ed44bcfd8c4b026
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Fri Feb 25 00:25:56 2011 -0800

    Allow config to handle cache as well.
    
    Change-Id: I245d89b98279a431008c47ac410c1f63d2ca2aac
    Reviewed-on: http://review.couchbase.org/6862
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit e15e14c0804d139980dde560db984d023686955c
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Fri Feb 25 00:23:11 2011 -0800

    Add a ConfigType via an enum.
    
    Change-Id: I450402e9d56768378353ebcf77f7ad313093fddf
    Signed-off-by: Matt Ingenthron <ingenthr@cep.net>
    Reviewed-on: http://review.couchbase.org/6861
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 5bff901da26d6ac9b36623720748c2017efed1cf
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Feb 24 23:06:56 2011 -0800

    Refactor: not a collection of vbuckets, more of a configuration.
    
    Change-Id: Ie39c9799fe548c9ab5b01a7d278edab1b5d23aeb
    Reviewed-on: http://review.couchbase.org/6860
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit dfd1bd2e35a8f84a6d4f6fceccb57918a9e49e5a
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Feb 24 23:03:51 2011 -0800

    Added check for moxi when testing.
    
    Change-Id: Ifbd8d7863adc55f7c6cf31355c87df9a34f75389
    Signed-off-by: Matt Ingenthron <ingenthr@cep.net>
    Reviewed-on: http://review.couchbase.org/6859
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 86b75564733b7739ee690c2711917f6c82cbece8
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Jan 27 14:38:16 2011 -0800

    Assert the node must exist when finding primary.
    
    Not everyone will have assertions on, but if they do the underlying
    cause of the confusing hostname or IP address lookup would have
    been caught here, rather than in a more confusing place.
    
    Change-Id: I8b8485fe1a1be15d377d39b7b4301024e8d8fd38
    Reviewed-on: http://review.couchbase.org/6858
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 4c628d4746364905d6e48e36f32a65aa43af523b
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Jan 20 14:25:03 2011 -0800

    Add both hostnames and IPs to the nodes map.
    
    Depending on the deployment environment and the configuration, we
    may see either an IP or a hostname from the REST interface.  To ensure
    we can look up the node later, simply add both to the internal Map.
    
    Change-Id: I390d889a67ac61523a0f5485f73cdeab0d768982
    Reviewed-on: http://review.couchbase.org/6857
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit cf7079a125ec891823005dc0596295e47a012fd5
Author: Alexander Sokolovsky <alexander.sokolovsky.a@gmail.com>
Date:   Wed Nov 24 13:16:10 2010 +0200

    Unit test and javadoc additions.
    
    Added javadocs for complex classes
    Added a test method to check the vbucket awareness
    
    Change-Id: I243ac1c2ff99bd81531fef5a46a2e94bd151dac7
    Reviewed-on: http://review.couchbase.org/6856
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit e6698d72e09f5a5656f0c4a58c61e355c2dbb1f2
Author: Alexander Sokolovsky <alexander.sokolovsky.a@gmail.com>
Date:   Mon Nov 15 17:13:20 2010 +0200

    Bugfixing not_my_vbucket occurs on optimized set
    
    Setting correct vbucket index to the optimized set operation
    Added warn message if a not_my_vbucket occurs
    
    Change-Id: I0a1699e88f3ed6ec3d0dc8524ffb1d1c1853a86a
    Signed-off-by: Matt Ingenthron <ingenthr@cep.net>
    Reviewed-on: http://review.couchbase.org/6855
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit a0d16ef3936c1b7e5d2b9480ed9a0a577cc811d2
Author: Alexander Sokolovsky <alexander.sokolovsky.a@gmail.com>
Date:   Wed Oct 27 05:03:12 2010 +0300

    Bugfixing of NOT_MY_VBUCKET handling
    
    Added a collection of nodes that returned NOT_MY_VBUCKET to the operation.
    Changed OperationFactory clone method to copy that collection.
    Correct setting of NOT_MY_VBUCKET status for operation implementations.
    Added getAlternative method in node locator to be called in Retry case.
    Added unit test for getAlternative method
    
    Change-Id: I6c51f1407ebdd5858ffd9342113899c56473408e
    Reviewed-on: http://review.couchbase.org/6854
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 0f1d59df3b02a900dd727ed5036c58d4f3b85d96
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Tue Jun 7 23:07:16 2011 -0700

    Fixed .classpath file to include all dependencies
    
    Change-Id: Ic729a3a12b05657bf338cbca0f5a9e173e71ce77
    Reviewed-on: http://review.couchbase.org/6853
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 2dc34bab9bd3d089c1d4c8d1bf5bf1531d7f06dd
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Jun 6 10:31:00 2011 -0700

    Set the status when receiving ERR_NOT_MY_VBUCKET.
    
    Change-Id: I572375de9f43de1da1a7681206decdf8fcc7f5fc
    Reviewed-on: http://review.couchbase.org/6816
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 3157250ac050cebada7b4add702591b3fa57f77c
Author: Alexander Sokolovsky <alexander.sokolovsky.a@gmail.com>
Date:   Sat Sep 25 00:18:57 2010 +0300

    Allow MemcachedClient and connections to be reconfigurable.
    
    Change-Id: I745ed511aac4af5fbc40244aa5cb8e607cf05f91
    Reviewed-on: http://review.couchbase.org/6815
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>

commit ea8a0dabc9962682be56938054ee4adfc9cd84d6
Author: Alexander Sokolovsky <alexander.sokolovsky.a@gmail.com>
Date:   Sat Sep 25 00:07:44 2010 +0300

    Added VbucketNodeLocator, keyed operation handling.
    
    Change-Id: I2a64540f6baa711f80af6e2419c30829c6876af8
    Reviewed-on: http://review.couchbase.org/6814
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 329f6e3106391cdb2a18035795cefabb7ebc3531
Author: Alexander Sokolovsky <alexander.sokolovsky.a@gmail.com>
Date:   Fri Sep 24 23:41:12 2010 +0300

    Add a configuration provider for bucket updates.
    
    Change-Id: I202aa38d5c600f1e40febca02f303398a4600977
    Reviewed-on: http://review.couchbase.org/6760
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 6b24c54c078aad001604f84ed5ed0432020d8204
Author: Alexander Sokolovsky <alexander.sokolovsky.a@gmail.com>
Date:   Fri Sep 24 23:34:57 2010 +0300

    Added bucket monitor with response handler.
    
    This adds a Bucket monitor with a response handler based on the netty
    framework to read bucket's streaming channel. It passes the received
    configuration to registered observers.
    
    Change-Id: I92472a89f15b9fdbe9725f8a9a4abb2d645a591c
    Reviewed-on: http://review.couchbase.org/6674
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 33709a7d811ffda323950d7cc005338fe849a2aa
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Jan 20 12:52:01 2011 -0800

    If it is membase, do not test some things.
    
    Change-Id: I2fabbb02c298fd3d9c3b32c71d9b69b2a0123c7a
    Reviewed-on: http://review.couchbase.org/6673
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>

commit 81b161b4d8a04aa228ea28276bd82129ca89bba2
Author: Alexander Sokolovsky <alexander.sokolovsky.a@gmail.com>
Date:   Fri Sep 24 23:27:10 2010 +0300

    Added vbucket configuration parser from JSON.
    
    This parser from JSON has several methods for parsing JSON, beans to
    store configuration settings and unit tests.
    
    Change-Id: I478b274e7901e8c1729c20fcc29577b8aff651af
    Reviewed-on: http://review.couchbase.org/6672
    Reviewed-by: Michael Wiederhold <mike@couchbase.com>
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 94515dbd012f191089043e091ae3b42ff254f622
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Mon Jun 6 12:11:46 2011 -0700

    Added Get And Touch Command
    
    The get and touch operation  allows the user to get a keys
    value and reset its expiration. Unit tests will come later
    
    Change-Id: I3c65741325aaf979fa55043fb1f0d114e75c1471
    Reviewed-on: http://review.couchbase.org/6813
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>

commit b8583867aa601b5a3ae546a9bf85c183fe9d5713
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Sat Jun 4 19:49:43 2011 -0700

    Added getl operation
    
    Getl works with both ascii and binary. Unit test will be added in a future commit
    but this code has been tested thoughly.
    
    Change-Id: I9859d8e3752c519bd0bcf67009a0a3999f5cbbf2
    Reviewed-on: http://review.couchbase.org/6778
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>
    Tested-by: Michael Wiederhold <mike@couchbase.com>

commit 646de4959b91ab2d5200b02cc155761920d2758c
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Fri Jun 3 14:38:28 2011 -0700

    Added touch operation
    
    Added an operation to reset the expiration time of a key. I have
    tested this code thoughly and will check in the unit tests in a
    later commit.
    
    Change-Id: Iee3045bdb58142dd44c9e8c723dffe7abdbcb230
    Reviewed-on: http://review.couchbase.org/6753
    Tested-by: Michael Wiederhold <mike@couchbase.com>
    Reviewed-by: Matt Ingenthron <matt@couchbase.com>

commit 2ed6c315de24d60619d45bc79bbbb36a00203bcc
Author: Mike Wiederhold <mikewied@comcast.net>
Date:   Fri Jun 3 14:03:59 2011 -0700

    Added TEMP_FAIL handling to set operations
    
    TMP_FAIL is sent to the client when the server is out of memory.
    The current way of handling this error is to reconnect, but this
    is no the correct way to handle a this error since the server will
    be available soon.
    
    There are other commands that should handle this as well, but right
    now I am only submitting a fix for the set operation since this is
    the operration that causes this error most frequently. We plan on
    adding support for all known Membase commands in a future release.
    
    Change-Id: I8099dd7c85a45c81667e3a566995995dd3780b32
    Reviewed-on: http://review.couchbase.org/6751
    Tested-by: Michael Wiederhold <mike@membase.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>

commit 77cb997b3d1cbb8c1c62798cd950e6070585d197
Author: Alexander Sokolovsky <alexander.sokolovsky.a@gmail.com>
Date:   Mon Oct 11 02:46:33 2010 +0300

    Integrated jvbucket
    
    Added jvbucket 1.0 classes to the project
    
    Change-Id: I8771917e47fd146a371ba33bed7b0ca31cfcbff1
    Reviewed-on: http://review.couchbase.org/6671
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Tested-by: Michael Wiederhold <mike@membase.com>

commit abf2be884c19d6cce46490aed0a25bd207289a8a
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu May 12 19:00:53 2011 -0700

    Buildfile changes to support Maven 2 artifact upload.
    
    This build file change slightly redefines the artifacts from
    memcached to spymemcached.  This feels right to me.
    
    I've tested the resulting upload with both NetBeans and Eclipse
    Maven support.  I can tell war stories later.
    
    Change-Id: Iee37db23f4a5d02328f8dc62253a87895857f59d
    Reviewed-on: http://review.membase.org/6208
    Tested-by: Matt Ingenthron <matt@couchbase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>

commit 740a9c63e887623c678049b7f1003e2f5372dcb8
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed May 11 12:05:04 2011 -0700

    Removed a bit of dead test code.
    
    Change-Id: I295d7b6b301217866f1074c526cdeba6d60420ab
    Reviewed-on: http://review.membase.org/6152
    Tested-by: Matt Ingenthron <matt@northscale.com>
    Reviewed-by: Matt Ingenthron <matt@northscale.com>

commit f993fe99d04337dbca5b337d79258a39baaa447d
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed May 11 12:02:31 2011 -0700

    Compilation fix after spring de-generification.
    
    Change-Id: Ic3cddeedb76ce096569a34e3d8024be06bd4bd62
    Reviewed-on: http://review.membase.org/6151
    Tested-by: Matt Ingenthron <matt@northscale.com>
    Reviewed-by: Matt Ingenthron <matt@northscale.com>

commit 79743d192463d202008c7ab8d460a8f35631b438
Author: Luke Lappin <lukelappin@gmail.com>
Date:   Mon May 9 09:51:29 2011 -0700

    Do not use generics with Spring Factory Bean, be 2.5 compatible.
    
    To be backward compatible with Spring 2.5, the Factory Bean should
    avoid the use of generics.
    
    Change-Id: I2244a24a051b1b90e4142fa01785ae7e095ed87f
    Reviewed-on: http://review.membase.org/6091
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Reviewed-by: Nelz <nelz9999@gmail.com>
    Reviewed-by: Luke Lappin <lukelappin@gmail.com>
    Reviewed-by: Eran Harel <harel.eran@gmail.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit 377eaa537de4a8d3527bd579216bd541ec0a4a13
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Apr 19 00:43:47 2011 -0700

    Increase the maximum size allowed.  Issue 106.
    
    Though memcached still has a 1MiB size by default (overridable
    with a flag), other engines may have their own maximum.  Membase
    for instance has a 20MiB maximum.
    
    Note that the size enforced by the transcoder can be overridden
    through it's ctor.  The reason for making this change is to
    create a new, larger default.
    
    At least for the remainder of the 2.6 series, rather than do
    deep surgery on this issue, just bump up the maximum.
    
    Change-Id: I3e7bb000b12a63b4a299cb8b79a3151fbfc91615
    Reviewed-on: http://review.membase.org/6074
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit 00daa10f012a7fd1656f41a5678629fa5978b1f5
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Mar 23 14:59:06 2011 -0700

    Search more with the KetamaIterator.
    
    The existing KetamaIterator implementation, with a small number
    of nodes, may actually hit the same down node multiple times in
    a row leading to failing to find a node when it should find
    another one.
    
    The original libketama[1] hashes each server to 160 numeric
    values.  These are spread out in a 64-bit value.  The key is
    then hashed to a numeric value within that 64-bit value and
    walked forward until it finds a server.
    
    Previously, this library's ketama implementation would only look
    in the consistent hash for a number of iterations limited by the
    number of servers.  With two servers (similar to flipping a
    coin, you'd get heads twice in a row sometimes) you would have
    a 1 in 4 chance of picking the same dead server twice.
    
    The new implementation will iterate based on the number of
    servers, but attempts to keep the probability of hitting the
    same dead server to less than 1% for a two node configuration.
    This will guarantee less than 1% possibility with two or more
    servers.
    
    Because we iterate by simply appending the number of tries on
    the front of the key, we'll be quite random about where in
    the continuium we hit.  Each selection is rather random, but
    for a set of results already calculated, half of which are
    alive and half of which are dead, we can say that in seven
    iterations, there is only a 1/128 [1/(2^7)] chance that we
    would not select once at least one alive server.  The
    probability for any given test still 1/2, but we can describe
    the probability of the iterations.  The key info on this came
    from the "gambler's fallacy"[2].
    
    1. https://github.com/RJ/ketama/blob/master/libketama/ketama.c
    2. http://en.wikipedia.org/wiki/Gambler's_fallacy
    
    Other references:
    http://answers.google.com/answers/threadview/id/568615.html
    http://en.wikipedia.org/wiki/Combinations
    
    Change-Id: I6fa52c0b02516b68ca8da26e4fd85bb1730b82b2
    Reviewed-on: http://review.membase.org/5207
    Reviewed-by: Aliaksey Kandratsenka <alkondratenko@gmail.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit c157be5e151c16299da5f60dda3d6cc241ed956c
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Mar 31 17:50:59 2011 -0700

    Separate the KetamaIterator for future dynamic configuration.
    
    Some future implementations may want to have dynamic changes to
    the nodes list, so the KetamaIterator has been refactored to its
    own class so it can be replaced while a client is instantiated.
    
    Change-Id: I0c8102bf737226c054662b043661ec97907a283b
    Reviewed-on: http://review.membase.org/5206
    Reviewed-by: Aliaksey Kandratsenka <alkondratenko@gmail.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit 53d61388290f51324960c02e5c71e5ae8431189b
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Mar 21 15:44:04 2011 -0700

    Fixed cancellation issue.
    
    It was found that an operation which had been canceled would
    block the rest of the queue from being processed.  This needs
    to be removed from the queue so the other data may flow.
    
    Change-Id: Ibac73fa9816855976b80fd7248b63f36eb2c1b44
    Reviewed-on: http://review.membase.org/5205
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit ef4a071726131b1c51869b8b24893ca6d0ac6944
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Feb 21 01:09:47 2011 -0800

    Fixed minor comment formatting.
    
    Change-Id: Ie7256580316f08f7bff676525cead3dd872878e1
    Reviewed-on: http://review.membase.org/5204
    Reviewed-by: Blair Zajac <blair@orcaware.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit 0e1499643c745947570ed1d28fb96ec0fd8ba3ee
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Feb 20 23:41:26 2011 -0800

    Added ability to see if op unsent but timedout.
    
    Change-Id: If32de603bdb597db993a22b47ffbe3367e566488
    Reviewed-on: http://review.membase.org/5203
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit 61edff29593be4ce03bbe34289bebfd0115fb07e
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Feb 20 23:39:44 2011 -0800

    Fixed small log typo.
    
    Change-Id: Ie1b2deffd89e778f5ac0ec4762e73fe5b852f66a
    Reviewed-on: http://review.membase.org/5202
    Reviewed-by: Blair Zajac <blair@orcaware.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit a764cf925823706f36a46e6f8f05c20d2b7cae2f
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Feb 20 23:39:05 2011 -0800

    Warn when redistribute cannot find another node.
    
    Change-Id: I7f4eece7d52638c92b305b0f2af35c458e57b0d3
    Reviewed-on: http://review.membase.org/5201
    Reviewed-by: Blair Zajac <blair@orcaware.com>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit bc70869f41228afdc244c162cc29a68c31c45fcf
Author: Eran Harel <harel.eran@gmail.com>
Date:   Wed Feb 23 15:02:17 2011 +0200

    Spring FactoryBean support.
    
    Added a Spring FactoryBean for simplifying
    MemcachedClient creation in a Spring applications.
    This is a patch for
    http://code.google.com/p/spymemcached/issues/detail?id=164
    
    Change-Id: Ib4051608631d976487ab8114083f6d32d35258a7
    Reviewed-on: http://review.membase.org/4752
    Reviewed-by: Matt Ingenthron <matt@northscale.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit b8ae76dd1d13078e4cad07beb0dccee186377327
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Feb 16 19:05:04 2011 -0800

    Changed transcoder logging to more appropriate defaults.
    
    Change-Id: Ia097e245b5be75926165c4e482a86c92a80b5fa0
    Reviewed-on: http://review.membase.org/4612
    Reviewed-by: Blair Zajac <blair@orcaware.com>
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Matt Ingenthron <matt@northscale.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit c7bc636705347039e4557f113c354cbcaf1c0ee0
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Jan 11 14:11:55 2011 -0800

    Catch RuntimeException instead.
    
    Timeouts from the get() without a time value specified will return
    simply a RuntimeException, while those from calling the get() with
    a time value can receive a TimeoutException.
    
    This also removes some debugging traces that were left in
    unfortunate places which could also cause test failures.
    
    Change-Id: Ie64aa5bedcbe36b4717c17750a63a08a7de1f12e
    Reviewed-on: http://review.membase.org/4248
    Tested-by: Matt Ingenthron <matt@northscale.com>
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>

commit 52ad7e589aa859549e977ff513ca89fc375c695a
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jan 10 11:08:12 2011 -0800

    Avoid potential NPE as reported by eclipse.
    
    Change-Id: I2bedcea366bca83597cc9863da9c63a9966eeee9
    Reviewed-on: http://review.membase.org/4232
    Tested-by: Matt Ingenthron <matt@northscale.com>
    Reviewed-by: Matt Ingenthron <matt@northscale.com>

commit 9f1b6301200aca9ea889c969930d999df74a0bad
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jan 10 11:07:57 2011 -0800

    Some import cleanups.
    
    Change-Id: I54bdc264566684208e5273ce51d56f38d14be852
    Reviewed-on: http://review.membase.org/4231
    Tested-by: Matt Ingenthron <matt@northscale.com>
    Reviewed-by: Matt Ingenthron <matt@northscale.com>

commit 7416862c645e9429fc5e27402c8f264bc585e352
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Dec 30 16:27:31 2010 -0800

    Fixes to testSyncGetTimeouts.
    
    Previous to enforcing the timeouts at an operation level, this test
    would pass.  In fact, Dustin said the test had never failed before.
    
    However, it turns out that the really short default timeouts would
    be too short and not waiting a bit after encountering a timeout would
    still see timeouts.
    
    Change-Id: If1fbe77aa02f7cacabca91915927bf7b5e086284
    Reviewed-on: http://review.membase.org/4211
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Tested-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Dustin Sallings <dustin@spy.net>

commit a4c25dcea0ca28640218441ab4fdc2cb9ffe71eb
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Sun Jan 2 16:51:14 2011 -0800

    Add a TIMEDOUT state to ops and make callbacks correct.
    
    There would be some situations where the latch would not expire
    due to the callback not having been called.  Callbacks were
    typically called on state transition for the operation, so I
    thought it appropriate to add a TIMEDOUT state.
    
    Change-Id: Ia02b5bf6a91cf987dae3fc9faf02a41751653773
    Reviewed-on: http://review.membase.org/4212
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit ff6b1d5a083727221c93982d42829795ffff212a
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Dec 6 12:22:50 2010 -0800

    Recognize operation may be null at times.  e.g.: flush
    
    Both the timeout changes from myself and some of the continuious timeout
    changes from Boris assumed there would always be an operation.  In
    some cases, like flush, that is not necessarily the case.
    
    Looking at the existing code, there were lots of guards against null
    access already, so I just continued that tradition.
    
    The tradition may need to be broken though in the future.
    
    Change-Id: Ic1344ef2df2ab0ba4c03b4e401a4f98436a39772
    Reviewed-on: http://review.membase.org/4206
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit b26b6002421156df14044c0ae637d7aaaa4b96ed
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Dec 15 13:56:11 2010 -0800

    Fix for stats sizes test.
    
    Change-Id: I4d9a13f55ec0c15ebb07c924584aa33492a57a12
    Reviewed-on: http://review.membase.org/4209
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 3a426512dbc7681800597e79392b221092555dc6
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Dec 30 14:17:58 2010 -0800

    Test fixes after adding new timeout logic.
    
    Several tests were expecting things to happen within 1ms,
    which is too short.  The new timeout functionality made these
    tests fail, where before they'd pass.
    
    Change-Id: I81473b25cfd4aa73c8c4473c1f337338162a0222
    Reviewed-on: http://review.membase.org/4210
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit e17758f9a6f7fc15ceaf595e77e1a3396ce9fff2
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Dec 7 18:20:04 2010 -0800

    Test for timeout from operation epoch.
    
    Change-Id: I81530461187509026cc18e995b3ceddcc3c76afb
    Reviewed-on: http://review.membase.org/4208
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Tested-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Dustin Sallings <dustin@spy.net>

commit 0e1ebdb844b11f141e389ef584288a39219512a8
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Dec 7 09:50:21 2010 -0800

    Increased default timeout to 2500ms.
    
    The increase of the timeout to this seemingly high value is due to
    a few findings.
    
    First, by default, garbage collection times may easily go over 1sec.
    Testing with simple toy tests shows this quite clearly, even on
    systems with lots of CPUs and a decent amount of memory.  Of course,
    much of this can be controlled with GC tuning on the JVM.  With the
    hotspot JVM, look to this whitepaper:
    http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf
    
    Testing showed the following to be particularly useful:
    -XX:+UseConcMarkSweepGC -XX:MaxGCPauseMillis=850
    
    There is a CPU time tradeoff for this.
    
    Even with these, testing showed some 1 second timeouts when GCs near a
    half a second.  To use this software though, we shouldn't expect people
    to have to tune the GC, so raising the default seems like the
    right thing to do.
    
    Second, many systems use spymemcached on virtualized or cloud environments.
    The processes running there do not have any guarantee of execution
    time.  It'd be really unlikely for a thread to be starved for more than
    a second, but it is possible and shouldn't make things stop.  Raising this
    a bit will help.
    
    Third, and perhaps most importantly, most people run applications on
    networks that do not offer any guarantee around response time.  If
    the network is oversubscribed or even minor blips occur on the network
    can cause TCP retransmissions.  While many TCP implementations ignore
    it, RFC 2988 specifies rounding up to 1sec when calculating
    TCP retransmit timeouts.  Blips will occur, and rather than force
    this seemingly synchronous get to timeout, it may be better to
    just wait a bit longer by default.
    
    Change-Id: Ie53ca774458466d9a2e6f70e65ea6663699a9f6f
    Reviewed-on: http://review.membase.org/4207
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Michael Wiederhold <mike@membase.com>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 4cf9d05e5342459acbce826fd93ba9cfd71f0050
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Nov 15 21:26:54 2010 -0800

    Do not write timedout operations to the MemcachedNode.
    
    This commit and related ones add support to an operation to
    have new methods and a state of TIMEDOUT.  The intent is to
    keep track of when an operation is created and if it either
    times out due to a latch timeout expiration or it is found
    to be already too old when thinking about sending the op
    to the network, just consider it timed out then and there.
    
    Note, object creation time is actually possibly quite a bit
    after when the request is made, depending on how that request
    is made.  Any number of things could have happened in
    between with GC, JIT, scheduling, etc.
    
    Also note that in order to avoid needing to rely on the latch
    which is in a different thread, this allows us to keep track
    of the creation time of the operation and check for whether or
    not it has timed out via the isTimedOut() method on the
    operation.
    
    Doing this correctly and with as little API change as possible
    required getting the default operation timeout down to the
    MemcachedNode level.  That information was not previously known
    to the Operation or the node, but simply relied on a latch.
    
    Change-Id: I60228433bfa121ed031dd81fc05a9d65cae5bf20
    Reviewed-on: http://review.membase.org/4204
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 8688eaa23cb09bc8cb16a4d3ff02f21a4bb4ee4c
Author: Blair Zajac <blair@orcaware.com>
Date:   Thu Nov 11 19:22:20 2010 -0800

    Tiny performance improvement.
    
    It's OK to have the method return an interface, but use the concrete
    class name in the method so it doesn't need to invoke the methods
    through the interface.
    
    Change-Id: Ibd3638e574f9bd0c0928af5bada53de72a59e9f1
    Reviewed-on: http://review.membase.org/3641
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Matt Ingenthron <matt@northscale.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit 385665d5575de49aa1aa4b10ba8ed0c2b804df27
Author: Blair Zajac <blair@orcaware.com>
Date:   Thu Nov 11 19:33:36 2010 -0800

    Minor performance improvement for bulk gets.
    
    If the size of an ArrayList is known before construction, then pass
    the size to the constructor.  This will either save a tiny bit of
    memory or save reallocation's, depending upon the number of elements
    that will be inserted into the ArrayList.
    
    Change-Id: If1db3a8578e2d8603e0c6dbbe781ed7258908eee
    Reviewed-on: http://review.membase.org/3640
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Matt Ingenthron <matt@northscale.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit 3b3b3c856c6578aa7f1b887032c2a3fe0ff8f182
Author: Boris Partensky <boris.partensky@gmail.com>
Date:   Thu Jul 1 14:02:11 2010 -0400

    support timeout based disconnects for bulk ops
    
    Refactored some repeating logic into helper methods,
    track continuous timeouts from bulk operations,
    log at warning.
    
    Change-Id: Ic0e3d14c8d7ff7001c3440683fa4274b119e4d31
    Reviewed-on: http://review.northscale.com/999
    Reviewed-by: Matt Ingenthron <matt@northscale.com>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit f0311f7d4ae79378eb81890277a115ec84ea4ce7
Author: Blair Zajac <blair@orcaware.com>
Date:   Mon Jun 28 12:49:37 2010 -0700

    Allow per-key transcoders to be used with asyncGetBulk().
    
    This change allows the transcoder to save state for each key.  An
    example is shown in the unit test that encodes into the byte array
    sent to the memcached server the key along with the value.  Upon
    decoding a value from memcached, the actual and expected keys are
    compared.
    
    Change-Id: Ie4697bc3f9923e7c2ba981ca334b0df9d1ab7315
    Reviewed-on: http://review.northscale.com/936
    Tested-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Dustin Sallings <dustin@spy.net>

commit ce3bba1bfe6fe79ae3ea03094a89ccc1f3a02f6b
Author: Blair Zajac <blair@orcaware.com>
Date:   Sat Jun 12 11:59:26 2010 -0700

    Add an iterator that returns a single element forever.
    
    This iterator will be used to add a version of asyncGetBulk() that
    allows per-key transcoders to be used.  To efficiently allow the
    normal use of multiple keys with a single transcoder, instead of
    creating an array or list of identical transcoders, other
    asyncGetBulk() methods will create a SingleElementInfiniteIterator
    instead.
    
    Change-Id: Ica58e45f3e0e49a72c7a7a8743bf9180ea9cb7ed
    Reviewed-on: http://review.northscale.com/935
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit ca7bfc2428ead005c502cdfcf97911b83e7adab3
Author: ddlatham <ddlatham@davelink.net>
Date:   Fri Apr 2 11:17:03 2010 -0700

    Support daemon mode for TranscodeService threads.
    
    Change-Id: I28b58a9e1832abedfd8e4177bb38e5cdac158bcb
    Reviewed-on: http://review.northscale.com/920
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 4efb06fd277e4261bc10597a856d57c9d5c1d374
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jun 21 21:42:36 2010 -0700

    Some minor fixes to make eclipse happy with the code again.
    
    - Removed @Override annotations where there are no overrides.
    - Renamed a couple of variables that were shadowing fields.
    
    Change-Id: I7e0f74da72214cbe4c72cd693ee11461138f172b
    Reviewed-on: http://review.northscale.com/919
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit f8111142520726952a49f7c7f9c223680c224acf
Author: Boris Partensky <boris.partensky@gmail.com>
Date:   Thu Jun 17 14:05:26 2010 -0400

    plug potential file descriptor leak
    
    There is a problem in open/connect sequence that may produce
    file descriptor leaks in some abnormal conditions:
    First, SocketChannel.open() is called,
    then ch.connect(a.getSocketAddress())
    is called and it may throw an IOException under certain conditions.
    Then we catch exception and re-queue the node.
    This will produce a leak since the channel was not closed.
    
    The problem surfaced because of some faulty changes that I made
    and which I fixed. But it's nevertheless a problem.
    
    Sun  bug reference. http://bugs.sun.com/view_bug.do?bug_id=6548464
    They fixed it in a helper method that opens/connects in a single call.
    But in our case the client needs to take care of it.
    
    One more small unrelated change is to
    catch an unchecked exception and log an error:
    it is a serious case because the node
    will be essentially lost and never re-queued.
    
    Change-Id: I54930eb03f5c07fc6966f8d4d5db42548c63f6bd
    Reviewed-on: http://review.northscale.com:8080/630
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 03bd66b3ba917e92690221a23b318975dd496a04
Author: Boris Partensky <boris.partensky@gmail.com>
Date:   Tue Jun 15 14:18:10 2010 -0400

    return partial data from timed out getBulk
    
    Augmented Future<T> object returned from asynGetBulk
    with an option to return partial data in case timeout is reached.
    
    Change-Id: I3bac849cee69fd6b57b20139832193b97975f6f6
    Reviewed-on: http://review.northscale.com:8080/563
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit c2102e2a348ec61424e538c58daed38d947ef2eb
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Jun 15 10:42:39 2010 -0700

    Fix compilation with JDK 1.5.
    
    Don't use methods and enum's that only exist in JDK 1.6.
    
    The changes successfully compile and the unit tests pass with JDK 1.6,
    but with 1.5 I consistently get a unit test failure here:
    
        [junit] Testcase: testSimpleLoading took 0.265 sec
        [junit]           Caused an ERROR
        [junit] java.lang.RuntimeException: blah
        [junit] java.util.concurrent.ExecutionException: java.lang.RuntimeException: blah
        [junit]                                          at net.spy.memcached.internal.ImmediateFuture.<init>(ImmediateFuture.java:25)
        [junit]                                          at net.spy.memcached.util.CacheLoaderTest.testSimpleLoading(CacheLoaderTest.java:48)
        [junit]                                          at org.jmock.core.VerifyingTestCase.runBare(VerifyingTestCase.java:39)
        [junit] Caused by: java.lang.RuntimeException: blah
        [junit]
        [junit] TEST net.spy.memcached.util.CacheLoaderTest FAILED
        [junit] Tests FAILED
    The following tests failed:
    net.spy.memcached.util.CacheLoaderTest
    
    Change-Id: I34921695bec8bea5f4b8b0bace13951a41b3230a
    Reviewed-on: http://review.northscale.com:8080/561
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 1f0daa087c4857f80abc6732a9e51ac9b204357f
Author: Blair Zajac <blair@orcaware.com>
Date:   Fri Jun 11 17:13:29 2010 -0700

    Delete a duplicate unit test.
    
    Change-Id: Ibdbbf79455c2e497ae7e121bd88a4f260e24fa54
    Reviewed-on: http://review.northscale.com:8080/416
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit d82f698b98c1a3c5df9eaec3cc0c26f567861857
Author: Blair Zajac <blair@orcaware.com>
Date:   Thu Jun 3 16:56:44 2010 -0700

    Use a faster method to get a MD5 MessageDigest instance.
    
    Instead of getting a fresh instance with MessageDigest.getInstance(),
    clone an existing MessageDigest that has not been updated with any
    bytes.
    
    Change-Id: If72e112e93014631767ed68d758728f372e9a7d8
    Reviewed-on: http://review.northscale.com:8080/292
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 7ceca517bac2a1295da1b7fa8626695c2216fbb5
Author: Blair Zajac <blair@orcaware.com>
Date:   Thu Jun 3 13:10:30 2010 -0700

    No need to call MessageDigest#reset() on a brand new MessageDigest.
    
    Change-Id: I214f4fe0edb07c821f139b61526a2547d9772324
    Reviewed-on: http://review.northscale.com:8080/290
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit 76f00f65ff3bc884fc0557bfdf8f64a2843113e7
Author: Blair Zajac <blair@orcaware.com>
Date:   Wed Jun 2 11:55:50 2010 -0700

    Use a private static final byte array for "\r\n" instead of always
    converting the string into a byte array.
    
    Change-Id: I68fc5e9dea99a25e708808f14c8d0a58bd314336
    Reviewed-on: http://review.northscale.com:8080/269
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Reviewed-by: Eric Lambert <eric.d.lambert@gmail.com>
    Tested-by: Eric Lambert <eric.d.lambert@gmail.com>

commit fb8b07a9f3d6bc08efdaabd40750e069f4011a51
Author: Andrey Kartashov <akartashov@fotolog.biz>
Date:   Thu May 6 11:14:15 2010 -0400

    Move continuous timeout counter to individual connections.
    
    Change-Id: I0d275a824017865714af23abbb0eb61418d5d116
    Reviewed-on: http://review.northscale.com:8080/25
    Reviewed-by: Eric Lambert <eric.d.lambert@gmail.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: SeongHwa Ahn <neoconnected@gmail.com>

commit 72a9c6896897ea34cc69eace3f4bb85eaeeeefb1
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Apr 15 21:39:50 2010 -0700

    Changed ports in tests for non-listening to something higher.
    
    Change-Id: I49a3f3238e80c0e9c445df6ac2f32f634300811f
    Reviewed-on: https://review.northscale.com:8443/1298
    Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
    Reviewed-by: Eric Lambert <eric.d.lambert@gmail.com>
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Matt Ingenthron <matt@northscale.com>

commit 3483b2aa1db7fcf16ba03d49fe9e02948a797fc0
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Apr 12 09:04:33 2010 -0700

    Actually use the args to SASLConnectReconnect; shutdown nicely.
    
    Change-Id: I7517a355707ed9440974d5b5b947fb13a8ba7142

commit 764b5b55d4b5d4c8a28575fe036fed05cf83e1b0
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Apr 6 16:19:16 2010 -0700

    Log operation failures as potential auth failures.
    
    Change-Id: I8e3f5d7cafda8b6007c96799cb8c09b7c780abc1

commit 4ac7a1e730f67cd4b4302d5ad50d8ab37251e016
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Mon Mar 15 02:56:35 2010 -0700

    Handle auth failures more gracefully; maximum failures.
    
    This change will ensure that autentication failures do not
    hang the thread adding an operation.  The default behavior
    is to try to authenticate forever and whine to the log if
    authentication continues to fail.
    
    Optionally, a developer may define
    net.spy.memcached.auth.AuthThreshold with an integer value
    to set a maximum number of authentication attempts before
    shutting down.
    
    Authentication threads are now spawned and managed by an
    AuthTreadMonitor class, ensuring that for any given
    connection there can only be one outstanding AuthThread.
    
    Change-Id: I0af4ab41d27239e7b555dca7d993e6228b7df5b8

commit 07bd9bd6cf1816470eb9d67c43f69bf21dfd7e96
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Apr 1 15:36:37 2010 -0700

    Minor fixes to SASL reconnect test.
    
    Change-Id: Ib7a560c209dd9ac3d8ce0ea36d429228bd92e647

commit da151b80e27eb9ffc5a3954287fe48f654937f6e
Author: Greg Kim <greggie@gmail.com>
Date:   Wed Apr 7 11:04:21 2010 -0700

    Implementing read-only methods in MemcachedNodeROImpl - issue86
    
    Change-Id: I3437c4a69d9673d3fc7a2d0611012389b28e3d2f
    Reviewed-on: https://review.northscale.com:8443/1287
    Reviewed-by: Dustin Sallings <dustin@spy.net>
    Tested-by: Dustin Sallings <dustin@spy.net>

commit efb3e588b4aed12ea61234fe4249f6b5806a615c
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Mar 31 12:48:50 2010 -0700

    Enhanced ConnectionFactoryBuilder test for auth.

commit 8afa770465c9a1124d2a8e06ae72502d22b7e13f
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Mar 31 12:44:59 2010 -0700

    Manual test to ensure correct connection handling with SASL.

commit 114eb500d2362adec73c9537971eff5520513bd2
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Wed Mar 31 09:11:36 2010 -0700

    Changed AuthTest description to match reality.

commit 449316f08b178c49bb6b54701ffa74b386b8448c
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Mar 25 18:09:10 2010 -0700

    Enhance MemcachedNode to know whether auth should happen.
    
    When SASL authentication is requested of a MemcachedClient it should
    always ensure that auth takes place before anything else on the queue
    is processed.
    
    After some experimentation, it seems The best way to handle this is to
    extend the MemcachedNode interface to add some methods. This in turn
    allows for the changes to be implemented in the TCPMemcachedNodeImpl
    class.
    
    There is special handling with the inputQueue and addOperation if
    a reconnect occurs during authentication.
    
    It's a bit harder at the BinaryMemcachedNodeImpl, though arguably
    makes more sense there.  Since these are all pretty well hidden as an
    implementation detail, it's okay for it to be here.
    
    Who knows, maybe someday ascii will have SASL.  Probably not though.

commit a8320eb61695d73f325cf580e5738f87f30f50c4
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Mar 25 17:06:20 2010 -0700

    Clarify what is planned after a disconnect.

commit 5061cf0d66c51f3f90b6adc13433c68eeb518d1f
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Mar 11 09:54:16 2010 -0800

    Clarify Future<Boolean>, issue 63.

commit dc42cff18e78220861c6590bba9e9e050e231bb4
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Mar 11 08:56:11 2010 -0800

    Docs for path to FailureModes on DefaultConnectionFactory. Issue 115.

commit 8f96c59a1dc89fc0aa7bfe680f2cb7627235915e
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Mar 11 08:25:55 2010 -0800

    Various Javadoc completeness.

commit 4d7f3d369e214cd73fad132116bf7ce1b47dc16d
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Thu Mar 11 08:03:44 2010 -0800

    Document unexpected incr/decr behavior.  Issue 48.

commit bc4428cc258276efdf6b792b062b7733526f1624
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Feb 16 22:01:56 2010 -0800

    Invert the ConnectionFactoryBuilderTest to go with new logic.
    
    The contribution by Blair Zajac inverts the ConnectionFactoryBuilder
    defaults to match that of the DefaultConnectionFactory.  This updates
    the tests to check for the new default, and test the new change.

commit 64d2d915a6d0d325dd5b832902547354be328921
Author: Ahn Seong Hwa <ash@nhn.com>
Date:   Sat Feb 6 02:28:10 2010 -0800

    fix for useless check statement that is for continuous timeout exception counter

commit c7502960018b2cd331af9e66c3c80b77deb69433
Author: Ahn Seong Hwa <ash@nhn.com>
Date:   Fri Feb 5 06:59:46 2010 -0800

    New TCP connection timeout feature; if server fails completely, d/c.
    
    With this change, the MemcachedClient has a method of using the
    connection observer to determine a connected server is consistently
    timing out, indicating it has hard-failed.  This will destroy that
    connection so things may rehash or reconnect, depending on the hash
    behavior.

commit 90fdba5ac701a781e11c5374ecc17b1d3042bdb5
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 2 01:37:49 2010 -0800

    A larger libketama extract for compatibility testing.

commit cba26c186143f8adcbc7f8fbcb8d2dd2fbf9df91
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 2 01:36:09 2010 -0800

    If the String value of the socket address starts with a /, remove it.
    
    This is just the default stringification, clients can use whatever
    they want, but by default, this seems to provide consistent results
    with libketama.

commit af26afcfcbd1f1c187935c2a63708016a1e999ae
Author: Blair Zajac <blair@orcaware.com>
Date:   Mon Feb 15 20:54:40 2010 -0800

    Fix consistency issue in ConnectionFactoryBuilder.isDaemon()
    
    DefaultConnectionFactory#isDaemon() is false while
    ConnectionFactoryBuilder builds a ConectionFactory that by default
    returns true for #isDaemon(), so to make them consistent, modify
    ConnectionFactoryBuilder to have #isDaemon() be false.

commit 245667ac0961a157e8d6e39c6903663442cb4ee8
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jan 26 22:51:58 2010 -0800

    Auth fix for mechanisms that have an initial response.

commit 897e1194efa30eeaa5e4d50a40bb2686337573a7
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jan 9 13:27:06 2010 -0800

    Do blocking inserts from the cache loader test.

commit 28c831ce6f21aec0337318b43f8aa18a3da020f9
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jan 9 13:20:15 2010 -0800

    Get rid of special constructors for op enqueue timeouts.

commit c02de90265e5f107db5eeabd3ac57fc7d37a8ad2
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jan 9 13:15:48 2010 -0800

    Ensure the factory builder can be used to specify enqueue block size.

commit 2688a79d59ed835dd19fd7bee79a35af99ba6928
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jan 9 13:07:10 2010 -0800

    Replaced Long nanos with long millis for op queue block offer timeout.

commit 229605f0751b1ae7dad799697192c97478ad6704
Author: Kristian Eide <kristian@medallia.com>
Date:   Sat Jan 9 12:36:56 2010 -0800

    Allow user-specified wait time for availability of queue space.
    
    This means that instead of raising a queue overflow exception on
    insert, the client can optionally block waiting for space to become
    available instead (with a timeout that will result in the same
    exception).

commit b306283bf8fd2139a0365c39b125e539dbc4a21c
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Nov 10 22:44:50 2009 -0800

    Log the bug that causes reconnection on first connect.

commit 4549dce24f0e345b5af1065a1ec44e2bb25a78e5
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Nov 3 23:05:25 2009 -0800

    Better auth API, handles connection drops.

commit 9c409fc1dddaf73fce314207e3732c41c7767eed
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Oct 18 01:24:10 2009 -0700

    Use the socket address as the realm.

commit de78a6ed8fb551c9bef25e5e8ab555f5e4b95eea
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Oct 18 01:03:44 2009 -0700

    Don't throw away an exception.

commit b812d3d82bd0b418eac4a5d0a3552384a60fb964
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Oct 18 01:03:34 2009 -0700

    Reformatted callback handler.

commit 34933a29eb1b37cc56ceece66247524da2daa620
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 10 11:56:18 2009 -0700

    Added support for listing SASL mechanisms.

commit 8423612aa55868e9840ae1b0d977ddd58975c63b
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 10 11:48:16 2009 -0700

    Refactored SASL auth for greater reuse.

commit 0384e37455c8a6852e0f5b9445920774a2133ec9
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 10 11:39:17 2009 -0700

    Working multi-step auth.

commit 0ff519f0d438b5403c71e3fdaaaff077ab246508
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 10 11:23:50 2009 -0700

    Refactored broadcast to allow for node selection.

commit b9f90a5cc28eaa14d40afc607b09e99b3432bc04
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 10 10:51:51 2009 -0700

    Authentication should allow specification of a mechanism.

commit 23152a22a473edf09fd2c869c0c8274e90396058
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Oct 7 22:42:57 2009 -0700

    A slightly better model for SASL auth.
    
    I still need to actually attempt a multi-step auth attempt.

commit cf7f34f112a2401fe160fabcc7c059a3207a8726
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Oct 6 23:58:24 2009 -0700

    Beginnings of SASL support.
    
    I've manually verified this is happy with a test server both in the
    auth pass and auth fail cases.  It needs a lot of work before it's
    good, though.

commit 7831c780826f137607737a922d22a5ebf9b23b92
Author: Blair Zajac <blair@orcaware.com>
Date:   Fri Nov 6 08:55:41 2009 -0800

    Fix AddrUtilTest#testIPv6Host() hostname assertion.
    
    This broke on operating systems where the IPv6 localhost is not listed
    in /etc/hosts as "localhost" but as "ip6-localhost" for Ubuntu or
    "localhost6.localdomain6" for Centos 5 and Foresight Linux.

commit 720189210dbde12c7bfb8cb2fd5dc16e12a88756
Author: Blair Zajac <blair@orcaware.com>
Date:   Fri Nov 6 08:33:18 2009 -0800

    Be more generous in the strings that AddrUtil#getAddresses() will parse.
    
    The code will now allow multiple whitespace and commas to separate
    "host:port" tokens.

commit 0437b0ec87280f608f63167f3a87218325309803
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Oct 27 10:54:50 2009 -0700

    Allow MemcachedClient and AsciiOperationFactory extensibility.
    
    While I don't encourage people to just randomly start changing stuff,
    I also shouldn't assume I'm smarter than my users.  :)

commit e2286e754cdb2eccf5247da659ed65c9f5f66c76
Author: Matt Ingenthron <ingenthr@cep.net>
Date:   Tue Oct 27 10:39:51 2009 -0700

    Some javadoc cleanup in MemcachedClient examples.
    
    I don't think it'd be a change between Java 1.5 and Java 6, but in any
    event I found the advanced example didn't compile without the changes
    incorporated in the diff in the comments here.  Since binary protocol
    is a feature, I thought this was a good place to show it off too.

commit 32762f8b7908d91de10fb74d905398818b1552e7
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Oct 27 09:46:05 2009 -0700

    Handle operations that are writing and reading at the same time.
    
    Especially in bulk cases, the server can be transmitting data from an
    operation and receiving results from it simultaneously.  It's no
    longer sufficient to consider an operation to be either reading or
    writing, but it's likely that it will need to read at the very moment
    it begins writing.

commit 088874107925dec5413db50c6d4503cf11b64cd3
Author: Kevin Lafferty <kevin.lafferty@gmail.com>
Date:   Fri Oct 23 00:00:27 2009 -0700

    Support byte arrays in WhalinV1Transcoder.

commit 9e61290d93b98ccd705aea3958cb8d80f762d0c9
Author: Kevin Lafferty <kevin.lafferty@gmail.com>
Date:   Thu Oct 22 09:33:40 2009 -0700

    MemcachedConnection constructor should catch SocketException
    
    Running version 2.0.1 on OS X 10.5.7 with JDK 1.5, I observed the
    following exception when to a host that had been accidentally taken
    out of service:
    
    java.net.SocketException: Host is down
            at sun.nio.ch.Net.connect(Native Method)
            at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:464)
            at net.spy.memcached.MemcachedConnection.<init>(MemcachedConnection.java:80)
            at net.spy.memcached.DefaultConnectionFactory.createConnection(DefaultConnectionFactory.java:84)
            at net.spy.memcached.MemcachedClient.<init>(MemcachedClient.java:146)
    
    It looks like the 2.4.1 client resolves this by catching
    ConnectException and queuing a reconnect, in this code:
    
    // Initially I had attempted to skirt this by queueing every
    // connect, but it considerably slowed down start time.
    try {
            if(ch.connect(sa)) {
                    getLogger().info("Connected to %s immediately", qa);
                    connected(qa);
            } else {
                    getLogger().info("Added %s to connect queue", qa);
                    ops=SelectionKey.OP_CONNECT;
            }
            qa.setSk(ch.register(selector, ops, qa));
            assert ch.isConnected()
                    || qa.getSk().interestOps() == SelectionKey.OP_CONNECT
                    : "Not connected, and not wanting to connect";
    } catch(ConnectException e) {
            queueReconnect(qa);
    }
    connections.add(qa);
    
    Given the stack trace I observed, the catch of ConnectException should
    cast a slightly larger net and catch SocketException.
    
    (issue94)

commit c84ddd7d60697d66eadab5d8b79a3d2e772e6d8c
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Oct 22 09:20:10 2009 -0700

    Removed a debugging stdout thing.

commit 3e274e81df0b7e2f3d28a70999487088c1cf6de2
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Oct 21 17:41:52 2009 -0700

    StorageListener should be public.

commit 88aad1bf7f4abc716d5c0981321c5f8c177f3054
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Oct 14 11:38:00 2009 -0700

    Increase timeout in overflow test.

commit a31795d68ea59a32e037384e35cf06ff2f683b14
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Oct 13 20:36:39 2009 -0700

    Compile targetting 1.5.

commit 19883d03be8026e0fafffa09761a83421a424fda
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Oct 13 13:44:19 2009 -0700

    Configurable max reconnect delay.

commit 8d9387d3333eaaa39a0e3ade98462a39c8dff906
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Oct 13 13:37:52 2009 -0700

    Better reconnect back-off formula.

commit 4e4b9ff3afba4282fa21d719fe9095be3fc97cc7
Author: Lewis Zimmerman <lewis@lzimm.com>
Date:   Tue Oct 13 13:31:02 2009 -0700

    Fixed bug in sequence number wrapping (bug90).
    
    If the cas op on seqNumber fails, rv never gets updated and will loop
    until seqNumber wraps at least one more time. proposed fix increments
    seqNumber whether or not the cas succeeds: if another thread was able
    to swap to 0 before we were, we're still good to go.

commit d0210bdd217fa826941da060adb6455c4197c9a0
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Sep 25 18:55:28 2009 -0700

    Some doc and style cleanup.

commit 2a1dedf5a20c9bfae4a638883f631bd857bef232
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Sep 25 18:47:12 2009 -0700

    Moved ketama stuff to util.

commit 547cdc5cd9d5a9917c4315c2817d40f6c8e53811
Author: ciaranj <ciaranj@gmail.com>
Date:   Fri Sep 25 11:48:31 2009 +0100

    Modified the KetamaNodeLocator code to accept configuration object

commit 0cc760551ffcc10b5b59a50bb43e151420ee75c4
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 24 11:17:23 2009 -0700

    Cleaned up all javadoc warnings.

commit 357a5b882589186a5529eff42a73c2830561a17b
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 24 11:05:53 2009 -0700

    Javadoc can't deal with ç for whatever reason.

commit ac97f92816dfbc9c5d15f84aefbb0d84bf41ead8
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 24 11:02:00 2009 -0700

    Fix javadoc @see links.

commit a5ebc4c7188fdb7299c1870682060859bc8c0704
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 24 10:54:22 2009 -0700

    Added a package.html for compat.log

commit a0d3b0aff8a7508a656bfbe8e119f9a395a2df1e
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 24 10:50:40 2009 -0700

    Cleaning up docs a bit.

commit de9867ef5bd8778d0f3839918ffc581d7ab63964
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 24 09:53:29 2009 -0700

    Update the toplevel package.html

commit b6e0183cb9663f352457d8a1e243ce311c401fd4
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Sep 23 15:34:59 2009 -0700

    Updated site task.

commit 906c54e2b2957042634e5c14015c503c3452c16f
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Sep 23 15:29:11 2009 -0700

    Use emma as the coverage tool.

commit c171f5bd5baecf68e28146b2a34d7e60a9c7dca7
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Sep 23 12:30:37 2009 -0700

    Fix workaround for manifest since the buildr fix broke the workaround

commit 5486bd9d5778959ba024c1ee421942a5739a3b14
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Sep 23 10:09:52 2009 -0700

    Auto-compute latest released versions from each series.

commit 3def22f973872220636ba68952155f6475791d95
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Sep 23 09:34:38 2009 -0700

    Put a ceiling on set optimizations.

commit 41f16e4634c31d30b3760e6f589de64f44edf66f
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 22 23:48:54 2009 -0700

    Convenient way to select a node location type.

commit 04c12dff94ce388d3635b44370c4b0b4908f6471
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 22 23:02:27 2009 -0700

    Added javadoc for all the ConnectionFactoryBuilder methods.

commit 03d59809802eba6eb97f57e2ecb51fe126b5a53d
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 22 22:51:38 2009 -0700

    Add a convenient protocol setter.

commit 334b5a99d315a06000e52b206368ccf0598fbe6f
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 22 17:45:58 2009 -0700

    Add Nagle algorithm configuration to ConnectionFactoryBuilder.

commit 1492f098dbc33460f13efcd03df9c0919874d1e3
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 22 16:45:17 2009 -0700

    Use a queue factory to create queue instances for the builder.

commit 0e0c0994db143476171737242ad7ac33950a3262
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Mar 2 15:18:44 2009 -0800

    ConnectionFactoryBuilder

commit 7596f401a2c515a013656a26f5c8915403dc7f79
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Sep 19 23:53:59 2009 -0700

    Optimize binary protocol sets.
    
    This optimization works in a similar fashion to the GET optimization,
    but is binary protocol specific.  Effectively, all mutation operations
    are folded into quiet ops and the responses are dispatched as implied
    positives when the operations are known to have finished.

commit 4888bb959710df83778bca98230bd7b07d3a13bc
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Sep 19 15:14:52 2009 -0700

    A simple loader benchmark of sorts.

commit a849a3f5788e613eb1c9d09a3c6bbeabfc9c2470
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Sep 19 14:45:58 2009 -0700

    Refactored CacheLoader to have a push mechanism.

commit 641678fd587870da084d3b892f26d84b3b933019
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Sep 19 01:43:32 2009 -0700

    Added a bulk loader API.

commit 507432ecf667916767980b22fb2fc902d806f119
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Sep 18 19:57:10 2009 -0700

    Refactor optimization control.
    
    No longer a dangerous mutable field in the connection.  The
    ConnectionFactory defines it and it's used throughout the life of the
    connection.

commit ac87ce24b2849af5fe4c4b6688b7d7aefaa37c88
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Sep 18 00:58:09 2009 -0700

    Trace handling node in broadcasts, too.

commit c065aa5c01bd42e18c3729ec0fbb3b46edf28247
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Sep 18 00:43:53 2009 -0700

    Handle a couple of null cases in op tracing.

commit 0894556d36c6b204ce93d2b7504aee81abfda6f5
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 17 23:43:25 2009 -0700

    Provide some breadcrumbs about which nodes were in contact during timeouts.
    
    The root cause of an OperationTimeoutException should have something
    that looks like this:
    
    Caused by: net.spy.memcached.internal.CheckedOperationTimeoutException:
           Timed out waiting for operation - failing node: /127.0.0.1:11213
    
    The actual failing operation is available from the
    CheckedOperationTimeoutException in case someone wants to do something
    particularly special with it.

commit 6edff67173cb80486a7e5ef29a5f6311b7e9b105
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 17 22:39:10 2009 -0700

    Refactored futures into toplevel classes.

commit f850e9d64ec9b5150cf14bf880733c0ef4d8d68b
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Sep 5 23:52:34 2009 -0700

    Test for TranscodeService.

commit c4fd35d3d64d95a279d6150a2c99aa4c5e4919fd
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Sep 5 23:28:26 2009 -0700

    TranscodeService should not be a singleton.

commit baf3a9f154e329e8ccd5932e43c0010b6ba569be
Author: Joseph Hart <joeyhart1981@yahoo.com>
Date:   Sat Sep 5 22:27:18 2009 -0700

    Asynchronous transcoder service.

commit 339f6c474ea9613c5181991617b236967c5efed8
Author: Wang Nan <pi3orama@gmail.com>
Date:   Sat Sep 5 22:09:42 2009 -0700

    Conditionally allow enabling/disabling the Nagle algorithm.
    
    Off by default.

commit bef4c72adb262b138edfef93994d6dae7d468ac9
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 3 10:40:05 2009 -0700

    buildr cobertura update

commit bcffdf9c972685b6179151e0e42bfdbe7622c3f2
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 3 10:39:53 2009 -0700

    New build_info for jruby-based buildr.

commit 5ca04897525922d1f200b44f57e5edfdc4b324ed
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Aug 13 00:21:54 2009 -0700

    Handle failures on initial connection.
    
    If a ConnectException is thrown while performing the initial
    connection, just queue it and let it reconnect naturally.
    
    Note that initially tried running *all* connections through the queue,
    but it made startup considerably slower

commit 69974715592fe6fe6f761e28216ec0a943ab5783
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Aug 13 00:12:15 2009 -0700

    Testing a really long CAS identifier.
    
    (issue 80)

commit b634d0ae546a299bb570d8877434261ba32f76a7
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jun 20 18:41:54 2009 -0700

    Allow CAS Mutator to work in a mutation-only mode.
    
    When initial is null, do not initialize the value.

commit 4999cc49c3c37aa4d3eac9b4cb2134dc45df7862
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jun 20 18:20:00 2009 -0700

    Use a client interface for CASMutator.

commit c3d30fa8f5efabe669e46a5cd2cefc6a0dd94071
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jun 20 18:02:19 2009 -0700

    Fix teardown race condition in TCPMemcachedNodeImpl.

commit 0cd55a340a3625c431d433313d35bbf837a9998e
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Apr 14 13:55:25 2009 -0700

    Fix bug when a reconnect is scheduled simultaneously for two connections.
    
    This is a time-sorted map, so adding one could kick another one out.
    As it's rare, detecting it and fudging the reconnection time is the
    least intrusive and safest way to prevent things from getting dropped.

commit d5643e7ba5d825dda6002b61194fe079702b18ed
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Apr 2 08:28:17 2009 -0700

    Update compat docs and errors to reflect compat packaging.

commit c6f8a9783af431c5f9ec4f8d178f10c4698fb46c
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Apr 1 17:18:23 2009 -0700

    Allow transcoders to say how big objects they cache are.
    
    This allows someone to, for example, have a transcoder for small
    objects only, or allow access to a server that supports arbitrarily
    large objects.

commit c2d1b84658040ac2a7c8c1737e59e4f45d46218e
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Mar 29 01:37:19 2009 +0100

    Fix stat parsing for values with spaces and add some tests.

commit f6ea239d52d41c3a656ad50dac12035bc8a01098
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 21 01:48:35 2009 -0700

    Better connection observation reporting.
    
    ConnectExceptions are not reported as they occur before connections
    are established, but any other exception that occurs during the
    lifetime of an exception is.

commit c7d6455567555527f7dd371b726104e2d388d6ca
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Mar 18 13:46:37 2009 -0700

    Raise an IllegalArgumentException on blank keys.
    
    Much thanks to Alexander Zaitsev for pointing this out so I can save
    someone else from his headache in the future.

commit 179e8cfd735de902608e246acce09601b60f4074
Author: raykrueger <raykrueger@gmail.com>
Date:   Thu Feb 26 06:02:51 2009 -0600

    Moved BaseMockCase into src/test.
    
    Maven uses separate classpaths for test vs main compile. This class
    didn't compile as the jmock jar is only in the test classpath.

commit 18662e634fed513a79f675503c4bad0b76528f2a
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Mar 6 12:09:46 2009 -0800

    Link to the changelog.

commit bec30bebd368d6399c665bda3dab6ed6bec63386
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 25 13:40:28 2009 -0800

    Added another version to the buildfile.

commit c9df12f0e7513beb33a6e2525f1d3fa91c11742f
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 16 10:02:01 2009 -0800

    A Map interface to memcached.
    
    This obviously has limitations -- specifically around attempts to
    iterate the cache.  Any place where a Map is used as a cache, this
    should make a nice swap-in replacement, though.

commit aebdc88063f0a83c1e48e5ae37b78b083829b75b
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Feb 14 18:33:09 2009 -0800

    Allow the default transcoder to be specified.
    
    This was done before by a gross mutator.  The ability to specify it
    was obvious, but I overlooked it anyway since I always use the default
    default.

commit d432609b4e8120c075ea4590379060e78de288d6
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 13 10:20:44 2009 -0800

    Added the Cancel failure mode.
    
    This failure mode simply cancels any operations heading towards a
    broken server.

commit ca8d058910024d373c2eda19438af4937ff70ffc
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 13 10:13:03 2009 -0800

    Renamed FailingServerTest to RedistributeFailureModeTest.

commit c13f26f74d957ae7d93ca2421f42bb1989fa629a
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 13 10:05:26 2009 -0800

    Removed setTranscoder from client.
    
    This was not thread safe and shouldn't generally be done.  You can
    pass in a transcoder on a given operation, but attempting to change
    the current one would require me to at least make it volatile.

commit dc367300944b8e86dd2c62a484f0131303b37b78
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 13 09:53:54 2009 -0800

    Fix really terrible misspelling of mutator.
    
    This is not a backwards-compatible change, but I doubt anyone is
    implementing MutatorOperations -- at least, anyone who wouldn't prefer
    them to be spelled correctly.

commit e3a676ce8f4e1a244604872e7ed8fe696d7365bf
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Feb 12 10:39:26 2009 -0800

    Remove compat JDBC closing.
    
    There's no DB stuff here.

commit c8b07fcd92001bd7a348bf354f413203f4cf8954
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Feb 12 10:38:26 2009 -0800

    Exclude some uninteresting test stuff

commit b149016b3d0e60da069e287b44c7873c8760870c
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Feb 12 10:18:51 2009 -0800

    Handle multi-get dispatch fanning out into individual gets.
    
    This covers the case of a multi-get targeting a downed server, getting
    pulled out and redistributed individually to a bunch of individual
    operations on other servers.
    
    Note that this is (should be):
    
     1) Rare (you don't have servers dying a lot, do you?
     2) Later optimized into per-server multi-gets when prepped for the wire.

commit ffb991d32181e954715075c68e163c05b299959e
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Feb 12 08:36:56 2009 -0800

    Implmement and test get operation cloning.

commit 91aa81aea74698ea0b0a94fcbaadc1274d198f57
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 11 19:09:47 2009 -0800

    Tests around cloning operations.

commit 8c8fc4ca1989950ba43d676d571837c51db07bc8
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 11 19:02:36 2009 -0800

    Factory change to allow CAS to use different mutation ops.

commit 3f4a23411b3c8049dc0b18ad3bb68211630e1bff
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 11 13:59:15 2009 -0800

    Operation cloning.

commit 7cc43e38ca9dc5af849622a948d55829a38f8a4e
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 11 13:48:49 2009 -0800

    Added accessors to internal data structures of mutator ops for cloning.

commit 92933142bc3b239705426a4aa02f28c419cf54c8
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 11 13:44:31 2009 -0800

    Added accessors to internal data structures of store ops for cloning.

commit 29a15cf5f5b9402cbb75bbb30ff61db910028f37
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 11 13:36:36 2009 -0800

    Added accessors to internal data structures of cat ops for cloning.

commit bbdb99d07488f1e3f170d1dd1ec76f5f78dca3f9
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Feb 10 19:11:21 2009 -0800

    Added accessors to internal data structures of CAS ops for cloning.

commit 2620f446ac08f263e0aaa23ad68758da63b45c83
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Feb 10 18:26:30 2009 -0800

    Added base operation clone mechanism.

commit 6ced6e51e5d94ba18b27c65757625012a66feea1
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Feb 10 18:40:34 2009 -0800

    Beginning of the redistribute failure strategy.
    
    This changed the default strategy used throughout tests since the new
    strategy is not complete and prematurely cancels all operations
    destined for the broken server.

commit d8d5f11e90fcd8dd9a0245fa5483ca5824dfd030
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Feb 10 18:33:35 2009 -0800

    Split up commands into Keyed and other operations.
    
    KeyedOperations lets us know for which operations we know the original
    keys so we can do things like find another server to play the
    operations against.

commit 4caa1df73e5a581a408b0a6f1bc150e95b8ae0ca
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 4 18:52:24 2009 -0800

    When FailureMode is retry, queue even when inactive.
    
    This is *most* of the implementation of FailureMode.Retry.

commit cf4b55f4aed2b9014c301d4b3f230b9dce77b7df
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 4 18:51:58 2009 -0800

    Introduction of failure modes.

commit 88ed8e28432026ce068c060b120569c95252380f
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 4 18:40:20 2009 -0800

    MemcachedThreadBench main should use reasonable defaults.
    
    This almost got profiling working in netbeans, but not completely.

commit 2a21334927bca74c23589577ac5082f17512d8c1
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Feb 10 18:44:33 2009 -0800

    Fix a test that broke with the internal queue changes.

commit 74c5323077afe9b8fef5901bc62d88f8d489c6c7
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Feb 3 17:23:28 2009 -0800

    Moved MemcachedThreadBench into the manual test dir.

commit 99ba4b01ee1cc06df1666576833e831d0daff35c
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Feb 3 17:14:20 2009 -0800

    Update documentation for DefaultConnectionFactory.
    
    The queue implementations were documented and should probably be
    reflected.

commit a84570da0c77ef0877eb08d5ec8bc39a8e5198e0
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Feb 3 10:21:36 2009 -0800

    Converted to an unbounded LinkedBlockingQueue for internal queues.
    
    The external queue is still bounded, but the internal queues won't
    overflow by default (at the cost of more memory during spikes).

commit e6a8bdae1c95067d8be3b75ed24668a400b2a7e1
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Feb 3 08:46:36 2009 -0800

    Make QueueOverflowTest a bit more standalone.
    
    I'm thinking about changing internal queue types, and would like the
    test to still be able to overrun.

commit 4f6817afb132f0818a6cd2684b917e3583ab7e3b
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 2 12:04:46 2009 -0800

    Added the ability to pass in initial observers at construct time.
    
    With this, observers can observe the *initial* connection, which (as
    the test demonstrates) can allow a caller to block until all (or at
    least enough) connections are established before proceeding.

commit 9870d6e9eab9fa65239a8291e7d7e56fbcf2afa6
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 2 11:12:30 2009 -0800

    Added support for connection state observers.

commit 262d326a4fd225f0185b024b5ae0e1e22030ac1d
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jan 26 22:58:06 2009 -0800

    Increased code coverage some with new compat code.

commit c2d8c778fbc64c0687b135beb3af53a27270b65f
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jan 26 22:37:57 2009 -0800

    Remove dependency on spy.jar.

commit bc1ef9e47bf6444483d480f9162a3c2fc9539e72
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jan 25 23:39:10 2009 -0800

    Asserting a non-null to make a compiler check happy.

commit 54f5826eede8fb69cbb5cedd297f4f3c92256bde
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jan 25 23:37:33 2009 -0800

    Added a test to demonstrate a solution to bug 42.

commit 46b6d5f0c98e4067c6a3f88c7c3c5c2c252f2fd8
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jan 25 23:16:48 2009 -0800

    Updated junit eclipse dependency.

commit df6a205a9a239da9ec8373d31bef8e95708cd4ac
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jan 17 02:41:52 2009 -0800

    Added a modeline to the build file

commit 8715c4dedfa25e8cb8167733d00ea9889c756835
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jan 17 02:41:43 2009 -0800

    Updated copyrights to 2009

commit 9b2b4be73ee4a74bf6d0cf47f89c33753a5b5329
Author: raykrueger <raykrueger@gmail.com>
Date:   Fri Dec 19 11:27:37 2008 +0800

    ignore idea project files
    
    Signed-off-by: Dustin Sallings <dustin@spy.net>

commit c0cd61aa269d02ebf0337cff6a1194c27dbeff1d
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Dec 19 09:27:28 2008 -0800

    More tries to get a timeout.
    
    This should happen sooner or later.

commit 8c489ffa2e714eff476b4090f7ce778f4aacd20f
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Dec 18 20:40:40 2008 -0800

    Made the timeout test run on every protocol on every build.

commit fb326d5205cf5d501029f6d75befb81e52c38b62
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Dec 18 20:24:38 2008 -0800

    Added a test for bug 35.
    
    I can't reproduce this problem on OS X at least.

commit fba04e99e617d9481a8d21cb83f597115da284b7
Author: Valeri Felberg <valeri.felberg@gmail.com>
Date:   Wed Dec 17 10:58:13 2008 -0800

    Support passing an expiration date into CAS operations.

commit 6c4ae7a86be5d42d2c9d41e00f15a55142bbbeb6
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Dec 17 10:41:28 2008 -0800

    Ignore this .settings thing that eclipse dropped in.

commit 777627fd0f7c959a94d3b1a62d51a83421fb8807
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Nov 18 22:09:05 2008 -0800

    Removed unnecessary warning suppression.

commit 84b422f382e1b1ce8367c10802d48f86f7cb2f92
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Nov 6 20:30:52 2008 -0800

    Document, but don't declare OperationTimeoutException (unchecked).

commit df7d3b579b1f440a078fc6f6ae92cd9e78fe1390
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Nov 6 20:26:07 2008 -0800

    Document the IllegalStateException that's thrown on queue full.

commit e5afba2c538fdf28a441bf0d28671dd73fe33af5
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Oct 31 23:20:01 2008 -0700

    Test the readonliness of MemcachedNodeROImpl.

commit c92caa7441e817f71f4eb7bd39d5e805fe87d312
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Oct 31 22:57:48 2008 -0700

    Tests for node location cloning.

commit ddb72ddd33599f633649c11f091b8ef38443c2a5
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Oct 31 22:12:51 2008 -0700

    Make NodeLocator instances responsible for producing RO clones.

commit 60ceb53bbd02f2095808872a9f88e2bfea6b1593
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Oct 30 18:30:44 2008 -0700

    Retabbed some code.
    
    Need to be a bit more careful here...

commit 9d4585a1cf4cd137e5078127243fcfdd0031e76d
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Oct 30 18:29:47 2008 -0700

    Test for mutation with default and expiration.

commit 406921af9363ea31aeedb292fe5ec0b6b08374dc
Author: Nick Brachet <nbrachet@gmail.com>
Date:   Thu Oct 30 18:29:33 2008 -0700

    Added incr and decr with default and expiration.

commit a320dec0146a248fc1aef025876a69dd03081939
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Oct 30 18:23:23 2008 -0700

    Be sure to pass the expiration down in mutateWithDefault.
    
    This is for all of the corner cases in the ascii version.

commit 77629a62eb4ddecec46321bb238b81cb637e0817
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Oct 29 23:23:15 2008 -0700

    Include a link to an older version in the site.

commit 0898832030458f6556e0547787a5d4d0b1f8e003
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Oct 27 21:40:39 2008 -0700

    Set a value before attempting to look at the slabs stats.
    
    The slab stats test will return nothing if there have never been any
    values added (thus any slabs created).

commit 0e7dd357469cda1e629b28879b4cc0d8ba151d15
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Oct 24 20:23:28 2008 -0700

    Added a baseline test to get slab stats.

commit 87312691e07074bcabeb316fc3ab9439f7e895d6
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Oct 24 20:23:18 2008 -0700

    Support an argument to stats.

commit 75384adf826bf0338734a5bdb1e972bd2eaa3839
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Oct 19 15:22:20 2008 -0700

    Got rid of workarounds for binary stats problems.
    
    In the latest code, Toru made sure all result packets contain the
    requested opaque.  No magic and no 0.

commit bd17fe6ebf418eca016e9ea13b15b0ae2d2fc3bc
Author: Nick Brachet <nbrachet@gmail.com>
Date:   Sat Oct 18 16:50:21 2008 -0700

    Asynchronous incr/decr with no default.
    
    Theoretically, this can work with default values as well, but only in
    the binary protocol.  Getting this to work with the text protocol
    would likely be quite painful.
    
    http://code.google.com/p/spymemcached/issues/detail?id=12

commit 23471266e7c3f80818b45773381a6f0765f69a22
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 18 17:01:31 2008 -0700

    Update license copyright.

commit d4f82430eec6edd14131f84da7094e6237a275f2
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 18 14:41:47 2008 -0700

    Refactored string transcoder testing to work more generically.

commit f64c567bc153f4282e3b086c56238d911b1f4b67
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 18 14:10:28 2008 -0700

    Miscellaneous test code cleanups.
    
    I've got some tool that complains about various things it thinks I
    might be doing wrong.

commit fc1602e4685a3f92e944ebd78cd60b5469fdd279
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 18 14:07:03 2008 -0700

    Removed a cancellation test for a method whose functionality was gutted.

commit d16a106ac344ddba057ac05a966790210558bf55
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 18 14:05:53 2008 -0700

    Unit testing for WhalinV1Transcoder.

commit c7918a164912e2c7dde8765d9fd72e68f069ad98
Author: Boris Partensky <boris.partensky@gmail.com>
Date:   Sat Oct 18 14:03:09 2008 -0700

    Whalin V1 compatible transcoder.

commit b292d0387fa426f96ed69176099d96707b961085
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 18 13:27:08 2008 -0700

    Updated copyright info.

commit 4b92a81750ab39207b2a6ca26180720595c95aca
Author: Boris Partensky <boris.partensky@gmail.com>
Date:   Fri Oct 17 08:56:12 2008 -0400

    fixes for Whalin compatible transcoder.
    
    corrected Boolean encoding and added Character support

commit df6cd926366f46878bf37d27cefce03fa922ad14
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Oct 17 09:33:35 2008 -0700

    Refactored the transcoder tests for reuse.

commit 4a6e7d1cf1861befaed921a3b9948bf66e0c4508
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Oct 17 09:08:36 2008 -0700

    Added char testing for transcoders.

commit 472337cab2c2394931df97621a01946124ccac24
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Oct 15 01:28:08 2008 -0700

    Work around a server bug in bin stat opaque validation.

commit d0259d9271d459826ea69c063c96f5c467a040d4
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Oct 14 21:50:24 2008 -0700

    Binary stat support.

commit b609da401bea7bac7aec4e04cf41817ca62d322e
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Oct 15 01:40:52 2008 -0700

    Remove support for hold values on deletes.
    
    This functionality was removed after we all agreed it was confusing as
    1157f3c5ce25918558781bd2207b6b6de702dd17 in memcached by Trond Norbye
    (merged in by Toru).  Mon Jul 28 17:55:41 2008 +0900
    
    That ID will probably be killed off by a rebase.

commit 8262a2a532d740a26accd4291ab2d96fa2e58daa
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Oct 4 00:24:04 2008 -0700

    Don't log when we get a ClosedChannelException while shutting down.

commit c7213d018047b6a17cfac88953e7cacf9ab48b10
Author: Robey Pointer <robey@twitter.com>
Date:   Mon Jul 21 16:48:51 2008 -0700

    if the memcache server disconnects, try to notice.

commit 255d13bdb16e66175c58bf16a15010555e3dced7
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Oct 2 21:39:57 2008 -0700

    Handle fast-failure on an attempted reconnect.
    
    http://code.google.com/p/spymemcached/issues/detail?id=31

commit e5ebc572775fb7c197381fc5e3d8ffaab3540a9a
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Oct 2 21:22:11 2008 -0700

    If we attempt to read when we don't have anything to read, reconnect.
    
    This seems to happen in some strange server-error cases where the
    server short-circuits the connection.  This situation has shown itself
    when we've sent something too large into the server.  Precautions have
    been taken to prevent that exact thing from happening again, but this
    is a better way to handle an unexpected state.
    
    I'm not sure how we end up still having data to receive when we've
    already thrown away the ops, but tearing down the connection is a
    clean way to recover from a bad state.

commit f6d32148d88b1e0f35cdbdc553ce57b1b449aa99
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Oct 2 20:17:26 2008 -0700

    Throw an exception if we attempt to store data we know is too big.
    
    This will avoid a few problems people have encountered.  I implemented
    it with a somewhat early IllegalArgumentException because it was the
    surest way to cover every case given compression and several paths in
    to sets.

commit aa2e8a8bf4b1de88be6715d4dccfee0ef51fbdc5
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Oct 2 19:47:43 2008 -0700

    Fix null handling bug introduced by 6e2dbb3

commit 47f15d504960f1779bad1e44275454af05a6a973
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Oct 2 18:50:36 2008 -0700

    Minor warning fix.

commit 6e2dbb3aac1a2980bc2252670467e219d803a3d8
Author: Kristian Eide <kristian@medallia.com>
Date:   Thu Oct 2 11:02:54 2008 -0700

    Push async get decoding into the client thread instead of the IO thread.

commit 0fa9e7d81a07ad73f15f55c0ce68aa5caf9ea087
Author: Nick Brachet <nbrachet@gmail.com>
Date:   Sat Sep 20 19:56:38 2008 -0700

    Default for incr should be a long.

commit 27ad2c39093c14397c5b49a30824997fbee45b1d
Author: Nelz <nelz9999@gmail.com>
Date:   Thu Sep 11 15:34:05 2008 -0700

    Extract a MemcachedClient interface.
    
    An interface enables mocking for any users of the MemcachedClient.

commit 02c1f2e02e92dbb47b65a2e73feb62a206f6b433
Author: Kristian Eide <kristian@medallia.com>
Date:   Fri Aug 29 11:46:25 2008 -0700

    Decode async bulk gets outside of the IO thread.
    
    The same work still needs to happen for one-off gets, but this should
    help allow the IO thread to focus on IO while consumer threads
    distribute the more CPU-intensive work.

commit b10c4a81a92944fc6337f2403042255933122c16
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jun 5 22:39:57 2008 -0700

    Got build working under buildr 1.3.1.1

commit 919b7323f035a3add0cad3f97404afcfcb9d599e
Author: Nelz <nelz9999@gmail.com>
Date:   Thu Jun 5 21:45:26 2008 -0700

    More consistent hash proving.

commit 03f8b4301cc4b1bd6924ae02a1c20b14677727a8
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon May 26 23:57:28 2008 -0700

    Killed off a slightly elusive bug that was causing sporatic cancellations.
    
    Whenever a read returned in the binary protocol without having read
    enough bytes to fill a header packet, an NPE would be fired that would
    cause us to disconnect from the server and cancel all in-flight
    operations.
    
    This happened occasionally in one of my tests and was rather a pain to
    track down.  It likely never affected anyone since I doubt anyone is
    actually using the binary protocol anywhere today.

commit 687aa9ccc1c9361b2cd6f1d769e70e4438d98d9f
Author: Nelz <nelz9999@gmail.com>
Date:   Fri May 16 12:02:25 2008 -0700

    Adding a standard ConnectionFactory to facilitate consistent hashing.

commit 3d806bac909790a0fee4c655a5d005ecd30d464a
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed May 14 09:28:35 2008 -0700

    Allow the input, op read and op write queues to be individually specified.
    
    By default, the read queue is 10% larger than the input queue.
    
    With a sufficiently large op read queue, it's possible to never
    internally overflow, but correct values are likely
    application-specific.

commit 9de48599d5a18cb5d59779e7c28713b517285aa4
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue May 13 22:41:39 2008 -0700

    Updated delete documentation.

commit f1969bf1f88b62a71dcc9f392c4c9f0756fcea09
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue May 13 22:19:42 2008 -0700

    Some refactoring in the futures to get more consistent behavior.

commit 0be1844a79e2d9ecd635e770faf479f3a221be87
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue May 13 22:18:58 2008 -0700

    Read before writes and expect IllegalStateException.
    
    These are two measures that are helping with the queue overflow
    problems.
    
    Firstly, the IllegalStateException is thrown whenever you attempted to
    add to a queue that's full.  If that happens internally, I don't want
    the IO thread to crash, so I add it to the normal ``expected
    exceptions'' list.
    
    Secondly, reading before writing helps keep the read buffer ready for
    new data.  When writing first, the write will have to transition to a
    read and may cause the read buffer to overflow.  It still may happen,
    but by servicing the reads first I can at least get the complete ones
    popped out before piling new ones in (since writes are almost always
    smaller and likely to transition).

commit 6a38bf7b3b190035e35133e8b08056ceb86d2eaf
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue May 13 20:52:11 2008 -0700

    Tests for queue overflow behavior.

commit d578d1b1931cfdf006190c034b7d7cc4fba84efd
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon May 12 23:06:02 2008 -0700

    Some fixups from bug 24 relating to overfilling queues.

commit f96758feb52f4e145aeac02e78b16faaa42dd37e
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun May 11 00:58:12 2008 -0700

    Update the buildr version number -- always forget that.

commit 6002b14da1adb1460d10c7cdee79c0e56e1e6dad
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun May 11 00:37:16 2008 -0700

    Lengthen the timeout in the text protocol test to match the binary.

commit 0f182a56f902a19aed731e636306e89a54bc652d
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun May 11 00:34:27 2008 -0700

    Turning the timeouts way up during tests.
    
    I manage to do something that slows stuff down in my full test plan
    which leads to spurious failures.
    
    This may be hinting at a bug of some type, or perhaps some bad
    defaults, but this code isn't attempting to test timeouts so they
    should never get in the way.

commit 1716023576970f56e98e1f4d92df4ed9bcb5b720
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun May 11 00:07:46 2008 -0700

    buildr 1.3 is not ready for me.
    
    Revert "Updates for a newer version of buildr."
    
    This reverts commit 0fcb055473fd567308b8c17edec4bdfbd1df6f32.

commit 04df553918fd718eabb031c7084ea272e81fd50c
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 10 22:28:49 2008 -0700

    Smarter assertion check test.
    
    The previous one passing when assertions weren't enabled.
    Must test the tests.

commit 1d71864711c4135956e4bbbebc14135eb0ec8373
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 10 19:09:57 2008 -0700

    Test fix.  Invalid connections shouldn't fail to shut down.
    
    I think there may be a bigger bug around this, but it only occurs when
    trying to shut down a connection that shouldn't've started due to
    someone writing a broken connection factory, so I think we can live
    with it.

commit 0fcb055473fd567308b8c17edec4bdfbd1df6f32
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 9 11:11:32 2008 -0700

    Updates for a newer version of buildr.

commit dbf7040ecb19139729f9308205aa3aacef3954cb
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun May 4 19:41:24 2008 -0700

    Disabled test that spuriously fails.

commit 2603ac25e863283170eb42e5bfc3a29eedf30a07
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 3 16:48:44 2008 -0700

    Wrote a test for async get bulk with a transcoder.

commit 57ccff1274aa4bd921260fdd41ee2e537e7d2cc1
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 3 16:44:31 2008 -0700

    Make sure all of the CASMutator constructors are at least run once.

commit 7c7be67005944f044760a7217d2b0dd86c46636d
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 3 16:38:07 2008 -0700

    Added some negative tests for prepend/append and found some bugs.
    
    Turns out the ``not found'' error for prepend and append is different
    from that of other commands so I needed to make a case for it.

commit ea60bad31e47c9e234cd1bea778fe9ec54743405
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 3 16:23:48 2008 -0700

    Removed some dead code.

commit 955dea2b0365af333e771c2b1b04c109d3c654c5
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 3 16:17:09 2008 -0700

    Make zero byte packing optional in transcoder utils.
    
    This is primarily because I don't know for sure the Whalin client
    would know what to do if it saw a 0 byte long.

commit 175759ee57d3333ef5885962d57bb89a7800ce4f
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 3 16:01:53 2008 -0700

    Some tests on the parent class of the serializing transcoders.
    
    This helps me ensure the contract of certain methods, and (shockingly)
    found some minor bugs in edge cases.

commit ee45606311d9dab4d8ec4398c1ad6d151b3d919b
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 3 15:00:37 2008 -0700

    Transcoder refactoring and introduction of a Whalin compatible transcoder.

commit 8497839b89289c10cf64ffd6cd9a151b9c4048e2
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 3 00:40:32 2008 -0700

    Move testDelayedFlush up since it works in binary now.

commit d676561d04b9f2cc679abe207f6c769a7eb12ad3
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat May 3 00:37:05 2008 -0700

    Reenable the ascii append/prepend tests.  I fixed the server bug.

commit 4eca1ee2eca25f037262288451d7036dc0090536
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 23:53:07 2008 -0700

    Methods for seeing what servers are available or unavailable.

commit 5625170b2f735bfd9b54dfeaf3fb356b680e0eff
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 23:28:50 2008 -0700

    Ensure we're computing hashcodes over the UTF-8 bytes of keys.

commit d2666943a0db88a68045550cebf4fd8a2ac39876
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 23:21:34 2008 -0700

    Allow the thread to be marked as a daemon tread through ConnectionFactory.

commit 50c5d4432e1d14bf917ad8ff23408bf4be8e3442
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 23:03:19 2008 -0700

    Implementation of append and prepend.
    
    I've got a test failure in ascii append/prepend and I haven't quite
    figured out why it gives an EXISTS error, so this may be broken there.
    Works fine in binary including with CAS operations.

commit a7782e997b080632309a77f0b7ed076515f50771
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 23:08:36 2008 -0700

    Constants should be final.

commit 2d7f14ff11ff8175222dd1ba2472d129a0dc734e
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 20:29:40 2008 -0700

    Tests classes must end in Test in order to get picked up.
    
    I knew pushing at that point was a dumb idea.

commit 57379c949b482f547bb0ace8629f1c4ee03706fa
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 20:21:41 2008 -0700

    Tests for timeout operations.

commit 4bcd22ca6d63ae5507f3bb8f006a21f52e0d76d3
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 19:54:20 2008 -0700

    Moved operation timeout into the connection factory.
    
    It shouldn't change at runtime in a client, as the current model was
    not thread safe.  In order for this to be dynamically reconfigurable,
    the field either needs to be volatile or access to the value must be
    synchronized.
    
    By having the value be declared final and removing the mutators and
    accessors, we can guarantee correctness.

commit 33bcb1c23981deed77a4a2504858254b9f99d5f3
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 19:41:08 2008 -0700

    Speed up the graceful shutdown test slightly.
    
    This one has been spuriously failing me for a while.  I'd like it to
    consistently run, but I'll settle for 3x more likely for now.

commit 8f6b1711b016452a219d644d515dc0243a12b73e
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 18:55:31 2008 -0700

    Give longer timeouts to LongClientTest as it often times out in cobertura.

commit 80c91c3b0968ac84a47bdd941c90d4021962aaf2
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 2 19:11:25 2008 -0700

    Shorten some lines and stuff.

commit d506ffb1c2f9c092eb34e9e81d0e094de32b19e4
Author: Ray Krueger <raykrueger@gmail.com>
Date:   Fri May 2 07:03:08 2008 -0500

    Added throws declarations for OperationTimeoutException where needed

commit fa5c587aa96bb1829e47be397468fd4912189c5e
Author: Ray Krueger <raykrueger@gmail.com>
Date:   Thu May 1 21:47:49 2008 -0500

    Added a few more throws statements

commit c9cdd9df72cbdb29c580c37695c414741bdc549e
Author: Ray Krueger <raykrueger@gmail.com>
Date:   Thu May 1 21:39:15 2008 -0500

    Added Javadocs and changed mutate timeout to throw an OperationTimeoutException

commit 57864d8a9044b6478c1b0ec1d545bb3c4fc3f699
Author: Ray Krueger <raykrueger@gmail.com>
Date:   Thu May 1 13:27:22 2008 -0500

    Adding getters and setters again!

commit ec93207dcb1f4cae4f58408590f2db93a7516aa9
Author: Ray Krueger <raykrueger@gmail.com>
Date:   Thu May 1 10:41:54 2008 -0500

    Added global operation timeouts to all CountdownLatch.await and Future.get operations

commit 6d3af180ecec85c267e60770616ca3d382d84a33
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Apr 30 01:12:23 2008 -0700

    Updated to 2.0.2 for new binary protocol changes.

commit df68e4ea4524a890ed65f64dd3bc4a7d14ad64bf
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Mar 31 23:23:44 2008 -0700

    Updated version to 2.0.1 (better late than never).

commit 5acd91c004fa8f0b12e35f14dc6e72e945435dca
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Apr 25 11:42:54 2008 -0700

    Format updates from the latest hackathon.

commit 6fed0463f117f507dc1e1370b8471f039d50e2f1
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Mar 30 16:53:52 2008 -0700

    Ignore junit temp files.

commit ab779ce181d1aa4630d3b225768bcbe23779a617
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Mar 30 15:45:25 2008 -0700

    Updating the response magic byte to match the spec.
    
    The server will match the spec in this regard real soon now.

commit f3b0127b9b4430033444a0793818b0f02d3c5580
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 25 09:33:30 2008 -0700

    Updated the comment since incr/decr is properly defined.

commit c0b909b75a1690aab9f63a9b381b21a1c932f124
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 25 09:29:27 2008 -0700

    Added a couple of tests to increase invalid key coverage

commit 6ad37945a4d8c6e6fb1d783b3e4fa1bc5469b189
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 25 09:15:55 2008 -0700

    Added assertions and exceptions around client creation.
    
    Also added a bunch of tests to ensure these are doing the right thing.

commit c4a1e1a76445d5563dea25417529f7d88c483c2e
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 18 21:45:29 2008 -0700

    Binary protocol alignment changes.

commit 66404fe4b5645ec779ff5094da0c54c77c447574
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Mar 12 09:00:23 2008 -0700

    Make use of the supplied expiration date in CASMutator.

commit 8d4dd42a36a750490d6ec49289e6f360ea3a475e
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Mar 13 23:42:11 2008 -0700

    Added a manual test to try to reproduce a problem.

commit f1fd25e05a128be4e15aa4c5c3388350058f4c32
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Mar 9 00:04:12 2008 -0800

    Added package.html for transcoders.

commit 7bdbb14cd932a5d0f35916cccc7162c4c9168ffb
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Mar 9 00:01:28 2008 -0800

    Get the transcoders using the same flags.

commit 2b8ac04fd95d881bad94bfee7e46faa554cdc9b1
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 8 23:25:03 2008 -0800

    Set version to 2.0

commit f757bdc574938efb492189612fec4d9c25f2d4cb
Author: Blair Zajac <blair@orcaware.com>
Date:   Wed Mar 5 13:55:24 2008 -0800

    Remove the transcoder parameter from the Javadoc for two methods.
    
    These methods do not take a transcoder argument.

commit e236160e4e9082171a7807bdf16693c36c90e2b6
Merge: eea9142 bbf0dd4
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Mar 5 09:28:01 2008 -0800

    Merge branch 'master' into new_intf

commit bbf0dd4df3ba43820c0b4034b05615bfbfb1116e
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Mar 5 09:27:51 2008 -0800

    Build a docs and source package when packaging.

commit eea91426311c1b57603213d79c82ee66c14bec6a
Merge: d9c628a 56f1d99
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 4 23:41:06 2008 -0800

    Merge branch 'master' into new_intf

commit 56f1d998a296e82610e6561843a363a17db11b4e
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 4 23:39:50 2008 -0800

    Don't allow CAS to run forever.
    
    The user may supply a maximum number of attempts.  Currently, it
    doesn't know *why* a failure occurs, but it at least doesn't hang
    forever.
    
    Conflicts:
    
            src/main/java/net/spy/memcached/CASMutator.java
            src/main/java/net/spy/memcached/MemcachedClient.java
            src/main/java/net/spy/memcached/SerializingTranscoder.java
            src/main/java/net/spy/memcached/transcoders/LongTranscoder.java
            src/test/java/net/spy/memcached/CASMutatorTest.java

commit d9c628ad57769c8c2fbcb0ecc04b909247fd4e8d
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 4 23:28:04 2008 -0800

    Increased test coverage.

commit 3a8db35391413268cee06e1b15faac577a40897c
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 4 22:17:56 2008 -0800

    Added tests for new transcoders.

commit 4e36dce179bde3e1e656925a4523ece3277cf66e
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 4 21:33:08 2008 -0800

    Don't allow CAS to run forever.
    
    The user may supply a maximum number of attempts.  Currently, it
    doesn't know *why* a failure occurs, but it at least doesn't hang
    forever.

commit c46835224198b3eda37a5433ad7658459c880a2c
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 4 21:00:42 2008 -0800

    Documentation for new client methods.

commit 3922c4e595704b4b0e2317d40132ebbc969c6a65
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Mar 4 20:48:41 2008 -0800

    Some minor cleanup to get eclipse happy.

commit 66bca07ecb4cc368cf817bd7734c4e63cd8a553b
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 17:11:32 2008 -0800

    New Transcoder for java.lang.Integer's.

commit 3636c12337efa2041c2489121d3f03ab2c262671
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 17:08:35 2008 -0800

    Change four spaces to a single tab to be consitent with all the other
    code.

commit 689c871da188c7de07e986e8bd1065e8543cb27c
Merge: 2f6a4f5 ee6f4b3
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 17:05:36 2008 -0800

    Merge branch 'master' of http://www.orcaware.com/git/java-memcached-client/

commit ee6f4b3408817df5846de58a6b028818c2c06a35
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 17:03:35 2008 -0800

    Make CASValue parameterized in T.  Do this by requiring a Transcoder
    argument for CASMutator's contrustor.  This removes the need for casts
    In CASMutator.  Use the new LongTranscoder in the test suite.

commit e090536b5aa772cff337c9b72948c2f8ec53f582
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 16:58:44 2008 -0800

    Add a LongTranscoder that transcodes Longs.

commit bc278d0c1b45c846104ff88fe9d8439f04d82c79
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 16:28:06 2008 -0800

    Remove the encode*() and decode*() methods from SerializingTranscoder and
    use the same methods from TranscoderUtils.

commit 9520f6f1c1f2e279d33dc823643ba6b1e855c44c
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 15:57:06 2008 -0800

    Update a javadoc for the MemcachedClient's transcoder argument.

commit 2f6a4f5d813fdbba7c8ca34cdd5cfbd539bf7b4e
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 15:50:13 2008 -0800

    Add a new transcoder for Long's.

commit 7d2794340de7b1b16c69cc13b1c0399131334c30
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 15:40:36 2008 -0800

    Add two utility methods to take any integer or long and hash it into a
    value safe for use as a memcached flags value.

commit 7dd7ce0e3a875fe276ffab810a2fa4ce10c86dad
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 15:26:10 2008 -0800

    Remove unused imports in TranscoderUtils.java.

commit 6ee12818a1c9e4097cae3d59862bd97ad419e53e
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 15:20:14 2008 -0800

    Move the encode*() and decode*() methods in SerializingTranscoder.java
    into a new class and make them static.  This will allow other transcoders
    to use them.

commit f7cece39de56994bd4d980fd9a2ac2ac421bf517
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 14:52:25 2008 -0800

    Move Transcoder and SerializingTranscoder into a new
    net.spy.memcached.transcoders package.  This gives space to write
    transcoders for many native types, which will allow for compile-time
    checks.

commit e2f04bac82f86417e5f4390a75a097c97b86aa4a
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 14:07:28 2008 -0800

    Add parameterized versions of all the MemcachedClient methods.
    
    The new methods all take a Transcoder<T> and if they returned an
    Object, now return a T instead.
    
    The non-paramterized methods use the SerializingTranscoder which
    has T as an Object and calls the parameterized ones, so callers
    should not see a change in behavior.

commit 204eed2c92dedc6047e21676e8c3c601b6ff4c3d
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 11:35:37 2008 -0800

    * src/main/java/net/spy/memcached/MemcachedClient.java
      (setTranscoder):
        Rename the to argument to tc to be consistent with the variable names
        in src/test/java/net/spy/memcached/SerializingTranscoderTest.java.
    Rename the

commit bd59dde37ba5c1261cee0c6fd538abba475d0cd2
Author: Blair Zajac <blair@orcaware.com>
Date:   Tue Mar 4 11:27:42 2008 -0800

    Change the Transcoder interface to be parameterized by the type of objects
    it serializes.  This will allow for custom Transcoders to be used in
    methods and stronger compile-time warnings.
    
    The default SerializingTranscoder implements Transcoder<Object>.

commit 66eef222ddd481187a6dae96e00369860ac3f005
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Mar 3 19:41:43 2008 -0800

    Guard against duplicate shutdown attempts.
    
    Only actually perform the last one.
    
    http://code.google.com/p/spymemcached/issues/detail?id=8

commit 5fb9f4aefa09a3c3a52aa25a8b63a8d7fc374ddc
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 1 22:25:11 2008 -0800

    Updated the docs to point to the google code page.

commit 934efb9e0cfe766bb01e50a9d18cc453849ff86c
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 1 21:59:50 2008 -0800

    Removed TODO, moved to an issue tracker.

commit baf89a9fb0f9e90b011d5505a7407332634998a7
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 21:45:28 2008 -0800

    Updating version in buildfile

commit 5838411c0091a2cfc923c24bddecbe25711d32ab
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 21:19:25 2008 -0800

    Removed a done TODO item.

commit cded86c0bde4d3e042bfa71c81b8230a4ec46163
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 18:45:50 2008 -0800

    Now that protocol discovery is committed, use the same port for
    testing both protocols.

commit 1ee97bc65c54ff964b1a7474f79f865524a44d4f
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 17:50:39 2008 -0800

    Slightly cleaner shutdown sequence.
    
    This avoids a couple of the exceptions that were occuring on shutdown
    due to lack of coordination (just allowing the NIO exceptions to tear
    stuff down), and downgrades others to debug as we can expect things to
    error occasionally when the plug is pulled.

commit 7615734608fb6d07a01982a793c1a624a9f7be23
Merge: 40e3cfb 3dd8fce
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 16:46:42 2008 -0800

    Merge commit 'origin/cas'

commit 40e3cfb635a04ea4d497d12eeec80693dfa57f1c
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 16:44:35 2008 -0800

    Updated TODO re: interface

commit 94452fad93481f989924f9cacb4b20593963fcd5
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 16:40:46 2008 -0800

    Updated TODO re: shutdown

commit 19a283341f2bfff33962f8c0781744aaf5d99183
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 14:15:18 2008 -0800

    Updated repository location.

commit 3dd8fce0724be1feec817d98d9d8dd50c5c82f88
Merge: e2b222d 3ba4006
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 13:56:57 2008 -0800

    Merge branch 'master' into cas

commit 3ba40062796e83074b4f7951a24e48782b9edaeb
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 13:56:00 2008 -0800

    Added a .gitignore

commit 081f0ac037bc3b97efbf2e04cd2451b4ea00f690
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 13:55:44 2008 -0800

    Updated build tools for git.

commit 1c8e7f5a675d4aaca328bcb79866969191a3ab60
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 29 13:26:17 2008 -0800

    Removed .hg files.

commit e2b222d1ac8e8967e457db6b422efd9830c34dcc
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 25 23:24:05 2008 -0800

    Reduced visibility of some internal classes.

commit a2d7ace24909c4afa8b151af48a6c45174e071fc
Merge: c869dfe f9e3701
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 25 23:18:42 2008 -0800

    merged doc updates from default.

commit c869dfed0de5d1cd0d1b0a38bfa11d50457d9485
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 25 23:16:23 2008 -0800

    Updated some docs and object visibility.

commit f9e37011be486509fa45a0d2f2f68acbaef050bd
Merge: 0f3d833 3158eac
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 25 23:08:21 2008 -0800

    merged from default.

commit 0f3d8334119d6b0d49c250fa2b1e3cc18898c12a
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 25 23:08:07 2008 -0800

    Adding package.html to some missing packages.

commit 3158eaca6b26066aaa61584cb25ac05ad99b0982
Merge: faf8dd4 e4fcf07
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 25 23:00:43 2008 -0800

    Merged ipv6 work from default.

commit faf8dd4743a02145d97e6de653596647e4236fc6
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 25 22:59:11 2008 -0800

    Run the client tests against ipv6 as well as ipv4

commit 98c0e69ff828ad6044c841c8111aea1274175d29
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 25 22:57:52 2008 -0800

    Change addr util to deal with IPv6 parsing.

commit e4fcf070a894f7c4b31c7be0516b0115b3a127a4
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 22 18:39:39 2008 -0800

    Document cas tools better.

commit 0fdddaef278db17609ed1ef5b749ca8901912599
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 22 18:17:47 2008 -0800

    Higher level abstraction for CAS.

commit 68812befc90361fb2a1961c3dd390d47a5f46cf4
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 22 12:25:36 2008 -0800

    Test cancellation on CAS ops and fix the bugs they revealed.

commit 3b41c02cd6f74013603106d2298e195ca53f8b47
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 22 12:13:23 2008 -0800

    Use an enum instead of a boolean to indicate what happened during a CAS.
    
    There are two normal failure states which must be distinguished.  An enum
    will indicate success vs. one of the failure states.

commit a52d77dcce1231c1390e9078dc2aceded28ae6fd
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Feb 22 11:40:09 2008 -0800

    Use a constant for the command implementing base get in the text protocol.
    
    This change is slight, but it seems a little better to use the constant to set
    a final than to use an abstract method to get the constant.

commit 988bbb90051718087a48e73e094f3bcb1db521ad
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Feb 21 23:00:16 2008 -0800

    API support for CAS operation.

commit 7ae4ccf8dbacb03e8fa34224f85d0db869da9a6b
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Feb 21 23:00:14 2008 -0800

    Base support for the CAS operation.

commit 464750ef38787e89497544a7080fcb09a8bbcfa7
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Feb 21 23:00:12 2008 -0800

    High level support for CAS gets.

commit 64611658df522e4748d089c293615960820d57d7
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Feb 21 23:00:10 2008 -0800

    Lower-level support for CAS gets operations.

commit 3c1898b91b05c64b2b812c0d927eb1e3c8e5026f
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Feb 20 11:32:59 2008 -0800

    Updated to site 1.2.3

commit 16a89a22438a09c1663118ff0af9e61e543285d8
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 11 21:53:27 2008 -0800

    Added tag 2.0-pre8 for changeset ea67f6f44fb1

commit 5d5f25b14a76e1c4b27e71e1dd81d38ee67a593a
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 11 21:53:22 2008 -0800

    Updated the build number to 2.0-pre8

commit 55f6911e82789e6cbad1ceccc66b1a10e609ffb5
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Feb 11 21:45:39 2008 -0800

            Fixed a bug related to detecting timeouts of CountDownLatches.
    
            Prior to 65ea6e61fdc2 (when I replaced my own mechanism with
    CountDownLatch), exceptions were thrown by the latch mechanism.
    
            CountDownLatch requires you to check a return value to determine whether
    there was a timeout or the count went all the way down.
    
            Tests were added to ensure the correctness of this behavior on all async
    calls.

commit 8fc6b1e5a127cd519d12229a216ea4d27edd1924
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jan 22 20:36:35 2008 -0800

    Removed some redundant string -> byte[] extractions.

commit 26fa76e245351201345a412a4c70c287c02544f8
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jan 22 20:32:26 2008 -0800

    More UTF-8 tests and fixes.

commit e06f632e48f0a0f6a29a050dc10c3ea82e98905d
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jan 22 20:07:53 2008 -0800

    Killed off MemcachedClient.setHashAlgorithm and getHashAlgorithm.
    
    These methods were unused and led to confusion when people tried to use them.

commit 3f3bae556f2924fe8eb35111c09d2af70315e410
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jan 22 19:17:22 2008 -0800

    Another UTF-8 test and a fix for a bug it exposed.

commit 15284a64f3e9731cdcb36962aa594ad81265ac41
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jan 18 23:52:38 2008 -0800

    Updated TODO.

commit 83ef0df9caea4b8343d5bf6ede773d6789298e0e
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jan 17 22:59:56 2008 -0800

    Binary protocol provides a binary response now.

commit 3da5ec40a719be9a079387a0ddec0f5dc2fb38a3
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jan 2 13:46:07 2008 -0800

    Updated TODO for recent bug report.

commit 4a4f2c9fe140debb1e4bcf98db76c6cbc82666a4
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Dec 28 09:47:39 2007 -0800

            Added a CRC32 test case that was reportedly returning incorrect results.
    
            Works for me.

commit 816d8b9c74e73b4e77f16a849e22f74391944787
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Dec 23 14:59:26 2007 -0800

    Added tag 2.0-pre7 for changeset f8c5231ef7da

commit 0342c0c537549b305ec8f5fd84a5b015ad12373e
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Dec 23 14:59:01 2007 -0800

    Key validation based on byte values instead of character values.

commit 25af7fb8f756b38784e2c29b4231d203003464c0
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Dec 23 14:53:51 2007 -0800

    Handle multibyte keys by encoding them into UTF-8.

commit e64fbadda6f4f1a9813491b6a3e2decf1aded318
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Dec 23 13:44:49 2007 -0800

            Use consistent character sets when transcoding string values.
    
            Defaults to UTF-8, but may be supplied at runtime.
    
            I'd like more testing around different character sets, but I'm going to
    have to get someone familiar with another character set to make me a test case.

commit 017194a28df11db62513850b3ac31cb8acc30fc3
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Dec 19 00:28:06 2007 -0800

    Brought back the stupidly large test.

commit cdc536eae144d1f2ad8fa45b608c5c25397ce084
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Dec 18 23:20:06 2007 -0800

    Updates for the December revision of the memcached binary protocol.

commit bbae61fd61adda05c297a1cf6d40f837298a7736
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Dec 12 23:39:24 2007 -0800

    Added tag 2.0-pre6 for changeset d67629c8691b

commit 4fe0b4776dfc754b27c78c854b3e39013560ee52
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Dec 12 23:39:10 2007 -0800

    Updated buildfile for 2.0-pre6

commit 9362c7aefb81cd2623b8d365821862266013a8a1
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Dec 12 23:38:51 2007 -0800

            Separate double-check and excessive empty counts and increase the latter.

commit 1d8449e1e60e62fa65e57865904809a79da00ede
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Dec 12 22:06:40 2007 -0800

    Fix some problems with duplicate processing around reconnects and item adds.

commit 7975a6a945dae34be1121b6700a30c17704fc3f4
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Dec 12 22:10:59 2007 -0800

    Handle CancelledKeyException bug on Linux.
    
    Bug related to nio on java:
            Thread dump below looking at it, it might be a manifestation of what's
            described in
            http://forum.java.sun.com/thread.jspa?forumID=535&threadID=5135128 which
            looks like it is
            http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=2147719 which is
            claimed to be fixed in the NEXT release of java.

commit b3e7ecf79dce90589dafbc0a13b600831da4476e
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Dec 11 22:43:33 2007 -0800

    Removed a piece of unused code.

commit 2960169b06e34c03678b656c8929107d3ab2e1d7
Merge: 835526a 62b3e91
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Dec 10 20:23:43 2007 -0800

    Merged buildr branch

commit 835526a0d2841e8e8e219828a39d8a235d9d7183
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Dec 10 20:01:53 2007 -0800

    Avoid unnecessary wakeups on bulk get.

commit cb895ad76c297ffe0ec0fe99f4b6385a90f34a40
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Dec 10 19:49:30 2007 -0800

    Updated to build_info 1.0.1

commit cf91211797acc38d24e040fd4b3a8242b8b2c29f
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Dec 10 19:45:29 2007 -0800

    Updated eclipse stuff

commit 881969cbced2f9415ce9db85db5ae2aca6702116
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Dec 10 15:05:07 2007 -0800

            Debug log exception.
    
            Thanks to Steve Grimm for this fix.

commit 091219105f658fea2665099bef2ab09526ba9d7b
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Dec 8 21:10:13 2007 -0800

    updated to site plugin 1.2.2

commit 31f2a33ebba539c856b370b1255641ba95d463c2
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Dec 8 21:08:17 2007 -0800

    Fixed doc xhtml compliance

commit 7a80e28aa66c8e91ced044b14b8279278edd54ef
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Dec 7 22:39:14 2007 -0800

    Update docs to referene spy.jar 2.4

commit c1384307451ed644ac13648514d50582e11489b6
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Dec 7 22:38:58 2007 -0800

    Get spy.jar from a m1 repo

commit 566b51a8f4bc2e3a976ec8fc96e1d4970056e348
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Dec 7 10:03:42 2007 -0800

    Converted build to buildr

commit 62b3e91d43d842d3fdab3233d1d7f2f45211c7f2
Merge: 2049529 65c5334
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Dec 7 09:44:58 2007 -0800

    Merged in the binary-protocol branch

commit 204952904fa2669476b92d225207940d23ebc5d4
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Nov 15 10:53:28 2007 -0800

    Doc update:  cancel takes an arg

commit 765abbd0e8954e804ad982a230e4fec29d2a3f44
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Nov 9 15:10:05 2007 -0800

    Added status indicators to TODO

commit 850e971495bb516ed8edc0f7698ce92332d9394c
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Nov 7 22:50:09 2007 -0800

    Added notes about nio

commit 716ff3f9441e70380d3d99106a1c6e0449c2b0ec
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Nov 4 16:57:21 2007 -0800

    Added tag 2.0-pre5 for changeset da198056602f

commit bcb238a48b5491966ecd789281c85afc7abc324e
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Nov 4 16:45:16 2007 -0800

    Increasing cache time so the tests pass when my machine is loaded.

commit fab38eee2c14aefcd97873061c6d8ec43a4ddf03
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Nov 4 16:22:31 2007 -0800

    Updating for a 2.0-pre5 release

commit f0ca4a005705e902a13ee88fa47ed61522a228f6
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Nov 2 11:19:48 2007 -0700

    Fix case where the transcoder couldn't decode content from the cache.

commit 8649d0c9d9c00c44c5be1ed6e77a6ec5a1e02e0a
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Oct 15 10:40:20 2007 -0700

    Validate key form on bulk gets.

commit 74fb2c53a3c1279b67456f479ccb1c68c87a7d13
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Oct 9 15:26:26 2007 -0700

    removed some commented out debug print stuff

commit 887b05aa8b77f8f40120a75b8334d2ac656601e0
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Oct 9 15:25:23 2007 -0700

    Fixed some tab/space mixing

commit 74f0fc9619708e2aaed7018a352ef491967d787f
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 27 15:28:07 2007 -0700

    Another doc fix.

commit d8024729d126b5e6f6755d802df0bf6f37d14b03
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 27 15:15:36 2007 -0700

    Some documentation updates.

commit 9083dd98f933583a83be9c41aa964d77b6eba668
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 27 14:32:26 2007 -0700

    Added tag 2.0-pre4 for changeset e8f8f6271791

commit d2fcdaefac6f26cd903124494e54cf491f86c79e
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 27 14:21:47 2007 -0700

    Updated to 2.0-pre4

commit 9f1781bef37f97839026a15f6add303d2831fe61
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Sep 27 14:20:47 2007 -0700

    Added optimization documentation.

commit 1d25c2a0bc7d0869e5c3959227fa18aae3effd27
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 4 18:02:37 2007 -0700

    Separated request and response magic

commit 37c5339871fab729ee314240d37b6e68e5874f97
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 4 00:19:47 2007 -0700

    Added tag 2.0-pre3 for changeset f8d5ab6277c7

commit 48ab667f547ac30f0a37162a536a29a1143bce76
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 4 00:19:39 2007 -0700

    Updated to 2.0-pre3

commit d5312c7cf2bdc87eaf0512e0bdad997aca4c185c
Merge: bf249fb 6a92429
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 4 00:18:01 2007 -0700

    Merged in 2.0-pre2 release

commit 6a92429f291c1341b2d010741d49613da5f03517
Merge: 9afc1e8 bdcdd7a
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Sep 4 00:09:52 2007 -0700

    Merged cleanup fix

commit 9afc1e8fe6d72d9742b7985aa99496ee4113f792
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Sep 3 23:52:16 2007 -0700

    Added delayed delete to binary protocol.

commit bf249fbe5d24664270ec6e52f00a4a0bffd5d530
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Aug 31 11:13:09 2007 -0700

    Added tag 2.0-pre2 for changeset 477c11e448ec

commit 76ef19929f1587fe26fc10f708d4d832fd573610
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Aug 31 11:13:02 2007 -0700

    Setting up version numbers for 2.0-pre2

commit bdcdd7adb7adc4f36db50f7cc9f238e9bfe19416
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Aug 31 10:08:09 2007 -0700

    Remove cobertura.ser when cleaning.

commit bdf2936f85cf9d55b94efc31a033390a30e9956e
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Aug 31 01:02:17 2007 -0700

    make sure I'm truncating longs with long masks.

commit 8df727305c570a95b16042f55056a30bd2fb2f9f
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Aug 31 00:59:20 2007 -0700

    Added some more fnv variations and hash and locator interop tests and fixes.

commit 07370da2754670f7e094904972398702b8d90151
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Aug 30 22:36:51 2007 -0700

    Updated ketama tests with values taken from libketama

commit bc37082f8742f0d463af2207ce65f35e8a98e4dc
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Aug 30 00:30:11 2007 -0700

    More tests (and fixes for bugs they revealed)

commit 4694b2189866c562208a8b88933c366366e177a1
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Aug 29 22:39:56 2007 -0700

    Unified protocol tests

commit 663b1a15aa4716126deb2313d9ac3fa055cdaaf7
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Aug 29 22:18:06 2007 -0700

    Added tests for cancellation behavior (and fixed a bug therein).

commit b901c317fd45347b487ce10423797a6ab0a2eeed
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Aug 28 22:30:18 2007 -0700

    Prioritize delivery of errors over that of cancellations.

commit 13da44b6e4a0ec35032e17d5c1f6b9b0f5f3db36
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Aug 28 21:35:08 2007 -0700

    Reuse ProxyCallback code for ascii and binary

commit 6555455004b1b236159b41d7c5c24c9ae6c3cb1c
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Aug 28 21:21:02 2007 -0700

    Added sequential get optimization to the binary protocol

commit 5974782d8322539fb2d7a9ab521249124c1fb272
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Aug 28 00:19:37 2007 -0700

    Added some coverage and removed some dead code.

commit 1fc060f8031a4007c325963ced99cdd88e438722
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Aug 28 00:11:13 2007 -0700

    Killed off getKeys()

commit a18899ff3c0af6dfbe2762ecef37607497c0252d
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Aug 27 23:57:14 2007 -0700

    Enabled some more tests.

commit 3ef3b03f3029346ef56f6046de02e2b38ac9c198
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Aug 27 23:24:34 2007 -0700

    Added tag 2.0-pre1 for changeset 951f24cdb58b

commit 40e1b322f20d767e8b6a5d400b0cb881d4b04e81
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Aug 27 23:24:18 2007 -0700

            Version and doc updates to roll out a 2.0 pre-release.

commit 06478e04235ebd92c14dd1397a824e6ae54b899b
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Aug 27 23:05:43 2007 -0700

            Added BinaryConnectionFactory to make it easier to connect via the binary
    protocol.

commit 367cfaabd49f4834a4117d73cdb26537057c8dfd
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Aug 21 22:18:07 2007 -0700

    Binary incr/decr returns a string now.

commit dbf28c49bf80d9090c427c950f598c0d65a3a4e2
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Aug 21 22:09:51 2007 -0700

            Updated commands and new binary incr/decr longness.

commit 4ede045774579012c2b44a86ddb12f20fea5410e
Merge: febfb14 ea6ac63
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Aug 15 10:00:26 2007 -0700

    Merged incr/decr recommendation

commit febfb146205fd4266722cf9eb913b21dcacdfa49
Merge: 65c5334 ccef21d
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Aug 15 09:58:09 2007 -0700

    Merged doc changes from default

commit 65c5334b1f8b8f3ecc1940cde9191297060d8c97
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Aug 15 09:57:14 2007 -0700

    Updated doc links.

commit ea6ac63135c25d769dee755d4a32ebbc24b1c2cd
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jul 25 21:37:07 2007 -0700

            Implementation of my incr/decr recommendation with backwards compatibility.

commit ccef21d2c6a559219d6de8a674f4018b9a547eaf
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 24 10:13:50 2007 -0700

    Updated the OperationExceptionTest for unstripped errors

commit 11d778a49582a42ef6894bae60c8e9626cf023a2
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 24 10:11:29 2007 -0700

    Moved binary port for tests

commit 30b172f8abc3619b86e969d425e2e9bbd934cf72
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 23 23:34:40 2007 -0700

    Implemented version and opened more tests

commit fffaef40f8ce3f54db5db61f735aa1a834d5312c
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 23 23:24:02 2007 -0700

    Implemented delete and multiget

commit 0a31f3a05f8e1883c8b67189afee6ad03743f7c1
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 23 22:04:37 2007 -0700

    Processing sets and gets.

commit 249877d4225bab45c82a29a71e585d07434afd3e
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 23 18:14:32 2007 -0700

    Further work on binary client.

commit a73de702e5e1d08a229f809fd1b7ec1fe23d4deb
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 23 11:11:34 2007 -0700

    Field shadowing fix.

commit d40dfef6d684eb5cc6fb2b32b3f63f15b4c61b4b
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 23 00:22:15 2007 -0700

            Started binary protocol implementation.
    
            ...then decided to go to bed before finishing it.

commit 96c7ec28ce41cee1b62d6177f7e939366a2cd25b
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 23 00:20:50 2007 -0700

    Pulled reusable code out of the ascii operation impl

commit aa38d92695049e7c5e74e7c3a2ebb81f4f7910e4
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 22 23:04:34 2007 -0700

    Abstracted away status reporting.

commit 44d5d300985e2ae0a0568849f59bb6d1b033d542
Merge: 889cd74 150fa18
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 17:09:25 2007 -0700

    Merged in 96ac3e8a252f from tip

commit 889cd74f1fa6ee6b534a090f73e4f219a8730357
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 17:08:18 2007 -0700

    Remove redundant latch countdown when waiting for queues

commit 150fa182fad016c5a886adacaf0a3673eda31993
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 17:04:32 2007 -0700

    Note some abstraction leaks in MemcachedClient

commit fba36ce918e50af611e7fe3acea3c93f39e6fb44
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 16:56:57 2007 -0700

    moved OperationReadType to protocol/ascii since it's ascii-specific

commit e96c58b6905bcae75854e42e77660d8fe04c47fe
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 01:10:26 2007 -0700

    Removed unused constructor

commit c43dfc2bd5de7a8e676c4626da9551838e5cb8db
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 01:04:29 2007 -0700

    Removed some redundant wasCancelled implementations

commit afe4813fa74dbdb3866698bf8530fc8de3d8ac38
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 00:54:42 2007 -0700

    Moved nested ops enums to toplevel

commit 6ec6e83ef11da47b1aefa5e314fa55f19d960735
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 00:41:06 2007 -0700

    make everything that's not variable final

commit 153acfae1acc6d2cfc0e34695aeb8b605e2f5d75
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 00:27:04 2007 -0700

    basic code cleanup

commit 7a33d00ecaf22727745bb529609a45c916a874cf
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 00:24:51 2007 -0700

    factored out reusable tcp connection handling

commit cde7e8ff175af1bc951b097b4ac54cfbd2c0348e
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 20 00:07:26 2007 -0700

    package.html updates

commit 5b43bc9ef219fd82c0ded42e8954b1d1bedf16c0
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 19 23:59:24 2007 -0700

    moved OperationException into ops

commit e824e3a51f41ac7976ceb9f89f5c9a5067b5db4b
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 19 23:57:17 2007 -0700

    introduced a factory to abstract away operations

commit f354ae22b82019f31437cd2d683778be3cb6ab77
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 19 23:30:54 2007 -0700

    Renamed OperationFactory -> BroadcastOpFactory

commit c90d141e747a9aa1926032a55fe0ae1ca09771a5
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 19 23:23:49 2007 -0700

    pushed the node impl into an ascii protocol-specific handler

commit 202cff1895796fee3dedc40a316e2ef2fa4d5276
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 19 23:07:46 2007 -0700

    Extracted interfaces for operations.

commit 32348cbf6f3afd91e249c80988ce5c2e0ee1484e
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 19 22:36:10 2007 -0700

    Renamed the classes to impls

commit 0bcbc2825f784b79286cf34204ef68eb7f9d2365
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 19 21:55:22 2007 -0700

            Repackaged operation stuff into protocol.

commit 12c28547c9d162d695ac344a2aad96748dedff12
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 23:20:55 2007 -0700

            Test ketama continuum wrapping.

commit ce0c4bc42be0c6966b614f5902ace84d06448574
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 23:00:41 2007 -0700

            Cleaned up some tests around the NodeLocators.
    
            Less code, more coverage.

commit b264c301f7ebbdb3dad971f04e7e8fb9520df717
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 22:20:10 2007 -0700

    Added tag 1.4 for changeset d9ec9454132e

commit 78614162473d243d299c3abbc5a3d38aa17da750
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 22:20:07 2007 -0700

            Updated project for version 1.4.

commit 58c5a0eea5e9ec9f9363d52db884954af2ba6969
Merge: 66a618a c15a326
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 22:16:05 2007 -0700

            Merging 1.4 to default.

commit 66a618a1c73d6cbc5c6934d048784d53e642fefb
Merge: f7832c7 961632b
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 21:59:50 2007 -0700

    merged 1.3 into default

commit f7832c74ac1781b2bd29f48bc1f8fafa1b76dba5
Merge: 89825d2 4acee06
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 21:59:32 2007 -0700

    merged pipeline into default

commit 89825d20fa1fa09b2abfda00432a8f60c0451f20
Merge: 4b7913c df8956e
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 21:59:18 2007 -0700

    merged 1.2 into default

commit 4b7913c283a5163be4704045eac8ae88ffbeb68a
Merge: 928c2af 159dada
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 21:58:56 2007 -0700

            Merged 1.1 into default.

commit 928c2afeb54d0e1492989489b5c40bea54514fff
Merge: f604487 5ed0c2e
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 21:58:34 2007 -0700

            Merged 1.0 into default.

commit c15a32649a9a270925dacaf6d0862e523ed5b2f7
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 15:14:16 2007 -0700

            Reformatting in HashAlgorithm.

commit b8089f592283b6aa030a3ce395e56c60ee1e1eab
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 14:55:10 2007 -0700

            Added basic ketama consistent hashing support.

commit 010e54678ff27ac3b7433b853a7a0a7562d06b10
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 01:53:47 2007 -0700

            Make it possible for NodeLocator implementations to be swapped out at
    runtime.

commit 44b1ffbc706f3e27f61a371ee4ebbf93e65f0673
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 01:38:27 2007 -0700

            Changed ArrayModNodeLocator to take a List<MemcachedNode>.

commit f455c34f9629a7aa5ed7e1193f58651ca1214a9d
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 01:26:58 2007 -0700

            Handle failing servers with per-key sequences in bulk gets.

commit 699541688be39f607ee278ac1d9b6158b8c4e88f
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 8 01:23:06 2007 -0700

            Fixed a bug in iterating nodes over an array.

commit 86f4cd0a30c8045bcb8284b6dd9e66888ef512e5
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jul 7 18:05:17 2007 -0700

            Semi-functional client based on NodeLocator.
    
            The way to handle bulk gets in the event of a failing node is unclear, so
    the failing node test currently fails.

commit ee6cbda66eb847cc3671db2dee64a6bf401abf23
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jul 7 16:36:36 2007 -0700

            Added test for ArrayModNodeLocator.

commit 621a0364d35359c5aaf8d5adc6034d8c9075c515
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jul 7 16:05:08 2007 -0700

            Get everything using the interface in the right place.

commit 02eefef199128d18747542b5444054ce14b66ccc
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jul 7 15:59:56 2007 -0700

            Made MemcachedNode an interface MemcachedNodeImpl implements.

commit 9dc05de5741afd2fc58bc23da33238de8a2764ed
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jul 7 15:44:11 2007 -0700

            Renamed MemcachedNode to MemcachedNodeImpl

commit dde525285cb366bcf39c2ef6831bef6d05c0354b
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Jul 7 15:42:18 2007 -0700

            Finished making all of the MemcachedNode fields private.

commit c7871ed57be9f33a015de415c7a035be519dfaab
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 5 16:44:35 2007 -0700

            Working on separating node location from the core.

commit 62c923f8c68e02bfc985e6fe7cc0f3273f5f01bb
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 5 16:42:37 2007 -0700

            Trying to determine the interface of MemcachedNode.

commit 8e4eb93812b89936a2d1d8b9363c476405704139
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 5 11:02:34 2007 -0700

            Pulled QueueAttachment out into MemcachedNode.
    
            QueueAttachment was a nested class in MemcachedConnection that was used to
    hold per-connection information.  It was called QueueAttachment because it was
    attached to the select queue or something like that.  MemcachedNode seems like
    a better name, and it's going to need to be exposed some as we get into more
    pluggable node selection algorithms.

commit 002d210933e356f1b45681377c8e00fac06ac74a
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 3 22:47:01 2007 -0700

            Added some comments around my server-down logic.

commit 65a82279abc08e94218e37b0001643f73780099d
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jun 29 13:45:00 2007 -0700

            Fix a warning in a test.
    
            I just upgraded to eclipse 3.3 and it's finding warnings and errors that
    should've been found before, but weren't.

commit eb13bf3423798788cb720f6a0ae770802f745724
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jun 29 01:24:06 2007 -0700

            Some changes to get this bench thing to run under the profiler.
    
            There were a couple of stupidities in how the client was set up, and some
    issues keeping large numbers of async sets down.  It still doesn't model a real
    application very well, but may be good enough at showing what would happen in a
    peak situation.

commit 63215d8b3a2bd4083c8c22a2a1c6da82c74e0bb8
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jun 29 00:08:59 2007 -0700

            Support for working around a failing server.
    
            Apparently, the common thing to do is check the status of a server when
    performing a command against it, and trying the next server in the list when
    the server is unavailable.
    
            My previous behavior was to queue a command against a server regardless of
    its status such that when a server was available the command would be processed
    as close to immediately as contention would allow, but when a server was
    unavailable, the command would wait around for the server to come back up.
    
            The new behavior is something near the middle of this.  When a server is
    unavailable, I'll try the next server in the list.  I repeat until I've
    exhausted every known server and then just queue it for the one to which it
    belonged in the first place.

commit 6e71ed2d357b637e4f346663d386278e713bb7bd
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue May 22 01:12:14 2007 -0700

            Reuse \r\n bytes for terminating stuff in operations.

commit 5e2cae2e42b4777b1168e4e6ecf1ed838c561baf
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri May 18 00:22:30 2007 -0700

            Added an adaptation of the spcached benchmark tool.
    
            http://code.google.com/p/spcached/wiki/benchmarktool

commit 20f340dd7d2461f3f0c1911fdfe3e413e42edfa6
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed May 16 18:02:48 2007 -0700

            Some documentation updates.

commit 2e0dc79ec214b6b16e31010341a1f8a97f368461
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed May 16 01:14:42 2007 -0700

            Converted some fields to final.

commit a36477c9ea22f93f38efa1042de18b02b90398d8
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu May 3 20:03:25 2007 -0700

    Added tag 1.3.1 for changeset a5b3a230226d

commit 02dfea4eb7bcef946b44602a79707615bee8dc90
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu May 3 20:03:13 2007 -0700

            Updated version to 1.3.1.

commit c0c08b8a92b728b94555533ced1273e011aa7fab
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu May 3 00:05:38 2007 -0700

            Turn some assertions into harsh logging.
    
            I had some conditions where these assertions were firing due to
    cancellation when a server went bad.

commit a570bdfc0be904b500ad481e9ae9a41777a768fa
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 23 23:32:39 2007 -0700

            Increased test coverage slightly.

commit 4a03fb94812331d042de6c9e3edba3e77a704f26
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 23 23:03:36 2007 -0700

            Exclude BuildInfo from cobertura report (autogenerated).

commit ddcda27e0c1f9fe483b70f1164d78af65ba66eae
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 23 22:46:51 2007 -0700

    Added tag 1.3 for changeset 7e2827b77f29

commit 961632bde4b71e71288a1fae1f9570b1ac10e97a
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 23 22:46:08 2007 -0700

            Updating version to 1.3.

commit c3600313d18110ee41b86e4dcd1d04a480a68d3a
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 23 00:12:14 2007 -0700

            Better key validation.

commit 441855b23dbce4ad07e8fd74ea0f267797fa123d
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 22 13:13:45 2007 -0700

            Do a bulk get after the lots of sets test.

commit b2b7fe2863dbd54b37ec8b6d09fca26791a472fe
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 22 00:00:34 2007 -0700

            Switch to a do/while loop to avoid doing the exact same check twice in a
    row.

commit ad8e34c60493c244c22e52121730783590bb09ed
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 21 23:32:28 2007 -0700

            Fixing BufferUnderflowException by assuming the CR and LF are available at
    the end of a chunk of data from a get.
    
            Included a new test broken out into a different client test as it takes a
    while to run.
    
            Thanks to murugac@gmail.com for pointing out this problem.

commit 42a9d89f21e6661e127e034d2094b2075afd502b
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Apr 19 22:54:30 2007 -0700

            More consistent shutdowns and error handling.

commit 4acee0638643ba0880bde11cb061a32734f25b4f
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Apr 18 23:34:38 2007 -0700

            Use a bigger buffer size for the ``lots of sets'' test.

commit 7dfd70975fd1a33f5322c4e07d443c2b9ec6e488
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Apr 18 22:58:02 2007 -0700

            Got a working write buffer.

commit 6c25e30df6c97098689e3716c0440ab50c6c7652
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Apr 18 01:24:23 2007 -0700

            Trying to arrange buffers for writes before sending them.
    
            This is broken right now since copying one buffer into another without
    checking the size causes a BufferOverflowException.  After covering that, I've
    got some measurements to perform.
    
            This may conflict with get optimization.

commit 818f4f42258cf164ef8047e41b674c7c56743b73
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Apr 17 00:36:58 2007 -0700

            Profiling showed an array that was getting converted to a string
    unnecessarily as part of preparing a debug log message.

commit e7ed0b51babecb21f5056c15ce00ac495b517717
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 15 23:49:22 2007 -0700

            Fixed a problem when queueing a reconnect without any read ops.

commit 33582d4497f39adbb63fba426a58c97026c1c4c3
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 15 23:45:00 2007 -0700

            Added another unit test to validate sequencing on multiple operations.

commit f7ddc07e310ea0b8ccf14adbf08c5b95103d5db5
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 15 23:30:25 2007 -0700

            Added read optimization back.

commit 1125c01ecd7fc3927b45b309f7e10a4c5939dc2b
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 15 23:30:04 2007 -0700

            Increased the default queue size.
    
            My unit tests are too fast now and I have to do a lot more work to notice
    it.

commit e8adc28c072a33f3fc1a4a60e61b72a2ac77d761
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 15 23:07:34 2007 -0700

            Pipelineing all reads and writes.

commit 3ca037225e59d8c3a60a1c089345fb87a4d1dd6f
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 15 17:17:49 2007 -0700

            Wrap a GetOperation callback to allow an operation whose keys have all been
    returned within an optimized get to return before the overall get operation
    completes.

commit cd232329f7bbd5d6740198506e3c2d7019dc4f81
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 14 18:48:32 2007 -0700

            Ensure the keys fed into a get won't be modified after they're added.

commit 3761de6b433d5462c737e8f1c7088ac5f54a58b1
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 14 18:48:07 2007 -0700

            Fixed a bug where a CR as the last character in a buffer would cause a
    buffer underrun due to an immediate attempt to read for an LF.

commit 1f98b50c3cff69c1239fc6a67370004a50b20dbc
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Apr 13 23:19:33 2007 -0700

    Added tag 1.2 for changeset 7f5ab9429851

commit df8956e7fb322d6a02524b962eb999be6f919daa
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Apr 13 23:19:17 2007 -0700

            Setting version to 1.2.

commit a73d0377eb7f3b94b4feaa05528e32e8b224ba4e
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Apr 13 23:06:13 2007 -0700

            Optimization to collapse multiple sequential gets into a single multi-key
    get.

commit e26fe3f2474964b1c8be4292ce029e88cfd68a10
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Apr 13 20:55:31 2007 -0700

            Added some comments so I could remember why addedQueue exists.

commit d87e603dcf92e45cafec98229ab21728f15e678d
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Apr 13 18:03:22 2007 -0700

            New TODO

commit 75d8f32d3070eb13749bbae44a1e6800e1003bbf
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Apr 12 12:48:23 2007 -0700

            A benchmark that came up on the list.

commit 27d010971a732f31952d9c5d22eba0ac2d2be8fd
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Apr 11 00:42:02 2007 -0700

            Remembering where I got FNV hash.

commit 6701b0bad6e17a7006245cc4267656763e28c115
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Apr 10 20:19:26 2007 -0700

            Formatting fixes.

commit 85060e7fa93821d0274afc8672d0dbca429ba7c6
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Apr 10 20:17:28 2007 -0700

            Added Fowler/Noll/Vo hash implementation.

commit afce5042e90e53f36b7d97ffc34859235ae1060f
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Apr 10 15:23:58 2007 -0700

            Added a couple todo items from the list today.

commit ad6bdcc05230653ed4b06808cdf8343dcc7665e3
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 8 15:13:18 2007 -0700

            Added unit tests for non-serializable objects through the client.
    
            The behavior was already tested in the transcoder test, but I wanted to
    make sure it got picked up at the right time in all of the mutation methods.

commit 971c7b53a2ebb90ba9f8b10af89547ce47870f84
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 7 15:28:11 2007 -0700

            Ensure exceptions in the queue wait don't prevent a proper shutdown.

commit edb48a9a57af0eb82216439493dd3ccbe6520c40
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 7 13:44:47 2007 -0700

            Added the expiration definition to the javadoc for add, set, and replace.

commit f8fce0fa6398fd8f2515d357850ace4030a63a29
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 7 13:31:07 2007 -0700

            Check the shutting down state before asserting the thread is running.

commit 708e7b0c1fbb7e33954ca589e8f761f648d50c9a
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 7 12:51:17 2007 -0700

            Added graceful shutdown, and cleaned up the shutdown procedure a bit.
    
            It's still possible to get an occasional exception logged while shutting
    down depending on what exactly was going on during the shutdown.

commit ccc214599ccb0b40f83804f75194b249f64478ee
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 7 02:11:27 2007 -0700

            Got rid of arch tags.

commit 44c2f1692f859fe960a87f736a19fdf5c2d92e22
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 7 00:44:48 2007 -0700

    Added tag 1.1 for changeset f06a486b7153

commit 159dadaafeded9fbc85b0ccf9444fdf096982c60
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 7 00:44:46 2007 -0700

            Set the version to 1.1.

commit f6044878d68f2891d2e1a78602f083422d0989d0
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 7 00:37:22 2007 -0700

            Store operations return Future<Boolean> instead of Future<String>

commit 0ec063179cb12296b9e13bc3d8d4a041d58beefd
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Apr 7 00:32:39 2007 -0700

            Cleaned up the documentation.

commit 903977d2e75f8f5afd9637ececeb564600addac2
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Apr 6 23:29:10 2007 -0700

            This constant is no longer referenced from here.

commit 1cc7f5e761c9797b873e1553c737185bbd37a8f4
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Apr 6 21:19:43 2007 -0700

            Replaced last remaining SynchronizationObject with an AtomicLong +
    CountDownLatch.

commit 95eab2639e4a2a2e3e3aad86310912d2f0bacb65
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Apr 6 21:05:22 2007 -0700

            Introduced a factory for configuration connections to memcached servers.

commit c2cbb9d071d170a2d41eb922a866d0a43e8dc054
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Apr 5 01:13:59 2007 -0700

            Returning futures from delete and flush.
    
            A client may now synchronize on deletes and flushes (e.g. the client test).

commit 9927c6d361e51419f50d56ad277f66294983ef4a
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Apr 5 00:34:21 2007 -0700

            Put 1.0.44 in the version list.

commit 7f6fcf8eb5be2f4bd58e179a7f204aac3ffcb02c
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Apr 5 00:33:41 2007 -0700

    Added tag 1.0.44 for changeset 8f2b2b3293d5

commit 40bb183a5489bb584add3ec777e9e65fc0e057a9
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Apr 5 00:31:15 2007 -0700

            use isEmpty() vs. size() to check for the first queued item

commit 100daab6ca70ae8c19fec0fba02f26e291ccfd65
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Apr 5 00:29:03 2007 -0700

            s/StringBuffer/StringBuilder/

commit 5cd8e1f9681922bd8c1e0a9bcad0a520936dc69d
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Apr 5 00:27:49 2007 -0700

            Bad side-effect in an assertion bug fix.

commit 0e9a7370dbf74d17009d6d51794985429703fc77
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Apr 4 20:28:58 2007 -0700

            Got rid of some more CountDownLatch reinventions.

commit 6da85082ae8efa05ccb384f3c193869c0a162f98
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Apr 4 20:03:31 2007 -0700

            Got rid of my reimplementation of CountDownLatch I was using for versions
    and stats.

commit 6464fb4d8fc9e0891e50bdef315701e295d4c48c
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 2 23:01:33 2007 -0700

            Added a method to find all keys in a memcached cluster.

commit 75809b1708a8014ade2e66fa1782556abc367f1f
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 2 21:08:39 2007 -0700

            Modeled the wire handling stuff a little better in BaseOpTest.  This is all
    pretty boring since I simplified the reader code.

commit 798aa8e0906ada9e2ce64baeeda579e017178c57
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 2 19:16:49 2007 -0700

            Added the 1.0.43 release to the list.

commit 3a079980e5a74a13605a4c19a645127b3023c80f
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 2 19:14:33 2007 -0700

    Added tag 1.0.43 for changeset d1594a53e846

commit 14d5543ec697d6e208dd4eed9429532a4d3d50b1
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 2 13:40:43 2007 -0700

            flush_all with a delay sets a delay for a flush_all and doesn't work like
    delete at all.  Updated my test to reflect my newfound understanding.

commit f1bdfa1e52349c3496e128beaa8992ea1282b2aa
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 2 12:53:20 2007 -0700

            Unit tests centered around an actual memcached plus a couple bug fixes this
    found.
    
            I really don't like having unit tests rely on network resources, but a
    dedicated memcached on localhost is obviously better than not having one at all
    (based on my unit tests).  I still don't have a way to model the various
    failure modes I have code to support, though.

commit e39216c59dadde2ca04d94daa3d387ce3cede5c4
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 2 00:24:37 2007 -0700

            Make sure the selector assertion gets a consistent view of the current op.

commit 6363ea59d62af1357dc361b9cbe24a009df02f4c
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Apr 2 00:16:58 2007 -0700

            When we receive data when we're not expecting to do so, log what we
    receive.
    
            This revealed a strange condition where a server gave us an error while we
    were transmitting data.  I don't know exactly what caused this error
    (SERVER_ERROR object too large for cache).  I'm feeding it what I think is my
    largest object, but it doesn't break.  Will have to experiment more.

commit 9c653aa9ab0780e0d1a8afef2de4d863d72b450a
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 1 22:35:27 2007 -0700

            Reinitialize the connection when there's an unexpected read.

commit f23c88277779a6f71f25401cd65797055418ebfc
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 1 16:30:30 2007 -0700

            Set up the downloads maven plugin.

commit 29b5fb3466128b3d357e2bd04be13a58d0d28a73
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 1 16:17:15 2007 -0700

            Updated the documentation to point out where to find the rest of the stuff.

commit bd622642d139110f816ee6ceb4706f20e18edca9
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 1 16:16:54 2007 -0700

            Added some more ignore for build side-effects.

commit 8d2d8070195c5fe7f0ffa35f2ebfc76b2b8022ae
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 1 15:50:26 2007 -0700

    Added tag 1.0.42 for changeset 75abde568e4d

commit f79760fea83540f64838c02571ac3424ae04f4a0
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Apr 1 15:49:42 2007 -0700

            Throw away the old channel when disconnecting.

commit 3cc9d7c12dc25cbe218c2306a30cdc69722b2e29
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 31 19:08:12 2007 -0700

    Added tag 1.0.41 for changeset 39207d2e8f7e

commit 17ad39e01f901441a495a5ac08b9cc7dfbbb9b96
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 31 18:57:53 2007 -0700

            Added some exception handlers to requeue bad connections.

commit 6683bf2ee081519cf319e9149007a5158b95545f
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 31 18:47:52 2007 -0700

            Reconnect if an IOException occurs during handleOperation()

commit e1837b53d7c26034aa9ae1904184694ff2b67f2c
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 31 14:53:21 2007 -0700

    Added tag 1.0.40 for changeset 8472728b1ba5

commit beb896c7f0df67ae0b91c4ab41780afe1be1594b
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 31 14:44:29 2007 -0700

            Added a utility to parse common host list strings.

commit 519d20c55dd41c1aafaba5a357a7571d4263b8e3
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 31 14:29:36 2007 -0700

            Added some collections constructors and a configurable read buffer size.

commit abae22cc668dd2584eacc16415b919c882e09019
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 31 14:12:50 2007 -0700

    Added tag 1.0.39 for changeset e3f652b9f6b7

commit e906d235883dbc2552ac768ef62f4cf0df2d7b6d
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 31 14:12:36 2007 -0700

            Support more than one hashing algorithm.
    
            Tested the crc32 hash algorithm against values returned from the perl
    client's implementation.

commit 9731db18af37b8ffec65b4bebc7fd8cc3e2e3ec4
Author: Dustin Sallings <dustin@spy.net>
Date:   Sat Mar 31 13:02:40 2007 -0700

            Avoid returning negative server IDs.  That won't work.

commit 7923eab3002eac8f79cdb8bb255c8ee1dec6cf65
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Mar 30 15:24:51 2007 -0700

            I was compressing data, testing the size, and compressing it again if it
    were small enough.  Modified to only compress once.

commit eb13c7488f600a5dd4a49d9f85e6a4f073e752cd
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Mar 30 13:05:26 2007 -0700

            Fixed some compiler warnings (errors in my current eclipse config).

commit 32111df801f8825bb798127154b24658a5453411
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Mar 30 13:00:34 2007 -0700

            Rebuilt the eclipse files.

commit 9f6768664486aa16288cf3b9374656382dc3ca9a
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Mar 30 12:59:14 2007 -0700

            Added a remote repo to the project.properties.

commit a86262725ca68e5a6b3161e1e3817972b591b0f6
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Mar 29 23:26:49 2007 -0700

    Added tag 1.0.38 for changeset bfb57465c688

commit 14d10d0b3935cb775bec7bdb46d09eb030806bf0
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Mar 29 23:26:41 2007 -0700

            Some more fixups after deploying on FreeBSD in the photo album.

commit 6f0b3c17a4a4090050f8f8a2d4cef1fc04265370
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Mar 29 22:07:35 2007 -0700

    Added tag 1.0.37 for changeset 303860232701

commit 55d6f13c230c7aa7dc5bf0423a8941b76ddd5eb6
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Mar 26 23:14:32 2007 -0700

            Fixed up some compiler warnings.

commit 234b9becf0c35a4b947c909c20d75bc2e36a0e81
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Mar 26 22:47:09 2007 -0700

    Added tag 1.0.34 for changeset 486e3edcb99a

commit 744ece02379df43455b31fff315052203d7324df
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Mar 26 22:46:58 2007 -0700

    Added tag 1.0.36 for changeset f79b13acc9bb

commit 5ed0c2ec369f7e0458f5409e900e1c0b8987f4a8
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Mar 26 22:26:39 2007 -0700

            Build updates.

commit 4de1fd1a781455dfc07425b090f075829a5f029f
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Mar 26 22:22:47 2007 -0700

            Got rid of arch stuff.

commit 363a95acf17c2452986581f76fb44af953e12a28
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Aug 10 00:55:56 2006 -0700

    Use a queue of new entries to write without checking write state.*
    This isn't quite right.  There's a race condition between checking the write
    queue and going into the select where an item can be added but won't be
    checked.

commit 6d2b5abb516261d0f222c66beb58b3755428e1cd
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Aug 9 19:20:42 2006 -0700

    Revert the previous dumb hack.  Going to write a new dumb hack.

commit 5a262a78557009f38915416dd7ddcfb98bc42f49
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Aug 9 01:27:52 2006 -0700

    Attempt to write whenever there's an op in write state if select returns empty

commit 9d3859ac64d378cff9386968e25358f5f4046585
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 31 14:18:44 2006 -0700

    Added a protected empty constructor to MemcachedClient to allow mocks.

commit fb1d5cdc6098184a6e8d0a8b72c5f1bdbfbb4c56
Author: Dustin Sallings <dustin@spy.net>
Date:   Fri Jul 28 14:39:22 2006 -0700

    Ensure compression never increases the size of the data.

commit a1b317e05a3f6f8e03d30b4900feabb4746091b6
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 27 09:53:30 2006 -0700

    Added index.xml

commit bc975bb08cdbc4ae4595e2f4eade5d665094c85a
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 27 09:19:09 2006 -0700

    renamed LICENSE -> LICENSE.txt to make maven happy

commit 89fdc199d7169dca08932c2ce1ce270c76dd0873
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 27 00:48:47 2006 -0700

    Include the source with each build.

commit daca72f52eeef3191d19b6f31cf58925577becf5
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 27 00:37:45 2006 -0700

    Added a TODO and LICENSE.

commit fa80e53254290a47a6fae77afea5d6083f5ee4fa
Author: Dustin Sallings <dustin@spy.net>
Date:   Thu Jul 27 00:22:51 2006 -0700

    get bulk (sync) with both a collection and varargs

commit b8013a45a0ee3d8d272c5089317756d831fe51e0
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jul 26 17:46:48 2006 -0700

    Make sure the operations are all informed that they're cancelled.

commit 5fceb2918af375f65169d50dd9ed68bc02bedd56
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jul 26 17:30:33 2006 -0700

    Deal with the spinning selects a little better.

commit d8f71c6efbd8b3e604b2b6ec0682cf44aaa9407f
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jul 26 16:49:41 2006 -0700

    Fork for junit tests.  makes -ea work.

commit 3a434155df257b803e4c254d0680124dc09b4b29
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jul 26 16:45:39 2006 -0700

    Throw IllegalArgumentExceptions on invalid keys or values.

commit fe81635b4f67004ae78e36e6dab1b8dda892f11b
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jul 26 16:29:58 2006 -0700

    Consolidate the callback interfaces so there's basically just one.

commit 45dcacf4802d77ae0d6321318a36bfdc14ad4500
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jul 26 15:55:56 2006 -0700

    javadoc updates

commit d64fc13b8190b7c2d3843a15d86cc7727280191b
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jul 26 14:04:33 2006 -0700

    Added package.html for the packages.

commit dc2d3c23eea52513ab6321677ad9c62ee5013e32
Author: Dustin Sallings <dustin@spy.net>
Date:   Wed Jul 26 13:01:43 2006 -0700

    Moved to more futures.  Got javadocs looking somewhat decent.

commit b6bce7fedf2aaad8764962c426b4b4837df2a0da
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 23:54:40 2006 -0700

    Store byte arrays as byte arrays.

commit 37135b79f86656265c8ab132ed2f5c839f2bbc05
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 23:48:25 2006 -0700

    Use Futures for all of the asynchronous sets, and implement cancel.

commit 27d78206e03f57aec340a9295e52139effd26496
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 20:21:37 2006 -0700

    Added some convenient timeout mechanisms on some sync calls.

commit 8ed2dfee8c2ee5dea30ec1b5de1aa9f4ac15f2a4
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 12:50:04 2006 -0700

    More correct async connect.  More assertions.  Always start thread.

commit 108150560c01ce51d5fa5316c5565d240b56bf58
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 11:38:18 2006 -0700

    Setting version to 1.0.

commit fdba62e512556c9c3f87e31709df442c87539b77
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 11:35:52 2006 -0700

    Forgot maven.xml

commit 1ff9978b802de2080fdac5a167f6f563287e2b54
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 11:35:31 2006 -0700

    Added build info.

commit d2fd0d50a74ec7f58f386970e8ceda78e7a55eae
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 11:30:24 2006 -0700

    Trying to get -ea in for the tests, but it's not going.

commit 667ebacd40b171b9fef0ab9a51b98c34e118ef86
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 00:53:33 2006 -0700

    Toss a date in the cache from the test client.

commit fc8296161f3a67e77f0727420273d6689d263997
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 00:40:31 2006 -0700

    Get rid of StringTranscoder.  It's not really all that useful.

commit 2a366f17673bcded40d57985640d989820a7b94b
Author: Dustin Sallings <dustin@spy.net>
Date:   Tue Jul 25 00:37:54 2006 -0700

    Some special type handling in the serializer.

commit 8a0ec677d8ea6c2fad9f07d0b0379a014a16af66
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 24 22:22:25 2006 -0700

    Retry with delay.  Some minor code cleanup.

commit 8a76889f2801e476bcafabeb48ba629c177c0f62
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 24 18:03:48 2006 -0700

    More work on memcached restarts.

commit 03f353e39d23c71825405acd22db94428323997b
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 24 15:03:08 2006 -0700

    Deal with memcached restarting.

commit c6550fbfa3915fd4cef04241f0940905c96dea0c
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 24 11:12:41 2006 -0700

    Most logging to debug.  Use localhost for testing.

commit 1d2ee277847e42c6913587b601b3dafed6467785
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 24 01:13:44 2006 -0700

    for incr/decr defaults, use a string rep since that's what memcached wants

commit 566e3ff54b9438518de9e19f1beccb259b2f58fe
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Jul 24 00:58:38 2006 -0700

    A proper object transcoder.

commit c80333dfe45adc4d95a774ebce02a1e46c02100f
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 23 19:52:08 2006 -0700

    New transcoder model.

commit afe8e17710e8dc5993aadaf6043afdb281a1cbdd
Author: Dustin Sallings <dustin@spy.net>
Date:   Sun Jul 23 19:30:00 2006 -0700

    initial import
    (automatically generated log message)

commit c0772446a20d62bcaf7104527c0ea512b817a7b1
Author: Dustin Sallings <dustin@spy.net>
Date:   Mon Mar 26 22:20:24 2007 -0700

    Tailor preparing to convert repo by adding .hgignore
