从python连接到Cassandra集群的超时

时间:2015-03-09 19:51:42

标签: python cassandra

我尝试使用cassandra-driver 2.1.4库连接到Cassandra时遇到以下错误(当然使用真正的IP而不是星号):

NoHostAvailable: ('Unable to connect to any servers', {'**.**.**.**': 
OperationTimedOut('errors=None, last_host=None',), '**.**.**.**': 
OperationTimedOut('errors=None, last_host=None',)})

连接代码:

Database.history = Cluster(
    ip_list.split(","),
    auth_provider=PlainTextAuthProvider(
        username=u,
        password=p
    )
).connect(k)

现在很奇怪:我可以在相同的默认端口上使用Datastax DevCenter从同一个盒子中完全连接。如果我将这些IP编辑为虚假,我会得到一个不同的错误(说它无法连接到主机而不是超时)。如果我将用户名/密码编辑为虚假,我会收到验证错误。

很明显我 连接,但由于某种原因,我实际上无法在Python中获得有用的连接。

另外,我在远程盒子上成功运行了相同的代码。所以它必须与我的本地python或其他东西一样奇怪。

1 个答案:

答案 0 :(得分:0)

cassandra-driver连接代码中存在某种计时问题,无法通过增加连接或请求超时来解决。在调查问题可能出在哪里时,我偶然发现了这种棘手的变通方法,这可能对陷入这一障碍的其他人有用:

import logging
logging.getLogger().addHandler(logging.StreamHandler())
logging.getLogger().setLevel(logging.DEBUG)

将上述代码放在脚本顶部。我的猜测是,它以某种不必要的日志消息打印到stderr的方式,在客户端代码中添加了足够的延迟来解决定时问题。