JedisClusterCommand
* improvements on connection error handling
** if based on slot connection throws connection related exception, retry to random node
** if we retry with random node, but all nodes are unreachable, throw JedisConnectionException without retry
** try to release connection whether connection is broken or not
* bug fix : if asking flag is on, and success this time, set asking flag to off
JedisClusterConnectionHandler
* have flexibility on initializing slots cache
** allow some nodes connection failure - skip
** if current node is success initializing slots cache, skip other nodes
** if current node failed to initialize slots cache, discard all discovered nodes and slots
* set nodes if node does not exist in nodes
** it restricts JedisPool to replace - prevent IllegalStateException : Returned object not currently part of this pool
JedisSlotBasedConnectionGuaranteedConnectionHandler
* getConnection (random connection)
** check all connections by random sequence
** always return valid connection (able to ping-pong)
** throw exception if all connections are invalid
* some refactoring
* Implement Closeable from Jedis, ShardedJedis with Pooled
** resources from JedisPool, JedisSentinelPool, ShardedJedis, ShardedJedisPool
* Connection class : check whether Jedis Connection is broken
** when it's time to throw JedisConnectionException, mark Connection to broken
first if Response's dependency found and not built
* there's some dependency with exec response and command responses
within multi
* if command responses's get() called before exec response's build(), it
calls exec response's build() first
* unit test included
* remove all unused methods
* move JedisSentinelPoolTest.waitForJedisSentinelPoolRecognizeNewMaster to JedisSentin
** both JedisSentinelTest and JedisSentinelPoolTest can use this implementation
* introduce FailoverAbortedException
** throws when we subscribe sentinel channels and got message by "-failover-abort-*" c
* respect Source Format to Java Convention (by Eclipse -> Source -> Format)
* remove all unused methods
* move JedisSentinelPoolTest.waitForJedisSentinelPoolRecognizeNewMaster to JedisSentinelTestUtil
** both JedisSentinelTest and JedisSentinelPoolTest can use this implementation
* introduce FailoverAbortedException
** throws when we subscribe sentinel channels and got message by "-failover-abort-*" channel
* respect Source Format to Java Convention (by Eclipse -> Source -> Format)
* let unit test fail if -failover-abort-* message is produced while waiting to failover
** waiting more is meaningless, and there is nothing we can do
** we can request "sentinel failover" to failover again, but it may can fail again
* Use "sentinel failover" to force failover
** faster than kill redis instances
* set failover timeout to 1 min
** It makes sense with failover within localhost
* reduce instances : 1 Redis Server and 1 Sentinel
** port is not changed -> I'll changed later at end of refactoring
* remove all @Deprecated methods about *scan
* rename ScanResult.getStringCursor() to ScanResult.getCursor()
** its original name
* let unit tests follow this change
cursor
* overload all *scan method to change "int" cursor to "string" cursor
* set @Deprecated and leave reason to deprecate and when to remove to
current *scan method
* modify unit tests to make it work with new *scan method