(empty log message)
@@ -527,10 +527,10 @@ | ||
527 | 527 | |
528 | 528 | |
529 | 529 | // 有効期限切れデータの削除 |
530 | - // 実行指定(ImdstDefine.vacuumInvalidDataFlg)がtrueの場合に1時間に1回実行される | |
531 | - // このif文に到達するのが1分に1回なので、それを30回繰り返すと削除処理を実行する | |
530 | + // 実行指定(ImdstDefine.vacuumInvalidDataFlg)がtrueの場合に実行される | |
531 | + // このif文に到達するのが1分に1回なので、それを規定回数繰り返すと削除処理を実行する | |
532 | 532 | // 差分データ取集中は行わない |
533 | - if (dataMemory == true && ImdstDefine.vacuumInvalidDataFlg == true && vacuumInvalidDataCount > ImdstDefine.startVaccumInvalidCount && diffDataPoolingFlg == false) { | |
533 | + if ((dataMemory == true || ImdstDefine.vacuumInvalidDataCompulsion == true) && ImdstDefine.vacuumInvalidDataFlg == true && vacuumInvalidDataCount > ImdstDefine.startVaccumInvalidCount && diffDataPoolingFlg == false) { | |
534 | 534 | logger.info("VacuumInvalidData - Start - 1"); |
535 | 535 | |
536 | 536 | synchronized(this.poolKeyLock) { |
@@ -804,8 +804,13 @@ | ||
804 | 804 | |
805 | 805 | //logger.debug("setKeyPairOnlyOnce - synchronized - start"); |
806 | 806 | |
807 | - if(this.containsKeyPair(key)) return ret; | |
807 | + if(this.containsKeyPair(key)) { | |
808 | 808 | |
809 | + String tmp = keyMapObjGet(key); | |
810 | + | |
811 | + if(!isExpireData(tmp)) return ret; | |
812 | + } | |
813 | + | |
809 | 814 | if (this.moveAdjustmentDataMap != null) { |
810 | 815 | synchronized (this.moveAdjustmentSync) { |
811 | 816 | if (this.moveAdjustmentDataMap != null && this.moveAdjustmentDataMap.containsKey(key) && moveData == false) |
@@ -3251,6 +3256,39 @@ | ||
3251 | 3256 | } |
3252 | 3257 | |
3253 | 3258 | |
3259 | + // 有効期限切れデータの場合はtrueが返る | |
3260 | + private static boolean isExpireData(String valStr) { | |
3261 | + String[] checkValueSplit = null; | |
3262 | + | |
3263 | + if (valStr != null && valStr.length() <= 1000) { | |
3264 | + | |
3265 | + String[] valStrSplit = valStr.split(ImdstDefine.setTimeParamSep); | |
3266 | + valStr = valStrSplit[0]; | |
3267 | + checkValueSplit = valStr.split(ImdstDefine.keyHelperClientParamSep); | |
3268 | + } else if (valStr != null && valStr.length() >= 1001){ | |
3269 | + | |
3270 | + if (valStr.indexOf(ImdstDefine.keyHelperClientParamSep, (valStr.length() - 100)) != -1) { | |
3271 | + String[] valStrSplit = valStr.split(ImdstDefine.setTimeParamSep); | |
3272 | + valStr = valStrSplit[0]; | |
3273 | + checkValueSplit = valStr.split(ImdstDefine.keyHelperClientParamSep); | |
3274 | + } | |
3275 | + } else { | |
3276 | + return false; | |
3277 | + } | |
3278 | + | |
3279 | + // 有効期限チェックを行う | |
3280 | + if (checkValueSplit != null && checkValueSplit.length > 1) { | |
3281 | + | |
3282 | + String[] metaColumns = checkValueSplit[1].split(ImdstDefine.valueMetaColumnSep); | |
3283 | + if (!SystemUtil.expireCheck(metaColumns[1], 1)) { | |
3284 | + | |
3285 | + return true; | |
3286 | + } | |
3287 | + } | |
3288 | + return false; | |
3289 | + } | |
3290 | + | |
3291 | + | |
3254 | 3292 | public void dump() { |
3255 | 3293 | try { |
3256 | 3294 | System.out.println("-------------------------------------- Dump Start ------------------------------------"); |
@@ -3400,6 +3438,7 @@ | ||
3400 | 3438 | } |
3401 | 3439 | } |
3402 | 3440 | |
3441 | + | |
3403 | 3442 | public void close() { |
3404 | 3443 | if (this.tBw != null) { |
3405 | 3444 | try { |
@@ -473,7 +473,10 @@ | ||
473 | 473 | |
474 | 474 | // 有効期限切れデータバキューム実行指定 |
475 | 475 | public volatile static boolean vacuumInvalidDataFlg = true; |
476 | + // 有効期限切れデータバキューム実行強制指定 | |
477 | + public volatile static boolean vacuumInvalidDataCompulsion = false; | |
476 | 478 | |
479 | + | |
477 | 480 | // 有効期限切れデータ削除チェックサイクル(単位:分) |
478 | 481 | public static int startVaccumInvalidCount = 29; |
479 | 482 |
@@ -15,16 +15,18 @@ | ||
15 | 15 | * -c MasterNodeの無操作コネクションタイムアウト時間(秒)<br> |
16 | 16 | * -S DataNodeのValueの保存可能最大サイズ(バイト)<br> |
17 | 17 | * -s DataNodeのValueの共通データファイルへの書き出し中間サイズ(バイト)(DataNode用設定ファイルのdataMemory=trueの場合のみ有効)<br> |
18 | - * -v 分散モードがConsistentHash時(MasterNode用設定ファイルのDistributionAlgorithm=consistenthashの場合のみ)のVirtualNodeの数 | |
19 | - * -fa ImdstDefine.parallelDiskAccess /ファイルシステムへの同時アクセス係数(整数) | |
20 | - * -ncot ImdstDefine.nodeConnectionOpenTimeout /DataNodeへのSocketコネクションOpenのタイムアウト閾値(ミリ秒) | |
21 | - * -nct ImdstDefine.nodeConnectionTimeout /DataNodeへのSocketコネクションreadのタイムアウト閾値(ミリ秒) | |
22 | - * -mmgrs ImdstDefine.maxMultiGetRequestSize /getMultiValueの際に一度にDataNodeに問い合わせるRequestKeyの数 | |
23 | - * -sidc ImdstDefine.searchIndexDistributedCount /検索Indexを並列に作成する場合の並列数 | |
24 | - * -gaetu ImdstDefine.getAndExpireTimeUpdate /データの有効期限をGetメソッドで更新するかの指定 | |
25 | - * -fbmnk ImdstDefine.fileBaseMapNumberOfOneFileKey /FileBaseDataMapで1KeyファイルにどれだけのKey値を保存するかの指定 | |
26 | - * -tlft ImdstDefine.transactionLogFsyncType /WALログのファイルシステムへのfsync係数(0=OSでの自動sync制御、1=fsync回数低、2=fsync回数中、3=fsync回数高、4=常にfsync | |
27 | - * -vidf ImdstDefine.vacuumInvalidDataFlg /有効期限切れのデータのクリーニングを行うかどうかの設定 true=行う false=行わない | |
18 | + * -v 分散モードがConsistentHash時(MasterNode用設定ファイルのDistributionAlgorithm=consistenthashの場合のみ)のVirtualNodeの数<br> | |
19 | + * -fa ImdstDefine.parallelDiskAccess /ファイルシステムへの同時アクセス係数(整数)<br> | |
20 | + * -ncot ImdstDefine.nodeConnectionOpenTimeout /DataNodeへのSocketコネクションOpenのタイムアウト閾値(ミリ秒)<br> | |
21 | + * -nct ImdstDefine.nodeConnectionTimeout /DataNodeへのSocketコネクションreadのタイムアウト閾値(ミリ秒)<br> | |
22 | + * -mmgrs ImdstDefine.maxMultiGetRequestSize /getMultiValueの際に一度にDataNodeに問い合わせるRequestKeyの数<br> | |
23 | + * -sidc ImdstDefine.searchIndexDistributedCount /検索Indexを並列に作成する場合の並列数<br> | |
24 | + * -gaetu ImdstDefine.getAndExpireTimeUpdate /データの有効期限をGetメソッドで更新するかの指定<br> | |
25 | + * -fbmnk ImdstDefine.fileBaseMapNumberOfOneFileKey /FileBaseDataMapで1KeyファイルにどれだけのKey値を保存するかの指定<br> | |
26 | + * -tlft ImdstDefine.transactionLogFsyncType /WALログのファイルシステムへのfsync係数(0=OSでの自動sync制御、1=fsync回数低、2=fsync回数中、3=fsync回数高、4=常にfsync<br> | |
27 | + * -vidf ImdstDefine.vacuumInvalidDataFlg /有効期限切れのデータのクリーニングを行うかどうかの設定 true=行う false=行わない ※trueを指定するとファイルをストレージに使っている場合も実行される<br> | |
28 | + * -svic ImdstDefine.startVaccumInvalidCount /有効期限切れのデータのクリーニングを行う間隔(分/単位)<br> | |
29 | + * | |
28 | 30 | * <br> |
29 | 31 | * @author T.Okuyama |
30 | 32 | * @license GPL(Lv3) |
@@ -189,9 +191,20 @@ | ||
189 | 191 | if (startOptions.length > (i+1)) { |
190 | 192 | if (startOptions[i+1] != null && startOptions[i+1].trim().equals("false")) { |
191 | 193 | ImdstDefine.vacuumInvalidDataFlg = false; |
194 | + } else if (startOptions[i+1] != null && startOptions[i+1].trim().equals("true")){ | |
195 | + ImdstDefine.vacuumInvalidDataCompulsion = true; | |
192 | 196 | } |
193 | 197 | } |
194 | 198 | } |
199 | + | |
200 | + if (startOptions[i].trim().equals("-svic")) { | |
201 | + if (startOptions.length > (i+1)) { | |
202 | + try { | |
203 | + ImdstDefine.startVaccumInvalidCount = Integer.parseInt(startOptions[i+1]); | |
204 | + } catch(NumberFormatException nfe) { | |
205 | + } | |
206 | + } | |
207 | + } | |
195 | 208 | } |
196 | 209 | } |
197 | 210 | } catch (Exception e) { |