in zuul-core/src/main/java/com/netflix/zuul/netty/connectionpool/DefaultClientChannelManager.java [160:220]
public boolean release(PooledConnection conn) {
conn.stopRequestTimer();
metrics.releaseConnCounter().increment();
metrics.connsInUse().decrementAndGet();
DiscoveryResult discoveryResult = conn.getServer();
updateServerStatsOnRelease(conn);
boolean released = false;
if (conn.isShouldClose()) {
// Close and discard the connection, as it has been flagged (possibly due to receiving a non-channel error
// like a 503).
conn.setInPool(false);
conn.close();
LOG.debug(
"[{}] closing conn flagged to be closed", conn.getChannel().id());
} else if (isConnectionExpired(conn.getUsageCount())) {
conn.setInPool(false);
conn.close();
metrics.closeExpiredConnLifetimeCounter().increment();
LOG.debug(
"[{}] closing conn lifetime expired, usage: {}",
conn.getChannel().id(),
conn.getUsageCount());
} else if (connPoolConfig.isCloseOnCircuitBreakerEnabled() && discoveryResult.isCircuitBreakerTripped()) {
LOG.debug(
"[{}] closing conn, server circuit breaker tripped",
conn.getChannel().id());
metrics.circuitBreakerClose().increment();
// Don't put conns for currently circuit-tripped servers back into the pool.
conn.setInPool(false);
conn.close();
} else if (!conn.isActive()) {
LOG.debug("[{}] conn inactive, cleaning up", conn.getChannel().id());
// Connection is already closed, so discard.
metrics.alreadyClosedCounter().increment();
// make sure to decrement OpenConnectionCounts
conn.updateServerStats();
conn.setInPool(false);
} else {
releaseHandlers(conn);
// Attempt to return connection to the pool.
IConnectionPool pool = perServerPools.get(discoveryResult);
if (pool != null) {
released = pool.release(conn);
} else {
// The pool for this server no longer exists (maybe due to it falling out of
// discovery).
conn.setInPool(false);
released = false;
conn.close();
}
LOG.debug("PooledConnection released: {}", conn);
}
return released;
}