@Override
 public Set<String> getSuspendedCassandraHosts() {
   Set<CassandraHost> hosts = connectionManager.getSuspendedCassandraHosts();
   Set<String> hostsStr = new HashSet<String>();
   for (CassandraHost host : hosts) {
     hostsStr.add(host.getName());
   }
   return hostsStr;
 }
 /**
  * Used when we still have room to grow. Return an Connection without having to wait on polling
  * logic. (But still increment all the counters)
  *
  * @return
  * @throws SQLException
  */
 private CassandraConnectionHandle createConnection() throws SQLException {
   if (log.isDebugEnabled()) {
     log.debug("Creation of new connection");
   }
   try {
     return new CassandraConnectionHandle(
         ds.getConnection(cassandraHost.getUser(), cassandraHost.getPassword()), cassandraHost);
   } catch (SQLException e) {
     log.debug("Unable to open transport to " + cassandraHost.getName());
     throw e;
   }
 }
  private CassandraConnectionHandle waitForConnection() {
    CassandraConnectionHandle conn = null;
    numBlocked.incrementAndGet();

    // blocked take on the queue if we are configured to wait forever
    if (log.isDebugEnabled()) {
      log.debug("blocking on queue - current block count {}", numBlocked.get());
    }

    try {
      // wait and catch, creating a new one if the counts have changed. Infinite wait should just
      // recurse.
      if (maxWaitTimeWhenExhausted == 0) {

        while (conn == null && active.get()) {
          try {
            conn = availableConnectionQueue.poll(100, TimeUnit.MILLISECONDS);
          } catch (InterruptedException ie) {
            log.error("InterruptedException poll operation on retry forever", ie);
            break;
          }
        }

      } else {

        try {
          conn = availableConnectionQueue.poll(maxWaitTimeWhenExhausted, TimeUnit.MILLISECONDS);
          if (conn == null) {
            throw new HPoolExhaustedException(
                String.format(
                    "maxWaitTimeWhenExhausted exceeded for thread %s on host %s",
                    new Object[] {Thread.currentThread().getName(), cassandraHost.getName()}));
          }
        } catch (InterruptedException ie) {
          // monitor.incCounter(Counter.POOL_EXHAUSTED);
          log.error("Cassandra client acquisition interrupted", ie);
        }
      }
    } finally {
      numBlocked.decrementAndGet();
    }

    return conn;
  }
 @Override
 public String getName() {
   return String.format("<ConcurrentCassandraClientPoolByHost>:{%s}", cassandraHost.getName());
 }