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]