• R/O
  • SSH
  • HTTPS

okuyama: 提交


Commit MetaInfo

修訂1038 (tree)
時間2013-09-19 19:17:47
作者okuyamaoo

Log Message

ReadMeへコメン追加。ListテストによりバグFix

Change Summary

差異

--- trunk/src/test/job/MethodPatterTestJob.java (revision 1037)
+++ trunk/src/test/job/MethodPatterTestJob.java (revision 1038)
@@ -2137,8 +2137,7 @@
21372137 errorFlg = true;
21382138 }
21392139 }
2140-Object[] test = okuyamaClient.listLen(listName);
2141-System.out.println(listName+" size=" + test[1]);
2140+
21422141 // Indexテスト
21432142 for (long idx = 0; idx < 5000L; idx++) {
21442143
@@ -2167,8 +2166,6 @@
21672166 errorFlg = true;
21682167 }
21692168 }
2170-test = okuyamaClient.listLen(listName);
2171-System.out.println(listName+" size=" + test[1]);
21722169
21732170 // Indexテスト
21742171 for (long idx = 0; idx < 5000L; idx++) {
@@ -2205,8 +2202,108 @@
22052202 idxTest2++;
22062203 }
22072204
2205+ // LPOPテスト
2206+ for (long idx = 0; idx < 5000L; idx++) {
22082207
2208+ String[] retTmp = okuyamaClient.listLPop(listName);
2209+ if (!retTmp[0].equals("true")) {
2210+ System.out.println("List error8 =" + listName);
2211+ System.out.println(retTmp[1]);
2212+ errorFlg = true;
2213+ } else {
2214+ if (!retTmp[1].equals("Llistdata."+(4999-idx))) {
2215+ System.out.println("List error8-1 =" + listName);
2216+ System.out.println(retTmp[1]);
2217+ errorFlg = true;
2218+ }
2219+ }
2220+ }
2221+ // LPOPテスト
2222+ idxTest2 = 0;
2223+ for (long idx = 5000L; idx < 10000L; idx++) {
2224+
2225+ String[] retTmp = okuyamaClient.listLPop(listName);
2226+ if (!retTmp[0].equals("true")) {
2227+ System.out.println("List create error9 =" + listName);
2228+ System.out.println(retTmp[1]);
2229+ errorFlg = true;
2230+ } else {
2231+ if (!retTmp[1].equals("Rlistdata."+idxTest2)) {
2232+ System.out.println("List create error9-1 =" + listName);
2233+ System.out.println(retTmp[1]);
2234+ errorFlg = true;
2235+ }
2236+ }
2237+ idxTest2++;
2238+ }
22092239
2240+ String[] nullRetTmp = okuyamaClient.listLPop(listName);
2241+ if (!nullRetTmp[0].equals("false")) {
2242+ System.out.println("List create error10 =" + listName);
2243+ System.out.println(nullRetTmp[1]);
2244+ errorFlg = true;
2245+ }
2246+
2247+
2248+ // LPUSH
2249+ for (int idx = 0; idx < 5000; idx++) {
2250+ String[] retTmp = okuyamaClient.listLPush(listName, "Llistdata."+idx);
2251+
2252+ if (!retTmp[0].equals("true")) {
2253+
2254+ System.out.println("List create error3 =" + listName);
2255+ System.out.println(retTmp[1]);
2256+ errorFlg = true;
2257+ }
2258+ }
2259+
2260+ // RPUSH
2261+ for (int idx = 0; idx < 5000; idx++) {
2262+ String[] retTmp = okuyamaClient.listRPush(listName, "Rlistdata."+idx);
2263+
2264+ if (!retTmp[0].equals("true")) {
2265+
2266+ System.out.println("List create error5 =" + listName);
2267+ System.out.println(retTmp[1]);
2268+ errorFlg = true;
2269+ }
2270+ }
2271+
2272+ // RPOPテスト
2273+ idxTest2 = 9999;
2274+ for (long idx = 5000L; idx < 10000L; idx++) {
2275+
2276+ String[] retTmp = okuyamaClient.listRPop(listName);
2277+ if (!retTmp[0].equals("true")) {
2278+ System.out.println("List create error11 =" + listName);
2279+ System.out.println(retTmp[1]);
2280+ errorFlg = true;
2281+ } else {
2282+ if (!retTmp[1].equals("Rlistdata."+(idxTest2-idx))) {
2283+ System.out.println("List create error11-1 =" + listName);
2284+ System.out.println(retTmp[1]);
2285+ errorFlg = true;
2286+ }
2287+ }
2288+ }
2289+
2290+ // RPOPテスト
2291+ for (long idx = 4999; idx > -1L; idx--) {
2292+
2293+ String[] retTmp = okuyamaClient.listRPop(listName);
2294+ if (!retTmp[0].equals("true")) {
2295+ System.out.println("List error12 =" + listName);
2296+ System.out.println(retTmp[1]);
2297+ errorFlg = true;
2298+ } else {
2299+ if (!retTmp[1].equals("Llistdata."+(4999L-idx))) {
2300+ System.out.println("List error12-1 =" + listName);
2301+ System.out.println("RealData=[" + retTmp[1] + "]!=" + " TestPattern[Llistdata."+(4999L-idx)+"]");
2302+ errorFlg = true;
2303+ }
2304+ }
2305+ }
2306+
22102307 long endTime = new Date().getTime();
22112308 System.out.println("List Method= " + (endTime - startTime) + " milli second");
22122309
--- trunk/src/okuyama/imdst/helper/KeyNodeWatchHelper.java (revision 1037)
+++ trunk/src/okuyama/imdst/helper/KeyNodeWatchHelper.java (revision 1038)
@@ -645,7 +645,12 @@
645645 } else {
646646
647647 logger.info("Recover Step - 17");
648+ super.setDeadNode(nodeInfo, 1, null, true);
649+ String[] diffMissNodeDt = nodeInfo.split(":");
650+ StatusUtil.setNodeStatusDt(diffMissNodeDt[0] + ":" + diffMissNodeDt[1], "Node Check Dead");
651+
648652 throw new Exception("Diff Mode Off Error Ret=[" + diffModeOffRet + "]");
653+
649654 }
650655
651656 logger.info("Recover Step - 18");
--- trunk/src/okuyama/imdst/util/KeyMapManager.java (revision 1037)
+++ trunk/src/okuyama/imdst/util/KeyMapManager.java (revision 1038)
@@ -3427,8 +3427,8 @@
34273427 key = (String)obj.getKey();
34283428 try {
34293429 String decodeKey = new String(BASE64DecoderStream.decode(key.getBytes()));
3430- if (decodeKey.indexOf("{imdst_") != 0) {
3431- pw.println(decodeKey);
3430+ if (decodeKey.indexOf("{imdst_") != 0) { // TagとListは除外
3431+ pw.println(key);
34323432 pw.flush();
34333433 }
34343434 } catch(Exception ee){}
--- trunk/src/okuyama/imdst/client/OkuyamaClient.java (revision 1037)
+++ trunk/src/okuyama/imdst/client/OkuyamaClient.java (revision 1038)
@@ -9593,7 +9593,7 @@
95939593
95949594 /**
95959595 * List構造のサイズを取得する.<br>
9596- * Listを事前に作成していない場合はerrorとなる<br>
9596+ * Listを事前に作成していない場合はfalseとなる<br>
95979597 *
95989598 * @param listNameStr List名
95999599 * @return Object[] 要素1(取得成否):"true"=成功 or "false"=リスト無し or "error"=エラー, 要素2(成功の場合は結果(Long値)、falseの場合はnull、errorの場合はエラー等のメッセージ(String値))
--- trunk/ReadMe-UTF.txt (revision 1037)
+++ trunk/ReadMe-UTF.txt (revision 1038)
@@ -22,7 +22,67 @@
2222 ・改修履歴
2323 ========================================================================================================
2424 [New - 新機能追加、不具合対応]
25-[[リリース Ver 0.9.5 - (2013/04/XX)]]
25+[[リリース Ver 0.9.5 - (2013/09/20)]]
26+
27+■各DataNodeが保存しているKeyの一覧を取得する機能を追加
28+ DataNodeが持つ全てのKeyとTagの一覧を取得する機能をUtilClientに追加しました。
29+ 各DataNodeに接続し、当該機能を実行することでKeyの一覧が改行区切りで標準出力に出力される。
30+ 利用方法は以下
31+ 使い方)
32+ $ java -classpath ./:./lib/javamail-1.4.1.jar:./okuyama-0.9.5.jar okuyama.imdst.client.UtilClient keylist datanodeip:5553
33+ 引数説明
34+ 1)keylist : 命令(固定)
35+ 2)datanodeip:5553 : Keyを確認したい、DataNodeのIPアドレスとポート番号を"IP:Port番号"のフォーマットで指定
36+ ※注意:Tag名及び、List内のデータは出力されない。
37+
38+■List型を追加
39+ 文字型を要素とする双方向型リストの機能を追加。先頭(左側)及び、末尾(右側)への値の追加が常に一定時間となり、先頭及び、末尾から値を削除しながら取り出すことが出来る
40+ この操作もList内の要素数に関係なく常に同じ処理時間=O(1)となる。
41+ また、List内の要素番号(Index)指定での任意の位置からの値の取り出しが可能である。この命令の処理時間はリストの要素数に対して線形的に時間コスト=O(n)がかかる。
42+ Listの現在の要素数を取得することも可能でありこの命令の時間は要素数に関係なく常に一定=O(1)である。
43+ Listの要素数の最大は(2の63乗-1)である
44+ 以下はOkuyamaClient上のそれぞれのメソッドのインターフェースである。
45+
46+ ・String[] createListStruct(String listName)
47+ ->リスト作成メソッド。ここで指定したList名にて以降のメソッドはListへアクセスする
48+
49+ ・String[] listLPush(String listName, String pushData)
50+ ->指定したリストの先頭(左端)へ値を追加する。
51+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
52+ pushDataのサイズ上限はokuyamaのValueのMaxサイズである
53+
54+ ・String[] listRPush(String listName, String pushData)
55+ ->指定したリストの末尾(右端)へ値を追加する。
56+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
57+ pushDataのサイズ上限はokuyamaのValueのMaxサイズである
58+
59+ ・String[] listIndex(String listName, long index)
60+ ->指定したリストの指定した位置から要素を取得する。
61+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
62+ indexへは取得したい位置を指定。indexは0起算である。要素数<index、リスト作成前の場合結果無しが返る。
63+
64+ ・String[] listLPop(String listName)
65+ ->指定したリストの先頭(左端)から値を取得後、削除を行う。
66+ リストは左に1つ詰めらる。
67+ 本メソッドはokuyama中でアトミックに実行されるため、
68+ 同一要素が複数のクライアントへ返ることはない。
69+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
70+ 要素がない場合、リスト作成前の場合結果無しが返る。
71+
72+ ・String[] listRPop(String listName)
73+ ->指定したリストの末尾(右端)から値を取得後、削除を行う。
74+ リストは右に1つ詰めらる。
75+ 本メソッドはokuyama中でアトミックに実行されるため、
76+ 同一要素が複数のクライアントへ返ることはない。
77+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
78+ 要素がない場合、リスト作成前の場合結果無しが返る。
79+
80+ ・Object[] listLen(String listName)
81+ ->指定したリストの要素数を返す。
82+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
83+ リスト作成前の場合結果無しが返る。
84+
85+
2686 ■リカバリ機能を強化
2787 従来リカバリ中にMainMasterNodeが停止するとDataNodeのリカバリ処理が中途半端に終了してしまう問題が報告されました。
2888 その問題への対処として、リカバリ途中のDataNodeを判断し再度切り離す機能を追加。また、リカバリが必要なDataNodeを起動する際に
@@ -37,18 +97,7 @@
3797 省略時:false
3898 設定例: -rr true
3999
40-■各DataNodeが保存しているKeyの一覧を取得する機能を追加
41- DataNodeが持つ全てのKeyとTagの一覧を取得する機能をUtilClientに追加しました。
42- 各DataNodeに接続し、当該機能を実行することでKeyの一覧が開業区切りで標準出力に出力される。
43- 利用方法は以下
44- 使い方)
45- $ java -classpath ./:./lib/javamail-1.4.1.jar:./okuyama-0.9.5.jar okuyama.imdst.client.UtilClient keylist datanodeip:5553
46- 引数説明
47- 1)keylist : 命令(固定)
48- 2)datanodeip:5553 : Keyを確認したい、DataNodeのIPアドレスとポート番号を"IP:Port番号"のフォーマットで指定
49- ※注意:Tagに関しては内部では1つのTagが複数個に分割されて保持されているため、複数個のTagが出力されることになるので注意が必要である。
50100
51-
52101 ■MasterNodeがデータ復旧を行わないオプションを追加
53102 MasterNodeはMainMasterNodeに昇格した場合、停止中のDataNodeが復旧すると必ずリカバリを行なっていた。
54103 本オプションを指定するとMainMasterNodeに昇格した場合もリカバリを行わなくなる。
@@ -78,6 +127,7 @@
78127 省略時:チェックを行わない(デフォルト)
79128 設定例: -smnca 192.168.1.100,192.168.2.101
80129
130+
81131 ■起動時に指定されて起動オプションを起動ログに出力する機能を追加
82132 以下のフォーマットで出力される。
83133 ----------------
@@ -85,7 +135,9 @@
85135 {パラメータ}
86136 ----------------
87137
88-
138+■性能向上及び、バグ修正
139+
140+
89141 ========================================================================================================
90142 [New - 新機能追加、不具合対応]
91143 [[リリース Ver 0.9.4 - (2012/12/05)]]
--- trunk/ReadMe.txt (revision 1037)
+++ trunk/ReadMe.txt (revision 1038)
@@ -22,14 +22,69 @@
2222 ・改修履歴
2323 ========================================================================================================
2424 [New - 新機能追加、不具合対応]
25-[[リリース Ver 0.9.5 - (2013/04/XX)]]
26-■データ構造としてリスト構造を追加
27- Key-Value+Tag以外に新たにリスト構造を追加しました。
25+[[リリース Ver 0.9.5 - (2013/09/20)]]
2826
27+■各DataNodeが保存しているKeyの一覧を取得する機能を追加
28+ DataNodeが持つ全てのKeyとTagの一覧を取得する機能をUtilClientに追加しました。
29+ 各DataNodeに接続し、当該機能を実行することでKeyの一覧が改行区切りで標準出力に出力される。
30+ 利用方法は以下
31+ 使い方)
32+ $ java -classpath ./:./lib/javamail-1.4.1.jar:./okuyama-0.9.5.jar okuyama.imdst.client.UtilClient keylist datanodeip:5553
33+ 引数説明
34+ 1)keylist : 命令(固定)
35+ 2)datanodeip:5553 : Keyを確認したい、DataNodeのIPアドレスとポート番号を"IP:Port番号"のフォーマットで指定
36+ ※注意:Tag名及び、List内のデータは出力されない。
2937
38+■List型を追加
39+ 文字型を要素とする双方向型リストの機能を追加。先頭(左側)及び、末尾(右側)への値の追加が常に一定時間となり、先頭及び、末尾から値を削除しながら取り出すことが出来る
40+ この操作もList内の要素数に関係なく常に同じ処理時間=O(1)となる。
41+ また、List内の要素番号(Index)指定での任意の位置からの値の取り出しが可能である。この命令の処理時間はリストの要素数に対して線形的に時間コスト=O(n)がかかる。
42+ Listの現在の要素数を取得することも可能でありこの命令の時間は要素数に関係なく常に一定=O(1)である。
43+ Listの要素数の最大は(2の63乗-1)である
44+ 以下はOkuyamaClient上のそれぞれのメソッドのインターフェースである。
3045
46+ ・String[] createListStruct(String listName)
47+ ->リスト作成メソッド。ここで指定したList名にて以降のメソッドはListへアクセスする
48+
49+ ・String[] listLPush(String listName, String pushData)
50+ ->指定したリストの先頭(左端)へ値を追加する。
51+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
52+ pushDataのサイズ上限はokuyamaのValueのMaxサイズである
53+
54+ ・String[] listRPush(String listName, String pushData)
55+ ->指定したリストの末尾(右端)へ値を追加する。
56+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
57+ pushDataのサイズ上限はokuyamaのValueのMaxサイズである
58+
59+ ・String[] listIndex(String listName, long index)
60+ ->指定したリストの指定した位置から要素を取得する。
61+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
62+ indexへは取得したい位置を指定。indexは0起算である。要素数<index、リスト作成前の場合結果無しが返る。
63+
64+ ・String[] listLPop(String listName)
65+ ->指定したリストの先頭(左端)から値を取得後、削除を行う。
66+ リストは左に1つ詰めらる。
67+ 本メソッドはokuyama中でアトミックに実行されるため、
68+ 同一要素が複数のクライアントへ返ることはない。
69+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
70+ 要素がない場合、リスト作成前の場合結果無しが返る。
71+
72+ ・String[] listRPop(String listName)
73+ ->指定したリストの末尾(右端)から値を取得後、削除を行う。
74+ リストは右に1つ詰めらる。
75+ 本メソッドはokuyama中でアトミックに実行されるため、
76+ 同一要素が複数のクライアントへ返ることはない。
77+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
78+ 要素がない場合、リスト作成前の場合結果無しが返る。
79+
80+ ・Object[] listLen(String listName)
81+ ->指定したリストの要素数を返す。
82+ listNameへはcreateListStructメソッドにて作成したリスト名を指定
83+ リスト作成前の場合結果無しが返る。
84+
85+
3186 ■リカバリ機能を強化
32- 従来リカバリ中にMainMasterNodeが停止するとDataNodeのリカバリ処理が中途半端に終了してしまう問題があった。
87+ 従来リカバリ中にMainMasterNodeが停止するとDataNodeのリカバリ処理が中途半端に終了してしまう問題が報告されました。
3388 その問題への対処として、リカバリ途中のDataNodeを判断し再度切り離す機能を追加。また、リカバリが必要なDataNodeを起動する際に
3489 起動引数として"-rr true"として起動することで、起動前が障害で停止したことに関係なくリカバリが行わるようになった。
3590 例えばMasterNodeを起動する前にDataNodeを起動してしまうと、そのDataNodeはデータリカバリ対象にならなかった。
@@ -43,19 +98,6 @@
4398 設定例: -rr true
4499
45100
46-■各DataNodeが保存しているKeyの一覧を取得する機能を追加
47- DataNodeが持つ全てのKeyとTagの一覧を取得する機能をUtilClientに追加しました。
48- 各DataNodeに接続し、当該機能を実行することでKeyの一覧が改行区切りで標準出力に出力される。
49- 利用方法は以下
50- 使い方)
51- $ java -classpath ./:./lib/javamail-1.4.1.jar:./okuyama-0.9.5.jar okuyama.imdst.client.UtilClient keylist datanodeip:5553
52- 引数説明
53- 1)keylist : 命令(固定)
54- 2)datanodeip:5553 : Keyを確認したい、DataNodeのIPアドレスとポート番号を"IP:Port番号"のフォーマットで指定
55-
56- ※注意:Tagに関しては内部では1つのTagが複数個に分割されて保持されているため、複数個のTagが出力されることになるので注意が必要である。
57-
58-
59101 ■MasterNodeがデータ復旧を行わないオプションを追加
60102 MasterNodeはMainMasterNodeに昇格した場合、停止中のDataNodeが復旧すると必ずリカバリを行なっていた。
61103 本オプションを指定するとMainMasterNodeに昇格した場合もリカバリを行わなくなる。
@@ -84,8 +126,8 @@
84126 意味:記述された全てのアドレスにicmpで到達出来ない場合に自身をshutdownする
85127 省略時:チェックを行わない(デフォルト)
86128 設定例: -smnca 192.168.1.100,192.168.2.101
87-
88129
130+
89131 ■起動時に指定されて起動オプションを起動ログに出力する機能を追加
90132 以下のフォーマットで出力される。
91133 ----------------
@@ -92,6 +134,10 @@
92134 Boot arguments
93135 {パラメータ}
94136 ----------------
137+
138+■性能向上及び、バグ修正
139+
140+
95141 ========================================================================================================
96142 [New - 新機能追加、不具合対応]
97143 [[リリース Ver 0.9.4 - (2012/12/05)]]
Show on old repository browser