2012-04-03 13 views
5

Siempre que utilice cualquier función Héctor API para acceder a mi base de datos Cassandra, me sale una excepción:Problema con Héctor activos y de la base de datos Cassandra: excepción indocumentado

me.prettyprint.hector.api.exceptions.HectorException: Todas las piscinas anfitrionas marcado. Reintentar la carga enviada al cliente.

Mi servidor tiene la base de datos de Cassandra ejecutándose en segundo plano.

He leído sobre la excepción y está efectivamente sin documentar. Parece que la excepción se debe a problemas de conexión.

¿Cómo puedo solucionarlo?

Respuesta

3

Recibirá ese error si el cliente de Hector no se puede conectar a Cassandra. Puede haber una serie de razones para esto y cosas por probar:

  • Asegúrese de que las propiedades de conexión en su código (ip/host/puerto) estén configuradas correctamente.
  • Asegúrate de que puedes conectarte a cassandra-cli de forma remota, podría ser un problema de red.
  • Intente publicar su código de conexión aquí - tal vez hay un problema allí.
0

Recibo este error de forma aleatoria debido a problemas de conectividad de red, pero reintentarlo varias veces generalmente lo corrige. Aquí está el código que utilizo para reintentar Hector funciones 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; 
} 

Y un ejemplo de cómo se usa:

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

que estaba recibiendo el mismo error con cassandra-unidad 2.0.2.1 pero degradación la versión a 2.0.2.0 resolvió el problema. Es extraño pero utilicé 2.0.2.0 por ahora con algunos adicionales de SBT dependencias

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