Cassandra / Pycassa:get_slice()/ get_indexed_slice()因TApplicationException失败:未知结果

时间:2012-03-06 13:52:27

标签: python exception cassandra thrift pycassa

从Cassandra通过Pycassa获取行时有时会TApplicationException: get_slice failed: unknown result]

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

Cassandra Version是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 个答案:

答案 0 :(得分:3)

如果您使用多处理,pycassa.pool is not multiprocessing-safe

在类似的情况下,我收到了“TApplicationException:get_slice failed:unknown result”。我创建了多个pycassa.pools,每个进程一个池,问题就解决了。

该文档有一个特殊的页面,可以向我们提供有关多处理和池的建议,但是它没有列出如果使用一个池进行多处理时会出现的错误。我想是这样的!