2012-07-22 11 views
6

Estoy tratando de conectarme a cassandra local usando astyanax, pero constantemente obtengo PoolTimeoutException. Puedo conectarme a cassandra usando cli o hector client. ¿Alguna idea de qué estoy haciendo mal?PoolTimeoutException cuando se conecta a Cassandra a través de Astyanax

Gracias.

Mi código:

val context = new AstyanaxContext.Builder() 
     .forCluster("cluster") 
     .forKeyspace(keyspace) 
     .withAstyanaxConfiguration(
       new AstyanaxConfigurationImpl() 
        .setDiscoveryType(NodeDiscoveryType.NONE) 
     ) 
     .withConnectionPoolConfiguration(
       new ConnectionPoolConfigurationImpl("ConnPool") 
        .setPort(9160) 
        .setMaxConnsPerHost(1) 
        .setMaxBlockedThreadsPerHost(1) 
        .setSeeds("127.0.0.1:9160") 
        .setConnectTimeout(10000) 
     ) 
     .withConnectionPoolMonitor(new CountingConnectionPoolMonitor()) 
     .buildKeyspace(ThriftFamilyFactory.getInstance()) 
    context.start() 
    return context.getEntity() 

Excepción:

Exception in thread "main" java.lang.RuntimeException: com.netflix.astyanax.connectionpool.exceptions.PoolTimeoutException: PoolTimeoutException: [host=127.0.0.1(127.0.0.1):9160, latency=10004(10004), attempts=1] Timed out waiting for connection 
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$7.getNextBlock(ThriftColumnFamilyQueryImpl.java:652) 
at com.netflix.astyanax.thrift.ThriftAllRowsImpl$1.hasNext(ThriftAllRowsImpl.java:61) 
at scala.collection.JavaConversions$JIteratorWrapper.hasNext(JavaConversions.scala:574) 
at scala.collection.Iterator$class.foreach(Iterator.scala:772) 
at scala.collection.JavaConversions$JIteratorWrapper.foreach(JavaConversions.scala:573) 
at scala.collection.IterableLike$class.foreach(IterableLike.scala:73) 
at scala.collection.JavaConversions$JIterableWrapper.foreach(JavaConversions.scala:587) 
at at scala.Function0$class.apply$mcV$sp(Function0.scala:34) 
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 
at scala.App$$anonfun$main$1.apply(App.scala:60) 
at scala.App$$anonfun$main$1.apply(App.scala:60) 
at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59) 
at scala.collection.immutable.List.foreach(List.scala:76) 
at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:30) 
at scala.App$class.main(App.scala:60) 
at Caused by: com.netflix.astyanax.connectionpool.exceptions.PoolTimeoutException: PoolTimeoutException: [host=127.0.0.1(127.0.0.1):9160, latency=10004(10004), attempts=1] Timed out waiting for connection 
at com.netflix.astyanax.connectionpool.impl.SimpleHostConnectionPool.waitForConnection(SimpleHostConnectionPool.java:201) 
at com.netflix.astyanax.connectionpool.impl.SimpleHostConnectionPool.borrowConnection(SimpleHostConnectionPool.java:158) 
at com.netflix.astyanax.connectionpool.impl.RoundRobinExecuteWithFailover.borrowConnection(RoundRobinExecuteWithFailover.java:60) 
at com.netflix.astyanax.connectionpool.impl.AbstractExecuteWithFailoverImpl.tryOperation(AbstractExecuteWithFailoverImpl.java:50) 
at com.netflix.astyanax.connectionpool.impl.AbstractHostPartitionConnectionPool.executeWithFailover(AbstractHostPartitionConnectionPool.java:229) 
at com.netflix.astyanax.thrift.ThriftColumnFamilyQueryImpl$7.getNextBlock(ThriftColumnFamilyQueryImpl.java:623) 

Respuesta

2

Estábamos teniendo este problema también. Para nosotros, resultó ser un problema de versión con libthrift. Versión 0.7.0 trabajado. La versión 0.6.1 no. Verifica tu classpath y mira ... Buena suerte.

-td

+0

"tom d" retén agradable, gracias! cualquier persona que actualice astyanax jar a v1.0.6 sin maven, no se olvide de actualizar libthrift a 0.7.0 –

2

Otra cuestión es si cerrar de golpe datos en un nodo y tiene una subprocesos de 50 y sólo 1 de conexión por host, obtendrá lo mismo por lo que tiene que equilibrar el número de hilos/anfitrión en ciertas situaciones también.

1

Intentar conectar a través del puerto incorrecto también dará este error. Ver discusión this.

0

Haga lo siguiente en el cassandra.yaml

  1. Compruebe el rpc_address
  2. Comprobar la rpc_port
  3. Establecer start_rpc a true
Cuestiones relacionadas