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

airborne pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new c0b2970c200 [Test](build index) enhance build index with clone test 
case with retry logic #42348 (#42363)
c0b2970c200 is described below

commit c0b2970c2008e6386c7100f02a435276b1181f59
Author: airborne12 <[email protected]>
AuthorDate: Thu Oct 24 14:06:40 2024 +0800

    [Test](build index) enhance build index with clone test case with retry 
logic #42348 (#42363)
    
    cherry pick from #42348
---
 .../test_build_index_with_clone_fault.groovy       | 32 ++++++++++++++++++++--
 1 file changed, 29 insertions(+), 3 deletions(-)

diff --git 
a/regression-test/suites/fault_injection_p0/test_build_index_with_clone_fault.groovy
 
b/regression-test/suites/fault_injection_p0/test_build_index_with_clone_fault.groovy
index bfbf5a4896e..c1854b40664 100644
--- 
a/regression-test/suites/fault_injection_p0/test_build_index_with_clone_fault.groovy
+++ 
b/regression-test/suites/fault_injection_p0/test_build_index_with_clone_fault.groovy
@@ -50,6 +50,33 @@ suite("test_build_index_with_clone_fault_injection", 
"nonConcurrent"){
         return "wait_timeout"
     }
 
+    def assertShowBuildIndexWithRetry = { tbl, expectedState, expectedMsg, 
maxRetries, waitSeconds ->
+        int attempt = 0
+        while (attempt < maxRetries) {
+            def show_build_index = sql_return_maparray("show build index where 
TableName = \"${tbl}\" ORDER BY JobId DESC LIMIT 1")
+            if (show_build_index && show_build_index.size() > 0) {
+                def currentState = show_build_index[0].State
+                def currentMsg = show_build_index[0].Msg
+                if (currentState == expectedState && currentMsg == 
expectedMsg) {
+                    logger.info("Attempt ${attempt + 1}: State and Msg match 
expected values.")
+                    return
+                } else {
+                    logger.warn("Attempt ${attempt + 1}: Expected 
State='${expectedState}' and Msg='${expectedMsg}', but got 
State='${currentState}' and Msg='${currentMsg}'. Retrying after ${waitSeconds} 
second(s)...")
+                }
+            } else {
+                logger.warn("Attempt ${attempt + 1}: show_build_index is empty 
or null. Retrying after ${waitSeconds} second(s)...")
+            }
+            attempt++
+            if (attempt < maxRetries) {
+                sleep(waitSeconds * 1000)
+            }
+        }
+        def finalBuildIndex = sql_return_maparray("show build index where 
TableName = \"${tbl}\" ORDER BY JobId DESC LIMIT 1")
+        assertTrue(finalBuildIndex && finalBuildIndex.size() > 0, 
"show_build_index is empty or null after ${maxRetries} attempts")
+        assertEquals(expectedState, finalBuildIndex[0].State, "State does not 
match after ${maxRetries} attempts")
+        assertEquals(expectedMsg, finalBuildIndex[0].Msg, "Msg does not match 
after ${maxRetries} attempts")
+    }
+
     def tbl = 'test_build_index_with_clone'
     try {
         GetDebugPoint().enableDebugPointForAllBEs("EngineCloneTask.wait_clone")
@@ -81,9 +108,8 @@ suite("test_build_index_with_clone_fault_injection", 
"nonConcurrent"){
         sql """ build index idx_k2 on ${tbl} """
         // sleep 5s to wait for the build index job report table is unstable
         sleep(5000)
-        def show_build_index = sql_return_maparray("show build index where 
TableName = \"${tbl}\" ORDER BY JobId DESC LIMIT 1")
-        assertEquals('WAITING_TXN', show_build_index[0].State)
-        assertEquals('table is unstable', show_build_index[0].Msg)
+
+        assertShowBuildIndexWithRetry(tbl, 'WAITING_TXN', 'table is unstable', 
3, 5)
 
         def state = wait_for_last_build_index_on_table_finish(tbl, timeout)
         assertEquals(state, "FINISHED")


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

Reply via email to