Javaで実装された分散キーバリューストア(KVS)です
Githubへ移行しました。 https://github.com/kobedigitallabo/okuyama
今後の更新はGithub上にて行います。 こちらにある過去リリース分はそのまま維持します。
[New - 新機能追加、不具合対応]
[[リリース Ver 0.9.5 - (2013/09/20)]]
■各DataNodeが保存しているKeyの一覧を取得する機能を追加
DataNodeが持つ全てのKeyとTagの一覧を取得する機能をUtilClientに追加しました。
各DataNodeに接続し、当該機能を実行することでKeyの一覧が改行区切りで標準出力に出力される。
利用方法は以下
使い方)
$ java -classpath ./:./lib/javamail-1.4.1.jar:./okuyama-0.9.5.jar okuyama.imdst.client.UtilClient keylist datanodeip:5553
引数説明
1)keylist : 命令(固定)
2)datanodeip:5553 : Keyを確認したい、DataNodeのIPアドレスとポート番号を"IP:Port番号"のフォーマットで指定
※注意:Tag名及び、List内のデータは出力されない。
■List型を追加
文字型を要素とする双方向型リストの機能を追加。先頭(左側)及び、末尾(右側)への値の追加が常に一定時間となり、先頭及び、末尾から値を削除しながら取り出すことが出来る
この操作もList内の要素数に関係なく常に同じ処理時間=O(1)となる。
また、List内の要素番号(Index)指定での任意の位置からの値の取り出しが可能である。この命令の処理時間はリストの要素数に対して線形的に時間コスト=O(n)がかかる。
Listの現在の要素数を取得することも可能でありこの命令の時間は要素数に関係なく常に一定=O(1)である。
Listの要素数の最大は(2の63乗-1)である
以下はOkuyamaClient上のそれぞれのメソッドのインターフェースである。
・String[] createListStruct(String listName)
->リスト作成メソッド。ここで指定したList名にて以降のメソッドはListへアクセスする
・String[] listLPush(String listName, String pushData)
->指定したリストの先頭(左端)へ値を追加する。
listNameへはcreateListStructメソッドにて作成したリスト名を指定
pushDataのサイズ上限はokuyamaのValueのMaxサイズである
・String[] listRPush(String listName, String pushData)
->指定したリストの末尾(右端)へ値を追加する。
listNameへはcreateListStructメソッドにて作成したリスト名を指定
pushDataのサイズ上限はokuyamaのValueのMaxサイズである
・String[] listIndex(String listName, long index)
->指定したリストの指定した位置から要素を取得する。
listNameへはcreateListStructメソッドにて作成したリスト名を指定
indexへは取得したい位置を指定。indexは0起算である。要素数<index、リスト作成前の場合結果無しが返る。
・String[] listLPop(String listName)
->指定したリストの先頭(左端)から値を取得後、削除を行う。
リストは左に1つ詰めらる。
本メソッドはokuyama中でアトミックに実行されるため、
同一要素が複数のクライアントへ返ることはない。
listNameへはcreateListStructメソッドにて作成したリスト名を指定
要素がない場合、リスト作成前の場合結果無しが返る。
・String[] listRPop(String listName)
->指定したリストの末尾(右端)から値を取得後、削除を行う。
リストは右に1つ詰めらる。
本メソッドはokuyama中でアトミックに実行されるため、
同一要素が複数のクライアントへ返ることはない。
listNameへはcreateListStructメソッドにて作成したリスト名を指定
要素がない場合、リスト作成前の場合結果無しが返る。
・Object[] listLen(String listName)
->指定したリストの要素数を返す。
listNameへはcreateListStructメソッドにて作成したリスト名を指定
リスト作成前の場合結果無しが返る。
■リカバリ機能を強化
従来リカバリ中にMainMasterNodeが停止するとDataNodeのリカバリ処理が中途半端に終了してしまう問題が報告されました。
その問題への対処として、リカバリ途中のDataNodeを判断し再度切り離す機能を追加。また、リカバリが必要なDataNodeを起動する際に
起動引数として"-rr true"として起動することで、起動前が障害で停止したことに関係なくリカバリが行わるようになった。
例えばMasterNodeを起動する前にDataNodeを起動してしまうと、そのDataNodeはデータリカバリ対象にならなかった。
それがこのオプションを指定することで必ずリカバリされる。
DataNode起動引数に以下を追加
引数名 -rr
記述:true/false
意味:true=かならずリカバリ対象となる/ false=リカバリを自動判断する
省略時:false
設定例: -rr true
■MasterNodeがデータ復旧を行わないオプションを追加
MasterNodeはMainMasterNodeに昇格した場合、停止中のDataNodeが復旧すると必ずリカバリを行なっていた。
本オプションを指定するとMainMasterNodeに昇格した場合もリカバリを行わなくなる。
NWが断絶し、スプリットブレインが発生した際に、一時的にMainMasterNodeが2台になりNW復旧時にリカバリを双方のMasterNodeが
実行するのを防ぐのに有効である。
そのためにはokuyama環境作成時に決めたMainMasterNodeとそのMasterNodeと強いNWで結ばれている、MasterNode以外はこの
オプションを指定して起動することで実現できる。
MasterNode起動引数に以下を追加
引数名 -npmmns
記述:true/false
意味:true=リカバリを行わないMasterNode / false=リカバリを行うMasterNode
省略時:false
設定例: -npmmns true
■MasterNodeの孤立チェック機能追加
icmpで指定されたアドレスにpingを行い全てに通らない場合は自身をshutdownする。
本機能はNW分断等により、MasterNodeと一部のDataNodeが孤立してしまった場合に
処理を受け付けなくするための処置を行うことを可能とする。
設定方法はMasterNodeの起動時オプションで指定する。
MasterNode起動引数に以下を追加
引数名 -smnca
記述:確認アドレス記述。複数個の場合はカンマ(,)区切りで記述
意味:記述された全てのアドレスにicmpで到達出来ない場合に自身をshutdownする
省略時:チェックを行わない(デフォルト)
設定例: -smnca 192.168.1.100,192.168.2.101
■起動時に指定されて起動オプションを起動ログに出力する機能を追加
以下のフォーマットで出力される。
----------------
Boot arguments
{パラメータ}
----------------
■性能向上及び、バグ修正