This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.1 by this push:
     new 625f83f6093 branch-3.1: [fix](config) fix admin set all frontends 
config #55016 (#55072)
625f83f6093 is described below

commit 625f83f609388668ced03146b46fb363e6bdd055
Author: camby <[email protected]>
AuthorDate: Thu Aug 21 08:39:49 2025 +0800

    branch-3.1: [fix](config) fix admin set all frontends config #55016 (#55072)
    
    pick #55016
---
 .../apache/doris/analysis/AdminSetConfigStmt.java  |  2 +-
 .../main/java/org/apache/doris/catalog/Env.java    |  5 +++--
 .../main/java/org/apache/doris/qe/DdlExecutor.java |  6 +++++-
 .../java/org/apache/doris/qe/StmtExecutor.java     |  2 +-
 .../doris/analysis/AdminSetConfigStmtTest.java     | 23 ++++++++++++++++++----
 5 files changed, 29 insertions(+), 9 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/AdminSetConfigStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/AdminSetConfigStmt.java
index b197c6c2bca..6695a9e9846 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/AdminSetConfigStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/AdminSetConfigStmt.java
@@ -97,7 +97,7 @@ public class AdminSetConfigStmt extends DdlStmt implements 
NotFallbackInParser {
     public OriginStatement getLocalSetStmt() {
         OriginStatement stmt = this.getOrigStmt();
         Object[] keyArr = configs.keySet().toArray();
-        String sql = String.format("ADMIN SET FRONTEND CONFIG (\"%s\" = 
\"%s\");",
+        String sql = String.format("ADMIN SET %s CONFIG (\"%s\" = \"%s\");", 
applyToAll ? "ALL FRONTENDS" : "FRONTEND",
                 keyArr[0].toString(), configs.get(keyArr[0].toString()));
 
         return new OriginStatement(sql, stmt.idx);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
index 4cf16959d24..d2a08ddb657 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
@@ -6136,7 +6136,7 @@ public class Env {
         }
     }
 
-    public void setConfig(AdminSetConfigStmt stmt) throws Exception {
+    public void setConfig(AdminSetConfigStmt stmt, boolean isProxy) throws 
Exception {
         Map<String, String> configs = stmt.getConfigs();
         Preconditions.checkState(configs.size() == 1);
 
@@ -6148,7 +6148,8 @@ public class Env {
             }
         }
 
-        if (stmt.isApplyToAll()) {
+        // if this request already come from other Frontend, do not forward it 
again
+        if (!isProxy && stmt.isApplyToAll()) {
             for (Frontend fe : Env.getCurrentEnv().getFrontends(null /* all 
*/)) {
                 if (!fe.isAlive() || 
fe.getHost().equals(Env.getCurrentEnv().getSelfNode().getHost())) {
                     continue;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
index 03bc3908cf9..e4737e81970 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
@@ -161,6 +161,10 @@ public class DdlExecutor {
      * Execute ddl.
      **/
     public static void execute(Env env, DdlStmt ddlStmt) throws Exception {
+        execute(env, ddlStmt, false);
+    }
+
+    public static void execute(Env env, DdlStmt ddlStmt, boolean isProxy) 
throws Exception {
         checkDdlStmtSupported(ddlStmt);
         if (ddlStmt instanceof CreateDbStmt) {
             env.createDb((CreateDbStmt) ddlStmt);
@@ -297,7 +301,7 @@ public class DdlExecutor {
         } else if (ddlStmt instanceof AdminCompactTableStmt) {
             env.compactTable((AdminCompactTableStmt) ddlStmt);
         } else if (ddlStmt instanceof AdminSetConfigStmt) {
-            env.setConfig((AdminSetConfigStmt) ddlStmt);
+            env.setConfig((AdminSetConfigStmt) ddlStmt, isProxy);
         } else if (ddlStmt instanceof AdminSetTableStatusStmt) {
             env.setTableStatus((AdminSetTableStatusStmt) ddlStmt);
         } else if (ddlStmt instanceof CreateFileStmt) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index f1ebd8a3156..2ac7467280e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -3168,7 +3168,7 @@ public class StmtExecutor {
 
     private void handleDdlStmt() {
         try {
-            DdlExecutor.execute(context.getEnv(), (DdlStmt) parsedStmt);
+            DdlExecutor.execute(context.getEnv(), (DdlStmt) parsedStmt, 
isProxy);
             if (!(parsedStmt instanceof AnalyzeStmt)) {
                 context.getState().setOk();
             }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/AdminSetConfigStmtTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/AdminSetConfigStmtTest.java
index a8dce790f65..95bf073929a 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/analysis/AdminSetConfigStmtTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/analysis/AdminSetConfigStmtTest.java
@@ -39,7 +39,8 @@ public class AdminSetConfigStmtTest extends TestWithFeService 
{
     public void testNormal() throws Exception {
         String stmt = "admin set frontend 
config(\"alter_table_timeout_second\" = \"60\");";
         AdminSetConfigStmt adminSetConfigStmt = (AdminSetConfigStmt) 
parseAndAnalyzeStmt(stmt);
-        Env.getCurrentEnv().setConfig(adminSetConfigStmt);
+        Env.getCurrentEnv().setConfig(adminSetConfigStmt, false);
+        
Assertions.assertTrue(adminSetConfigStmt.getLocalSetStmt().originStmt.startsWith("ADMIN
 SET FRONTEND CONFIG"));
     }
 
     @Test
@@ -47,7 +48,7 @@ public class AdminSetConfigStmtTest extends TestWithFeService 
{
         String stmt = "admin set frontend config(\"unknown_config\" = 
\"unknown\");";
         AdminSetConfigStmt adminSetConfigStmt = (AdminSetConfigStmt) 
parseAndAnalyzeStmt(stmt);
         DdlException exception = Assertions.assertThrows(DdlException.class,
-                () -> Env.getCurrentEnv().setConfig(adminSetConfigStmt));
+                () -> Env.getCurrentEnv().setConfig(adminSetConfigStmt, 
false));
         Assertions.assertEquals("errCode = 2, detailMessage = Config 
'unknown_config' does not exist",
                 exception.getMessage());
     }
@@ -66,14 +67,14 @@ public class AdminSetConfigStmtTest extends 
TestWithFeService {
         boolean enableMtmv = Config.enable_mtmv;
         String stmt = "admin set frontend config('enable_mtmv' = '" + 
String.valueOf(!enableMtmv) + "');";
         AdminSetConfigStmt adminSetConfigStmt = (AdminSetConfigStmt) 
parseAndAnalyzeStmt(stmt);
-        Env.getCurrentEnv().setConfig(adminSetConfigStmt);
+        Env.getCurrentEnv().setConfig(adminSetConfigStmt, false);
         Assert.assertNotEquals(enableMtmv, Config.enable_mtmv);
 
         // 2. set with experimental
         enableMtmv = Config.enable_mtmv;
         stmt = "admin set frontend config('experimental_enable_mtmv' = '" + 
String.valueOf(!enableMtmv) + "');";
         adminSetConfigStmt = (AdminSetConfigStmt) parseAndAnalyzeStmt(stmt);
-        Env.getCurrentEnv().setConfig(adminSetConfigStmt);
+        Env.getCurrentEnv().setConfig(adminSetConfigStmt, false);
         Assert.assertNotEquals(enableMtmv, Config.enable_mtmv);
 
         // 3. show config
@@ -89,5 +90,19 @@ public class AdminSetConfigStmtTest extends 
TestWithFeService {
         results = ConfigBase.getConfigInfo(matcher);
         Assert.assertEquals(num, results.size());
     }
+
+    @Test
+    public void testSetAllFrontendsConfig() throws Exception {
+        String stmt = "admin set all frontends 
config(\"alter_table_timeout_second\" = \"77\");";
+        AdminSetConfigStmt adminSetConfigStmt = (AdminSetConfigStmt) 
parseAndAnalyzeStmt(stmt);
+
+        Assertions.assertTrue(adminSetConfigStmt.isApplyToAll());
+        Assertions.assertEquals(adminSetConfigStmt.getRedirectStatus(), 
RedirectStatus.NO_FORWARD);
+        Assertions.assertTrue(
+                
adminSetConfigStmt.getLocalSetStmt().originStmt.startsWith("ADMIN SET ALL 
FRONTENDS CONFIG"));
+
+        Env.getCurrentEnv().setConfig(adminSetConfigStmt, true);
+        Assertions.assertEquals(77, Config.alter_table_timeout_second);
+    }
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to