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

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


The following commit(s) were added to refs/heads/branch-4.1 by this push:
     new 14d3d957c02 branch-4.1: [fix](group commit) Fix group commit routing 
for virtual compute groups #66585 (#67590)
14d3d957c02 is described below

commit 14d3d957c02f79e5505879f9de60b3a4a2a05f1c
Author: Jamie <[email protected]>
AuthorDate: Thu Sep 10 11:37:04 2026 +0800

    branch-4.1: [fix](group commit) Fix group commit routing for virtual 
compute groups #66585 (#67590)
    
    ### What problem does this PR solve?
    
    Issue Number: None
    
    Related PR: #66585
    
    Problem Summary: Backport #66585 to `branch-4.1`.
    
    Group Commit asks `CloudSystemInfoService` for the backend pool selected
    by a physical or virtual compute group, but then compared those physical
    backends with the original virtual name. That rejected every healthy
    candidate and could also reuse a cached backend after it left the
    current pool.
    
    This backport keeps virtual compute group routing inside
    `CloudSystemInfoService`: cache hits use a scoped lookup in the current
    selected pool, while random selection trusts the already scoped
    candidate pool and performs only health checks. The implementation is
    adapted to the branch-4.1 Group Commit and cloud-system APIs while
    preserving the branch's existing pressure counter.
    
    ### Release note
    
    Fix Group Commit loads routed through virtual compute groups.
    
    ### Check List (For Author)
    
    - Test
        - [ ] Regression test
        - [x] Unit Test
    - Focused tests are included; hosted CI is requested with `run
    buildall`.
            - `build-support/check-format.sh`: passed
            - `git diff --check`: passed
        - [ ] Manual test
        - [ ] No need to test or manual test
    - Behavior changed: Yes. Group Commit now accepts healthy backends
    returned for a virtual compute group and invalidates cached backends
    outside its current selected pool.
    - Does this need documentation? No
---
 .../doris/cloud/system/CloudSystemInfoService.java |  41 +++++
 .../org/apache/doris/load/GroupCommitManager.java  |  60 +++++--
 .../cloud/system/CloudSystemInfoServiceTest.java   |   8 +
 .../GroupCommitManagerBackendSelectionTest.java    |   3 +-
 .../apache/doris/load/GroupCommitManagerTest.java  | 188 +++++++++++++++++++++
 .../use_vcg_read_write.groovy                      |  15 +-
 6 files changed, 297 insertions(+), 18 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/system/CloudSystemInfoService.java
 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/system/CloudSystemInfoService.java
index 1e2cd8cfa41..104489572aa 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/system/CloudSystemInfoService.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/system/CloudSystemInfoService.java
@@ -1406,6 +1406,47 @@ public class CloudSystemInfoService extends 
SystemInfoService {
         }
     }
 
