当使用协议缓冲区连接到我的riak AWS集群时,我发现Python Riak客户端有一种奇怪但一致的行为。这个简短的python片段会产生错误:
import time
import riak
client = riak.RiakClient(
host='address_to_my_cluster_goes_here',
http_port=8098,
pb_port=8087,
protocol='pbc'
)
result = client.ping()
# Do something else for a while, > 60 seconds
time.sleep(61)
result = client.ping()
最后一次ping总是引发异常,并带有以下回溯:
Traceback (most recent call last):
File "main_causing_exception.py", line 16, in <module>
result = client.ping()
File "C:\temp\venv\lib\site-packages\riak\client\transport.py", line 127, in wrapper
return self._with_retries(pool, thunk)
File "C:\temp\venv\lib\site-packages\riak\client\transport.py", line 69, in _with_retries
return fn(transport)
File "C:\temp\venv\lib\site-packages\riak\client\transport.py", line 125, in thunk
return fn(self, transport, *args, **kwargs)
File "C:\temp\venv\lib\site-packages\riak\client\operations.py", line 92, in ping
return transport.ping()
File "C:\temp\venv\lib\site-packages\riak\transports\pbc\transport.py", line 95, in ping
msg_code, msg = self._request(MSG_CODE_PING_REQ)
File "C:\temp\venv\lib\site-packages\riak\transports\pbc\connection.py", line 43, in _request
return self._recv_msg(expect)
File "C:\temp\venv\lib\site-packages\riak\transports\pbc\connection.py", line 50, in _recv_msg
self._recv_pkt()
File "C:\temp\venv\lib\site-packages\riak\transports\pbc\connection.py", line 71, in _recv_pkt
% len(nmsglen))
riak.RiakError: 'Socket returned short packet length 0 - expected 4'
如果我每30秒左右执行client.ping()
,则不会发生错误,表明这是我看到的某种插槽保持活动问题,但这似乎不是解决方案足够强大的生产环境。
只有在使用pbc
协议设置时才会出现错误,而且在使用http
配置的Riak Python客户端时我从未见过它。
我在Win7-64平台上使用Python 2.7.5(虽然错误也发生在我们的Ubuntu开发服务器上),在虚拟环境中使用以下软件包和版本:
有关正在发生的事情以及如何解决问题的任何想法?我是否以错误的方式使用Python Riak客户端?
答案 0 :(得分:1)
您应该使用较新版本的Riak库。
PBC传输中send
功能出错,已在此处解决:https://github.com/basho/riak-python-client/issues/381