• R/O
  • SSH
  • HTTPS

okuyama: 提交


Commit MetaInfo

修訂800 (tree)
時間2011-10-15 23:52:06
作者okuyamaoo

Log Message

20111015-2

Change Summary

差異

--- trunk/src/okuyama/imdst/client/OkuyamaResultSet.java (revision 799)
+++ trunk/src/okuyama/imdst/client/OkuyamaResultSet.java (revision 800)
@@ -3,18 +3,18 @@
33 /**
44 * OkuyamaClientが一度のリクエストでは取得しきれないような<br>
55 * 大量のデータを扱う場合に利用するResultSetクラス.<br>
6- * 以下のような構文にてデータを取得する
7- * 以下は、Tagを利用して全ての紐付くKeyとValueを出力している
8- * -----------------------------------------------------------------
9- * OkuyamaResultSet resultSet = client.getTagKeysResult(tagStr);
6+ * 以下のような構文にてデータを取得する<br>
7+ * 以下は、Tagを利用して全ての紐付くKeyとValueを出力している<br>
8+ * -----------------------------------------------------------------<br>
9+ * OkuyamaResultSet resultSet = client.getTagKeysResult(tagStr);<br>
10+ * <br>
11+ * while(resultSet.next()) {<br>
12+ * System.out.println("Key=" + (Object)resultSet.getKey());<br>
13+ * System.out.println("Value=" + (Object)resultSet.getValue());<br>
14+ * }<br>
15+ * resultSet.close();<br>
16+ * ------------------------------------------------------------------<br>
1017 *
11- * while(resultSet.next()) {
12- * System.out.println("Key=" + (Object)resultSet.getKey());
13- * System.out.println("Value=" + (Object)resultSet.getValue());
14- * }
15- * resultSet.close();
16- * ------------------------------------------------------------------
17- *
1818 *
1919 * @author T.Okuyama
2020 * @license GPL(Lv3)
--- trunk/src/okuyama/imdst/client/OkuyamaClient.java (revision 799)
+++ trunk/src/okuyama/imdst/client/OkuyamaClient.java (revision 800)
@@ -5998,7 +5998,7 @@
59985998 /**
59995999 * MasterNodeからTagを複数を指定することで紐付くKeyが取得可能な、OkuyamaResultSetを取得する.<br>
60006000 * Tagは打たれているが実際は既に存在しないValueが紐付くKey値は取得出来ない.<br>
6001- * またANDとORを指定可能であり、getMultiTagKeysと同じように動くが、こちらを使えば一度にメモリ上に展開出来ないような、<br>
6001+ * 指定したTagはANDの扱いでデータは選別される。getMultiTagKeysと同じように動くが、こちらを使えば一度にメモリ上に展開出来ないような、<br>
60026002 * 大量のTagに紐付くデータを対象にする場合に向いている。少量のデータに対して複数Tagで取得したい場合は、従来通りgetMultiTagKeysを使うことを推奨する.<br>
60036003 *
60046004 * @param tagList Tag値の配列
@@ -6154,16 +6154,6 @@
61546154 }
61556155
61566156
6157-
6158-
6159-
6160-
6161-
6162-
6163-
6164-
6165-
6166-
61676157 /**
61686158 * MasterNodeからTagとKey格納bucketのIndexを使用してKey値配列を取得する.<br>
61696159 * 本メソッドは、OkuyamaTagKeysResultSetクラスからの利用を想定して作成されているため、
--- trunk/src/okuyama/imdst/client/OkuyamaQueueClient.java (revision 799)
+++ trunk/src/okuyama/imdst/client/OkuyamaQueueClient.java (revision 800)
@@ -4,6 +4,46 @@
44 /**
55 * MasterNodeと通信を行うプログラムインターフェース<br>
66 * okuyamaを利用してキュー機構を実現するClient<br>
7+ * 利用手順としては<br>
8+ * 1.MasterNodeへ接続<br>
9+ * 2.createQueueSpaceメソッドで任意の名前でQueue領域を作成(既に作成済みのQueue領域を利用する場合は作成不要)<br>
10+ * 3.putメソッドにデータを登録、もしくはtakeメソッドにて取り出し<br>
11+ * 4.利用終了後closeを呼び出す<br>
12+ * ※.Queue領域を削除する場合は
13+ *<br>
14+ * 実装例)<br>
15+ *-----------------------------------------------------------<br>
16+ *&nbsp;&nbsp;String[] masterNodeInfos = {"127.0.0.1:8888"};<br>
17+ *&nbsp;&nbsp;OkuyamaQueueClient queueClient = new OkuyamaQueueClient();<br>
18+ *&nbsp;&nbsp;queueClient.setConnectionInfos(masterNodeInfos);<br>
19+ *&nbsp;&nbsp;// 接続<br>
20+ *&nbsp;&nbsp;queueClient.autoConnect();<br>
21+ *&nbsp;&nbsp;// Queue領域を作成<br>
22+ *&nbsp;&nbsp;if(queueClient.createQueueSpace("QueueNameXXX1")) {<br>
23+ *&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Create - Success");<br>
24+ *&nbsp;&nbsp;} else {<br>
25+ *&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Create - Error");<br>
26+ *&nbsp;&nbsp;}<br>
27+ *<br>
28+ *&nbsp;&nbsp;// Queue領域名"QueueNameXXX1"にデータを登録<br>
29+ *&nbsp;&nbsp;if(queueClient.put("QueueNameXXX1", "Data-0001")) {<br>
30+ *&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Put - Success");<br>
31+ *&nbsp;&nbsp;} else {<br>
32+ *&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Put - Error");<br>
33+ *&nbsp;&nbsp;}<br>
34+ *<br>
35+ *&nbsp;&nbsp;String takeData = null;<br>
36+ *&nbsp;&nbsp;// Queue領域名"QueueNameXXX1"からデータを取得<br>
37+ *&nbsp;&nbsp;takeData = queueClient.take("QueueNameXXX1", 10000);<br>
38+ *&nbsp;&nbsp;if (takeData != null) {<br>
39+ *&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Data NotFound");<br>
40+ *&nbsp;&nbsp;} else {<br>
41+ *&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Take Data = " + takeData);<br>
42+ *&nbsp;&nbsp;}<br>
43+ *<br>
44+ *&nbsp;&nbsp;// 接続を切断<br>
45+ *&nbsp;&nbsp;queueClient.close();<br>
46+ *-----------------------------------------------------------<br>
747 *
848 * @author T.Okuyama
949 * @license GPL(Lv3)
@@ -26,10 +66,11 @@
2666
2767 /**
2868 * Queue領域の作成.<br>
69+ * 既に領域が存在する場合はエラー<br>
2970 *
30- * @param queueName 作成Queue名
31- * @retrun boolean 成否
32- * @throw OkuyamaClientException
71+ * @param queueName 作成Queue名(上限の長さはOkuyamaClientでのKeyの最大長 - 43byte)
72+ * @retrun boolean 成否 (true=作成成功/false=作成失敗)
73+ * @throws OkuyamaClientException
3374 */
3475 public boolean createQueueSpace(String queueName) throws OkuyamaClientException {
3576 boolean ret = true;
@@ -48,17 +89,43 @@
4889 return ret;
4990 }
5091
92+
93+ /**
94+ * Queue領域を削除する.<br>
95+ * 不要なデータも削除するため処理時間が長くなる可能性がある<br>
96+ *
97+ * @param queueName 削除Queue名
98+ * @return boolean true=削除成功/削除失敗
99+ * @throws OkuyamaClientException
100+ */
51101 public boolean removeQueueSpace(String queueName) throws OkuyamaClientException {
52- return false;
102+ boolean ret = true;
103+ try {
104+
105+ String[] removeIndexRet = super.removeValue(QUEUE_NAME_PREFIX + QUEUE_NAME_PREFIX_NOW_INDEX + queueName);
106+ if (!removeIndexRet[0].equals("true")) return false;
107+
108+ long idx = 1;
109+ while (true) {
110+ String[] removeDataRet = super.removeValue(QUEUE_NAME_PREFIX + QUEUE_NAME_PREFIX_NOW_POINT + queueName + "_" + idx + "_value");
111+ if (!removeDataRet[0].equals("true")) break;
112+ idx++;
113+ }
114+ } catch (OkuyamaClientException oce) {
115+ throw oce;
116+ } catch (Exception e) {
117+ throw new OkuyamaClientException(e);
118+ }
119+ return ret;
53120 }
54121
55122
56123 /**
57- * Queueへの登録.<br>
124+ * Queueへのデータ登録.<br>
58125 *
59- * @param queueName 指定Queue名
126+ * @param queueName 登録するQueue名
60127 * @param data 登録データ
61- * @retrun boolean 成否
128+ * @retrun boolean 成否 (true=登録成功/false=登録失敗)
62129 * @throw OkuyamaClientException
63130 */
64131 public boolean put(String queueName, String data) throws OkuyamaClientException {
@@ -95,11 +162,13 @@
95162
96163
97164 /**
98- * Queueから取得.<br>
165+ * Queueからデータ取得.<br>
166+ * 指定したQueue名が存在しない場合はエラー<br>
167+ * Queueにデータが存在しない場合は30秒待った後にnullが返る<br>
99168 *
100- * @param queueName 指定Queue名
169+ * @param queueName 取得対象のQueue名
101170 * @return 取得データ(指定時間以内に取得できない場合はnull)
102- * @throw OkuyamaClientException
171+ * @throws OkuyamaClientException
103172 */
104173 public String take(String queueName) throws OkuyamaClientException {
105174 return take(queueName, 1000 * 30);
@@ -107,12 +176,14 @@
107176
108177
109178 /**
110- * Queueから取得.<br>
179+ * Queueからデータ取得.<br>
180+ * 指定したQueue名が存在しない場合はエラー<br>
181+ * Queueにデータが存在しない場合の待ち時間を設定出来る<br>
111182 *
112- * @param queueName 指定Queue名
183+ * @param queueName 取得対象のQueue名
113184 * @param timeOut 待ち受けタイムアウト時間(ミリ秒/単位)
114185 * @return 取得データ(指定時間以内に取得できない場合はnull)
115- * @throw OkuyamaClientException
186+ * @throws OkuyamaClientException
116187 */
117188 public String take(String queueName, long timeOut) throws OkuyamaClientException {
118189
--- trunk/src/okuyama/imdst/client/result/OkuyamaMultiTagKeysResultSet.java (revision 799)
+++ trunk/src/okuyama/imdst/client/result/OkuyamaMultiTagKeysResultSet.java (revision 800)
@@ -98,16 +98,24 @@
9898
9999 String[] tmpTagIndexList = (String[])this.tagIndexListMap.get(this.tagStrList[idx]);
100100
101- for (int tmpIdx = 0; tmpIdx < tmpTagIndexList.length; tmpIdx++) {
102- Map equalTagGroupMap = (Map)this.getIndexMap.get(new Integer(Integer.parseInt(tmpTagIndexList[tmpIdx]) / buketMaxLinkGroupSize));
103- if (equalTagGroupMap != null) {
104- equalTagGroupMap.put(this.tagStrList[idx], tmpTagIndexList[tmpIdx]);
105- } else {
106- equalTagGroupMap = new HashMap(8);
107- equalTagGroupMap.put(this.tagStrList[idx], tmpTagIndexList[tmpIdx]);
101+ if (tmpTagIndexList == null) {
102+ // ANDの場合はどれかのTagの情報がとれないだけでしゅう終了
103+ if (this.margeType) {
104+ this.getIndexMap.clear();
105+ break;
108106 }
109-
110- this.getIndexMap.put(new Integer(Integer.parseInt(tmpTagIndexList[tmpIdx]) / buketMaxLinkGroupSize), equalTagGroupMap);
107+ } else {
108+ for (int tmpIdx = 0; tmpIdx < tmpTagIndexList.length; tmpIdx++) {
109+ Map equalTagGroupMap = (Map)this.getIndexMap.get(new Integer(Integer.parseInt(tmpTagIndexList[tmpIdx]) / buketMaxLinkGroupSize));
110+ if (equalTagGroupMap != null) {
111+ equalTagGroupMap.put(this.tagStrList[idx], tmpTagIndexList[tmpIdx]);
112+ } else {
113+ equalTagGroupMap = new HashMap(8);
114+ equalTagGroupMap.put(this.tagStrList[idx], tmpTagIndexList[tmpIdx]);
115+ }
116+
117+ this.getIndexMap.put(new Integer(Integer.parseInt(tmpTagIndexList[tmpIdx]) / buketMaxLinkGroupSize), equalTagGroupMap);
118+ }
111119 }
112120 }
113121
@@ -227,8 +235,7 @@
227235 if (bucketKeysRet[0].equals("true")) {
228236 String[] keysStrList = (String[])bucketKeysRet[1];
229237 for (int buketIdx = 0; buketIdx < keysStrList.length; buketIdx++) {
230-
231-
238+
232239 margeKeyMap.put(keysStrList[buketIdx], null);
233240 }
234241 }
Show on old repository browser