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

liaoxin01 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 440a6d3b57e [fix](test) stabilize internal copy recycler case (#63340)
440a6d3b57e is described below

commit 440a6d3b57e0575b59c770a605b1da76fed4621b
Author: hui lai <[email protected]>
AuthorDate: Mon May 25 16:12:47 2026 +0800

    [fix](test) stabilize internal copy recycler case (#63340)
    
    ### What problem does this PR solve?
    
    Problem Summary:
    
    `cloud_p0/recycler/test_recycler_with_internal_copy.groovy` may fail
    after recycling internal stage files. The case only waited until the
    object file disappeared from object storage, but
    `checkRecycleInternalStage` cannot guarantee that the corresponding
    `copy_job` / `copy_file` metadata in meta-service has also been removed.
    
    If the same file is uploaded again before the stale copy metadata is
    cleaned, `copy into` may still be filtered as already loaded and return
    `CANCELLED` with `No files can be copied`.
    
    This patch retries the post-recycle `copy into` only for that expected
    stale-metadata cancellation, until it succeeds or times out.
---
 .../test_recycler_with_internal_copy.groovy         | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git 
a/regression-test/suites/cloud_p0/recycler/test_recycler_with_internal_copy.groovy
 
b/regression-test/suites/cloud_p0/recycler/test_recycler_with_internal_copy.groovy
index eb1c408d3c6..ae7834f7e23 100644
--- 
a/regression-test/suites/cloud_p0/recycler/test_recycler_with_internal_copy.groovy
+++ 
b/regression-test/suites/cloud_p0/recycler/test_recycler_with_internal_copy.groovy
@@ -95,11 +95,22 @@ suite("test_recycler_with_internal_copy") {
     logger.info("Request FE Config: code=" + code + ", out=" + out + ", err=" 
+ err)
     assertEquals(code, 0)
 
-    result = sql " copy into ${tableName} from @~('${fileName}') properties 
('file.type' = 'csv', 'file.column_separator' = '|', 'copy.async' = 'false'); "
-    logger.info("copy result: " + result)
-    assertTrue(result.size() == 1)
-    assertTrue(result[0].size() == 8)
-    assertTrue(result[0][1].equals("FINISHED"), "Finish copy into, state=" + 
result[0][1] + ", expected state=FINISHED")
+    retry = 15
+    success = false
+    do {
+        result = sql " copy into ${tableName} from @~('${fileName}') 
properties ('file.type' = 'csv', 'file.column_separator' = '|', 'copy.async' = 
'false'); "
+        logger.info("copy result after recycle: " + result)
+        assertTrue(result.size() == 1)
+        assertTrue(result[0].size() == 8)
+        if (result[0][1].equals("FINISHED")) {
+            success = true
+            break
+        }
+        assertTrue(result[0][1].equals("CANCELLED") && 
result[0][3].contains("No files can be copied"),
+                "Finish copy into, state=" + result[0][1] + ", expected 
state=FINISHED")
+        Thread.sleep(20000) // wait copy job metadata recycled
+    } while (retry--)
+    assertTrue(success)
     qt_sql " SELECT COUNT(*) FROM ${tableName}; "
 
     String[][] tabletInfoList = sql """ show tablets from ${tableName}; """


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

Reply via email to