Skip to content

Instantly share code, notes, and snippets.

@suma
Created March 18, 2013 02:23
Show Gist options
  • Save suma/5184562 to your computer and use it in GitHub Desktop.
Save suma/5184562 to your computer and use it in GitHub Desktop.
MessagePack RPCクライアントの振る舞い及びエラー処理

MessagePack RPCクライアントの振る舞い及びエラー処理

概要

調査する点

  • TCPの接続はどの段階で実行されるか

  • コンストラクタ(オブジェクト作成時) → 無し

  • RPC呼び出しを実行時 → 有り

  • 接続失敗したときの、再接続があるか

  • 調査対象のライブラリはどれも再接続の実装をしている

  • 接続試行回数後に、また接続を試行できるか否か

  • C++ → できる (回数ゼロにリセット)

  • Java → できそう(回数ゼロにリセット)、ただしcloseが呼ばれた後は再接続できない

  • Ruby → できる(回数ゼロにリセット)。TCPClientTransportがcloseされても大丈夫

  • Python → できる(回数ゼロにリセット)

  • トランスポート層のエラーにはどういった種類があるか

  • タイムアウト(接続・通信中)

  • いろいろ

  • MessagePack RPCクライアントの正しい使い方を習得する

  • 正ししエラー対処方法を理解する

対象

以下のライブラリと、TCP/IPを対象とする。

  • Ruby (msgpack-rpc v 0.5.1)
  • Python (msgpack-rpc-python v 0.3.2)
  • Java (org.msgpack.rpc v 0.7.0)
  • C++ (jubatus-msgpack-rpc v )

通信の接続及びリトライの調査

Ruby

  • コンストラクタ:接続しない
  • RPC呼び出し時に接続試行を行う
  • 接続失敗したときは再接続を繰り返し試す
  • 回数に制限有り :reconnect_limit
  • →回数を超えるとエラー: ConnectionTimeoutError::CODE, ["connection timed out"]

Python

  • RPC呼び出し時に接続の試行を行う
  • Rubyと同様に接続時に試行を行う
  • reconnect_limitを超えるとself._session.on_connect_failed(TransportError("Retry connection over the limit"))

Java

  • RPC呼び出し時に接続の試行を行う

  • 接続失敗したときは再接続を繰り返し試す

  • 回数に制限有りStreamClientConfigのgetReconnectionLimit

  • Session.transportConnectFailedが呼び出される

  • TODO: このとき例外が呼ばれるかはよくわからないので要調査

  • 一度closeしたら、再接続はしない

C++ (jubatus-msgpack-rpc)

  • RPC呼び出し時
  • 接続の試行を行う
  • 試行回数制限を超えたら接続エラー(connect_errorクラス)

C++ (msgpack-rpc) おまけ

  • 同様! のはず。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment