-
Notifications
You must be signed in to change notification settings - Fork 3
Castoro::Client
lamatsujun edited this page Mar 29, 2012
·
17 revisions
Home > Components >
Client は Gateway を通じて Peer へ新規 Basket を作成する。
新規 Basket 作成は以下の手順にて行われる。
- Gateway へ新規 Basket 作成可能な Peer を問合せる。
- Gateway から受けとった Peer へ Basket 作成を要求する。
- Peer から Basket 作成通知を受信後、NFS あるいは HTTP にてファイルを配置する。
- ファイル配置完了後、Peer へ Basket 作成完了を要求する。
- Peer から Basket 作成完了通知を受信にて新規 Basket 作成が完了する。
また Gateway を介さずに、Peer を直接指定して Basket 作成を依頼する機能 ( 後述する #create_direct ) も存在する。
Basket 作成時にエラーが発生した場合は CANCEL を行う。後述の「castoro-client ログ」に、エラー出力の例を示す。
CANCEL のフローは下記に示す通りである。
- ファイル配置中のエラーは、他に接続可能な Peer にリトライする。
- FINALIZE 中のタイムアウトは、CANCEL を発行し場合により Basket 取得可能か確認する。
- FINALIZE 中にエラー発生の場合は、エラー出力を行う。
Client は Gateway へ該当 Basket の問合せを行い、Basket 情報を取得する。既存 Basket 参照は以下の手順で行われる。
- Gateway へ Basket を問合せる
- Basket 情報をキャッシュしている場合
- Gateway から Basket 情報を Client に返信する
- Basket 情報をキャッシュしていない場合
- Gateway 配下の Peer へ Basket を問合せる
- Basket を所有する Peer から Client へ返信する
- Gateway 配下の Peer へ Basket を問合せる
- Basket 情報をキャッシュしている場合
- Gateway あるいは Basket を所有する Peer から問合せ結果を受信する
Client は Gateway から得られる結果を元に該当 Basket を削除する。既存 Basket 削除は以下の手順で行われる。
- Gateway へ既存 Basket 参照を行う
- Basket を所有する Peer に対して該当 Basket の削除を要求する
- Peer から該当 Basket 削除完了通知を受信して既存 Basket の削除が完了する
- Ruby バージョン
- Ruby 1.8.6 (以上
- 依存 gem
- json (1.2.3 以上
- Castoro::Common
- gem のインストールは以下のコマンドで実施する。
gem install castoro-client
Castoro::Client を使用するには、下記の2つの方法がある。
- インスタンス化する
require “castoro-client” client = Castoro::Client.new({}) ※ Client の操作 (#open, #close, #create, #get, #delete 等) を記述する。
- クラスメソッド「 self.open 」を使う
require “castoro-client” Castoro::Client.open({}) { |client| ※ Client の操作 (#create, #get, #delete 等) を記述する。 }
Client はオブジェクト生成時にオプションが設定可能である。オプションは ruby のハッシュ形式で指定する。
後述の設定項目を元に「 key => value 」の形式で設定できる。記載がない項目は、デフォルトの設定が適用される。
例.) my_host を「 192.168.1.1 」に設定する場合
- インスタンス化する場合
options = { “my_host” => “192.168.1.1” } client = Castoro::Client.new(options)
- クラスメソッドを使用する場合
options = { “my_host” => “192.168.1.1” } Castoro::Client.open(options) { |client| }
- client のオプション設定
各項目については、次表にまとめる。
設定項目 | 初期値 | 説明 |
my_host | IPSocket::getaddress(Socket::gethostname) | 自ホストの IP アドレス |
my_ports | (30003..30099) | 自ホストへの UDP パケット待受ポート |
expire | 2.0 | UDP を使用したリクエストのレスポンス待受時間 |
request_interval | 0.20(sec) | 次の Gateway へのリクエスト間隔時間 |
gateways | 127.0.0.1:30111 | Gateway のホスト名及びポート番号 |
peer_port | 30111 | Peer ポート番号 |
tcp_connect_expire | 0.05(sec) | Peer へのリクエストを送信する TCP コネクションを維持する時間 |
tcp_connect_retry | 1 | Peer へのリクエストリトライ回数 |
tcp_request_expire | 5.00(sec) | Peer へのリクエスト完了までの時間 |
logger | Logger#new(STDOUT) | ログ出力に使用する Logger |
- #create メソッドを用いて作成する場合
require “castoro-client” client = Castoro::Client.new client.open client.create(“1.1.1”, “length” => 100, “class” => :original ) { |host, path, options| ※ 作成した Basket に対する動作を記述する。 } client.close
- #create_direct メソッドを用いて、指定 Peer に作成する場合
require “castoro-client” client = Castoro::Client.new client.open client.create_direct(“peer100”, “1.1.1”, “length” => 100, “class” => :original ) { |host, path, options| ※ 作成した Basket に対しての動作を記述する。 } client.close
- 指定 Basket (1.1.1) を取得する。
require “castoro-client” Castoro::Client.open({}) { |client| res = client.get(“1.1.1”) }
- 指定 Basket (1.1.1) を削除する。
require “castoro-client” Castoro::Client.open({}) { |client| client.delete(“1.1.1”) }
Client の Gem パッケージの内容物は以下の通り。
castoro-client/ :Castoro-Client コンポーネントのホームディレクトリ ├ COPYING.LESSER :GNU ライセンス ├ History.txt :更新履歴 ├ LICENSE :ライセンス情報 ├ README.textile :Client に関するドキュメント ├ Rakefile :rake コマンド用ファイル └─ lib/ :クラスライブラリ用ディレクトリ │ ├ castoro-client.rb :依存ライブラリ load 用ファイル │ └─ castoro-client/ :Castoro-Client を構成するクラスライブラリ用ディレクトリ │ ├ client.rb :Client クラスの定義ファイル │ └ timeslide_sender.rb :Client::TimeslideSender クラス定義ファイル └─ pkg/ :各バージョンの gem パッケージ用ディレクトリ │ ├ castoro-client-0.0.10.gem │ ├ ・ │ ├ ・ │ └ castoro-client-0.2.0.gem └─ spec/ :テストコード ( RSpec ) 用ディレクトリ │ ├ client_private_method_spec.rb :Client クラス内部メソッドの単体テストコード │ ├ client_public_method_spec.rb :Client クラス外部メソッドの単体テストコード │ ├ client_spec.rb :Client クラスの単体テストコード │ ├ spec_helper.rb :RSpec 実行時の helper コード │ ├ timeslide_sender_spec.rb :Client::TimeslideSender クラスの単体テストコード │ └ udpmock.rb :テスト用 Castoro-Gateway コンポーネントのモック定義 └─ tasks/ :rake テスト用ディレクトリ └ rspec.rake :rake テスト実行用ファイル