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 bdb19f4..e597a2a 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 @@ -92,9 +92,11 @@ import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory; import org.apache.hadoop.hbase.master.cleaner.HFileCleaner; import org.apache.hadoop.hbase.master.cleaner.LogCleaner; import org.apache.hadoop.hbase.master.handler.DispatchMergingRegionHandler; +import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan; import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer; import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore; import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory; +import org.apache.hadoop.hbase.master.normalizer.SplitNormalizationPlan; import org.apache.hadoop.hbase.master.procedure.AddColumnFamilyProcedure; import org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure; import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure; @@ -124,6 +126,7 @@ import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRespo import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionServerInfo; import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode; import org.apache.hadoop.hbase.quotas.MasterQuotaManager; +import org.apache.hadoop.hbase.quotas.QuotaExceededException; import org.apache.hadoop.hbase.quotas.RegionStateListener; import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine; import org.apache.hadoop.hbase.regionserver.HRegionServer; @@ -1353,10 +1356,11 @@ public class HMaster extends HRegionServer implements MasterServices, Server { Collections.shuffle(allEnabledTables); for (TableName table : allEnabledTables) { + boolean checkQuota = false; if (quotaManager.getNamespaceQuotaManager() != null && + quotaManager.isQuotaEnabled() && quotaManager.getNamespaceQuotaManager().getState(table.getNamespaceAsString()) != null){ - LOG.debug("Skipping normalizing " + table + " since its namespace has quota"); - continue; + checkQuota = true; } TableDescriptor tblDesc = getTableDescriptors().getDescriptor(table); if (table.isSystemTable() || (tblDesc != null && @@ -1366,7 +1370,17 @@ public class HMaster extends HRegionServer implements MasterServices, Server { + " table or doesn't have auto normalization turned on"); continue; } - this.normalizer.computePlanForTable(table).execute(clusterConnection.getAdmin()); + NormalizationPlan plan = this.normalizer.computePlanForTable(table); + if (checkQuota && plan instanceof SplitNormalizationPlan) { + HRegionInfo hri = ((SplitNormalizationPlan) plan).getRegionInfo(); + try { + quotaManager.getNamespaceQuotaManager().checkQuotaToSplitRegion(hri); + } catch (QuotaExceededException qee) { + LOG.debug("Skipping normalization for " + hri + ", as quota would be exceeded"); + continue; + } + } + plan.execute(clusterConnection.getAdmin()); } } // If Region did not generate any plans, it means the cluster is already balanced.