Repository: hbase Updated Branches: refs/heads/master 7406c83ef -> e0580b20d
HBASE-19243 Start mini cluster once before class for TestFIFOCompactionPolicy Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/e0580b20 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/e0580b20 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/e0580b20 Branch: refs/heads/master Commit: e0580b20d14e47a7941f0ca5a37ee6bbbcf044c8 Parents: 7406c83 Author: zhangduo <zhang...@apache.org> Authored: Mon Nov 13 22:03:48 2017 +0800 Committer: zhangduo <zhang...@apache.org> Committed: Tue Nov 14 15:40:24 2017 +0800 ---------------------------------------------------------------------- .../compactions/TestFIFOCompactionPolicy.java | 136 +++++++------------ 1 file changed, 49 insertions(+), 87 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/e0580b20/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestFIFOCompactionPolicy.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestFIFOCompactionPolicy.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestFIFOCompactionPolicy.java index 166fede..d06855b 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestFIFOCompactionPolicy.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestFIFOCompactionPolicy.java @@ -18,17 +18,18 @@ package org.apache.hadoop.hbase.regionserver.compactions; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.List; -import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hbase.DoNotRetryIOException; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.MiniHBaseCluster; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.Waiter.ExplainingPredicate; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder; import org.apache.hadoop.hbase.client.Put; @@ -40,7 +41,6 @@ import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.HRegionServer; import org.apache.hadoop.hbase.regionserver.HStore; -import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.testclassification.RegionServerTests; import org.apache.hadoop.hbase.util.Bytes; @@ -49,30 +49,33 @@ import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.JVMClusterUtil; import org.apache.hadoop.hbase.util.TimeOffsetEnvironmentEdge; import org.junit.AfterClass; -import org.junit.Assert; import org.junit.BeforeClass; +import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.junit.rules.ExpectedException; @Category({ RegionServerTests.class, MediumTests.class }) public class TestFIFOCompactionPolicy { private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility(); - private final TableName tableName = TableName.valueOf(getClass().getSimpleName()); private final byte[] family = Bytes.toBytes("f"); private final byte[] qualifier = Bytes.toBytes("q"); + @Rule + public ExpectedException error = ExpectedException.none(); + private HStore getStoreWithName(TableName tableName) { MiniHBaseCluster cluster = TEST_UTIL.getMiniHBaseCluster(); List<JVMClusterUtil.RegionServerThread> rsts = cluster.getRegionServerThreads(); for (int i = 0; i < cluster.getRegionServerThreads().size(); i++) { HRegionServer hrs = rsts.get(i).getRegionServer(); - for (Region region : hrs.getRegions(tableName)) { - return ((HRegion) region).getStores().iterator().next(); + for (HRegion region : hrs.getRegions(tableName)) { + return region.getStores().iterator().next(); } } return null; @@ -80,10 +83,6 @@ public class TestFIFOCompactionPolicy { private HStore prepareData() throws IOException { Admin admin = TEST_UTIL.getAdmin(); - if (admin.tableExists(tableName)) { - admin.disableTable(tableName); - admin.deleteTable(tableName); - } TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName) .setValue(DefaultStoreEngine.DEFAULT_COMPACTION_POLICY_CLASS_KEY, FIFOCompactionPolicy.class.getName()) @@ -91,16 +90,14 @@ public class TestFIFOCompactionPolicy { DisabledRegionSplitPolicy.class.getName()) .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family).setTimeToLive(1).build()) .build(); - admin.createTable(desc); Table table = TEST_UTIL.getConnection().getTable(tableName); - Random rand = new Random(); TimeOffsetEnvironmentEdge edge = (TimeOffsetEnvironmentEdge) EnvironmentEdgeManager.getDelegate(); for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { byte[] value = new byte[128 * 1024]; - rand.nextBytes(value); + ThreadLocalRandom.current().nextBytes(value); table.put(new Put(Bytes.toBytes(i * 10 + j)).addColumn(family, qualifier, value)); } admin.flush(tableName); @@ -109,77 +106,59 @@ public class TestFIFOCompactionPolicy { return getStoreWithName(tableName); } - @BeforeClass - public static void setEnvironmentEdge() - { + @BeforeClass + public static void setEnvironmentEdge() throws Exception { EnvironmentEdge ee = new TimeOffsetEnvironmentEdge(); EnvironmentEdgeManager.injectEdge(ee); + Configuration conf = TEST_UTIL.getConfiguration(); + conf.setInt(HStore.BLOCKING_STOREFILES_KEY, 10000); + TEST_UTIL.startMiniCluster(1); } - + @AfterClass - public static void resetEnvironmentEdge() - { + public static void resetEnvironmentEdge() throws Exception { + TEST_UTIL.shutdownMiniCluster(); EnvironmentEdgeManager.reset(); } - + @Test public void testPurgeExpiredFiles() throws Exception { - Configuration conf = TEST_UTIL.getConfiguration(); - conf.setInt(HStore.BLOCKING_STOREFILES_KEY, 10000); + HStore store = prepareData(); + assertEquals(10, store.getStorefilesCount()); + TEST_UTIL.getAdmin().majorCompact(tableName); + TEST_UTIL.waitFor(30000, new ExplainingPredicate<Exception>() { + + @Override + public boolean evaluate() throws Exception { + return store.getStorefilesCount() == 1; + } - TEST_UTIL.startMiniCluster(1); - try { - HStore store = prepareData(); - assertEquals(10, store.getStorefilesCount()); - TEST_UTIL.getAdmin().majorCompact(tableName); - while (store.getStorefilesCount() > 1) { - Thread.sleep(100); + @Override + public String explainFailure() throws Exception { + return "The store file count " + store.getStorefilesCount() + " is still greater than 1"; } - assertTrue(store.getStorefilesCount() == 1); - } finally { - TEST_UTIL.shutdownMiniCluster(); - } + }); } - - @Test - public void testSanityCheckTTL() throws Exception { - Configuration conf = TEST_UTIL.getConfiguration(); - conf.setInt(HStore.BLOCKING_STOREFILES_KEY, 10000); - TEST_UTIL.startMiniCluster(1); - Admin admin = TEST_UTIL.getAdmin(); + @Test + public void testSanityCheckTTL() throws IOException { + error.expect(DoNotRetryIOException.class); + error.expectMessage("Default TTL is not supported"); TableName tableName = TableName.valueOf(getClass().getSimpleName() + "-TTL"); - if (admin.tableExists(tableName)) { - admin.disableTable(tableName); - admin.deleteTable(tableName); - } TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName) .setValue(DefaultStoreEngine.DEFAULT_COMPACTION_POLICY_CLASS_KEY, FIFOCompactionPolicy.class.getName()) .setValue(HConstants.HBASE_REGION_SPLIT_POLICY_KEY, DisabledRegionSplitPolicy.class.getName()) .addColumnFamily(ColumnFamilyDescriptorBuilder.of(family)).build(); - try { - admin.createTable(desc); - Assert.fail(); - } catch (Exception e) { - } finally { - TEST_UTIL.shutdownMiniCluster(); - } + TEST_UTIL.getAdmin().createTable(desc); } @Test - public void testSanityCheckMinVersion() throws Exception { - Configuration conf = TEST_UTIL.getConfiguration(); - conf.setInt(HStore.BLOCKING_STOREFILES_KEY, 10000); - TEST_UTIL.startMiniCluster(1); - - Admin admin = TEST_UTIL.getAdmin(); + public void testSanityCheckMinVersion() throws IOException { + error.expect(DoNotRetryIOException.class); + error.expectMessage("MIN_VERSION > 0 is not supported for FIFO compaction"); TableName tableName = TableName.valueOf(getClass().getSimpleName() + "-MinVersion"); - if (admin.tableExists(tableName)) { - admin.disableTable(tableName); - admin.deleteTable(tableName); - } TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName) .setValue(DefaultStoreEngine.DEFAULT_COMPACTION_POLICY_CLASS_KEY, FIFOCompactionPolicy.class.getName()) @@ -188,40 +167,23 @@ public class TestFIFOCompactionPolicy { .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family).setTimeToLive(1) .setMinVersions(1).build()) .build(); - try { - admin.createTable(desc); - Assert.fail(); - } catch (Exception e) { - } finally { - TEST_UTIL.shutdownMiniCluster(); - } + TEST_UTIL.getAdmin().createTable(desc); } - - @Test - public void testSanityCheckBlockingStoreFiles() throws Exception { - Configuration conf = TEST_UTIL.getConfiguration(); - conf.setInt(HStore.BLOCKING_STOREFILES_KEY, 10); - TEST_UTIL.startMiniCluster(1); - Admin admin = TEST_UTIL.getAdmin(); + @Test + public void testSanityCheckBlockingStoreFiles() throws IOException { + error.expect(DoNotRetryIOException.class); + error.expectMessage("Blocking file count 'hbase.hstore.blockingStoreFiles'"); + error.expectMessage("is below recommended minimum of 1000 for column family"); TableName tableName = TableName.valueOf(getClass().getSimpleName() + "-BlockingStoreFiles"); - if (admin.tableExists(tableName)) { - admin.disableTable(tableName); - admin.deleteTable(tableName); - } TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName) .setValue(DefaultStoreEngine.DEFAULT_COMPACTION_POLICY_CLASS_KEY, FIFOCompactionPolicy.class.getName()) .setValue(HConstants.HBASE_REGION_SPLIT_POLICY_KEY, DisabledRegionSplitPolicy.class.getName()) + .setValue(HStore.BLOCKING_STOREFILES_KEY, "10") .addColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family).setTimeToLive(1).build()) .build(); - try { - admin.createTable(desc); - Assert.fail(); - } catch (Exception e) { - } finally { - TEST_UTIL.shutdownMiniCluster(); - } + TEST_UTIL.getAdmin().createTable(desc); } }