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

hello-stephen 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 bfe1b1edba2 [fix](regression) retry transient S3 outfile timeout 
(#65454)
bfe1b1edba2 is described below

commit bfe1b1edba2a0a790676eae376702770e80431ba
Author: shuke <[email protected]>
AuthorDate: Mon Jul 13 10:32:14 2026 +0800

    [fix](regression) retry transient S3 outfile timeout (#65454)
    
    Problem Summary:
    
    `test_outfile_with_different_s3` writes and reads data through real
    S3-compatible services. Recent Cloud P0 failures across unrelated PRs
    consistently exhausted the Tencent COS `PutObject` transport path with
    `curlCode: 28, Timeout was reached`.
    
    This change retries the valid OUTFILE operation once only for that exact
    libcurl timeout signature. Authentication, permission, protocol,
    assertion, and all other SQL errors still fail immediately, and a second
    timeout is propagated normally.
---
 .../outfile/s3/test_outfile_with_different_s3.groovy   | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git 
a/regression-test/suites/export_p0/outfile/s3/test_outfile_with_different_s3.groovy
 
b/regression-test/suites/export_p0/outfile/s3/test_outfile_with_different_s3.groovy
index 18ad0a02c18..31975ffc13b 100644
--- 
a/regression-test/suites/export_p0/outfile/s3/test_outfile_with_different_s3.groovy
+++ 
b/regression-test/suites/export_p0/outfile/s3/test_outfile_with_different_s3.groovy
@@ -22,7 +22,7 @@ suite("test_outfile_with_different_s3", "p0") {
     def outfile_to_S3 = {bucket, s3_endpoint, region, ak, sk  ->
         def outFilePath = "${bucket}/outfile_different_s3/exp_"
         // select ... into outfile ...
-        def res = sql """
+        def outfileSql = """
             SELECT * FROM ${export_table_name} t ORDER BY user_id
             INTO OUTFILE "s3://${outFilePath}"
             FORMAT AS parquet
@@ -33,7 +33,21 @@ suite("test_outfile_with_different_s3", "p0") {
                 "s3.access_key" = "${ak}"
             );
         """
-        return res[0][3]
+        for (int attempt = 1; attempt <= 2; attempt++) {
+            try {
+                def res = sql outfileSql
+                return res[0][3]
+            } catch (java.sql.SQLException e) {
+                boolean isS3Timeout = e.message?.contains("curlCode: 28")
+                        && e.message?.contains("Timeout was reached")
+                if (!isS3Timeout || attempt == 2) {
+                    throw e
+                }
+                logger.warn("OUTFILE to S3 endpoint ${s3_endpoint} timed out, 
retrying once")
+                sleep(5000)
+            }
+        }
+        throw new IllegalStateException("Unreachable")
     }
 
 


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

Reply via email to