Cassandra Python驱动程序OperationTimedOut问题

时间:2016-06-02 18:12:09

标签: python-2.7 cassandra-2.1

我有一个python脚本,用于与datastax python driver

与cassandra交互

它自2016年3月14日开始运行,直到今天才出现问题。

2016-06-02 13:53:38,362 ERROR ('Unable to connect to any servers', {'172.16.47.155': OperationTimedOut('errors=Timed out creating connection (5 seconds), last_host=None',)})
2016-06-02 13:54:18,362 ERROR ('Unable to connect to any servers', {'172.16.47.155': OperationTimedOut('errors=Timed out creating connection (5 seconds), last_host=None',)})

下面是用于创建会话的函数,并在每次查询完成时关闭会话(session.shutdown())。(每天我们只有少于100个来自订阅者的查询,因此我选择了构建连接,执行查询并关闭它,而不是让连接保持活动状态)

线程和进程之间不共享会话。如果我在python控制台中调用以下函数,它会正确连接数据库,但正在运行的脚本无法再连接到数据库。

任何人都可以帮助或解释这个问题?感谢

def get_cassandra_session(stat=None):
    """creates cluster and gets the session base on key space"""
    # be aware that session cannot be shared between threads/processes
    # or it will raise OperationTimedOut Exception
    if config.CLUSTER_HOST2:
        cluster = cassandra.cluster.Cluster([config.CLUSTER_HOST1, config.CLUSTER_HOST2])
    else:
        # if only one address is available, we have to use older protocol version
        cluster = cassandra.cluster.Cluster([config.CLUSTER_HOST1], protocol_version=2)

    if stat and type(stat) == BatchStatement:
        retry_policy = cassandra.cluster.RetryPolicy()
        retry_policy.on_write_timeout(BatchStatement, ConsistencyLevel, WriteType.BATCH_LOG, ConsistencyLevel.ONE,
                                      ConsistencyLevel.ONE, retry_num=0)
        cluster.default_retry_policy = retry_policy
    session = cluster.connect(config.KEY_SPACE)
    session.default_timeout = 30.0
    return session

规格: python 2.7 卡桑德拉2.1.11

来自datastax doc的引言:

  

操作所花费的时间比指定的(客户端)超时要长。这不是Cassandra产生的错误,只是驱动程序。

问题是我没碰到司机。我将默认超时设置为30.0秒,但为什么它在5秒内超时(在日志中说明)

2 个答案:

答案 0 :(得分:0)

默认连接超时为五秒。在这种情况下,您需要设置Cluster.connect_timeout。 Session default_timeout适用于执行请求。

当任何TCP连接建立时间超过五秒时,它仍然有点令人惊讶。要检查的另一件事是猴子补丁。应用程序中的某些内容是否更改了Gevent或Eventlet的修补程序?这可能会导致驱动程序的默认行为发生变化。

答案 1 :(得分:0)

我了解到gevent模块会干扰cassandra-driver

  • cassandra-driver(3.10)
  • gevent(1.1.1)

卸载gevent解决了我的问题

pip uninstall gevent