Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (revision 1360668) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (working copy) @@ -101,6 +101,7 @@ import org.apache.hadoop.hbase.replication.regionserver.Replication; import org.apache.hadoop.hbase.security.User; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.util.CompressionTest; import org.apache.hadoop.hbase.util.FSTableDescriptors; import org.apache.hadoop.hbase.util.HasThread; import org.apache.hadoop.hbase.util.InfoServer; @@ -285,6 +286,9 @@ */ private ObjectName mxBean = null; + //should we check the compression codec type at master side, default true, HBASE-6370 + private final boolean masterCheckCompression; + /** * Initializes the HMaster. The steps are as follows: *

@@ -352,6 +356,9 @@ this.metrics = new MasterMetrics(getServerName().toString()); // metrics interval: using the same property as region server. this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000); + + //should we check the compression codec type at master side, default true, HBASE-6370 + this.masterCheckCompression = conf.getBoolean("hbase.master.check.compression", true); } /** @@ -1376,6 +1383,7 @@ HRegionInfo [] newRegions = getHRegionInfos(hTableDescriptor, splitKeys); checkInitialized(); + checkCompression(hTableDescriptor); if (cpHost != null) { cpHost.preCreateTable(hTableDescriptor, newRegions); } @@ -1389,6 +1397,21 @@ } + private void checkCompression(final HTableDescriptor htd) + throws IOException { + if (!this.masterCheckCompression) return; + for (HColumnDescriptor hcd : htd.getColumnFamilies()) { + checkCompression(hcd); + } + } + + private void checkCompression(final HColumnDescriptor hcd) + throws IOException { + if (!this.masterCheckCompression) return; + CompressionTest.testCompression(hcd.getCompression()); + CompressionTest.testCompression(hcd.getCompactionCompression()); + } + @Override public CreateTableResponse createTable(RpcController controller, CreateTableRequest req) throws ServiceException { @@ -1505,6 +1528,7 @@ try { checkInitialized(); + checkCompression(descriptor); if (cpHost != null) { if (cpHost.preModifyColumn(tableName, descriptor)) { return ModifyColumnResponse.newBuilder().build(); @@ -1626,6 +1650,7 @@ HTableDescriptor htd = HTableDescriptor.convert(req.getTableSchema()); try { checkInitialized(); + checkCompression(htd); if (cpHost != null) { cpHost.preModifyTable(tableName, htd); }