带有协议缓冲区的Riak Python客户端出现超时问题

带有协议缓冲区的Riak Python客户端出现超时问题,python,protocol-buffers,riak,Python,Protocol Buffers,Riak,当使用协议缓冲区连接到我的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, prot

当使用协议缓冲区连接到我的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'
回溯(最近一次呼叫最后一次):
文件“main_causing_exception.py”,第16行,在
结果=client.ping()
文件“C:\temp\venv\lib\site packages\riak\client\transport.py”,第127行,在包装器中
返回自我。\u并重试(池、thunk)
文件“C:\temp\venv\lib\site packages\riak\client\transport.py”,第69行,在\u中重试
返回fn(运输)
文件“C:\temp\venv\lib\site packages\riak\client\transport.py”,第125行,在thunk中
返回fn(自行、运输、*args、**kwargs)
文件“C:\temp\venv\lib\site packages\riak\client\operations.py”,第92行,ping格式
return-transport.ping()
文件“C:\temp\venv\lib\site packages\riak\transports\pbc\transport.py”,第95行,ping格式
msg\u代码,msg=self.\u请求(msg\u代码\u PING\u请求)
文件“C:\temp\venv\lib\site packages\riak\transports\pbc\connection.py”,第43行,在请求中
返回自我。接收消息(预期)
文件“C:\temp\venv\lib\site packages\riak\transports\pbc\connection.py”,第50行,在\u recv\u msg中
self._recv_pkt()
文件“C:\temp\venv\lib\site packages\riak\transports\pbc\connection.py”,第71行,在\u recv\u pkt中
%len(nmsglen))
riak.RIAKEROR:“套接字返回的短数据包长度为0-应为4”
如果我每隔30秒左右执行一次
client.ping()
,则不会发生错误,这表明我看到的是某种套接字保持活动的问题,但对于生产环境来说,这似乎不是一个足够健壮的解决方案

该错误仅在使用
pbc
协议设置时发生,在使用
http
配置的Riak Python客户端时,我从未见过它

我在Win7-64平台上(尽管错误也发生在我们的Ubuntu开发服务器上)在虚拟环境中使用Python 2.7.5,包括以下软件包和版本:

  • protobuf(2.4.1)
  • 里亚克(2.0.1)
  • 里亚克pb(1.4.1.1)

有没有关于发生了什么以及如何解决的想法?我是否以错误的方式使用Python Riak客户端?

您应该使用Riak库的更新版本


PBC传输中的函数有一个错误,在这里得到了解决:

我在Ubuntu 12.04上看到了与riak 2.0.2、riak pb 1.4.1.1和protobuf 2.4.1相同的问题。我不认为你用错了客户。不幸的是,我也没有找到一个健壮的解决方案(除了不使用pbc…)。您好-您能将此作为一个问题提交到GitHub上吗?