From 233ca65b8f1c180f9099c0f35d6cc44fd43d5131 Mon Sep 17 00:00:00 2001 From: tedyu Date: Wed, 17 Aug 2016 07:58:06 -0700 Subject: [PATCH] HBASE-16419 check REPLICATION_SCOPE's value more stringently (Guangxu Cheng) --- .../apache/hadoop/hbase/master/HMaster.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) 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 2022c5ef91c..97ad3944826 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 @@ -131,6 +131,7 @@ import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore; import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState; import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionServerInfo; +import org.apache.hadoop.hbase.protobuf.generated.WALProtos; import org.apache.hadoop.hbase.quotas.MasterQuotaManager; import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine; import org.apache.hadoop.hbase.regionserver.HRegionServer; @@ -1581,11 +1582,7 @@ public class HMaster extends HRegionServer implements MasterServices { } // check replication scope - if (hcd.getScope() < 0) { - String message = "Replication scope for column family " - + hcd.getNameAsString() + " must be positive."; - warnOrThrowExceptionForFailure(logWarn, CONF_KEY, message, null); - } + checkReplicationScope(hcd); // check data replication factor, it can be 0(default value) when user has not explicitly // set the value, in this case we use default replication factor set in the file system. @@ -1599,6 +1596,18 @@ public class HMaster extends HRegionServer implements MasterServices { } } + private void checkReplicationScope(HColumnDescriptor hcd) throws IOException{ + // check replication scope + WALProtos.ScopeType scop = WALProtos.ScopeType.valueOf(hcd.getScope()); + if (scop == null) { + String message = "Replication scope for column family " + + hcd.getNameAsString() + " is " + hcd.getScope() + " which is invalid."; + + LOG.error(message); + throw new DoNotRetryIOException(message); + } + } + private void checkCompactionPolicy(Configuration conf, HTableDescriptor htd) throws IOException { // FIFO compaction has some requirements @@ -1833,6 +1842,7 @@ public class HMaster extends HRegionServer implements MasterServices { checkInitialized(); checkCompression(columnDescriptor); checkEncryption(conf, columnDescriptor); + checkReplicationScope(columnDescriptor); if (cpHost != null) { if (cpHost.preAddColumn(tableName, columnDescriptor)) { return -1; @@ -1860,6 +1870,7 @@ public class HMaster extends HRegionServer implements MasterServices { checkInitialized(); checkCompression(descriptor); checkEncryption(conf, descriptor); + checkReplicationScope(descriptor); if (cpHost != null) { if (cpHost.preModifyColumn(tableName, descriptor)) { return -1;