Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
Flink-1.0
-
None
Description
When idle connections are timed-out and closed by Redis server, the following exception will be thrown and the Flink job will eventually fail:
redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream. at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:199) at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40) at redis.clients.jedis.Protocol.process(Protocol.java:151) at redis.clients.jedis.Protocol.read(Protocol.java:215) ......
It is clear that RedisCommandsContainerBuilder made use of GenericObjectPoolConfig without setting any parameters relating to idle testing. There are 2 possible solutions:
- Replace GenericObjectPoolConfig directly with JedisPoolConfig, which enabled idle testing by default;
- Make `testWhileIdle` configurable by user in FlinkJedisPoolConfig.
Also, `testOnBorrow` and `testOnReturn` can be provided for those who want to validate connections.