okuyamaプロトコル仕様表

okuaymaのオリジナルプロトコルの仕様を表にまとめした。
からり表が大きく見にくくなってしまいました...orz
以降okuyama側に変更があった場合もこの表をメンテナンスしてきます。


事前説明ですが、
1.各要素間のセパレータは","になります。
2.Encode指定という部分はBase64でのEncode指定を意味します。
  送信側でEncodeで○となっている部分はBase64エンコードしてから送信することを意味し、
  返却側はサーバからEncodeされた値が返されることを意味しますので、Decodeして使用してください。
3.追記
  2010/01/03:肝心なことを書き忘れてました。プロトコルの終端の区切りは"\r\n"です。
  2010/01/04:Valueにブランク(サイズ0の値)を指定したい場合はBase64エンコードをせずに"(B)"という文字列を指定してください。
                      okuyama側でブランクとして扱われます。
  2010/01/04:Key値にブランク(サイズ0の値)は指定できません。エラーとしてください。
  2010/01/04:Tag値に"(B)"を指定した場合は、okuyama側でTag指定なしとして処理されます。

メソッド名

処理内容
説明 サーバへ転送する値 サーバから返却される値
第1
要素
第2要素 第3要素 第4要素 第5要素 第6要素 第1
要素
第2要素 第3要素 第4要素
initClient

保存可能な最大サイズをMasterNodeへ問い合わせる
0















0
true
数値
Valueのbyte長




Encode ×





























0 0,true,1048576
setValue

値を保存する(Tagの有り無しで転送の第3要素が変化する)
1 Key値 Tag値
Tagを指定しない場合は"(B)"を連結する。存在する場合はTag文字列を":"をセパレータに連結する
分散ロック値
"0"固定
Value

1 "true" or "false" or "error"
正常に保存出来た場合は"true".なんだかの理由により論理的(サイズオーバーなど)に保存できない場合は"false".サーバ側でエラーの場合は"error"
"OK" or メッセージ
返却第2要素が"true"の場合は"OK"になる."false"や、"error"の場合はメッセージが格納される


Encode ×

(B)の場合は×
Tagが存在する場合は1Tag単位でエンコード

×




×
×
×





例1Tagなし)  1,ZGF0YXNhdmVrZXlfMA==,(B),0,c2F2ZWRhdGF2YWx1ZXN0cl8w

例2Tagあり)  1,a2V5MQ==,dGFnMQ==:dGFnMg==,0,dmFsdWUx
例1正常保存)  1,true,OK
例2Value値サイズオーバー)  1,false,Value Length Error
getValue

Keyを指定して値を取得
2 Key値







2 "true" or "false" or "error"
値が取得出来た場合は"true".取得できない、なんだかの理由により論理的(サイズオーバーなど)に取得できない場合は"false".サーバ側でエラーの場合は"error"
Value値 or メッセージ
返却第2要素が"true"の場合はValueになる."false"や、"error"の場合はメッセージが格納される


Encode ×













×
×
○ or ×
返却値の第2要素が"true"の場合は○.それ意外は×






2,a2V5MQ== 例1値あり)  2,true,dmFsdWUx
例2値なし)  2,false,
例3Key値サイズオーバー)  2,false,Key Length Error
getTagKeys

Tagを指定することでKey値を取得する
3 Tag値 "true" or "false"
削除済みのKey-Valueセットの扱い.trueを指定すると、削除済みでもKey値は返される
falseを指定すると、削除済みのKey値は返されない.






4 "true" or "false" or "error"
値が取得出来た場合は"true".取得できない、なんだかの理由により論理的(サイズオーバーなど)に取得できない場合は"false".サーバ側でエラーの場合は"error"
Value値 or メッセージ
返却第2要素が"true"の場合は同じTagが打たれているKey値の連結文字列になるになる.セパレータは":"
"false"や、"error"の場合はメッセージが格納される


Encode ×

×









×
×
○ or ×
返却値の第2要素が"true"の場合は○.それ意外は×






