From 94bde4e6bbe4b2b934b44df9aea4970e454b1696 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Mon, 3 Jun 2019 13:45:14 +0900 Subject: [PATCH] HBASE-22529 Add sanity check for in-memory compaction policy --- .../main/java/org/apache/hadoop/hbase/master/HMaster.java | 7 +++++++ .../hadoop/hbase/client/TestIllegalTableDescriptor.java | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index 4f5edf7a3e..b6a6efae43 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -2244,6 +2244,13 @@ public class HMaster extends HRegionServer implements MasterServices { warnOrThrowExceptionForFailure(logWarn, CONF_KEY, message, null); } + // check in-memory compaction + try { + hcd.getInMemoryCompaction(); + } catch (IllegalArgumentException e) { + warnOrThrowExceptionForFailure(logWarn, CONF_KEY, e.getMessage(), e); + } + // TODO: should we check coprocessors and encryption ? } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestIllegalTableDescriptor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestIllegalTableDescriptor.java index 0bb2b3f93e..34f9c3d765 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestIllegalTableDescriptor.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestIllegalTableDescriptor.java @@ -31,6 +31,7 @@ import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; +import org.apache.hadoop.hbase.MemoryCompactionPolicy; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.master.HMaster; import org.apache.hadoop.hbase.testclassification.ClientTests; @@ -152,6 +153,11 @@ public class TestIllegalTableDescriptor { hcd.setScope(0); checkTableIsLegal(htd); + hcd.setValue(ColumnFamilyDescriptorBuilder.IN_MEMORY_COMPACTION, "INVALID"); + checkTableIsIllegal(htd); + hcd.setValue(ColumnFamilyDescriptorBuilder.IN_MEMORY_COMPACTION, "NONE"); + checkTableIsLegal(htd); + try { hcd.setDFSReplication((short) -1); fail("Illegal value for setDFSReplication did not throw"); -- 2.19.2