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

starocean999 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new d670ec22134 [Enhancement] (nereids)implement adminRebalanceDiskCommand 
in nereids (#45108)
d670ec22134 is described below

commit d670ec221348ae590150e4391c72f2df4ff29ad2
Author: wudongliang <46414265+donglian...@users.noreply.github.com>
AuthorDate: Tue Dec 17 10:28:57 2024 +0800

    [Enhancement] (nereids)implement adminRebalanceDiskCommand in nereids 
(#45108)
    
    Issue Number: close #42844, #42845
---
 .../antlr4/org/apache/doris/nereids/DorisParser.g4 |   8 +-
 .../org/apache/doris/clone/TabletScheduler.java    |   8 ++
 .../doris/nereids/parser/LogicalPlanBuilder.java   |  24 +++++
 .../apache/doris/nereids/trees/plans/PlanType.java |   2 +
 .../commands/AdminCancelRebalanceDiskCommand.java  | 108 ++++++++++++++++++++
 .../plans/commands/AdminRebalanceDiskCommand.java  | 109 +++++++++++++++++++++
 .../trees/plans/visitor/CommandVisitor.java        |  10 ++
 .../auth_call/test_database_management_auth.groovy |   4 +-
 .../test_nereids_rebalance_disk.groovy             |  61 ++++++++++++
 9 files changed, 328 insertions(+), 6 deletions(-)

diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 
b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
index 3d797988046..11796c5df3b 100644
--- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
+++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4
@@ -495,6 +495,10 @@ unsupportedCancelStatement
 
 supportedAdminStatement
     : ADMIN SHOW REPLICA DISTRIBUTION FROM baseTableRef                        
     #adminShowReplicaDistribution
+    | ADMIN REBALANCE DISK (ON LEFT_PAREN backends+=STRING_LITERAL
+        (COMMA backends+=STRING_LITERAL)* RIGHT_PAREN)?                        
     #adminRebalanceDisk
+    | ADMIN CANCEL REBALANCE DISK (ON LEFT_PAREN backends+=STRING_LITERAL
+        (COMMA backends+=STRING_LITERAL)* RIGHT_PAREN)?                        
     #adminCancelRebalanceDisk
     | ADMIN DIAGNOSE TABLET tabletId=INTEGER_VALUE                             
     #adminDiagnoseTablet
     | ADMIN SHOW REPLICA STATUS FROM baseTableRef (WHERE STATUS EQ|NEQ 
STRING_LITERAL)?   #adminShowReplicaStatus
     | ADMIN COMPACT TABLE baseTableRef (WHERE TYPE EQ STRING_LITERAL)?         
     #adminCompactTable
@@ -520,10 +524,6 @@ unsupportedAdminStatement
     | ADMIN CANCEL REPAIR TABLE baseTableRef                                   
     #adminCancelRepairTable
     | ADMIN SET (FRONTEND | (ALL FRONTENDS)) CONFIG
         (LEFT_PAREN propertyItemList RIGHT_PAREN)? ALL?                        
     #adminSetFrontendConfig
-    | ADMIN REBALANCE DISK (ON LEFT_PAREN backends+=STRING_LITERAL
-        (COMMA backends+=STRING_LITERAL) RIGHT_PAREN)?                         
     #adminRebalanceDisk
-    | ADMIN CANCEL REBALANCE DISK (ON LEFT_PAREN backends+=STRING_LITERAL
-        (COMMA backends+=STRING_LITERAL) RIGHT_PAREN)?                         
     #adminCancelRebalanceDisk
     | ADMIN SET TABLE name=multipartIdentifier
         PARTITION VERSION properties=propertyClause?                           
     #adminSetPartitionVersion
     | ADMIN COPY TABLET tabletId=INTEGER_VALUE properties=propertyClause?      
     #adminCopyTablet
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/clone/TabletScheduler.java 
b/fe/fe-core/src/main/java/org/apache/doris/clone/TabletScheduler.java
index bb88afd2b6b..504e1d36a65 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/clone/TabletScheduler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/clone/TabletScheduler.java
@@ -317,6 +317,14 @@ public class TabletScheduler extends MasterDaemon {
         diskRebalancer.addPrioBackends(stmt.getBackends(), stmt.getTimeoutS());
     }
 
+    public synchronized void rebalanceDisk(List<Backend> backends, long 
timeoutS) {
+        diskRebalancer.addPrioBackends(backends, timeoutS);
+    }
+
+    public synchronized void cancelRebalanceDisk(List<Backend> backends) {
+        diskRebalancer.removePrioBackends(backends);
+    }
+
     public synchronized void cancelRebalanceDisk(AdminCancelRebalanceDiskStmt 
stmt) {
         diskRebalancer.removePrioBackends(stmt.getBackends());
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
index 921e3014c90..085ad4458d0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
@@ -50,9 +50,11 @@ import org.apache.doris.mtmv.MTMVRefreshSchedule;
 import org.apache.doris.mtmv.MTMVRefreshTriggerInfo;
 import org.apache.doris.nereids.DorisParser;
 import org.apache.doris.nereids.DorisParser.AddConstraintContext;
+import org.apache.doris.nereids.DorisParser.AdminCancelRebalanceDiskContext;
 import org.apache.doris.nereids.DorisParser.AdminCheckTabletsContext;
 import org.apache.doris.nereids.DorisParser.AdminCompactTableContext;
 import org.apache.doris.nereids.DorisParser.AdminDiagnoseTabletContext;
+import org.apache.doris.nereids.DorisParser.AdminRebalanceDiskContext;
 import 
org.apache.doris.nereids.DorisParser.AdminShowReplicaDistributionContext;
 import org.apache.doris.nereids.DorisParser.AdminShowReplicaStatusContext;
 import 
org.apache.doris.nereids.DorisParser.AdminShowTabletStorageFormatContext;
@@ -481,9 +483,11 @@ import org.apache.doris.nereids.trees.plans.PlanType;
 import org.apache.doris.nereids.trees.plans.algebra.Aggregate;
 import org.apache.doris.nereids.trees.plans.algebra.SetOperation.Qualifier;
 import org.apache.doris.nereids.trees.plans.commands.AddConstraintCommand;
+import 
org.apache.doris.nereids.trees.plans.commands.AdminCancelRebalanceDiskCommand;
 import org.apache.doris.nereids.trees.plans.commands.AdminCheckTabletsCommand;
 import org.apache.doris.nereids.trees.plans.commands.AdminCleanTrashCommand;
 import org.apache.doris.nereids.trees.plans.commands.AdminCompactTableCommand;
+import org.apache.doris.nereids.trees.plans.commands.AdminRebalanceDiskCommand;
 import 
org.apache.doris.nereids.trees.plans.commands.AdminShowReplicaStatusCommand;
 import 
org.apache.doris.nereids.trees.plans.commands.AlterCatalogCommentCommand;
 import org.apache.doris.nereids.trees.plans.commands.AlterMTMVCommand;
@@ -4724,6 +4728,26 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
         return new ShowStorageEnginesCommand();
     }
 
+    @Override
+    public LogicalPlan visitAdminRebalanceDisk(AdminRebalanceDiskContext ctx) {
+        if (ctx.ON() != null) {
+            List<String> backendList = Lists.newArrayList();
+            ctx.backends.forEach(backend -> 
backendList.add(stripQuotes(backend.getText())));
+            return new AdminRebalanceDiskCommand(backendList);
+        }
+        return new AdminRebalanceDiskCommand();
+    }
+
+    @Override
+    public LogicalPlan 
visitAdminCancelRebalanceDisk(AdminCancelRebalanceDiskContext ctx) {
+        if (ctx.ON() != null) {
+            List<String> backendList = Lists.newArrayList();
+            ctx.backends.forEach(backend -> 
backendList.add(stripQuotes(backend.getText())));
+            return new AdminCancelRebalanceDiskCommand(backendList);
+        }
+        return new AdminCancelRebalanceDiskCommand();
+    }
+
     @Override
     public LogicalPlan visitShowDiagnoseTablet(ShowDiagnoseTabletContext ctx) {
         long tabletId = Long.parseLong(ctx.INTEGER_VALUE().getText());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java
index 060dc859fef..e9488239b8a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java
@@ -251,6 +251,8 @@ public enum PlanType {
     RECOVER_TABLE_COMMAND,
     RECOVER_PARTITION_COMMAND,
     REPLAY_COMMAND,
+    ADMIN_REBALANCE_DISK_COMMAND,
+    ADMIN_CANCEL_REBALANCE_DISK_COMMAND,
     CREATE_ENCRYPTKEY_COMMAND,
     CREATE_WORKLOAD_GROUP_COMMAND,
     CREATE_CATALOG_COMMAND,
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AdminCancelRebalanceDiskCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AdminCancelRebalanceDiskCommand.java
new file mode 100644
index 00000000000..7f07555cd4b
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AdminCancelRebalanceDiskCommand.java
@@ -0,0 +1,108 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.trees.plans.commands;
+
+import org.apache.doris.catalog.Env;
+import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.DdlException;
+import org.apache.doris.common.ErrorCode;
+import org.apache.doris.common.ErrorReport;
+import org.apache.doris.common.util.NetUtils;
+import org.apache.doris.mysql.privilege.PrivPredicate;
+import org.apache.doris.nereids.trees.plans.PlanType;
+import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.qe.StmtExecutor;
+import org.apache.doris.system.Backend;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * admin cancel rebalance disk
+ */
+public class AdminCancelRebalanceDiskCommand extends Command implements 
NoForward {
+    private static final Logger LOG = 
LogManager.getLogger(AdminCancelRebalanceDiskCommand.class);
+    private List<String> backends;
+
+    public AdminCancelRebalanceDiskCommand() {
+        super(PlanType.ADMIN_CANCEL_REBALANCE_DISK_COMMAND);
+    }
+
+    public AdminCancelRebalanceDiskCommand(List<String> backends) {
+        super(PlanType.ADMIN_CANCEL_REBALANCE_DISK_COMMAND);
+        this.backends = backends;
+    }
+
+    @Override
+    public void run(ConnectContext ctx, StmtExecutor executor) throws 
Exception {
+        // check auth
+        if 
(!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), 
PrivPredicate.ADMIN)) {
+            
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, 
"ADMIN");
+        }
+        handleCancelRebalanceDisk();
+    }
+
+    private void handleCancelRebalanceDisk() throws AnalysisException {
+        List<Backend> rebalanceDiskBackends = 
getNeedRebalanceDiskBackends(backends);
+        if (rebalanceDiskBackends.isEmpty()) {
+            LOG.info("The matching be is empty, no be to cancel rebalance 
disk.");
+            return;
+        }
+        
Env.getCurrentEnv().getTabletScheduler().cancelRebalanceDisk(rebalanceDiskBackends);
+    }
+
+    private List<Backend> getNeedRebalanceDiskBackends(List<String> backends) 
throws AnalysisException {
+        ImmutableMap<Long, Backend> backendsInfo = 
Env.getCurrentSystemInfo().getAllBackendsByAllCluster();
+        List<Backend> needRebalanceDiskBackends = Lists.newArrayList();
+        if (backends == null) {
+            needRebalanceDiskBackends.addAll(backendsInfo.values());
+        } else {
+            Map<String, Long> backendsID = new HashMap<>();
+            for (Backend backend : backendsInfo.values()) {
+                backendsID.put(
+                        
NetUtils.getHostPortInAccessibleFormat(backend.getHost(), 
backend.getHeartbeatPort()),
+                        backend.getId());
+            }
+            for (String be : backends) {
+                if (backendsID.containsKey(be)) {
+                    
needRebalanceDiskBackends.add(backendsInfo.get(backendsID.get(be)));
+                    backendsID.remove(be);
+                }
+            }
+        }
+        return needRebalanceDiskBackends;
+    }
+
+    @Override
+    protected void checkSupportedInCloudMode(ConnectContext ctx) throws 
DdlException {
+        LOG.info("AdminCancelRebalanceDiskCommand not supported in cloud 
mode");
+        throw new DdlException("Unsupported operation");
+    }
+
+    @Override
+    public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+        return visitor.visitAdminCancelRebalanceDiskCommand(this, context);
+    }
+}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AdminRebalanceDiskCommand.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AdminRebalanceDiskCommand.java
new file mode 100644
index 00000000000..d33b81c262d
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AdminRebalanceDiskCommand.java
@@ -0,0 +1,109 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.trees.plans.commands;
+
+import org.apache.doris.catalog.Env;
+import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.DdlException;
+import org.apache.doris.common.ErrorCode;
+import org.apache.doris.common.ErrorReport;
+import org.apache.doris.common.util.NetUtils;
+import org.apache.doris.mysql.privilege.PrivPredicate;
+import org.apache.doris.nereids.trees.plans.PlanType;
+import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
+import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.qe.StmtExecutor;
+import org.apache.doris.system.Backend;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * admin rebalance disk
+ */
+public class AdminRebalanceDiskCommand extends Command implements NoForward {
+    private static final Logger LOG = 
LogManager.getLogger(AdminRebalanceDiskCommand.class);
+    private final long timeoutS = 24 * 3600; // default 24 hours
+    private List<String> backends;
+
+    public AdminRebalanceDiskCommand() {
+        super(PlanType.ADMIN_REBALANCE_DISK_COMMAND);
+    }
+
+    public AdminRebalanceDiskCommand(List<String> backends) {
+        super(PlanType.ADMIN_REBALANCE_DISK_COMMAND);
+        this.backends = backends;
+    }
+
+    @Override
+    public void run(ConnectContext ctx, StmtExecutor executor) throws 
Exception {
+        // check auth
+        if 
(!Env.getCurrentEnv().getAccessManager().checkGlobalPriv(ConnectContext.get(), 
PrivPredicate.ADMIN)) {
+            
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, 
"ADMIN");
+        }
+        handleRebalanceDisk();
+    }
+
+    private void handleRebalanceDisk() throws AnalysisException {
+        List<Backend> rebalanceDiskBackends = 
getNeedRebalanceDiskBackends(backends);
+        if (rebalanceDiskBackends.isEmpty()) {
+            LOG.info("The matching be is empty, no be to rebalance disk.");
+            return;
+        }
+        
Env.getCurrentEnv().getTabletScheduler().rebalanceDisk(rebalanceDiskBackends, 
timeoutS);
+    }
+
+    private List<Backend> getNeedRebalanceDiskBackends(List<String> backends) 
throws AnalysisException {
+        ImmutableMap<Long, Backend> backendsInfo = 
Env.getCurrentSystemInfo().getAllBackendsByAllCluster();
+        List<Backend> needRebalanceDiskBackends = Lists.newArrayList();
+        if (backends == null) {
+            needRebalanceDiskBackends.addAll(backendsInfo.values());
+        } else {
+            Map<String, Long> backendsID = new HashMap<>();
+            for (Backend backend : backendsInfo.values()) {
+                backendsID.put(
+                        
NetUtils.getHostPortInAccessibleFormat(backend.getHost(), 
backend.getHeartbeatPort()),
+                        backend.getId());
+            }
+            for (String be : backends) {
+                if (backendsID.containsKey(be)) {
+                    
needRebalanceDiskBackends.add(backendsInfo.get(backendsID.get(be)));
+                    backendsID.remove(be);
+                }
+            }
+        }
+        return needRebalanceDiskBackends;
+    }
+
+    @Override
+    protected void checkSupportedInCloudMode(ConnectContext ctx) throws 
DdlException {
+        LOG.info("AdminRebalanceDiskCommand not supported in cloud mode");
+        throw new DdlException("Unsupported operation");
+    }
+
+    @Override
+    public <R, C> R accept(PlanVisitor<R, C> visitor, C context) {
+        return visitor.visitAdminRebalanceDiskCommand(this, context);
+    }
+}
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
index dc01cdd6d76..ff71331b7af 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/CommandVisitor.java
@@ -18,9 +18,11 @@
 package org.apache.doris.nereids.trees.plans.visitor;
 
 import org.apache.doris.nereids.trees.plans.commands.AddConstraintCommand;
+import 
org.apache.doris.nereids.trees.plans.commands.AdminCancelRebalanceDiskCommand;
 import org.apache.doris.nereids.trees.plans.commands.AdminCheckTabletsCommand;
 import org.apache.doris.nereids.trees.plans.commands.AdminCleanTrashCommand;
 import org.apache.doris.nereids.trees.plans.commands.AdminCompactTableCommand;
+import org.apache.doris.nereids.trees.plans.commands.AdminRebalanceDiskCommand;
 import 
org.apache.doris.nereids.trees.plans.commands.AdminShowReplicaStatusCommand;
 import 
org.apache.doris.nereids.trees.plans.commands.AlterCatalogCommentCommand;
 import org.apache.doris.nereids.trees.plans.commands.AlterJobStatusCommand;
@@ -502,6 +504,14 @@ public interface CommandVisitor<R, C> {
         return visitCommand(showFrontendsCommand, context);
     }
 
+    default R visitAdminRebalanceDiskCommand(AdminRebalanceDiskCommand 
adminRebalanceDiskCommand, C context) {
+        return visitCommand(adminRebalanceDiskCommand, context);
+    }
+
+    default R 
visitAdminCancelRebalanceDiskCommand(AdminCancelRebalanceDiskCommand command, C 
context) {
+        return visitCommand(command, context);
+    }
+
     default R visitShowDynamicPartitionCommand(ShowDynamicPartitionCommand 
showDynamicPartitionCommand, C context) {
         return visitCommand(showDynamicPartitionCommand, context);
     }
diff --git 
a/regression-test/suites/auth_call/test_database_management_auth.groovy 
b/regression-test/suites/auth_call/test_database_management_auth.groovy
index de4a55ad597..fb643d9ee08 100644
--- a/regression-test/suites/auth_call/test_database_management_auth.groovy
+++ b/regression-test/suites/auth_call/test_database_management_auth.groovy
@@ -119,11 +119,11 @@ suite("test_database_management_auth","p0,auth_call") {
         }
         test {
             sql """ADMIN REBALANCE DISK;"""
-            exception "denied"
+            exception "${error_in_cloud}"
         }
         test {
             sql """ADMIN CANCEL REBALANCE DISK;"""
-            exception "denied"
+            exception "${error_in_cloud}"
         }
         test {
             sql """UNSET GLOBAL VARIABLE ALL;"""
diff --git 
a/regression-test/suites/nereids_p0/ddl/rebalance_disk/test_nereids_rebalance_disk.groovy
 
b/regression-test/suites/nereids_p0/ddl/rebalance_disk/test_nereids_rebalance_disk.groovy
new file mode 100644
index 00000000000..fa32edf3ba2
--- /dev/null
+++ 
b/regression-test/suites/nereids_p0/ddl/rebalance_disk/test_nereids_rebalance_disk.groovy
@@ -0,0 +1,61 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_nereids_rebalance_disk") {
+    //cloud-mode
+    if (isCloudMode()) {
+        def String error_in_cloud = "Unsupported"
+        def clusters = sql " SHOW CLUSTERS; "
+        assertTrue(!clusters.isEmpty())
+
+        test {
+            sql """ admin rebalance disk; """
+            exception "${error_in_cloud}"
+        }
+        test {
+            sql """ admin rebalance disk ON ("127.0.0.1:9050"); """
+            exception "${error_in_cloud}"
+        }
+        test {
+            sql """ admin rebalance disk ON ("192.168.0.1:9050", 
"127.0.0.1:9050", "192.168.0.2:9050"); """
+            exception "${error_in_cloud}"
+        }
+
+        test {
+            sql """ admin cancel rebalance disk;  """
+            exception "${error_in_cloud}"
+        }
+        test {
+            sql """ admin cancel rebalance disk ON ("127.0.0.1:9050"); """
+            exception "${error_in_cloud}"
+        }
+        test {
+            sql """ admin cancel rebalance disk ON ("192.168.0.1:9050", 
"127.0.0.1:9050", "192.168.0.2:9050"); """
+            exception "${error_in_cloud}"
+        }
+    } else {
+        // can not use qt command since the output change based on cluster and 
backend ip
+        checkNereidsExecute(""" admin rebalance disk; """)
+        checkNereidsExecute(""" admin rebalance disk ON ("127.0.0.1:9050"); 
""")
+        checkNereidsExecute(""" admin rebalance disk ON ("192.168.0.1:9050", 
"127.0.0.1:9050", "192.168.0.2:9050"); """)
+
+        checkNereidsExecute(""" admin cancel rebalance disk; """)
+        checkNereidsExecute(""" admin cancel rebalance disk ON 
("127.0.0.1:9050"); """)
+        checkNereidsExecute(""" admin cancel rebalance disk ON 
("192.168.0.1:9050", "127.0.0.1:9050", "192.168.0.2:9050"); """)
+    }
+
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to