…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.
…close them. Fixes #85
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.
…rrides the pool's decision.
…lure policy keeps the socket pool alive.
…s handles client side disconnects.)
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.)
…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.)
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.
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.
Removed the obsolete Port&Credentials members from the configuration and got rid of some compiler warnings.
- 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.