@Override
    public synchronized String toString() {
      final long now = System.nanoTime();
      StringBuilder sb = new StringBuilder();
      sb.append("<");
      for (Iterator it = allConnections.iterator(); it.hasNext();) {
        PooledConnection pc = (PooledConnection) it.next();
        sb.append(pc.getServer());
        if (pc.shouldDestroy()) {
          sb.append("-DESTROYED");
        } else if (pc.hasIdleExpired(now, idleTimeoutNanos)) {
          sb.append("-IDLE");
        } else if (pc.remainingLife(now, lifetimeTimeoutNanos) <= 0) {
          sb.append("-EOL");
        }
        if (it.hasNext()) {
          sb.append(",");
        }
      }
      sb.append(">");
      return sb.toString();
    }
An existing connections lifetime has expired. We only want to create one replacement connection
at a time so this should block until this connection replaces an existing one. Note that if
a connection is created here it must not count against the pool max and its idle time and
lifetime must not begin until it actually replaces the existing one.

@param currentServer the server the candidate connection is connected to
@return true if caller should recheck for expired lifetimes; false if a background check was
        scheduled or no expirations are possible.
geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java