Skip to content
lamatsujun edited this page Mar 29, 2012 · 17 revisions

Castoro::Client

Home > Components >

ページ目次

機能

新規 Basket 作成

Client は Gateway を通じて Peer へ新規 Basket を作成する。
新規 Basket 作成は以下の手順にて行われる。

  1. Gateway へ新規 Basket 作成可能な Peer を問合せる。
  2. Gateway から受けとった Peer へ Basket 作成を要求する。
  3. Peer から Basket 作成通知を受信後、NFS あるいは HTTP にてファイルを配置する。
  4. ファイル配置完了後、Peer へ Basket 作成完了を要求する。
  5. Peer から Basket 作成完了通知を受信にて新規 Basket 作成が完了する。

また Gateway を介さずに、Peer を直接指定して Basket 作成を依頼する機能 ( 後述する #create_direct ) も存在する。
Basket 作成時にエラーが発生した場合は CANCEL を行う。後述の「castoro-client ログ」に、エラー出力の例を示す。
CANCEL のフローは下記に示す通りである。

  • ファイル配置中のエラーは、他に接続可能な Peer にリトライする。
  • FINALIZE 中のタイムアウトは、CANCEL を発行し場合により Basket 取得可能か確認する。
  • FINALIZE 中にエラー発生の場合は、エラー出力を行う。

既存 Basket 参照

Client は Gateway へ該当 Basket の問合せを行い、Basket 情報を取得する。既存 Basket 参照は以下の手順で行われる。

  1. Gateway へ Basket を問合せる
    • Basket 情報をキャッシュしている場合
      • Gateway から Basket 情報を Client に返信する
    • Basket 情報をキャッシュしていない場合
      • Gateway 配下の Peer へ Basket を問合せる
        • Basket を所有する Peer から Client へ返信する
  2. Gateway あるいは Basket を所有する Peer から問合せ結果を受信する

既存 Basket 削除

Client は Gateway から得られる結果を元に該当 Basket を削除する。既存 Basket 削除は以下の手順で行われる。

  1. Gateway へ既存 Basket 参照を行う
  2. Basket を所有する Peer に対して該当 Basket の削除を要求する
  3. Peer から該当 Basket 削除完了通知を受信して既存 Basket の削除が完了する

導入

インストール

Gem インストール要件

  • Ruby バージョン
    • Ruby 1.8.6 (以上
  • 依存 gem

Gem インストール

  • 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

新規 Basket 作成

  • #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 参照

  • 指定 Basket (1.1.1) を取得する。
    require “castoro-client”
    Castoro::Client.open({}) { |client|
      res = client.get(“1.1.1”)
    }

既存 Basket 削除

  • 指定 Basket (1.1.1) を削除する。
    require “castoro-client”
    Castoro::Client.open({}) { |client|
      client.delete(“1.1.1”)
    }

Gem パッケージ

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 テスト実行用ファイル

ページTOPへ

Clone this wiki locally