-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Description
Not sure I fully understand what's going on, so looking for some idea on how to even approach fixing this.
var jedis = new JedisSentineled(....);
var it = j.scanIteration(100, cacheObjKey()+"*");
// doesn't really matter what happens past the line above
while (!it.isIterationCompleted()) {
var data = it.nextBatchList().toArray(new String[0]);
if (data.length > 0) {
j.del(data);
}
}
This leaks a connection for me.
JedisCommandIterationBase
's constructor calls connectionProvider.getConnectionMap(), which is default ConnectionProvider
's getConnectionMap()
, which just allocates a connection, puts in a single-element map, and returns that. JedisCommandIterationBase
is not a Closeable
, and never clears that connection out (because it doesn't think it needs to).
It looks like pool-based connection providers must return a pool from a getConnectionMap()
, like PooledConnectionProvider
does. SentinelConnectionProvider
doesn't do that. But it's also not easy for it to do that because its pool is volatile.
Any ideas how to work around this in the meantime?