RebindAwareEvictionPolicy.java

package redis.clients.jedis;

import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultEvictionPolicy;
import org.apache.commons.pool2.impl.EvictionConfig;
import org.apache.commons.pool2.impl.EvictionPolicy;

/**
 * commons-pool2 eviction policy that destroys idle connections marked by a maintenance marking
 * pass. All other connections are deferred to the wrapped delegate (typically the user's configured
 * policy, defaulting to {@link DefaultEvictionPolicy}).
 */
final class RebindAwareEvictionPolicy implements EvictionPolicy<Connection> {

  private final EvictionPolicy<Connection> delegate;

  RebindAwareEvictionPolicy(EvictionPolicy<Connection> delegate) {
    this.delegate = (delegate != null) ? delegate : new DefaultEvictionPolicy<Connection>();
  }

  @Override
  public boolean evict(EvictionConfig config, PooledObject<Connection> underTest, int idleCount) {
    if (underTest.getObject().isRetired()) {
      return true;
    }
    return delegate.evict(config, underTest, idleCount);
  }
}