2012-03-06 79 views
3

当通过Pycassa从Cassandra获取行时,有时会出现TApplicationException: get_slice failed: unknown result]Cassandra/Pycassa:get_slice()/ get_indexed_slice()失败,TApplicationException:Unknown结果

我无法重现此异常,也无法找到有关此问题的任何文档。现在我将Cassandra作为单个节点运行(用于开发),并且Exception总是在发生大量并发请求的上下文中引发的。 我想知道这是因为性能问题还是与其他问题有关(因此,我想知道在生产环境中运行多个节点时它是否会消失)。

卡桑德拉版本是1.0.7,并从日志输出如下:

[DEBUG 17:45:58,253 Thrift transport error occurred during processing of message. 
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.cassandra.thrift.Cassandra$Processor.process(Cassandra.java:2877) 
    at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:187) 
    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:680) 
DEBUG 17:45:58,315 logged out: #<User allow_all groups=[]>] 
+1

你在cassandra日志中看到了什么,以及cassandra的版本是什么? – sdolgy 2012-03-06 15:49:02

+0

@sdolgy:我已经更新了上面的问题! – 2012-03-06 16:52:41

+0

什么是您的pycassa控制台日志和您的密钥空间(运行cassandra-cli并键入describe ksName;) – 2012-05-28 07:57:36

回答

3

如果使用的是多,pycassa.pool is not multiprocessing-safe

在类似情况下,我收到“TApplicationException:get_slice失败:未知结果”。我创建了多个pycassa.pools,每个进程一个池,问题就解决了。

该文档有一个特殊的页面来向我们提供有关多处理和存储池的建议,但是它没有列出如果您使用一个存储池进行多处理会出现什么错误。我觉得这就是!