diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index dba995638bb..ea0b1ef35cf 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -7277,8 +7277,8 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi return r.openHRegion(null); } - public static void warmupHRegion(final RegionInfo info, final TableDescriptor htd, final WAL wal, - final Configuration conf, final RegionServerServices rsServices, + public static HRegion warmupHRegion(final RegionInfo info, final TableDescriptor htd, + final WAL wal, final Configuration conf, final RegionServerServices rsServices, final CancelableProgressable reporter) throws IOException { Objects.requireNonNull(info, "RegionInfo cannot be null"); @@ -7294,6 +7294,8 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi } HRegion r = HRegion.newHRegion(tableDir, wal, fs, conf, info, htd, null); r.initializeWarmup(reporter); + r.close(); + return r; } /** 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 ec47ebf8da8..63e0ac50b92 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 @@ -243,6 +243,8 @@ public class HStore // SFT implementations. private final Supplier storeFileWriterCreationTrackerFactory; + private final boolean warmup; + /** * Constructor * @param family HColumnDescriptor for this column @@ -290,6 +292,7 @@ public class HStore this.compactionCheckMultiplier = DEFAULT_COMPACTCHECKER_INTERVAL_MULTIPLIER; } + this.warmup = warmup; this.storeEngine = createStoreEngine(this, this.conf, region.getCellComparator()); storeEngine.initialize(warmup); // if require writing to tmp dir first, then we just return null, which indicate that we do not @@ -740,7 +743,7 @@ public class HStore public Void call() throws IOException { boolean evictOnClose = getCacheConfig() != null ? getCacheConfig().shouldEvictOnClose() : true; - f.closeStoreFile(evictOnClose); + f.closeStoreFile(!warmup && evictOnClose); return null; } }); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestWarmupRegion.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestWarmupRegion.java index a58f291925c..fdfd919bd39 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestWarmupRegion.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestWarmupRegion.java @@ -126,7 +126,7 @@ public class TestWarmupRegion { */ @After public void tearDown() throws Exception { - // Nothing to do. + TEST_UTIL.deleteTable(TABLENAME); } protected void runwarmup() throws InterruptedException { @@ -170,4 +170,16 @@ public class TestWarmupRegion { serverid = (serverid + 1) % 2; } } + + @Test + public void testWarmupAndClose() throws IOException { + HRegionServer rs = TEST_UTIL.getMiniHBaseCluster().getRegionServer(0); + HRegion region = TEST_UTIL.getMiniHBaseCluster().getRegions(TABLENAME).get(0); + RegionInfo info = region.getRegionInfo(); + + TableDescriptor htd = table.getDescriptor(); + HRegion warmedUpRegion = + warmupHRegion(info, htd, rs.getWAL(info), rs.getConfiguration(), rs, null); + assertTrue(warmedUpRegion.isClosed()); + } }