public Future<T> get() { for (int j = entries.size() - 1; j >= 0; j--) { ClientConnectionsEntry entry = getEntry(); if (!entry.isFreezed() && tryAcquireConnection(entry)) { return connectTo(entry); } } List<InetSocketAddress> zeroConnectionsAmount = new LinkedList<InetSocketAddress>(); List<InetSocketAddress> freezed = new LinkedList<InetSocketAddress>(); for (ClientConnectionsEntry entry : entries) { if (entry.isFreezed()) { freezed.add(entry.getClient().getAddr()); } else { zeroConnectionsAmount.add(entry.getClient().getAddr()); } } StringBuilder errorMsg; if (connectionManager.isClusterMode()) { errorMsg = new StringBuilder( "Connection pool exhausted! for slots: " + masterSlaveEntry.getSlotRanges()); } else { errorMsg = new StringBuilder("Connection pool exhausted! "); } if (!freezed.isEmpty()) { errorMsg.append(" Disconnected hosts: " + freezed); } if (!zeroConnectionsAmount.isEmpty()) { errorMsg.append(" Hosts with fully busy connections: " + zeroConnectionsAmount); } RedisConnectionException exception = new RedisConnectionException(errorMsg.toString()); return connectionManager.newFailedFuture(exception); }