3,dGFnMQ==,true 例1Key値あり)  4,true,dGFnc2FtcGxlZGF0YWtleV8w:a2V5MQ==:a2V5Mw==
例2値なし)  4,false,
例3Tag値サイズオーバー)  4,false,Tag Length Error
removeValue

Key値を指定することでKey-Valueセットを削除する
5 Key値 分散ロック値
"0"固定






5 "true" or "false" or "error"
値が削除出来た場合は"true".取得できない、なんだかの理由により論理的(サイズオーバーなど)に取得できない場合は"false".サーバ側でエラーの場合は"error"

Value値 or メッセージ
返却第2要素が"true"の場合は削除対象のValue
"false"や、"error"の場合はメッセージが格納される


Encode ×

×









×
×
○ or ×
返却値の第2要素が"true"の場合は○.それ意外は×






5,ZGF0YXNhdmVrZXlfMA==,0 例1Key値あり)  5,true,c2F2ZWRhdGF2YWx1ZXN0cl8w
例2値なし)  5,false,
例3Key値サイズオーバー)  5,false,Key Length Error
setNewValue

値を保存する(Tagの有り無しで転送の第3要素が変化する)
既に同値のKeyがサーバに存在する場合は失敗する
memcachedの"add"命令に相当する
6 Key値 Tag値
Tagを指定しない場合は"(B)"を連結する。存在する場合はTag文字列を":"をセパレータに連結する
分散ロック値
"0"固定
Value

6 "true" or "false" or "error"
正常に保存出来た場合は"true".なんだかの理由により論理的(既にKeyが存在する.サイズオーバーなど)に保存できない場合は"false".サーバ側でエラーの場合は"error"
"OK" or メッセージ
返却第2要素が"true"の場合は"OK"になる."false"や、"error"の場合はメッセージが格納される



Encode ×

(B)の場合は×
Tagが存在する場合は1Tag単位でエンコード

×




×
×
×





例1Tagなし)  6,a2V5MQ==,(B),0,dmFsdWUx
例2Tagあり)  6,a2V5Mw==,dGFnMQ==:dGFnMg==:dGFnMw==,0,dmFsdWUz
例1成功)  6,true,OK
例2失敗)  6,false,NG:Data has already been registered
getValueVersionCheck

値を取得すると同時に該当Key-ValueセットのVersionNoも返す
memcachedの"gets"命令に相当する
15
Key値










15
"true" or "false" or "error"
値が取得出来た場合は"true".取得できない、なんだかの理由により論理的(サイズオーバーなど)に取得できない場合は"false".サーバ側でエラーの場合は"error"

Value値 or メッセージ
返却第2要素が"true"の場合はValueになる."false"や、"error"の場合はメッセージが格納される
VersionNo値(数値)
Encode ×













×
×

×


例1)  15,a2V5MQ==
例1取得成功)  15,true,dmFsdWUx,0
例2取得成功VersionNo値が"2")  15,true,dmFsdWUx,2
例3値なし)  15,false,,
setValueVersionCheck

Key-Valueのセットを更新する.この際に、VersionNoを同時に渡し、VersionNoがサーバ側で変更されていない場合のみ処理が成功する
memcachedの"cas"命令に相当する
16
Key値 Tag値
Tagを指定しない場合は"(B)"を連結する。存在する場合はTag文字列を":"をセパレータに連結する
分散ロック値
"0"固定
Value VersionNo値
getValueVersionCheckで取得した値
16
"true" or "false" or "error"
正しく更新出来た場合は"true".更新出来ない、なんだかの理由により論理的(サイズオーバーなど)に取得できない場合は"false".サーバ側でエラーの場合は"error"

"OK" or メッセージ
返却第2要素が"true"の場合は"OK"になる."false"や、"error"の場合はメッセージが格納される



Encode ×

(B)の場合は×
Tagが存在する場合は1Tag単位でエンコード

×

×
×
×






例1Tagなし)  16,a2V5MQ==,(B),0,dmFsdWUx,1
例2Tagあり)  16,a2V5MQ==,dGFnMQ==:dGFnMg==:dGFnOTk=,0,dmFsdWUx,3
例1更新成功)  16,true,OK
例2更新失敗)  16,false,NG:Data has already been updated