This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push: new d3c020b [feat-opt](fe-config) Add tablets number limit to void wrong usage (#7025) d3c020b is described below commit d3c020b3cb131d765018a168c1b8c6e304bf1626 Author: tianhui5 <827677...@qq.com> AuthorDate: Wed Nov 24 10:37:54 2021 +0800 [feat-opt](fe-config) Add tablets number limit to void wrong usage (#7025) 1. Add new FE config `default_db_replica_quota_size` 2. Check replica quota after create table/partition --- docs/en/administrator-guide/config/fe_config.md | 17 +++++++++++ docs/zh-CN/administrator-guide/config/fe_config.md | 17 +++++++++++ .../java/org/apache/doris/catalog/Catalog.java | 35 ++++++++++++++++++++++ .../java/org/apache/doris/catalog/Database.java | 5 ++-- .../main/java/org/apache/doris/common/Config.java | 6 ++++ .../java/org/apache/doris/common/FeConstants.java | 1 - 6 files changed, 77 insertions(+), 4 deletions(-) diff --git a/docs/en/administrator-guide/config/fe_config.md b/docs/en/administrator-guide/config/fe_config.md index 4961287..b2bb019 100644 --- a/docs/en/administrator-guide/config/fe_config.md +++ b/docs/en/administrator-guide/config/fe_config.md @@ -249,6 +249,23 @@ View configuration show data (Detail:HELP SHOW DATA) ``` +### default_db_replica_quota_size + +Default: 1073741824 + +IsMutable:true + +MasterOnly:true + +Used to set the default database replica quota. To set the quota size of a single database, you can use: + +``` +Set the database replica quota +ALTER DATABASE db_name SET REPLICA QUOTA quota; +View configuration +show data (Detail:HELP SHOW DATA) +``` + ### enable_batch_delete_by_default Default:false diff --git a/docs/zh-CN/administrator-guide/config/fe_config.md b/docs/zh-CN/administrator-guide/config/fe_config.md index 09c5c44..ce4b7a7 100644 --- a/docs/zh-CN/administrator-guide/config/fe_config.md +++ b/docs/zh-CN/administrator-guide/config/fe_config.md @@ -243,6 +243,23 @@ ALTER DATABASE db_name SET DATA QUOTA quota; show data (其他用法:HELP SHOW DATA) ``` +### default_db_replica_quota_size + +默认值:1073741824 + +是否可以动态配置:true + +是否为 Master FE 节点独有的配置项:true + +用于设置默认数据库Replica数量配额大小,设置单个数据库配额大小可以使用: + +``` +设置数据库Replica数量配额 +ALTER DATABASE db_name SET REPLICA QUOTA quota; +查看配置 +show data (其他用法:HELP SHOW DATA) +``` + ### enable_batch_delete_by_default 默认值:false diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java index 6cf0aca..b56393b 100755 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java @@ -3255,6 +3255,16 @@ public class Catalog { DataProperty dataProperty = singlePartitionDesc.getPartitionDataProperty(); Preconditions.checkNotNull(dataProperty); + // check replica quota if this operation done + long indexNum = indexIdToMeta.size(); + long bucketNum = distributionInfo.getBucketNum(); + long replicaNum = singlePartitionDesc.getReplicaAlloc().getTotalReplicaNum(); + long totalReplicaNum = indexNum * bucketNum * replicaNum; + if (totalReplicaNum >= db.getReplicaQuotaLeftWithLock()) { + throw new DdlException("Database " + db.getFullName() + " table " + tableName + + " add partition increasing " + totalReplicaNum + + " of replica exceeds quota[" + db.getReplicaQuota() + "]"); + } Set<Long> tabletIdSet = new HashSet<Long>(); try { long partitionId = getNextId(); @@ -3837,6 +3847,17 @@ public class Catalog { // use table name as partition name String partitionName = tableName; long partitionId = partitionNameToId.get(partitionName); + + // check replica quota if this operation done + long indexNum = olapTable.getIndexIdToMeta().size(); + long bucketNum = distributionInfo.getBucketNum(); + long replicaNum = partitionInfo.getReplicaAllocation(partitionId).getTotalReplicaNum(); + long totalReplicaNum = indexNum * bucketNum * replicaNum; + if (totalReplicaNum >= db.getReplicaQuotaLeftWithLock()) { + throw new DdlException("Database " + db.getFullName() + " create unpartitioned table " + + tableName + " increasing " + totalReplicaNum + + " of replica exceeds quota[" + db.getReplicaQuota() + "]"); + } // create partition Partition partition = createPartitionWithIndices(db.getClusterName(), db.getId(), olapTable.getId(), olapTable.getBaseIndexId(), @@ -3872,6 +3893,20 @@ public class Catalog { throw new DdlException(e.getMessage()); } + // check replica quota if this operation done + long totalReplicaNum = 0; + for (Map.Entry<String, Long> entry : partitionNameToId.entrySet()) { + long indexNum = olapTable.getIndexIdToMeta().size(); + long bucketNum = distributionInfo.getBucketNum(); + long replicaNum = partitionInfo.getReplicaAllocation(entry.getValue()).getTotalReplicaNum(); + totalReplicaNum += indexNum * bucketNum * replicaNum; + } + if (totalReplicaNum >= db.getReplicaQuotaLeftWithLock()) { + throw new DdlException("Database " + db.getFullName() + " create table " + + tableName + " increasing " + totalReplicaNum + + " of replica exceeds quota[" + db.getReplicaQuota() + "]"); + } + // this is a 2-level partitioned tables for (Map.Entry<String, Long> entry : partitionNameToId.entrySet()) { DataProperty dataProperty = partitionInfo.getDataProperty(entry.getValue()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java index 2e2bab2..9699c8b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java @@ -23,7 +23,6 @@ import org.apache.doris.common.AnalysisException; import org.apache.doris.common.Config; import org.apache.doris.common.DdlException; import org.apache.doris.common.ErrorCode; -import org.apache.doris.common.FeConstants; import org.apache.doris.common.FeMetaVersion; import org.apache.doris.common.MetaNotFoundException; import org.apache.doris.common.Pair; @@ -120,7 +119,7 @@ public class Database extends MetaObject implements Writable { this.nameToTable = Maps.newConcurrentMap(); this.lowerCaseToTableName = Maps.newConcurrentMap(); this.dataQuotaBytes = Config.default_db_data_quota_bytes; - this.replicaQuotaSize = FeConstants.default_db_replica_quota_size; + this.replicaQuotaSize = Config.default_db_replica_quota_size; this.dbState = DbState.NORMAL; this.attachDbName = ""; this.clusterName = ""; @@ -667,7 +666,7 @@ public class Database extends MetaObject implements Writable { if (Catalog.getCurrentCatalogJournalVersion() >= FeMetaVersion.VERSION_81) { replicaQuotaSize = in.readLong(); } else { - replicaQuotaSize = FeConstants.default_db_replica_quota_size; + replicaQuotaSize = Config.default_db_replica_quota_size; } if (Catalog.getCurrentCatalogJournalVersion() >= FeMetaVersion.VERSION_105) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/Config.java b/fe/fe-core/src/main/java/org/apache/doris/common/Config.java index bd8f152..2334138 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/Config.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/Config.java @@ -1394,6 +1394,12 @@ public class Config extends ConfigBase { @ConfField(mutable = true, masterOnly = true) public static long default_db_data_quota_bytes = 1024L * 1024 * 1024 * 1024 * 1024L; // 1PB + /** + * Used to set default db replica quota num. + */ + @ConfField(mutable = true, masterOnly = true) + public static long default_db_replica_quota_size = 1024 * 1024 * 1024; + /* * Maximum percentage of data that can be filtered (due to reasons such as data is irregularly) * The default value is 0. diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/FeConstants.java b/fe/fe-core/src/main/java/org/apache/doris/common/FeConstants.java index 49806fc..54b755c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/FeConstants.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/FeConstants.java @@ -30,7 +30,6 @@ public class FeConstants { */ public static int shortkey_max_column_count = 3; public static int shortkey_maxsize_bytes = 36; - public static long default_db_replica_quota_size = 1024 * 1024 * 1024; public static int heartbeat_interval_second = 5; public static int checkpoint_interval_second = 60; // 1 minutes --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org