diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java index b35727e92e6..3fbad6b7e25 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java @@ -622,7 +622,8 @@ public class HStore implements Store, HeapSize, StoreConfigInformation, for (HStoreFile storeFile : results) { if (compactedStoreFiles.contains(storeFile.getPath().getName())) { LOG.warn("Clearing the compacted storefile {} from {}", storeFile, this); - storeFile.getReader().close(true); + storeFile.getReader().close(storeFile.getCacheConf() != null ? + storeFile.getCacheConf().shouldEvictOnClose() : true); filesToRemove.add(storeFile); } } @@ -956,7 +957,8 @@ public class HStore implements Store, HeapSize, StoreConfigInformation, storeEngine.getStoreFileManager().clearCompactedFiles(); // clear the compacted files if (CollectionUtils.isNotEmpty(compactedfiles)) { - removeCompactedfiles(compactedfiles); + removeCompactedfiles(compactedfiles, cacheConf != null ? + cacheConf.shouldEvictOnClose() : true); } if (!result.isEmpty()) { // initialize the thread pool for closing store files in parallel. @@ -2705,7 +2707,7 @@ public class HStore implements Store, HeapSize, StoreConfigInformation, lock.readLock().unlock(); } if (CollectionUtils.isNotEmpty(copyCompactedfiles)) { - removeCompactedfiles(copyCompactedfiles); + removeCompactedfiles(copyCompactedfiles, true); } } finally { archiveLock.unlock(); @@ -2715,8 +2717,10 @@ public class HStore implements Store, HeapSize, StoreConfigInformation, /** * Archives and removes the compacted files * @param compactedfiles The compacted files in this store that are not active in reads + * @param evictOnClose true if blocks should be evicted from the cache when an HFile reader is + * closed, false if not */ - private void removeCompactedfiles(Collection compactedfiles) + private void removeCompactedfiles(Collection compactedfiles, boolean evictOnClose) throws IOException { final List filesToRemove = new ArrayList<>(compactedfiles.size()); final List storeFileSizes = new ArrayList<>(compactedfiles.size()); @@ -2741,7 +2745,7 @@ public class HStore implements Store, HeapSize, StoreConfigInformation, LOG.trace("Closing and archiving the file {}", file); // Copy the file size before closing the reader final long length = r.length(); - r.close(true); + r.close(evictOnClose); // Just close and return filesToRemove.add(file); // Only add the length if we successfully added the file to `filesToRemove`