Feature Request: DB selection support for proxy-bridged cluster (original) (raw)
Description:
Some of the Proxy-bridged cluster can support multiple db selection.
In order to give full support of advanced features, the proxy-bridged cluster worked as a single node cluster that:
- support "Cluster" command, if user emit "cluster nodes" it will return its IP with full slot range [0, 16383]
- "cluster_enabled" is set to 1 in info, with corresponding "redis_mode" a cluster
- it supports mget/mset series and multi-key commands (non-atomic)
in that mode, it can give the compatibility at best effort and user could write same code for standalone mode or cluster mode, especially when user scales standalone mode to cluster, with db selection data inside.
An unhandled timeout exception was encountered when doing db selection in cluster mode in some early version of the library, and we tried the latest package 2.7.17 but also failed.
Unhandled exception. StackExchange.Redis.RedisTimeoutException: Timeout performing HSET (10000ms), inst: 0, qu: 0, qs: 0, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 172.123.35.71:6379, mc: 1/1/0, mgr: 10 of 10 available, clientName: 47e4280ce570, PerfCounterHelperkeyHashSlot: 11933, IOCP: (Busy=0,Free=1000,Min=32,Max=1000), WORKER: (Busy=0,Free=32767,Min=32,Max=32767), v: 2.2.79.4591
the case can be reproduced by using code below,
// singleton connection
ConnectionMultiplexer cm = RedisConnSingleton.getRedisConn();
var db = cm.GetDatabase();
for (int i = 1; i <= 100; i++)
{
string key = i.ToString();
string value = i.ToString();
// after switch db selection, the GetDatabase returned a unexpect handle so failed to send
db.GetDatabase(i);
db.StringSet(key, value);
String ret = db.StringGet(key);
Console.WriteLine("get key: " + ret);
Thread.Sleep(1000);
}
- Hope to support db-selection in cluster mode
- Is there a way of getting correct cluster link to send raw "select" command? Please advise.
Thanks,
Baron