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]