2012-10-19 4 views
1

CQL JDBC 드라이버 (cassandra-jdbc-1.1.2)를 사용하여 Apache Cassandra 데이터베이스에 연결할 때 다음 오류가 발생합니다. 나는 단지 UPDATE 문을 실행하려고 할 때 오류가 발생하고 SELECT는 정상적으로 작동합니다. 또한 나는 cqlsh를 사용하여 cassandra에 연결할 수있다.Apache Cassandra : JDBC를 사용할 때 TTransportException이 발생했습니다.

java.sql.SQLNonTransientConnectionException: org.apache.thrift.transport.TTransportException 
    at org.apache.cassandra.cql.jdbc.CassandraStatement.doExecute(CassandraStatement.java:195) 
    at org.apache.cassandra.cql.jdbc.CassandraStatement.execute(CassandraStatement.java:203) 
    at com.concordusa.complete.dao.cassandra.keygen.MessageKeyGenerator.updateHighKeyInDatabase(MessageKeyGenerator.java:69) 
    at com.concordusa.complete.dao.cassandra.keygen.MessageKeyGenerator.getNextHighKeyValue(MessageKeyGenerator.java:44) 
    at com.concordusa.complete.dao.cassandra.keygen.MessageKeyGenerator.getKey(MessageKeyGenerator.java:30) 
    at com.concordusa.complete.dao.cassandra.keygen.MessageKeyGenerator.main(MessageKeyGenerator.java:85) 
Caused by: org.apache.thrift.transport.TTransportException 
    at org.apache.thrift.transport.TIOStreamTransport.read(TIOStreamTransport.java:132) 
    at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) 
    at org.apache.thrift.transport.TFramedTransport.readFrame(TFramedTransport.java:129) 
    at org.apache.thrift.transport.TFramedTransport.read(TFramedTransport.java:101) 
    at org.apache.thrift.transport.TTransport.readAll(TTransport.java:84) 
    at org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:378) 
    at org.apache.thrift.protocol.TBinaryProtocol.readI32(TBinaryProtocol.java:297) 
    at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:204) 
    at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69) 
    at org.apache.cassandra.thrift.Cassandra$Client.recv_execute_cql_query(Cassandra.java:1402) 
    at org.apache.cassandra.thrift.Cassandra$Client.execute_cql_query(Cassandra.java:1388) 
    at org.apache.cassandra.cql.jdbc.CassandraConnection.execute(CassandraConnection.java:397) 
    at org.apache.cassandra.cql.jdbc.CassandraConnection.execute(CassandraConnection.java:421) 
    at org.apache.cassandra.cql.jdbc.CassandraStatement.doExecute(CassandraStatement.java:161) 
    ... 5 more 

cassandra 1.0.7을 사용할 때이 문제가 발생하지 않았습니다. 1.1. * 이전 버전은 준비된 문을 지원하지 않기 때문에 cassandra를 1.1.6으로 업데이트했습니다.

미리 감사드립니다.

편집 :

ERROR [Thrift:13] 2012-10-23 14:50:24,327 CustomTThreadPoolServer.java (line 204) Error occurred during processing of message. 
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
    at java.util.ArrayList.RangeCheck(ArrayList.java:547) 
    at java.util.ArrayList.get(ArrayList.java:322) 
    at org.apache.cassandra.cql.Term.getByteBuffer(Term.java:102) 
    at org.apache.cassandra.cql.UpdateStatement.mutationForKey(UpdateStatement.java:206) 
    at org.apache.cassandra.cql.UpdateStatement.prepareRowMutations(UpdateStatement.java:166) 
    at org.apache.cassandra.cql.UpdateStatement.prepareRowMutations(UpdateStatement.java:130) 
    at org.apache.cassandra.cql.QueryProcessor.batchUpdate(QueryProcessor.java:256) 
    at org.apache.cassandra.cql.QueryProcessor.processStatement(QueryProcessor.java:596) 
    at org.apache.cassandra.cql.QueryProcessor.process(QueryProcessor.java:879) 
    at org.apache.cassandra.thrift.CassandraServer.execute_cql_query(CassandraServer.java:1240) 
    at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql_query.getResult(Cassandra.java:3542) 
    at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql_query.getResult(Cassandra.java:3530) 
    at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32) 
    at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34) 
    at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:186) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
+0

를 쿼리에 연결 히트 JDBC 드라이버 https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/issues/detail?id=95 에서 열린 버그가 기록인가? 그 스택 추적은 쿼리를 실행하려고 할 때 뭔가가 서버 쪽에서 실패하고 있다고 생각하게 만듭니다. –

+0

맞습니다. 서버 쪽에서 실패한 것이 있습니다. 스택 추적으로 질문을 업데이트했습니다. –

답변

0

내 질문에 nonsence 것을 보인다 : 여기가 서버 로그에있을거야.

PreparedStatement stmt = con.prepareStatement(query); 
stmt.setLong(1, key); 
stmt.execute(query); 

query은 (obiously) 문자열 : 여기에 내 코드입니다. 문제가 해결되는 문제 querystmt.execute(query)

그런 경우에는 execute()의 동작이 올바른지 아직 확실하지 않습니다.

0

이를 실행할 때이 그렇지는 카산드라의 오류를 볼 수 있나요

관련 문제