2012-04-03 13 views
5

Ogni volta che uso qualsiasi funzione Hector API per accedere al mio database di Cassandra, ottengo un'eccezione:Problema con Hector API e il database Cassandra: eccezione Undocumented

me.prettyprint.hector.api.exceptions.HectorException: Tutte le piscine ospitanti segnato verso il basso. Riprova il carico spinto al cliente.

Il mio server ha un database Cassandra in esecuzione in background.

Ho letto sull'eccezione ed è effettivamente non documentato. Sembra che l'eccezione sia dovuta a problemi di connessione.

Come si risolve?

risposta

3

Si otterrà quell'errore se il client Hector non è in grado di connettersi a Cassandra. Ci possono essere una serie di ragioni per questo e cose da provare:

  • Assicurarsi che le proprietà di connessione nel codice (ip/host/porta) siano configurate correttamente.
  • Assicurati di poterci connettere con cassandra-cli in remoto, potrebbe essere un problema di rete.
  • Prova a pubblicare il tuo codice di connessione qui - forse c'è un problema lì.
0

Viene visualizzato questo errore in modo casuale a causa di problemi con la connettività di rete, ma riprovare più volte di solito lo risolve. Ecco il codice che uso per riprovare Hector funzioni API:

/** An interface where inside the execute() method I call Hector */ 
public interface Retriable<T> { 
    T execute(); 
} 

/** 
* Executes operation and retries N times in case of an exception 
* @param retriable 
* @param maxRetries 
* @param <T> 
* @return 
*/ 
public static <T> T executeWithRetry(Retriable<T> retriable, int maxRetries) { 
    T result; 
    int retries = 0; 
    long sleepSec = 1; 
    // retry in case of an exception: 
    while (true) { 
     try { 
      result = retriable.execute(); 
      break; 
     } catch (Exception e) { 
      if (retries == maxRetries) { 
       LOG.error("Exception occurred. Reached max retries.", e); 
       throw e; 
      } 
      retries++; 
      LOG.error(String.format("Exception occurred. Retrying in %d seconds - #%d", sleepSec, retries), e); 
      try { 
       Thread.sleep(sleepSec * 1000); 
       // increase sleepSec exponentially: 
       sleepSec *= 2; 
      } catch (InterruptedException e1) { 
       e1.printStackTrace(); 
      } 
     } 
    } 
    return result; 
} 

E un esempio su come usarlo:

ColumnFamilyResult<String, String> columns = executeWithRetry(new Retriable<ColumnFamilyResult<String, String>>() { 
     @Override 
     public ColumnFamilyResult<String, String> execute() { 
      return template.queryColumns(row.getKey()); 
     } 
    }); 
0

mi è stato sempre lo stesso errore con cassandra-unità 2.0.2.1 ma Il downgrade di la versione a 2.0.2.0 ha risolto il problema. E 'strano, ma ho usato 2.0.2.0 per ora con alcune ulteriori SBT dipendenze

  "com.datastax.cassandra" % "cassandra-driver-core" % "2.0.1", 
     "org.cassandraunit" % "cassandra-unit" % "2.0.2.0" withSources() withJavadoc() 
Problemi correlati