【问题标题】:Timeout problems with the Riak Python Client with protocol buffers带有协议缓冲区的 Riak Python 客户端的超时问题
【发布时间】:2013-11-02 13:59:44
【问题描述】:

当我使用协议缓冲区连接到我的 riak AWS 集群时,我看到 Python Riak 客户端的奇怪但一致的行为。这个简短的 python sn-p 会产生错误:

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 开发服务器上):

  • protobuf (2.4.1)
  • riak (2.0.1)
  • riak-pb (1.4.1.1)

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

【问题讨论】:

  • 我在带有 riak 2.0.2、riak-pb 1.4.1.1 和 protobuf 2.4.1 的 Ubuntu 12.04 上看到了同样的情况。我认为您没有以错误的方式使用客户端。不幸的是,我也没有找到一个可靠的解决方案(除了不使用 pbc ...)。
  • 你好 - 你能把它作为一个问题提交到 GitHub 上吗? github.com/basho/riak-python-client/issues/new

标签: python protocol-buffers riak


【解决方案1】:

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

PBC 传输中 send 函数出现错误,已在此处解决:https://github.com/basho/riak-python-client/issues/381

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多