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 e85d144c706 branch-4.1: [fix](fe) Report missing backend during stream 
load planning #69989 (#70069)
e85d144c706 is described below

commit e85d144c706e8512f70baafbc62669a1d4adf1a0
Author: wudi <[email protected]>
AuthorDate: Wed Nov 4 11:35:40 2026 +0800

    branch-4.1: [fix](fe) Report missing backend during stream load planning 
#69989 (#70069)
    
    Cherry-picked from #69989
---
 .../org/apache/doris/load/StreamLoadHandler.java   |  4 ++-
 .../apache/doris/load/StreamLoadHandlerTest.java   | 33 ++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/load/StreamLoadHandler.java 
b/fe/fe-core/src/main/java/org/apache/doris/load/StreamLoadHandler.java
index 99f516f022e..63e2e667bc4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/load/StreamLoadHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/load/StreamLoadHandler.java
@@ -142,7 +142,9 @@ public class StreamLoadHandler {
         if (request.isSetBackendId()) {
             long backendId = request.getBackendId();
             Backend backend = Env.getCurrentSystemInfo().getBackend(backendId);
-            Preconditions.checkNotNull(backend);
+            if (backend == null) {
+                throw new UserException("Backend " + backendId + " does not 
exist");
+            }
             String computeGroup = backend.getCloudClusterName();
             // Token/auth-code and user-less internal loads keep their 
existing trusted path. Regular
             // stream loads must still validate compute group privilege, 
existence, and status.
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/load/StreamLoadHandlerTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/load/StreamLoadHandlerTest.java
index 8f266e81ab8..992b14908b1 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/load/StreamLoadHandlerTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/load/StreamLoadHandlerTest.java
@@ -27,8 +27,10 @@ import org.apache.doris.common.jmockit.Deencapsulation;
 import org.apache.doris.datasource.InternalCatalog;
 import org.apache.doris.mysql.privilege.Auth;
 import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.service.FrontendServiceImpl;
 import org.apache.doris.system.Backend;
 import org.apache.doris.system.SystemInfoService;
+import org.apache.doris.thrift.TStatusCode;
 import org.apache.doris.thrift.TStreamLoadPutRequest;
 import org.apache.doris.thrift.TStreamLoadPutResult;
 
@@ -38,6 +40,7 @@ import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 public class StreamLoadHandlerTest {
@@ -91,6 +94,36 @@ public class StreamLoadHandlerTest {
         }
     }
 
+    @Test
+    public void testStreamLoadPutRejectsMissingBackend() throws Exception {
+        SystemInfoService originalSystemInfoService = 
Env.getCurrentSystemInfo();
+        String originalCloudUniqueId = Config.cloud_unique_id;
+        CloudSystemInfoService systemInfoService =
+                new TestCloudSystemInfoService(Collections.emptyList());
+        TStreamLoadPutRequest request = new TStreamLoadPutRequest();
+        request.setUser("");
+        request.setToken("test_token");
+        request.setBackendId(10001L);
+        request.setCloudCluster("header_compute_group");
+
+        try {
+            Config.cloud_unique_id = "test_cloud_unique_id";
+            Deencapsulation.setField(Env.getCurrentEnv(), "systemInfo", 
systemInfoService);
+            ConnectContext.remove();
+
+            TStreamLoadPutResult result = new 
FrontendServiceImpl(null).streamLoadPut(request);
+
+            Assert.assertEquals(TStatusCode.ANALYSIS_ERROR, 
result.getStatus().getStatusCode());
+            
Assert.assertTrue(result.getStatus().getErrorMsgs().get(0).contains("10001"));
+            Assert.assertFalse(result.isSetPipelineParams());
+            Assert.assertNull(ConnectContext.get());
+        } finally {
+            ConnectContext.remove();
+            Config.cloud_unique_id = originalCloudUniqueId;
+            Deencapsulation.setField(Env.getCurrentEnv(), "systemInfo", 
originalSystemInfoService);
+        }
+    }
+
     @Test
     public void testGroupCommitValidatesBackendComputeGroupPrivilege() throws 
Exception {
         String originalCloudUniqueId = Config.cloud_unique_id;


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

Reply via email to