• R/O
  • SSH
  • HTTPS

okuyama: 提交


Commit MetaInfo

修訂831 (tree)
時間2011-11-19 20:39:42
作者okuyamaoo

Log Message

・AbstractMasterManagerHelperのcheckのスペルを修正
・KeyManagerHelper-appendValueを追加
・MasterManagerHelper-base64エンコード後の固定値作成、appendValue実装前
・ServerPreprocess- "-dwmqs" ImdstDefine.delayWriteMaxQueueingSizeを追加
・CoreValueMap-SerializeMapのMapの固定サイズを追加
・SystemUtil- diskAccessSyncに強制flushのメソッド追加

Change Summary

差異

--- trunk/src/okuyama/imdst/helper/AbstractMasterManagerHelper.java (revision 830)
+++ trunk/src/okuyama/imdst/helper/AbstractMasterManagerHelper.java (revision 831)
@@ -980,7 +980,7 @@
980980 } catch(Exception e) {
981981
982982 retStrs[0] = "false";
983- logger.info("Node Ping Chekc Error Node Name = [" + nodeName + "] Port [" + port + "]");
983+ logger.info("Node Ping Check Error Node Name = [" + nodeName + "] Port [" + port + "]");
984984 logger.info(e);
985985 } finally {
986986 try {
--- trunk/src/okuyama/imdst/helper/KeyManagerHelper.java (revision 830)
+++ trunk/src/okuyama/imdst/helper/KeyManagerHelper.java (revision 831)
@@ -516,7 +516,25 @@
516516 retParamBuf.append(ImdstDefine.keyHelperClientParamSep);
517517 retParamBuf.append(retParams[2]);
518518 break;
519+ case 18 :
519520
521+ // Key値に既に登録済みの値がある場合は後続に指定のValueをAppendする
522+ requestHashCode = clientParameterList[1]; // 対象のKey値
523+ transactionCode = clientParameterList[2]; // Transactionコード
524+ requestDataNode = clientParameterList[3]; // Appendする値
525+ String addSep = clientParameterList[4]; // Appendする場合に利用するセパレータ
526+ String existsCheck = clientParameterList[5];// 事前に値の存在チェックを行う指定
527+
528+ // メソッド呼び出し
529+ retParams = this.appendValue(requestHashCode, requestDataNode, addSep, existsCheck, transactionCode);
530+ retParamBuf.append(retParams[0]);
531+ retParamBuf.append(ImdstDefine.keyHelperClientParamSep);
532+ retParamBuf.append(retParams[1]);
533+ retParamBuf.append(ImdstDefine.keyHelperClientParamSep);
534+ retParamBuf.append(retParams[2]);
535+
536+ break;
537+
520538 case 20 :
521539
522540 // KeyMapManager Direct Connection
@@ -1052,8 +1070,8 @@
10521070
10531071 // Key値で特定した値を渡された値で計算する
10541072 // 計算ルールは以下
1055- // 1.送信された値をintに変換する。変換できない場合はfalseで返す.<br>
1056- // 2.送信された値をintに変換する。変換した値を足しこむ.<br>
1073+ // 1.送信された値をlongに変換する。変換できない場合はfalseで返す.<br>
1074+ // 2.送信された値をlongに変換する。変換した値を足しこむ.<br>
10571075 // 3.送信されたKey値で値がとれない。falseで返す.<br>
10581076 // 4.送信されたKey値で取得した値が数値ではない。0で更新.<br>
10591077 private String[] calcValue(String key, String dataNodeStr, String transactionCode) {
@@ -1097,6 +1115,71 @@
10971115 }
10981116
10991117
1118+ // KeyとDataNode値を既存の値に付加する
1119+ // データが事前に存在するかどうかをチェックすることが可能
1120+ // existsCheck="1"チェックする、existsCheck="2"チェックしない
1121+ // 登録後の値が長さの規定値を超える場合エラーとなる
1122+ //
1123+ private String[] appendValue(String key, String dataNodeStr, String addSep, String existsCheck, String transactionCode) {
1124+ //logger.debug("KeyManagerHelper - appendValue - start");
1125+ String[] retStrs = new String[3];
1126+ try {
1127+ if (dataNodeStr.length() < setDatanodeMaxSize) {
1128+ if(!this.keyMapManager.checkError()) {
1129+
1130+ // 事前に存在チェックを行う場合
1131+ if (existsCheck.equals("1")) {
1132+ if (this.keyMapManager.containsKeyPair(key)) {
1133+ retStrs[0] = "18";
1134+ retStrs[1] = "false";
1135+ retStrs[2] = "A value does not exist";
1136+ return retStrs;
1137+ }
1138+ }
1139+
1140+ // 付加処理を行う
1141+ int appendRet = this.keyMapManager.appendValue(key, dataNodeStr, addSep, transactionCode);
1142+ if(appendRet == 0) {
1143+
1144+ retStrs[0] = "18";
1145+ retStrs[1] = "true";
1146+ retStrs[2] = "OK";
1147+ } else if (appendRet == 1){
1148+
1149+ retStrs[0] = "18";
1150+ retStrs[1] = "false";
1151+ retStrs[2] = "NG:Max Data Size Over";
1152+ } else {
1153+
1154+ retStrs[0] = "18";
1155+ retStrs[1] = "false";
1156+ retStrs[2] = "NG:Other Error";
1157+ }
1158+ } else {
1159+
1160+ retStrs[0] = "18";
1161+ retStrs[1] = "false";
1162+ retStrs[2] = "NG:KeyMapManager - appendValue - CheckError - NG";
1163+ }
1164+ } else {
1165+
1166+ retStrs[0] = "18";
1167+ retStrs[1] = "false";
1168+ retStrs[2] = "NG:Max Data Size Over";
1169+ }
1170+ } catch (BatchException be) {
1171+
1172+ logger.debug("KeyManagerHelper - appendValue - Error", be);
1173+ retStrs[0] = "18";
1174+ retStrs[1] = "false";
1175+ retStrs[2] = "NG:KeyManagerHelper - appendValue - Exception - " + be.toString();
1176+ }
1177+ //logger.debug("KeyManagerHelper - appendValue - end");
1178+ return retStrs;
1179+ }
1180+
1181+
1182+
11001183 // KeyでDataNode値を取得する
11011184 private String[] getDatanode(String key) {
11021185 //logger.debug("KeyManagerHelper - getDatanode - start");
--- trunk/src/okuyama/imdst/helper/MasterManagerHelper.java (revision 830)
+++ trunk/src/okuyama/imdst/helper/MasterManagerHelper.java (revision 831)
@@ -96,6 +96,10 @@
9696 // クライアントからのinitメソッド用返却パラメータ
9797 private static String[] initReturnParam = {"0", "true", new Integer(ImdstDefine.saveDataMaxSize).toString()};
9898
99+ // valueのbase64でエンコード後の最大サイズ
100+ private int encodeMaxDataSize = new Double(ImdstDefine.saveDataMaxSize * 1.38).intValue();
101+
102+
99103 // 検索Index作成用の辞書
100104 private static ConcurrentHashMap searchIndexDictionaryMap = new ConcurrentHashMap(500, 480, 1024);
101105 private static String[] searchIndexDictionaryList = new String[0];
@@ -438,6 +442,11 @@
438442 // 取得と同時に有効日付Update
439443 retParams = this.getValueAndUpdateExpireTime(clientParameterList[1]);
440444 break;
445+ case 18 :
446+
447+ // 値の付加
448+ //retParams = this.appendValue(clientParameterList[1], clientParameterList[2], clientParameterList[3], clientParameterList[4], clientParameterList[54]);
449+ break;
441450 case 22 :
442451
443452 // 複数Key値を指定することで、紐付くValueを一度に取得する(memcachedのmget)
@@ -1318,9 +1327,11 @@
13181327 // N-GramのNを決めるループ
13191328
13201329 for (int typeIdx = indexMinLength; typeIdx < indexLength; typeIdx++) {
1330+
13211331 try {
13221332 // 文字列の最後まで繰り返すループ
13231333 for (int i = 0; i < ImdstDefine.saveDataMaxSize; i++) {
1334+
13241335 String checkStr = oldRealKeyStr.substring(i, i+typeIdx);
13251336
13261337 if(SystemUtil.checkNoIndexCharacter(checkStr)) {
@@ -1369,6 +1380,7 @@
13691380 try {
13701381
13711382 for (int i = 0; i < ImdstDefine.saveDataMaxSize; i++) {
1383+
13721384 String checkStr = realKeyStr.substring(i, i+typeIdx);
13731385
13741386 if(SystemUtil.checkNoIndexCharacter(checkStr)) {
@@ -7441,7 +7453,7 @@
74417453 // Value値の長さをチェック
74427454 private boolean checkValueLength(String value) {
74437455 if (value == null) return false;
7444- if (value.length() >= new Double(ImdstDefine.saveDataMaxSize * 1.38).intValue()) return false;
7456+ if (value.length() >= this.encodeMaxDataSize) return false;
74457457 return true;
74467458 }
74477459 }
\ No newline at end of file
--- trunk/src/okuyama/imdst/util/FileBaseDataMap.java (revision 830)
+++ trunk/src/okuyama/imdst/util/FileBaseDataMap.java (revision 831)
@@ -653,7 +653,7 @@
653653 private long nowIterationFpPosition = 0;
654654
655655 // 遅延書き込み依頼用のQueueの最大サイズ
656- private int delayWriteQueueSize = 8000;
656+ private volatile int delayWriteQueueSize = ImdstDefine.delayWriteMaxQueueingSize;
657657
658658 // 遅延書き込み依頼用のQueue
659659 private ArrayBlockingQueue delayWriteQueue = new ArrayBlockingQueue(delayWriteQueueSize);
@@ -816,13 +816,18 @@
816816 try {
817817
818818 // Key値の場所を特定する
819+long start1 = System.nanoTime();
819820 long[] dataLineNoRet = this.getLinePoint(key, raf);
821+long end1 = System.nanoTime();
820822
821823 if (dataLineNoRet[0] == -1) {
822-
824+long start2 = System.nanoTime();
823825 wr.write(buf.toString());
824826 SystemUtil.diskAccessSync(wr);
825-
827+long end2 = System.nanoTime();
828+ if (((end2 - start2) > (1000 * 1000 * 10)) || ((end1 - start1) > (1000 * 1000 * 10))) {
829+ System.out.println("1=" + ((end1 - start1) / 1000 /1000) + " 2=" + ((end2 - start2) / 1000 /1000));
830+ }
826831 // The size of an increment
827832 this.totalSize.getAndIncrement();
828833 } else {
@@ -921,11 +926,15 @@
921926 }
922927 //end1 = System.nanoTime();
923928 //start2 = System.nanoTime();
929+ if (this.delayWriteQueue.size() > (delayWriteQueueSize - 2000)) Thread.sleep(10);
930+ if (this.delayWriteQueue.size() > (delayWriteQueueSize - 1000)) Thread.sleep(20);
931+
924932 this.delayWriteQueue.put(instructionObj);
925933 //end2 = System.nanoTime();
926934 this.delayWriteRequestCount++;
927935
928- if (this.delayWriteQueue.size() > (delayWriteQueueSize - 500)) Thread.sleep(50);
936+ if (this.delayWriteQueue.size() > (delayWriteQueueSize - 500)) Thread.sleep(100);
937+ if ((this.delayWriteRequestCount % 10000) == 0) System.out.println("NowQueueSize=" + this.delayWriteQueue.size());
929938 //if (ImdstDefine.fileBaseMapTimeDebug) {
930939 // System.out.println("Set 1="+(end1 - start1) + " 2="+(end2 - start2));
931940 //}
--- trunk/src/okuyama/imdst/util/KeyManagerValueMap.java (revision 830)
+++ trunk/src/okuyama/imdst/util/KeyManagerValueMap.java (revision 831)
@@ -403,9 +403,8 @@
403403 if (deletedLine == null) {
404404
405405 this.bw.write(writeBuf.toString());
406+ SystemUtil.diskAccessSync(this.bw, false);
406407
407- SystemUtil.diskAccessSync(this.bw);
408-
409408 this.lineCount++;
410409
411410 if (mapValueInSize) {
--- trunk/src/okuyama/imdst/util/KeyMapManager.java (revision 830)
+++ trunk/src/okuyama/imdst/util/KeyMapManager.java (revision 831)
@@ -160,6 +160,8 @@
160160 private int memoryLimitSize = -1;
161161 private String[] virtualStorageDirs = null;
162162
163+
164+
163165 // 初期化メソッド
164166 // Transactionを管理する場合に呼び出す
165167 public KeyMapManager(String keyMapFilePath, String workKeyMapFilePath, boolean workFileMemory, int keySize, boolean dataMemory, boolean dataManage) throws BatchException {
@@ -665,7 +667,6 @@
665667
666668 if (!blocking) {
667669 try {
668-
669670 //logger.debug("setKeyPair - synchronized - start");
670671 // このsynchroの方法は正しくないきがするが。。。
671672 synchronized(this.parallelSyncObjs[((key.hashCode() << 1) >>> 1) % KeyMapManager.parallelSize]) {
@@ -677,10 +678,18 @@
677678 }
678679 }
679680
681+
680682 String data = null;
683+ String[] keyNoddes = keyNode.split(ImdstDefine.setTimeParamSep);
681684
682- boolean containsKeyRet = containsKeyPair(key);
685+ if (keyNoddes.length > 1) {
686+ data = keyNoddes[0] + ImdstDefine.setTimeParamSep + keyNoddes[1];
687+ } else {
688+ data = keyNoddes[0] + ImdstDefine.setTimeParamSep + "0";
689+ }
683690
691+ /*boolean containsKeyRet = containsKeyPair(key);
692+
684693 if (!containsKeyRet) {
685694
686695 String[] keyNoddes = keyNode.split(ImdstDefine.setTimeParamSep);
@@ -700,6 +709,7 @@
700709
701710 data = keyNoddes[0] + ImdstDefine.setTimeParamSep + (System.nanoTime() + 1);
702711 } else {
712+System.out.println("aaaaaaaaaaaaaaaa[" + keyNode + "]");
703713
704714 data = keyNode;
705715 }
@@ -708,7 +718,7 @@
708718 data = keyNoddes[0] + ImdstDefine.setTimeParamSep + "0";
709719 }
710720
711- }
721+ }*/
712722
713723
714724
@@ -1828,6 +1838,127 @@
18281838 }
18291839
18301840
1841+ /**
1842+ * キーを指定することで紐付くValueの後ろに渡されたValueを付加する.<br>
1843+ * 値が存在しない場合は新規の値としてただ登録される.<br>
1844+ *
1845+ * @param key キー値
1846+ * @param appendValue 付加する値(base64でエンコード済み)
1847+ * @param appendSep 値が既に存在する場合にセパレータとして付加する値(ブランク指定(B)の場合は何も付加されない)
1848+ * @param transactionCode
1849+ * @return boolean 成否 0=成功、1=サイズオーバによりエラー
1850+ */
1851+ public int appendValue(String key, String appendValue, String appendSep, String transactionCode) throws BatchException {
1852+ int ret = -1;
1853+ String data = null;
1854+
1855+ if (!blocking) {
1856+ try {
1857+
1858+ //logger.debug("appendValue - synchronized - start");
1859+ // このsynchroの方法は正しくないきがするが。。。
1860+ synchronized(this.parallelSyncObjs[((key.hashCode() << 1) >>> 1) % KeyMapManager.parallelSize]) {
1861+ boolean containsKeyRet = containsKeyPair(key);
1862+ if (containsKeyRet) {
1863+
1864+ String tmp = keyMapObjGet(key);
1865+ String[] keyNoddes = tmp.split(ImdstDefine.setTimeParamSep);
1866+ String setDataStr = null;
1867+
1868+ if (tmp != null) {
1869+
1870+ String targetData = keyNoddes[0];
1871+
1872+ if (keyNoddes[0].indexOf(",") != -1) {
1873+ String[] workSplitData = keyNoddes[0].split(",");
1874+ targetData = workSplitData[0];
1875+ }
1876+
1877+ if (targetData.equals(ImdstDefine.imdstBlankStrData)) {
1878+ if (appendValue.equals(ImdstDefine.imdstBlankStrData)) {
1879+ setDataStr = appendValue;
1880+ } else {
1881+ setDataStr = new String(BASE64DecoderStream.decode(appendValue.getBytes()));
1882+ }
1883+ } else {
1884+
1885+ if (appendSep.equals(ImdstDefine.imdstBlankStrData)) {
1886+ appendSep = "";
1887+ } else {
1888+ appendSep = new String(BASE64DecoderStream.decode(appendSep.getBytes()));
1889+ }
1890+ String nowData = new String(BASE64DecoderStream.decode(targetData.getBytes()));
1891+ setDataStr = nowData + appendSep + appendValue;
1892+ }
1893+
1894+ // 登録前に長さをチェック
1895+ if (ImdstDefine.saveDataMaxSize < ((byte[])setDataStr.getBytes()).length) {
1896+ return 1;
1897+ }
1898+
1899+ if (keyNoddes.length > 1) {
1900+
1901+ data = new String(BASE64EncoderStream.encode(setDataStr.getBytes())) + ImdstDefine.setTimeParamSep + (Long.parseLong(keyNoddes[1]) + 1);
1902+ } else {
1903+
1904+ data = new String(BASE64EncoderStream.encode(setDataStr.getBytes())) + ImdstDefine.setTimeParamSep + "0";
1905+ }
1906+
1907+ }
1908+ }
1909+
1910+ if (data != null) {
1911+ // 登録
1912+ keyMapObjPut(key, data);
1913+
1914+ // データ操作履歴ファイルに追記
1915+ if (this.workFileMemory == false) {
1916+ synchronized(this.lockWorkFileSync) {
1917+
1918+ if (this.workFileFlushTiming) {
1919+
1920+ this.bw.write(new StringBuilder(ImdstDefine.stringBufferSmall_2Size).append("+").append(KeyMapManager.workFileSeq).append(key).append(KeyMapManager.workFileSeq).append(data).append(KeyMapManager.workFileSeq).append(JavaSystemApi.currentTimeMillis).append(KeyMapManager.workFileSeq).append(KeyMapManager.workFileEndPoint).append("\n").toString());
1921+ SystemUtil.diskAccessSync(this.bw);
1922+ this.checkTransactionLogWriterLimit(this.tLogWriteCount.incrementAndGet());
1923+ } else {
1924+
1925+ this.dataTransactionFileFlushDaemon.addDataTransaction(new StringBuilder(ImdstDefine.stringBufferSmall_2Size).append("+").append(KeyMapManager.workFileSeq).append(key).append(KeyMapManager.workFileSeq).append(data).append(KeyMapManager.workFileSeq).append(JavaSystemApi.currentTimeMillis).append(KeyMapManager.workFileSeq).append(KeyMapManager.workFileEndPoint).append("\n").toString());
1926+ }
1927+ }
1928+ }
1929+
1930+ // Diffモードでかつsync後は再度モードを確認後、addする
1931+ if (this.diffDataPoolingFlg) {
1932+ synchronized (diffSync) {
1933+ if (this.diffDataPoolingFlg) {
1934+
1935+ this.diffDataPoolingListForFileBase.add("+" + KeyMapManager.workFileSeq + key + KeyMapManager.workFileSeq + data);
1936+ }
1937+ }
1938+ }
1939+
1940+ // データの書き込みを指示
1941+ this.writeMapFileFlg = true;
1942+ ret = 0;
1943+ }
1944+ }
1945+
1946+ //logger.debug("appendValue - synchronized - end");
1947+ } catch (BatchException be) {
1948+ logger.error("appendValue - InnerError", be);
1949+ throw be;
1950+ } catch (Exception e) {
1951+ e.printStackTrace();
1952+ logger.error("appendValue - Error");
1953+ blocking = true;
1954+ StatusUtil.setStatusAndMessage(1, "appendValue - Error [" + e.getMessage() + "]");
1955+ throw new BatchException(e);
1956+ }
1957+ }
1958+ return ret;
1959+ }
1960+
1961+
18311962 // キーを指定することでキーが存在するかを返す
18321963 public boolean containsKeyPair(String key) {
18331964 boolean ret = false;
--- trunk/src/okuyama/imdst/util/SystemUtil.java (revision 830)
+++ trunk/src/okuyama/imdst/util/SystemUtil.java (revision 831)
@@ -366,6 +366,17 @@
366366 * @throw Exception
367367 */
368368 public static int diskAccessSync(Object fileAccessor) throws Exception {
369+ return diskAccessSync(fileAccessor, true);
370+ }
371+
372+ /**
373+ * Diskへの書き込みをSyncする.<br>
374+ *
375+ * @param fileAccessor FileアクセスStream
376+ * @param type Streamの種類 1=BufferedWriter 2=CustomBufferedWriter
377+ * @throw Exception
378+ */
379+ public static int diskAccessSync(Object fileAccessor, boolean auto) throws Exception {
369380 try {
370381 int type = 0;
371382 int syncIdx = 0;
@@ -387,6 +398,10 @@
387398
388399
389400 if (type == 1) {
401+ if (auto == false) {
402+ ((BufferedWriter)fileAccessor).flush();
403+ return 0;
404+ }
390405 synchronized (diskAccessSync[syncIdx]) {
391406 ((BufferedWriter)fileAccessor).flush();
392407 }
--- trunk/src/okuyama/imdst/util/CoreValueMap.java (revision 830)
+++ trunk/src/okuyama/imdst/util/CoreValueMap.java (revision 831)
@@ -53,7 +53,11 @@
5353 mainMap = new PartialConcurrentHashMap(size, upper, multi, virtualStoreDirs);
5454 } else {
5555
56- if (size > 19999999) {
56+ if (size > 100000000) {
57+ multi = new Double(size * 0.1).intValue();
58+ } else if (size > 59999999) {
59+ multi = 4000000;
60+ } else if (size > 19999999) {
5761 multi = 2000000;
5862 } else if (size > 9999999) {
5963 multi = 1000000;
@@ -87,8 +91,11 @@
8791 System.out.println("ConcurrentHashMap Use");
8892 mainMap = new ConcurrentHashMap(size, upper, multi);
8993 } else {
90-
91- if (size > 19999999) {
94+ if (size > 100000000) {
95+ multi = new Double(size * 0.1).intValue();
96+ } else if (size > 59999999) {
97+ multi = 4000000;
98+ } else if (size > 19999999) {
9299 multi = 2000000;
93100 } else if (size > 9999999) {
94101 multi = 1000000;
--- trunk/src/okuyama/imdst/util/ImdstDefine.java (revision 830)
+++ trunk/src/okuyama/imdst/util/ImdstDefine.java (revision 831)
@@ -11,7 +11,7 @@
1111 */
1212 public class ImdstDefine {
1313
14- public static final String okuyamaVersion = "VERSION okuyama-0.9.0";
14+ public static final String okuyamaVersion = "VERSION okuyama-0.9.1";
1515
1616 // -- KeyMapファイルに関係する定数 -------------------------------------------------
1717 // KeyNodeのWorkファイルでのセパレータ
@@ -290,7 +290,7 @@
290290 public volatile static String serializerClassName = null;
291291
292292 // 保存出来る、Key、Tag、Valueの最大長
293- // Valueの最大長
293+ // Valueの最大長(base64エンコード前)
294294 public volatile static int saveDataMaxSize = 1572864;
295295
296296 // 大きいデータ保存する場合は以下の数値の用に最も保存する回数の多いサイズに合わせると
@@ -297,7 +297,7 @@
297297 // レスポンスが向上す。下記の場合は512KB
298298 //public static final int saveDataMaxSize =524288;
299299
300- // Key,Tagの最大長
300+ // Key,Tagの最大長(base64エンコード後)
301301 public volatile static int saveKeyMaxSize = 468;
302302
303303 // 共通のデータファイルに書き出す最大サイズ
@@ -459,6 +459,9 @@
459459 public static final long workFileChangeNewFileSize = 1610612736;
460460
461461
462+ // DelayWriteCoreFileBaseKeyMapがディスクに書きだすデータをどれだけメモリにキューイングするかのレコード数
463+ public volatile static int delayWriteMaxQueueingSize = 8000;
464+
462465 // ファイルシステムへの同時アクセス係数
463466 public volatile static int parallelDiskAccess = 49;
464467
--- trunk/src/okuyama/imdst/process/ServerPreprocess.java (revision 830)
+++ trunk/src/okuyama/imdst/process/ServerPreprocess.java (revision 831)
@@ -28,7 +28,9 @@
2828 * -svic ImdstDefine.startVaccumInvalidCount /有効期限切れのデータのクリーニングを行う間隔(分/単位)<br>
2929 * -csf ImdstDefine.calcSizeFlg /保存データの合計サイズを計算するかどうかの指定 true=計算する/false=計算しない 計算しない方が高速に値の登録が可能<br>
3030 * -rdvp ImdstDefine.reuseDataFileValuePositionFlg /完全ファイルモードでDataNodeを起動した際に値の更新時にデータファイル上のValueの場所を再利用するかの設定.true/再利用する, false/再利用しない
31- *
31+ * -dwmqs ImdstDefine.delayWriteMaxQueueingSize /DelayWriteCoreFileBaseKeyMapのメモリ上へのキューイングレコード数
32+ *
33+
3234 * <br>
3335 * @author T.Okuyama
3436 * @license GPL(Lv3)
@@ -232,6 +234,17 @@
232234 }
233235 }
234236
237+
238+ // -dwmqs
239+ if (startOptions[i].trim().equals("-dwmqs")) {
240+ if (startOptions.length > (i+1)) {
241+ try {
242+ ImdstDefine.delayWriteMaxQueueingSize = Integer.parseInt(startOptions[i+1]);
243+ } catch(NumberFormatException nfe) {
244+ }
245+ }
246+ }
247+
235248 }
236249 }
237250 } catch (Exception e) {
Show on old repository browser