4

プロトコル バッファを使用して 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()と、エラーは発生しません。これは、私が見ているある種のソケットのキープアライブの問題であることを示していますが、これは運用環境に十分な堅牢なソリューションとは思えません。

このエラーは、プロトコル設定を使用している場合にのみ発生し、構成済みの Riak Python クライアントpbcを使用している場合は見たことがありません。http

次のパッケージとバージョンの仮想環境で、Win7-64 プラットフォーム (Ubuntu 開発サーバーでもエラーが発生します) で Python 2.7.5 を使用しています。

  • プロトブフ (2.4.1)
  • リアク (2.0.1)
  • riak-pb (1.4.1.1)

何が起こっているのか、それを解決する方法について何か考えはありますか? Python Riak Client の使い方が間違っていますか?

4

1 に答える 1