調査する点
-
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 )
- コンストラクタ:接続しない
- RPC呼び出し時に接続試行を行う
- 接続失敗したときは再接続を繰り返し試す
- 回数に制限有り :reconnect_limit
- →回数を超えるとエラー: ConnectionTimeoutError::CODE, ["connection timed out"]
- RPC呼び出し時に接続の試行を行う
- Rubyと同様に接続時に試行を行う
- reconnect_limitを超えるとself._session.on_connect_failed(TransportError("Retry connection over the limit"))
-
RPC呼び出し時に接続の試行を行う
-
接続失敗したときは再接続を繰り返し試す
-
回数に制限有りStreamClientConfigのgetReconnectionLimit
-
Session.transportConnectFailedが呼び出される
-
TODO: このとき例外が呼ばれるかはよくわからないので要調査
-
一度closeしたら、再接続はしない
- RPC呼び出し時
- 接続の試行を行う
- 試行回数制限を超えたら接続エラー(connect_errorクラス)
- 同様! のはず。