Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1945,9 +1945,22 @@ public int evictBlocksRangeByHfileName(String hfileName, long initOffset, long e
}

private Set<BlockCacheKey> getAllCacheKeysForFile(String hfileName, long init, long end) {
Set<BlockCacheKey> cacheKeys = new HashSet<>();
// At this moment, Some Bucket Entries may be in the WriterThread queue, and not yet put into
// the backingMap. So, when executing this method, we should check both the RAMCache and
// backingMap to ensure all CacheKeys are obtained.
// For more details, please refer to HBASE-29862.
Set<BlockCacheKey> ramCacheKeySet = ramCache.getRamBlockCacheKeysForHFile(hfileName);
for (BlockCacheKey key : ramCacheKeySet) {
if (key.getOffset() >= init && key.getOffset() <= end) {
cacheKeys.add(key);
}
}

// These keys are just for comparison and are short lived, so we need only file name and offset
return blocksByHFile.subSet(new BlockCacheKey(hfileName, init), true,
new BlockCacheKey(hfileName, end), true);
cacheKeys.addAll(blocksByHFile.subSet(new BlockCacheKey(hfileName, init), true,
new BlockCacheKey(hfileName, end), true));
return cacheKeys;
}

/**
Expand Down Expand Up @@ -2342,6 +2355,16 @@ public boolean hasBlocksForFile(String fileName) {
return delegate.keySet().stream().filter(key -> key.getHfileName().equals(fileName))
.findFirst().isPresent();
}

public Set<BlockCacheKey> getRamBlockCacheKeysForHFile(String fileName) {
Set<BlockCacheKey> ramCacheKeySet = new HashSet<>();
for (BlockCacheKey blockCacheKey : delegate.keySet()) {
if (blockCacheKey.getHfileName().equals(fileName)) {
ramCacheKeySet.add(blockCacheKey);
}
}
return ramCacheKeySet;
}
}

public Map<BlockCacheKey, BucketEntry> getBackingMap() {
Expand Down