cassandra python驱动程序自动降级协议';行不通

cassandra python驱动程序自动降级协议';行不通,python,cassandra,Python,Cassandra,这是我的密码: from cassandra.cluster import Cluster import cassandra print('cassandra driver version: %s ' % str(cassandra.__version_info__)) # c = Cluster(['mgdevtestslc03-7583.slc07.dev.xxx.com'], protocol_version=3) c = Cluster(['mgdevtestslc03-7583.sl

这是我的密码:

from cassandra.cluster import Cluster
import cassandra
print('cassandra driver version: %s ' % str(cassandra.__version_info__))

# c = Cluster(['mgdevtestslc03-7583.slc07.dev.xxx.com'], protocol_version=3)
c = Cluster(['mgdevtestslc03-7583.slc07.dev.xxx.com'])
c.connect()
上述代码将生成一个异常,如下所示:

dbbox@ubuntu:~$ python  1.py
cassandra driver version: (3, 8, 0)
Traceback (most recent call last):
  File "1.py", line 7, in <module>
    c.connect()
  File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 1172, in connect
    self.control_connection.connect()
  File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 2618, in connect
    self._set_new_connection(self._reconnect_internal())
  File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 2655, in _reconnect_internal
    raise NoHostAvailable("Unable to connect to any servers", errors)
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'10.***.***.**': ConnectionException('Failed to initialize new connection to 10.***.***.**: Error from server: code=0000 [Server error] message="io.netty.handler.codec.DecoderException: org.apache.cassandra.transport.ProtocolException: Invalid or unsupported protocol version: 4"',)})
dbbox@ubuntu:~$python 1.py
cassandra驱动程序版本:(3,8,0)
回溯(最近一次呼叫最后一次):
文件“1.py”,第7行,在
c、 连接()
文件“/usr/local/lib/python2.7/dist packages/cassandra/cluster.py”,第1172行,在connect中
self.control\u connection.connect()
文件“/usr/local/lib/python2.7/dist packages/cassandra/cluster.py”,第2618行,在connect中
self.\u设置\u新连接(self.\u重新连接\u内部())
文件“/usr/local/lib/python2.7/dist packages/cassandra/cluster.py”,第2655行,位于内部
raise NoHostAvailable(“无法连接到任何服务器”,错误)
cassandra.cluster.NoHostAvailable:(“无法连接到任何服务器”,{'10.*.*.*.*.*.*.*':ConnectionException('未能将新连接初始化到10.*.*.*.*.*.*.*.*:来自服务器的错误:代码=0000[服务器错误]消息=“io.netty.handler.codec.DecoderException:org.apache.cassandra.transport.ProtocolException:无效或不受支持的协议版本:4”,)})
但是,如果我添加“protocol_version=3”,它就会工作

根据,protocal_版本可以自动降级

如果未在构造函数中设置,驱动程序将根据与服务器的协商自动降级版本


但是为什么自动降级不会发生在这里呢?我需要这个功能,因为我想连接到许多不同版本的cassandra群集,所以我不想为每个连接设置protocal_版本。

只是一个猜测,但是您是否正试图连接到Apache cassandra 2.1.0-2.1.5群集?这些cassandra群集中有一个bugrsions(),当它不支持试用协议版本时,返回错误的错误响应


python驱动程序在处理这个问题时遇到了一个问题(),但由于它影响了过时的/旧的Cassandra版本,因此没有明确地处理它。如果您运行的Cassandra版本介于2.1.0-2.1.5之间,可能值得考虑更新到最新的2.1版本(目前为2.1.17)因为可能存在已知问题,因为这些问题是2.1的早期版本。

这正是现在正在发生的事情!我的版本是2.1.2,但是CASSANDRA-9451的问题在2.1.6中得到了修复。