This is an automated email from the ASF dual-hosted git repository. shaofengshi pushed a commit to branch 2.5.x in repository https://gitbox.apache.org/repos/asf/kylin.git
commit 2e1c2da1dea34e2cec5337e6f8a67fb5e419c3eb Author: shaofengshi <shaofeng...@apache.org> AuthorDate: Fri Nov 9 21:34:11 2018 +0800 KYLIN-3678 CacheStateChecker may remove a cache file that under building --- .../src/main/java/org/apache/kylin/common/KylinConfigBase.java | 4 ++++ .../apache/kylin/dict/lookup/cache/RocksDBLookupTableCache.java | 6 ++++-- .../kylin/dict/lookup/cache/RocksDBLookupTableCacheTest.java | 8 ++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java index b31f11c..0041402 100644 --- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java +++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java @@ -451,6 +451,10 @@ abstract public class KylinConfigBase implements Serializable { return Double.parseDouble(getOptional("kylin.snapshot.ext.local.cache.max-size-gb", "200")); } + public long getExtTableSnapshotLocalCacheCheckVolatileRange() { + return Long.parseLong(getOptional("kylin.snapshot.ext.local.cache.check.volatile", "3600000")); + } + public boolean isShrunkenDictFromGlobalEnabled() { return Boolean.parseBoolean(this.getOptional("kylin.dictionary.shrunken-from-global-enabled", "false")); } diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCache.java b/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCache.java index 559c435..c748e18 100644 --- a/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCache.java +++ b/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCache.java @@ -352,8 +352,10 @@ public class RocksDBLookupTableCache implements IExtLookupTableCache { List<Pair<String, File>> toRemovedCachedSnapshots = Lists.newArrayList(FluentIterable.from( allCachedSnapshots).filter(new Predicate<Pair<String, File>>() { @Override - public boolean apply(@Nullable Pair<String, File> input) { - return !activeSnapshotSet.contains(input.getFirst()); + public boolean apply(@Nullable Pair<String, File> input) { + long lastModified = input.getSecond().lastModified(); + return !activeSnapshotSet.contains(input.getFirst()) && lastModified > 0 + && lastModified < (System.currentTimeMillis() - config.getExtTableSnapshotLocalCacheCheckVolatileRange()); } })); for (Pair<String, File> toRemovedCachedSnapshot : toRemovedCachedSnapshots) { diff --git a/core-dictionary/src/test/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCacheTest.java b/core-dictionary/src/test/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCacheTest.java index 747fe23..579e499 100644 --- a/core-dictionary/src/test/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCacheTest.java +++ b/core-dictionary/src/test/java/org/apache/kylin/dict/lookup/cache/RocksDBLookupTableCacheTest.java @@ -153,7 +153,15 @@ public class RocksDBLookupTableCacheTest extends LocalFileMetadataTestCase { ExtTableSnapshotInfoManager.getInstance(kylinConfig).removeSnapshot(snapshotInfo.getTableName(), snapshotInfo.getId()); cache.checkCacheState(); String cacheLocalPath = cache.getSnapshotCachePath(snapshotInfo.getTableName(), snapshotInfo.getId()); + // won't cleanup because it is newly created in last 1 hour + assertTrue(new File(cacheLocalPath).exists()); + + // change the volatile value + kylinConfig.setProperty("kylin.snapshot.ext.local.cache.check.volatile", "0"); + cache.checkCacheState(); + // this time it should be removed. assertFalse(new File(cacheLocalPath).exists()); + cachedLookupTable = cache.getCachedLookupTable(tableDesc, snapshotInfo, false); assertNull(cachedLookupTable); }