Skip to content

Commit

Permalink
CDPD-45123 Backport of HBASE-27750: Update the list of prefetched Hfi…
Browse files Browse the repository at this point in the history
…les upon block eviction (apache#5140)

Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
Change-Id: Ifdfa755a800c1c926403b90ec991d7d2e9f7da38
  • Loading branch information
Kota-SH authored and wchevreuil committed Mar 27, 2023
1 parent 5c8e36a commit 7c2bc60
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ protected void startWriterThreads() {
void startBucketCachePersisterThread() {
BucketCachePersister cachePersister =
new BucketCachePersister(this, bucketcachePersistInterval);
cachePersister.setDaemon(true);
cachePersister.start();
}

Expand Down Expand Up @@ -600,6 +601,9 @@ void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decre
cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());
}
if (ioEngine.isPersistent()) {
if (prefetchedFileListPath != null) {
PrefetchExecutor.removePrefetchedFileWhileEvict(cacheKey.getHfileName());
}
setCacheInconsistent(true);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public void testPrefetchPersistence() throws Exception {
table.put(put1);
TEST_UTIL.flush(tableName);
} finally {
Thread.sleep(1500);
Thread.sleep(2000);
}

// Default interval for cache persistence is 1000ms. So after 1000ms, both the persistence files
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import org.apache.hadoop.hbase.io.hfile.HFileBlock;
import org.apache.hadoop.hbase.io.hfile.HFileContext;
import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder;
import org.apache.hadoop.hbase.io.hfile.PrefetchExecutor;
import org.apache.hadoop.hbase.io.hfile.RandomKeyValueUtil;
import org.apache.hadoop.hbase.regionserver.StoreFileWriter;
import org.apache.hadoop.hbase.testclassification.IOTests;
Expand Down Expand Up @@ -119,7 +120,7 @@ public void testPrefetchPersistenceCrash() throws Exception {

@Test
public void testPrefetchPersistenceCrashNegative() throws Exception {
long bucketCachePersistInterval = 3000;
long bucketCachePersistInterval = Long.MAX_VALUE;
Configuration conf = setupBucketCacheConfig(bucketCachePersistInterval);
BucketCache bucketCache = setupBucketCache(conf);
CacheConfig cacheConf = new CacheConfig(conf, bucketCache);
Expand All @@ -132,6 +133,23 @@ public void testPrefetchPersistenceCrashNegative() throws Exception {
cleanupBucketCache(bucketCache);
}

@Test
public void testPrefetchListUponBlockEviction() throws Exception {
Configuration conf = setupBucketCacheConfig(200);
BucketCache bucketCache1 = setupBucketCache(conf);
CacheConfig cacheConf = new CacheConfig(conf, bucketCache1);
FileSystem fs = HFileSystem.get(conf);
// Load Blocks in cache
Path storeFile = writeStoreFile("TestPrefetch3", conf, cacheConf, fs);
readStoreFile(storeFile, 0, fs, cacheConf, conf, bucketCache1);
Thread.sleep(500);
// Evict Blocks from cache
BlockCacheKey bucketCacheKey = bucketCache1.backingMap.entrySet().iterator().next().getKey();
assertTrue(PrefetchExecutor.isFilePrefetched(storeFile.getName()));
bucketCache1.evictBlock(bucketCacheKey);
assertFalse(PrefetchExecutor.isFilePrefetched(storeFile.getName()));
}

public void readStoreFile(Path storeFilePath, long offset, FileSystem fs, CacheConfig cacheConf,
Configuration conf, BucketCache bucketCache) throws Exception {
// Open the file
Expand Down

0 comments on commit 7c2bc60

Please sign in to comment.