From 615edc594ac93f4b783de96e4c2d1179b773d418 Mon Sep 17 00:00:00 2001 From: Artem Ervits Date: Tue, 23 Oct 2018 14:22:58 -0400 Subject: [PATCH] HBASE-21175 Partially initialized SnapshotHFileCleaner leads to NPE during TestHFileArchiving --- .../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java | 9 +++++++++ .../java/org/apache/hadoop/hbase/backup/TestHFileArchiving.java | 8 +++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java index 47b0228a31..7ad6177764 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java @@ -32,6 +32,8 @@ import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.Stoppable; import org.apache.hadoop.hbase.io.HFileLink; +import org.apache.hadoop.hbase.master.HMaster; +import org.apache.hadoop.hbase.master.MasterServices; import org.apache.hadoop.hbase.regionserver.StoreFileInfo; import org.apache.hadoop.hbase.util.StealJobQueue; import org.apache.yetus.audience.InterfaceAudience; @@ -44,6 +46,7 @@ import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesti */ @InterfaceAudience.Private public class HFileCleaner extends CleanerChore { + private MasterServices master; public static final String MASTER_HFILE_CLEANER_PLUGINS = "hbase.master.hfilecleaner.plugins"; @@ -496,4 +499,10 @@ public class HFileCleaner extends CleanerChore { t.interrupt(); } } + + public void init(Map params) { + if (params != null && params.containsKey(HMaster.MASTER)) { + this.master = (MasterServices) params.get(HMaster.MASTER); + } + } } diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestHFileArchiving.java hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestHFileArchiving.java index dfebd38a0a..7abe2a2c98 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestHFileArchiving.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/backup/TestHFileArchiving.java @@ -34,11 +34,9 @@ import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.master.cleaner.HFileCleaner; -import org.apache.hadoop.hbase.regionserver.CompactingMemStore; import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.HRegionServer; -import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.testclassification.MiscTests; import org.apache.hadoop.hbase.util.Bytes; @@ -49,6 +47,7 @@ import org.apache.hadoop.hbase.util.StoppableImplementation; import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; +import static org.junit.Assert.assertNotNull; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; @@ -209,7 +208,7 @@ public class TestHFileArchiving { PathFilter nonHidden = new PathFilter() { @Override public boolean accept(Path file) { - return dirFilter.accept(file) && !file.getName().toString().startsWith("."); + return dirFilter.accept(file) && !file.getName().startsWith("."); } }; FileStatus[] storeDirs = FSUtils.listStatus(fs, regionDir, nonHidden); @@ -375,10 +374,9 @@ public class TestHFileArchiving { // The cleaner should be looping without long pauses to reproduce the race condition. HFileCleaner cleaner = new HFileCleaner(1, stoppable, conf, fs, archiveDir); - assertFalse("cleaner should not be null", cleaner == null); + assertNotNull("cleaner should not be null", cleaner); try { choreService.scheduleChore(cleaner); - // Keep creating/archiving new files while the cleaner is running in the other thread long startTime = System.currentTimeMillis(); for (long fid = 0; (System.currentTimeMillis() - startTime) < TEST_TIME; ++fid) { -- 2.16.2