У меня есть скрипт python, который используется для взаимодействия с cassandra с помощью драйвера python datastax
Он работает с 14 марта 2016 года и до сегодняшнего дня не было проблем.
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
Спецификации: питон 2.7 Кассандра 2.1.11
Цитаты из документа datastax:
Операция заняла больше времени, чем указанное время ожидания (на стороне клиента). Это не ошибка, сгенерированная Cassandra, а только драйвер.
Проблема в том, что я не трогал драйвер. Я установил тайм-аут по умолчанию на 30,0 секунд, но почему он истекает через 5 секунд (это сказано в журнале)