Description
{markdown}
Tested on "4.0.0-1817-rel-enterprise"
I believe I'm seeing cases where a node is failed over – and, rather than closing the connection or failing immediately on auth, what actually happens is that the server, while maintaining the TCP connection, continues to respond with the `0x08` code.
While it is possible to check for this code, self-destruct the server, and search for a new configuration (though doing this in the client would not be trivial), this will break older client versions not aware of the new error code.
I'm not sure if this is intended behavior. I would expect (as before) that a failover would result in the termination of the TCP connection, rather than just leaving it "hanging"
*Expected Behavior*
If at auth-time the bucket does not exist, it should return that code (which it currently does not do). If a failover happened, the TCP connection should terminate, causing existing clients to revert to defined behavior. If there is some rationale for not terminating the connection; this behavior may be enabled via the `HELLO` command, or, as a last resort, by sending a `NOT_MY_VBUCKET` (with no payload) to the client. As `NOT_MY_VBUCKET` codes have a more defined path, the client will eventually attempt to load a new configuration.{markdown}
Tested on "4.0.0-1817-rel-enterprise"
I believe I'm seeing cases where a node is failed over – and, rather than closing the connection or failing immediately on auth, what actually happens is that the server, while maintaining the TCP connection, continues to respond with the `0x08` code.
While it is possible to check for this code, self-destruct the server, and search for a new configuration (though doing this in the client would not be trivial), this will break older client versions not aware of the new error code.
I'm not sure if this is intended behavior. I would expect (as before) that a failover would result in the termination of the TCP connection, rather than just leaving it "hanging"
*Expected Behavior*
If at auth-time the bucket does not exist, it should return that code (which it currently does not do). If a failover happened, the TCP connection should terminate, causing existing clients to revert to defined behavior. If there is some rationale for not terminating the connection; this behavior may be enabled via the `HELLO` command, or, as a last resort, by sending a `NOT_MY_VBUCKET` (with no payload) to the client. As `NOT_MY_VBUCKET` codes have a more defined path, the client will eventually attempt to load a new configuration.{markdown}
Attachments
Issue Links
- blocks
-
MB-11926 defined and reliable behavior needed when connections are exhausted
- Reopened
-
MB-12088 Memcached should return an uninitiated error code
- Closed
- is duplicated by
-
CCBC-601 drop in ops and failures in readd2 with sherlock
- Closed
- is triggered by
-
MB-14459 memcached should die when it is no longer in the cluster
- Closed
- relates to
-
MB-14456 Incorrect error returned for memory allocations after the bucket is deleted
- Resolved
-
MB-14540 Disable error codes in memcached due to insufficient error handling in libcouchbase
- Resolved
(1 relates to)