Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Commits on Dec 12, 2011
  1. Try to detect when a node is diconnected by cutting the LAN cable. (A…

    …s in 'the socket is not closed properly'.)
    The MessageStreamListener will create a timer which tries to connect to the pools start url (/ppols/default) in every 10 seconds. If it fails then the node is down and it moves over to the next.
    The problem comes from the fact that the 'pool streaming uri' is a comet style uri whihc must be read indefinitely. However the nodes only send data very rarey -- when the configuration change. So when a node is disconnected forcefully (by cutting the LAN cabel or disconnecting its VM) we have no way to figure out that no data is coming because the configuration did not change, or because the server is not there.
    It'd be more easier if the server'd send an "I am alive" message every 30 seconds or so.
Commits on Oct 5, 2011
Commits on Oct 3, 2011
Commits on Sep 19, 2011
  1. Rolled back the Get(IEnumerable) to its old implementation.

    The new, async version was failing under very heavy load due to a concurrency bug which I am not able to find.
    See Issue #76 and the issue76 branch for a test application.
  2. test if the sockets are released properly when the failure policy ove…

    …rrides the pool's decision.
Commits on Aug 26, 2011
  1. Release dead connections so the pool can create new ones when the fai…

    …lure policy keeps the socket pool alive.
Commits on Aug 13, 2011
  1. Recovery timer must be started even if we have a VBucket config. (Thi…

    …s handles client side disconnects.)
Commits on Aug 3, 2011
  1. Failure policy implementation.

    Users can now customize how and when a node should fail after an error occures.
    The default behavior is the FailImmediatelyPolicy whihc behaves exactly as the previous version of the cliend did: fail a node when an error occures.
    Also included the ThrottlingFailurePolicy which only fails a node if N failures happen in T time. If there is at least T time between two failures, the node's state will not change. This is useful where the nodes are healthy but occasionally receive timeouts occur. (E.g. sometimes receiving large data but the client is configured to use an extremely small receive timeout value.)
Commits on Jul 28, 2011
  1. Changelog update.

Commits on Jul 27, 2011
  1. Build script fixes.

Commits on Jul 20, 2011
Commits on Jul 19, 2011
Commits on Jul 18, 2011
  1. Merge branch 'master' of

    …into iamkrillin-master
  2. Mark the vbucket state properly in the internal state of the MembaseP…

    …ool. Fixes #71
    If a client disconnected it switched to ketama locator. (Server fails were properly reinitializing the pool, because the cluster sent an updated config after a failover.)
  3. Nuget packages.

Commits on Jul 15, 2011
Commits on Jul 14, 2011
  1. @iamkrillin
Commits on Jul 13, 2011
  1. Added support for byte and sbyte serialization.

    Byte and SByte were serialized using the BinaryFormatter (this was an oversight). Now they really take up only one byte. Byte values serialized previously will only be changed to the new mode after they are loaded then stored again.
  2. Changed the flags to uint.

    Flags were ushort for historical reasons, but the binary protcol supports uint, so it made sense to switch. Text protocol is going to be obsolete anyways.
  3. Code cleanup.

    Removed the obsolete Port&Credentials members from the configuration and got rid of some compiler warnings.
Commits on Jul 7, 2011
  1. @iamkrillin
Commits on Jul 4, 2011
Commits on Jun 14, 2011
  1. Forgot the changelogs.

Commits on Jun 8, 2011
  1. Changelog update.

Commits on Jun 5, 2011
  1. Fix refs in the changelog.

  2. TestApp update.

  3. CasResult now contains the status code of Set/Add/Replace operations.

    - Status codes are protocol and engine (membase, default, etc.) specific. Text protocol does not support them.
    - Currently only the Cas operation exposes them. Cas() without specifying the cas value behaves the same way as Store(), only their return value differs.
Something went wrong with that request. Please try again.