+    /**
+     * Returns the backend only when it belongs to the backend pool currently 
selected for
+     * {@code clusterName}. The name may identify a physical or virtual 
compute group; virtual
+     * routing is resolved internally. Backend health and load availability 
are not checked here.
+     *
+     * @return the matching backend, or null if the cluster or backend is 
absent or the backend is
+     *         outside the current pool
+     */
+    public Backend getBackendInCurrentCluster(String clusterName, long 
backendId) {
+        rlock.lock();
+        try {
+            String physicalClusterName = getPhysicalCluster(clusterName);
+            String clusterId = clusterNameToId.get(physicalClusterName);
+            if (Strings.isNullOrEmpty(clusterId)) {
+                return null;
+            }
+            List<Backend> backends = clusterIdToBackend.get(clusterId);
+            if (backends == null) {
+                return null;
+            }
+
+            int low = 0;
+            int high = backends.size() - 1;
+            while (low <= high) {
+                int mid = (low + high) >>> 1;
+                Backend backend = backends.get(mid);
+                int result = Long.compare(backend.getId(), backendId);
+                if (result < 0) {
+                    low = mid + 1;
+                } else if (result > 0) {
+                    high = mid - 1;
+                } else {
+                    return backend;
+                }
+            }
+            return null;
+        } finally {
+            rlock.unlock();
+        }
+    }
+
     public ImmutableMap<Long, Backend> getCloudIdToBackend(String clusterName) 
{
         rlock.lock();
         try {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/load/GroupCommitManager.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/GroupCommitManager.java
index 46c64e7f3bc..509c7a7cd0d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/GroupCommitManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/GroupCommitManager.java
@@ -320,7 +320,7 @@ public class GroupCommitManager {
             throw new LoadException("No alive backend");
         }
         // If the cached backend is not active or decommissioned, select a 
random new backend.
-        Long randomBackendId = getRandomCloudBackend(cacheKey, cluster, 
tableId, backends);
+        Long randomBackendId = getRandomCloudBackend(cacheKey, tableId, 
backends);
         if (randomBackendId != null) {
             return randomBackendId;
         }
@@ -390,8 +390,17 @@ public class GroupCommitManager {
                 // Maybe one thread removes the tableId from the tableToBeMap.
                 // Another thread gets the same tableId but can not find this 
tableId.
                 // So another thread needs to get the random backend.
-                Backend backend = 
Env.getCurrentSystemInfo().getBackend(backendId);
-                if (isBackendAvailable(backend, cloudCluster)) {
+                Backend backend;
+                if (cloudCluster != null) {
+                    // The cloud service resolves a cluster or VCG to its 
current active backend pool.
+                    // Look up the cached backend in that pool to validate 
membership after topology changes.
+                    backend = ((CloudSystemInfoService) 
Env.getCurrentSystemInfo())
+                            .getBackendInCurrentCluster(cloudCluster, 
backendId);
+                } else {
+                    backend = Env.getCurrentSystemInfo().getBackend(backendId);
+                }
+                if (isBackendAvailable(backend)) {
+                    debugBlockAfterCachedBackendAvailable(cacheKey, tableId, 
backendId);
                     return backend.getId();
                 } else {
                     tableToBeMap.invalidate(cacheKey);
@@ -403,23 +412,44 @@ public class GroupCommitManager {
         return null;
     }
 
-    private boolean isBackendAvailable(Backend backend, @Nullable String 
cloudCluster) {
-        if (backend == null || !backend.isAlive() || 
backend.isDecommissioned() || backend.isDecommissioning()
-                || !backend.isLoadAvailable()) {
-            return false;
+    private static void debugBlockAfterCachedBackendAvailable(
+            String cacheKey, long tableId, long backendId) {
+        final String debugPointName = 
"GroupCommitManager.getCachedBackend.afterAvailable.block";
+        DebugPointUtil.DebugPoint debugPoint = 
DebugPointUtil.getDebugPoint(debugPointName);
+        if (debugPoint == null) {
+            return;
         }
-        if (!Config.isCloudMode()) {
-            return true;
+        long expectedTableId = debugPoint.param("table_id", -1L);
+        long expectedBackendId = debugPoint.param("backend_id", -1L);
+        if ((expectedTableId != -1L && expectedTableId != tableId)
+                || (expectedBackendId != -1L && expectedBackendId != 
backendId)) {
+            return;
         }
-        return cloudCluster == null || 
cloudCluster.equals(backend.getCloudClusterName());
+        LOG.info("debug block after cached group commit backend passed 
availability check, "
+                        + "cacheKey={}, tableId={}, backendId={}", cacheKey, 
tableId, backendId);
+        while (DebugPointUtil.isEnable(debugPointName)) {
+            try {
+                Thread.sleep(50);
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+                LOG.warn("group commit cached backend debug block interrupted, 
tableId={}, backendId={}",
+                        tableId, backendId);
+                return;
+            }
+        }
+    }
+
+    private boolean isBackendAvailable(Backend backend) {
+        return backend != null && backend.isAlive() && 
!backend.isDecommissioned()
+                && !backend.isDecommissioning() && backend.isLoadAvailable();
     }
 
     @Nullable
-    private Long getRandomCloudBackend(String cacheKey, String cluster, long 
tableId, List<Backend> backends)
+    private Long getRandomCloudBackend(String cacheKey, long tableId, 
List<Backend> backends)
             throws LoadException {
         OlapTable table = (OlapTable) 
Env.getCurrentEnv().getInternalCatalog().getTableByTableId(tableId);
         Collections.shuffle(backends);
-        return selectAvailableBackend(cacheKey, cluster, tableId, table, 
backends);
+        return selectAvailableBackend(cacheKey, tableId, table, backends);
     }
 
     @Nullable
@@ -436,14 +466,14 @@ public class GroupCommitManager {
         } catch (UserException e) {
             throw new LoadException(e.getMessage());
         }
-        return selectAvailableBackend(cacheKey, null, tableId, table, 
orderedBackends);
+        return selectAvailableBackend(cacheKey, tableId, table, 
orderedBackends);
     }
 
     @Nullable
-    private Long selectAvailableBackend(String cacheKey, @Nullable String 
cloudCluster, long tableId, OlapTable table,
+    private Long selectAvailableBackend(String cacheKey, long tableId, 
OlapTable table,
             List<Backend> orderedBackends) {
         for (Backend backend : orderedBackends) {
-            if (isBackendAvailable(backend, cloudCluster)) {
+            if (isBackendAvailable(backend)) {
                 tableToBeMap.put(cacheKey, backend.getId());
                 tableToPressureMap.put(tableId,
                         new 
SlidingWindowCounter(table.getGroupCommitIntervalMs() / 1000 + 1));
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/cloud/system/CloudSystemInfoServiceTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/cloud/system/CloudSystemInfoServiceTest.java
index 28a4decd6be..194bc6a8a59 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/cloud/system/CloudSystemInfoServiceTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/cloud/system/CloudSystemInfoServiceTest.java
@@ -223,6 +223,14 @@ public class CloudSystemInfoServiceTest {
 
         String res = infoService.getPhysicalCluster(vcgName);
         Assert.assertEquals(pcgName1, res);
+
+        Backend activeBackend = toAdd1.get(1);
+        Assert.assertSame(activeBackend,
+                infoService.getBackendInCurrentCluster(pcgName1, 
activeBackend.getId()));
+        Assert.assertSame(activeBackend,
+                infoService.getBackendInCurrentCluster(vcgName, 
activeBackend.getId()));
+        Assert.assertNull(infoService.getBackendInCurrentCluster(vcgName, 
toAdd2.get(1).getId()));
+        Assert.assertNull(infoService.getBackendInCurrentCluster(vcgName, 
Long.MAX_VALUE));
     }
 
     // active has 3 dead be and standby has 3 alive be
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/load/GroupCommitManagerBackendSelectionTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/load/GroupCommitManagerBackendSelectionTest.java
index 7f762f749c9..db26b5ddbfd 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/load/GroupCommitManagerBackendSelectionTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/load/GroupCommitManagerBackendSelectionTest.java
@@ -167,7 +167,8 @@ public class GroupCommitManagerBackendSelectionTest {
         backend.setCloudClusterName(cluster);
         Mockito.when(cloudSystemInfoService.getCloudIdToBackend(cluster))
                 .thenReturn(ImmutableMap.of(backend.getId(), backend));
-        
Mockito.when(cloudSystemInfoService.getBackend(backend.getId())).thenReturn(backend);
+        
Mockito.when(cloudSystemInfoService.getBackendInCurrentCluster(cluster, 
backend.getId()))
+                .thenReturn(backend);
 
         BackendSelectionManager.setProviderForTest(policy);
         try (MockedStatic<Env> mockedEnv = Mockito.mockStatic(Env.class)) {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/load/GroupCommitManagerTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/load/GroupCommitManagerTest.java
new file mode 100644
index 00000000000..7012e16d8de
--- /dev/null
+++ b/fe/fe-core/src/test/java/org/apache/doris/load/GroupCommitManagerTest.java
@@ -0,0 +1,188 @@
+// 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.load;
+
+import org.apache.doris.catalog.Env;
+import org.apache.doris.catalog.OlapTable;
+import org.apache.doris.cloud.system.CloudSystemInfoService;
+import org.apache.doris.common.Config;
+import org.apache.doris.datasource.InternalCatalog;
+import org.apache.doris.system.Backend;
+
+import com.google.common.collect.ImmutableMap;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+public class GroupCommitManagerTest {
+    private static final long TABLE_ID = 100L;
+    private static final String VIRTUAL_CLUSTER = "virtual_cluster";
+    private static final String PHYSICAL_CLUSTER_A = "physical_cluster_a";
+    private static final String PHYSICAL_CLUSTER_B = "physical_cluster_b";
+    private static final long BACKEND_A_ID = 10001L;
+    private static final long BACKEND_B_ID = 10002L;
+
+    private String originalCloudUniqueId;
+    private String originalDeployMode;
+    private Env currentEnv;
+    private InternalCatalog internalCatalog;
+    private OlapTable table;
+    private CloudSystemInfoService systemInfoService;
+
+    @Before
+    public void setUp() {
+        originalCloudUniqueId = Config.cloud_unique_id;
+        originalDeployMode = Config.deploy_mode;
+        Config.cloud_unique_id = "test_cloud_unique_id";
+
+        currentEnv = Mockito.mock(Env.class);
+        internalCatalog = Mockito.mock(InternalCatalog.class);
+        table = Mockito.mock(OlapTable.class);
+        systemInfoService = Mockito.mock(CloudSystemInfoService.class);
+
+        
Mockito.when(currentEnv.getInternalCatalog()).thenReturn(internalCatalog);
+        
Mockito.when(internalCatalog.getTableByTableId(TABLE_ID)).thenReturn(table);
+        Mockito.when(table.getGroupCommitDataBytes()).thenReturn(1024);
+        Mockito.when(table.getGroupCommitIntervalMs()).thenReturn(1000);
+    }
+
+    @After
+    public void tearDown() {
+        Config.cloud_unique_id = originalCloudUniqueId;
+        Config.deploy_mode = originalDeployMode;
+    }
+
+    @Test
+    public void testVirtualComputeGroupUsesActiveBackendsForCacheAndFailover() 
throws Exception {
+        Backend backendA = createBackend(BACKEND_A_ID, PHYSICAL_CLUSTER_A);
+        Backend backendB = createBackend(BACKEND_B_ID, PHYSICAL_CLUSTER_B);
+        AtomicReference<ImmutableMap<Long, Backend>> activeBackends =
+                new AtomicReference<>(ImmutableMap.of(BACKEND_A_ID, backendA));
+
+        Mockito.when(systemInfoService.getCloudIdToBackend(VIRTUAL_CLUSTER))
+                .thenAnswer(invocation -> activeBackends.get());
+        Mockito.when(systemInfoService.getBackendInCurrentCluster(
+                Mockito.eq(VIRTUAL_CLUSTER), Mockito.anyLong()))
+                .thenAnswer(invocation -> 
activeBackends.get().get(invocation.getArgument(1, Long.class)));
+
+        try (MockedStatic<Env> mockedEnv = Mockito.mockStatic(Env.class)) {
+            mockedEnv.when(Env::getCurrentEnv).thenReturn(currentEnv);
+            
mockedEnv.when(Env::getCurrentSystemInfo).thenReturn(systemInfoService);
+
+            GroupCommitManager manager = new GroupCommitManager();
+            Assert.assertEquals(BACKEND_A_ID,
+                    manager.selectBackendForGroupCommitInternal(TABLE_ID, 
VIRTUAL_CLUSTER));
+            Mockito.verify(systemInfoService, 
Mockito.never()).getPhysicalCluster(Mockito.anyString());
+            Mockito.verify(systemInfoService, 
Mockito.never()).getBackend(Mockito.anyLong());
+
+            Mockito.clearInvocations(systemInfoService);
+            Assert.assertEquals(BACKEND_A_ID,
+                    manager.selectBackendForGroupCommitInternal(TABLE_ID, 
VIRTUAL_CLUSTER));
+            
Mockito.verify(systemInfoService).getBackendInCurrentCluster(VIRTUAL_CLUSTER, 
BACKEND_A_ID);
+            Mockito.verify(systemInfoService, 
Mockito.never()).getCloudIdToBackend(Mockito.anyString());
+            Mockito.verify(systemInfoService, 
Mockito.never()).getPhysicalCluster(Mockito.anyString());
+            Mockito.verify(systemInfoService, 
Mockito.never()).getBackend(Mockito.anyLong());
+
+            Mockito.clearInvocations(systemInfoService);
+            activeBackends.set(ImmutableMap.of(BACKEND_B_ID, backendB));
+
+            Assert.assertEquals(BACKEND_B_ID,
+                    manager.selectBackendForGroupCommitInternal(TABLE_ID, 
VIRTUAL_CLUSTER));
+            
Mockito.verify(systemInfoService).getBackendInCurrentCluster(VIRTUAL_CLUSTER, 
BACKEND_A_ID);
+            
Mockito.verify(systemInfoService).getCloudIdToBackend(VIRTUAL_CLUSTER);
+        }
+
+        Mockito.verify(systemInfoService, 
Mockito.never()).getPhysicalCluster(Mockito.anyString());
+        Mockito.verify(systemInfoService, 
Mockito.never()).getBackend(Mockito.anyLong());
+    }
+
+    @Test
+    public void testLoadDisabledCachedBackendIsReplacedFromActiveBackends() 
throws Exception {
+        Backend backendA1 = createBackend(BACKEND_A_ID, PHYSICAL_CLUSTER_A);
+        Backend backendA2 = createBackend(BACKEND_B_ID, PHYSICAL_CLUSTER_A);
+        AtomicReference<ImmutableMap<Long, Backend>> activeBackends =
+                new AtomicReference<>(ImmutableMap.of(BACKEND_A_ID, 
backendA1));
+
+        Mockito.when(systemInfoService.getCloudIdToBackend(VIRTUAL_CLUSTER))
+                .thenAnswer(invocation -> activeBackends.get());
+        Mockito.when(systemInfoService.getBackendInCurrentCluster(
+                Mockito.eq(VIRTUAL_CLUSTER), Mockito.anyLong()))
+                .thenAnswer(invocation -> 
activeBackends.get().get(invocation.getArgument(1, Long.class)));
+
+        try (MockedStatic<Env> mockedEnv = Mockito.mockStatic(Env.class)) {
+            mockedEnv.when(Env::getCurrentEnv).thenReturn(currentEnv);
+            
mockedEnv.when(Env::getCurrentSystemInfo).thenReturn(systemInfoService);
+
+            GroupCommitManager manager = new GroupCommitManager();
+            Assert.assertEquals(BACKEND_A_ID,
+                    manager.selectBackendForGroupCommitInternal(TABLE_ID, 
VIRTUAL_CLUSTER));
+
+            Mockito.clearInvocations(systemInfoService);
+            activeBackends.set(ImmutableMap.of(BACKEND_A_ID, backendA1, 
BACKEND_B_ID, backendA2));
+            backendA1.setLoadDisabled(true);
+
+            Assert.assertEquals(BACKEND_B_ID,
+                    manager.selectBackendForGroupCommitInternal(TABLE_ID, 
VIRTUAL_CLUSTER));
+            
Mockito.verify(systemInfoService).getBackendInCurrentCluster(VIRTUAL_CLUSTER, 
BACKEND_A_ID);
+            
Mockito.verify(systemInfoService).getCloudIdToBackend(VIRTUAL_CLUSTER);
+        }
+
+        Mockito.verify(systemInfoService, 
Mockito.never()).getPhysicalCluster(Mockito.anyString());
+        Mockito.verify(systemInfoService, 
Mockito.never()).getBackend(Mockito.anyLong());
+    }
+
+    @Test
+    public void testLocalGroupCommitStillUsesGlobalBackendLookup() throws 
Exception {
+        Config.cloud_unique_id = "";
+        Config.deploy_mode = "";
+        Backend backend = createBackend(BACKEND_A_ID, PHYSICAL_CLUSTER_A);
+
+        Mockito.when(systemInfoService.getAllBackendsByAllCluster())
+                .thenReturn(ImmutableMap.of(BACKEND_A_ID, backend));
+        
Mockito.when(systemInfoService.getBackend(BACKEND_A_ID)).thenReturn(backend);
+
+        try (MockedStatic<Env> mockedEnv = Mockito.mockStatic(Env.class)) {
+            mockedEnv.when(Env::getCurrentEnv).thenReturn(currentEnv);
+            
mockedEnv.when(Env::getCurrentSystemInfo).thenReturn(systemInfoService);
+
+            GroupCommitManager manager = new GroupCommitManager();
+            Assert.assertEquals(BACKEND_A_ID,
+                    manager.selectBackendForGroupCommitInternal(TABLE_ID, 
null));
+            Assert.assertEquals(BACKEND_A_ID,
+                    manager.selectBackendForGroupCommitInternal(TABLE_ID, 
null));
+        }
+
+        Mockito.verify(systemInfoService, 
Mockito.never()).getPhysicalCluster(Mockito.anyString());
+        Mockito.verify(systemInfoService, 
Mockito.never()).getCloudIdToBackend(Mockito.anyString());
+        Mockito.verify(systemInfoService, Mockito.never())
+                .getBackendInCurrentCluster(Mockito.any(), Mockito.anyLong());
+        Mockito.verify(systemInfoService).getBackend(BACKEND_A_ID);
+    }
+
+    private Backend createBackend(long id, String physicalCluster) {
+        Backend backend = new Backend(id, "127.0.0.1", 9050);
+        backend.setCloudClusterName(physicalCluster);
+        backend.setAlive(true);
+        return backend;
+    }
+}
diff --git 
a/regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/use_vcg_read_write.groovy
 
b/regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/use_vcg_read_write.groovy
index 0d9404537e1..ae0a37fadc7 100644
--- 
a/regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/use_vcg_read_write.groovy
+++ 
b/regression-test/suites/cloud_p0/multi_cluster/virtual_compute_group/use_vcg_read_write.groovy
@@ -125,6 +125,10 @@ suite('use_vcg_read_write', 'multi_cluster,docker') {
             }
             log.info("backends of cluster2: ${clusterName2} 
${cluster2Ips}".toString())
 
+            def groupCommitStreamLoadFe = options.connectToFollower
+                    ? cluster.getOneFollowerFe() : cluster.getMasterFe()
+            assertNotNull(groupCommitStreamLoadFe)
+
             sql """use @${normalVclusterName}"""
             sql """ drop table if exists ${tableName} """
 
@@ -145,6 +149,9 @@ suite('use_vcg_read_write', 'multi_cluster,docker') {
                   `k13` datetime NULL
                 ) ENGINE=OLAP
                 DISTRIBUTED BY HASH(`k1`) BUCKETS 3
+                PROPERTIES (
+                    "group_commit_interval_ms" = "200"
+                )
             """
 
             sql """
@@ -188,10 +195,12 @@ suite('use_vcg_read_write', 'multi_cluster,docker') {
 
                 set 'column_separator', ','
                 set 'cloud_cluster', 'normalVirtualClusterName'
+                set 'group_commit', 'sync_mode'
+                unset 'label'
 
                 file 'all_types.csv'
                 time 10000 // limit inflight 10s
-                setFeAddr cluster.getAllFrontends().get(0).host, 
cluster.getAllFrontends().get(0).httpPort
+                setFeAddr groupCommitStreamLoadFe.host, 
groupCommitStreamLoadFe.httpPort
 
                 check { loadResult, exception, startTime, endTime ->
                     if (exception != null) {
@@ -370,10 +379,12 @@ suite('use_vcg_read_write', 'multi_cluster,docker') {
 
                 set 'column_separator', ','
                 set 'cloud_cluster', 'normalVirtualClusterName'
+                set 'group_commit', 'sync_mode'
+                unset 'label'
 
                 file 'all_types.csv'
                 time 10000 // limit inflight 10s
-                setFeAddr cluster.getAllFrontends().get(0).host, 
cluster.getAllFrontends().get(0).httpPort
+                setFeAddr groupCommitStreamLoadFe.host, 
groupCommitStreamLoadFe.httpPort
 
                 check { loadResult, exception, startTime, endTime ->
                     if (exception != null) {


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

Reply via email to