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 89969ef..b61b51a 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 @@ -122,6 +122,7 @@ import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore; import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionServerInfo; +import org.apache.hadoop.hbase.protobuf.generated.WALProtos; import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos; import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode; import org.apache.hadoop.hbase.quotas.MasterQuotaManager; @@ -1630,11 +1631,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { } // 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. @@ -1648,6 +1645,18 @@ public class HMaster extends HRegionServer implements MasterServices, Server { } } + 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 invalid."; + + LOG.warn(message); + throw new DoNotRetryIOException(message); + } + } + private void checkCompactionPolicy(Configuration conf, HTableDescriptor htd) throws IOException { // FIFO compaction has some requirements @@ -1881,6 +1890,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { checkInitialized(); checkCompression(columnDescriptor); checkEncryption(conf, columnDescriptor); + checkReplicationScope(columnDescriptor); if (cpHost != null) { if (cpHost.preAddColumn(tableName, columnDescriptor)) { return; @@ -1907,6 +1917,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server { checkInitialized(); checkCompression(descriptor); checkEncryption(conf, descriptor); + checkReplicationScope(descriptor); if (cpHost != null) { if (cpHost.preModifyColumn(tableName, descriptor)) { return;