From 998cefc9cef2c5e1a8801ffdb32ef041809af6b2 Mon Sep 17 00:00:00 2001 From: Yongqiang YANG Date: Thu, 26 Jun 2025 19:26:33 +0800 Subject: [PATCH] [chore](conf) change max_running_txn_num_per_db to 10000 (#51367) It was not easy to use for observability use case. Co-authored-by: Yongqiang YANG --- .../src/main/java/org/apache/doris/common/Config.java | 2 +- .../apache/doris/transaction/DatabaseTransactionMgr.java | 6 ++++++ .../src/test/java/org/apache/doris/catalog/FakeEnv.java | 5 +++++ .../java/org/apache/doris/common/proc/DbsProcDirTest.java | 5 +++-- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java index 3fd035fdcb921c..de2604ad011a13 100644 --- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java +++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java @@ -712,7 +712,7 @@ public class Config extends ConfigBase { "单个数据库最大并发运行的事务数,包括 prepare 和 commit 事务。", "Maximum concurrent running txn num including prepare, commit txns under a single db.", "Txn manager will reject coming txns."}) - public static int max_running_txn_num_per_db = 1000; + public static int max_running_txn_num_per_db = 10000; @ConfField(masterOnly = true, description = {"pending load task 执行线程数。这个配置可以限制当前等待的导入作业数。" + "并且应小于 `max_running_txn_num_per_db`。", diff --git a/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java b/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java index 59d5bc571f09a3..119571b7b29f47 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java @@ -36,6 +36,7 @@ import org.apache.doris.common.AnalysisException; import org.apache.doris.common.Config; import org.apache.doris.common.DuplicatedRequestException; +import org.apache.doris.common.FeConstants; import org.apache.doris.common.FeNameFormat; import org.apache.doris.common.LabelAlreadyUsedException; import org.apache.doris.common.LoadException; @@ -314,6 +315,11 @@ public long beginTransaction(List tableIdList, String label, TUniqueId req long listenerId, long timeoutSecond) throws DuplicatedRequestException, LabelAlreadyUsedException, BeginTransactionException, AnalysisException, QuotaExceedException, MetaNotFoundException { + + if (!Env.getCurrentEnv().isMaster() && !FeConstants.runningUnitTest) { + throw new BeginTransactionException("FE is not master"); + } + Database db = env.getInternalCatalog().getDbOrMetaException(dbId); if (!coordinator.isFromInternal) { InternalDatabaseUtil.checkDatabase(db.getFullName(), ConnectContext.get()); diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/FakeEnv.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/FakeEnv.java index 32f32cf9e7ebb3..d4fc9b5d8b0f0e 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/catalog/FakeEnv.java +++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/FakeEnv.java @@ -60,4 +60,9 @@ public static SystemInfoService getCurrentSystemInfo() { return systemInfo; } + @Mock + public boolean isMaster() { + return true; + } + } diff --git a/fe/fe-core/src/test/java/org/apache/doris/common/proc/DbsProcDirTest.java b/fe/fe-core/src/test/java/org/apache/doris/common/proc/DbsProcDirTest.java index 1746f2d6d8c443..0d04afb130e74d 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/common/proc/DbsProcDirTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/common/proc/DbsProcDirTest.java @@ -20,6 +20,7 @@ import org.apache.doris.catalog.Database; import org.apache.doris.catalog.Env; import org.apache.doris.common.AnalysisException; +import org.apache.doris.common.Config; import org.apache.doris.common.FeConstants; import org.apache.doris.datasource.InternalCatalog; import org.apache.doris.transaction.GlobalTransactionMgr; @@ -213,9 +214,9 @@ public void testFetchResultNormal() throws AnalysisException { "LastUpdateTime"), result.getColumnNames()); List> rows = Lists.newArrayList(); rows.add(Arrays.asList(String.valueOf(db1.getId()), db1.getFullName(), "0", "0.000 ", "8388608.000 TB", - FeConstants.null_string, "0", "1073741824", "10", "1000", FeConstants.null_string)); + FeConstants.null_string, "0", "1073741824", "10", String.valueOf(Config.max_running_txn_num_per_db), FeConstants.null_string)); rows.add(Arrays.asList(String.valueOf(db2.getId()), db2.getFullName(), "0", "0.000 ", "8388608.000 TB", - FeConstants.null_string, "0", "1073741824", "20", "1000", FeConstants.null_string)); + FeConstants.null_string, "0", "1073741824", "20", String.valueOf(Config.max_running_txn_num_per_db), FeConstants.null_string)); Assert.assertEquals(rows, result.getRows()); }