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

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


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 7548f90f803 branch-4.0: [fix](test) fix unstable iceberg test cases 
#60095 (#60097)
7548f90f803 is described below

commit 7548f90f80353952b2f07585f019594e0d95ff94
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Sat Jan 24 18:28:40 2026 +0800

    branch-4.0: [fix](test) fix unstable iceberg test cases #60095 (#60097)
    
    bp #60095
---
 .../datasource/iceberg/IcebergMetadataOps.java     | 16 ++++++++++-----
 .../iceberg_and_internal_nested_namespace.out      | 14 -------------
 .../iceberg_and_internal_nested_namespace.groovy   | 23 ++++++++++++++--------
 3 files changed, 26 insertions(+), 27 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
index aee6d8833b3..fa764f9d06b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
@@ -187,7 +187,7 @@ public class IcebergMetadataOps implements 
ExternalMetadataOps {
                 // but in reality, Iceberg's return includes views. Therefore, 
we added a filter to exclude views.
                 if (catalog instanceof ViewCatalog) {
                     views = ((ViewCatalog) 
catalog).listViews(getNamespace(dbName))
-                        
.stream().map(TableIdentifier::name).collect(Collectors.toList());
+                            
.stream().map(TableIdentifier::name).collect(Collectors.toList());
                 } else {
                     views = Collections.emptyList();
                 }
@@ -195,12 +195,15 @@ public class IcebergMetadataOps implements 
ExternalMetadataOps {
                     return 
tableIdentifiers.stream().map(TableIdentifier::name).collect(Collectors.toList());
                 } else {
                     return tableIdentifiers.stream()
-                        .map(TableIdentifier::name)
-                        .filter(name -> 
!views.contains(name)).collect(Collectors.toList());
+                            .map(TableIdentifier::name)
+                            .filter(name -> 
!views.contains(name)).collect(Collectors.toList());
                 }
             });
+        } catch (RuntimeException e) {
+            // We want to catch real exception like NoSuchNamespaceException 
and throw it directly
+            throw e;
         } catch (Exception e) {
-            throw new RuntimeException("Failed to list table names, error 
message is:" + e.getMessage(), e);
+            throw new RuntimeException("Failed to list table names, error 
message is: " + e.getMessage(), e);
         }
     }
 
@@ -966,7 +969,10 @@ public class IcebergMetadataOps implements 
ExternalMetadataOps {
         try {
             return executionAuthenticator.execute(() ->
                     ((ViewCatalog) catalog).listViews(getNamespace(db))
-                    
.stream().map(TableIdentifier::name).collect(Collectors.toList()));
+                            
.stream().map(TableIdentifier::name).collect(Collectors.toList()));
+        } catch (RuntimeException e) {
+            // We want to catch real exception like NoSuchNamespaceException 
and throw it directly
+            throw e;
         } catch (Exception e) {
             throw new RuntimeException("Failed to list view names, error 
message is:" + e.getMessage(), e);
         }
diff --git 
a/regression-test/data/external_table_p0/iceberg/iceberg_and_internal_nested_namespace.out
 
b/regression-test/data/external_table_p0/iceberg/iceberg_and_internal_nested_namespace.out
index 4432b08854c..b4b3deb56ec 100644
--- 
a/regression-test/data/external_table_p0/iceberg/iceberg_and_internal_nested_namespace.out
+++ 
b/regression-test/data/external_table_p0/iceberg/iceberg_and_internal_nested_namespace.out
@@ -1,8 +1,6 @@
 -- This file is automatically generated. You should know what you did if you 
want to edit this
 -- !sql01 --
 
--- !sql02 --
-
 -- !sql03 --
 ns1
 
@@ -43,16 +41,11 @@ nested_tbl3
 
 -- !sql15 --
 
--- !sql16 --
-ns1.ns2
-
 -- !sql17 --
 ns1.ns2
 
 -- !sql18 --
 
--- !sql19 --
-
 -- !sql20 --
 
 -- !sql21 --
@@ -61,8 +54,6 @@ ns1.ns2
 -- !sql22 --
 ns1.ns2.ns3
 
--- !sql23 --
-
 -- !sql24 --
 
 -- !sql25 --
@@ -74,16 +65,11 @@ ns1.ns2.ns3
 -- !sql261 --
 104
 
--- !sql27 --
-ns1.ns2
-
 -- !sql28 --
 
 -- !sql29 --
 104
 
--- !sql30 --
-
 -- !sql31 --
 105
 
diff --git 
a/regression-test/suites/external_table_p0/iceberg/iceberg_and_internal_nested_namespace.groovy
 
b/regression-test/suites/external_table_p0/iceberg/iceberg_and_internal_nested_namespace.groovy
index 7f088bf57f4..be6d39deef3 100644
--- 
a/regression-test/suites/external_table_p0/iceberg/iceberg_and_internal_nested_namespace.groovy
+++ 
b/regression-test/suites/external_table_p0/iceberg/iceberg_and_internal_nested_namespace.groovy
@@ -30,7 +30,7 @@ suite("iceberg_and_internal_nested_namespace", 
"p0,external,doris,external_docke
 
     // Helper function to execute qt_sql with retry on NoSuchNamespaceException
     // If exception occurs, refresh catalog and retry once
-    def qtWithRefreshRetry = { String tag, String sqlStmt ->
+    def qtWithRefreshRetry = { String tag, String sqlStmt, String res ->
         def maxRetries = 2
         def retryCount = 0
         def success = false
@@ -38,7 +38,14 @@ suite("iceberg_and_internal_nested_namespace", 
"p0,external,doris,external_docke
         while (!success && retryCount < maxRetries) {
             try {
                 // Use owner to access suite methods in closure
-                owner."qt_${tag}"(sqlStmt)
+                def actual_res = owner.sql("""${sqlStmt}""")
+                println(actual_res) 
+                if (res.equals(""))
+                    assertTrue(actual_res.size() == 0)
+                else {
+                    assertTrue(actual_res.size() > 0)
+                    assertEquals(res, actual_res[0][0])
+                }
                 success = true
             } catch (Exception e) {
                 def errorMsg = e.getMessage()
@@ -145,7 +152,7 @@ suite("iceberg_and_internal_nested_namespace", 
"p0,external,doris,external_docke
     sql """drop database if exists `ns1` force"""
     qt_sql01 """show databases like 'ns1.ns2.ns3'""" // empty
     sql """refresh catalog ${catalog_name}"""
-    qtWithRefreshRetry("sql02", """show databases like 'ns1.ns2.ns3'""") // 
empty
+    qtWithRefreshRetry("sql02", """show databases like 'ns1.ns2.ns3'""", "") 
// empty
 
     sql """create database `ns1.ns2.ns3`"""
     // will see 3 ns, flat
@@ -205,13 +212,13 @@ suite("iceberg_and_internal_nested_namespace", 
"p0,external,doris,external_docke
     sql """drop database `ns1.ns2` force"""
     qt_sql15 """show databases like "ns1.ns2"""" // empty
     sql """refresh catalog ${catalog_name}"""
-    qtWithRefreshRetry("sql16", """show databases like "ns1.ns2"""") // 1
+    qtWithRefreshRetry("sql16", """show databases like "ns1.ns2"""", 
"ns1.ns2") // 1
     // then we drop ns1.ns2.ns3, after refresh, ns1.ns2 also disappear
     sql """drop database `ns1.ns2.ns3` force"""
     qt_sql17 """show databases like "ns1.ns2"""" // 1
     qt_sql18 """show databases like "ns1.ns2.ns3"""" // empty
     sql """refresh catalog ${catalog_name}"""
-    qtWithRefreshRetry("sql19", """show databases like "ns1.ns2"""") // empty
+    qtWithRefreshRetry("sql19", """show databases like "ns1.ns2"""", "") // 
empty
     qt_sql20 """show databases like "ns1.ns2.ns3"""" // empty
 
     // recreate ns1.ns2.ns3
@@ -221,7 +228,7 @@ suite("iceberg_and_internal_nested_namespace", 
"p0,external,doris,external_docke
     // drop ns1.ns2.ns3, and ns1.ns2 will disappear too
     sql """drop database `ns1.ns2.ns3`"""
     sql """refresh catalog ${catalog_name}"""
-    qtWithRefreshRetry("sql23", """show databases like "ns1.ns2"""") // empty
+    qtWithRefreshRetry("sql23", """show databases like "ns1.ns2"""", "") // 
empty
     qt_sql24 """show databases like "ns1.ns2.ns3"""" // empty
 
     // recreate ns1.ns2.ns3, and create table in ns1.ns2
@@ -234,13 +241,13 @@ suite("iceberg_and_internal_nested_namespace", 
"p0,external,doris,external_docke
     // drop ns1.ns2.ns3, ns1.ns2 will still exist
     sql """drop database `ns1.ns2.ns3`"""
     sql """refresh catalog ${catalog_name}"""
-    qtWithRefreshRetry("sql27", """show databases like "ns1.ns2"""") // 1
+    qtWithRefreshRetry("sql27", """show databases like "ns1.ns2"""", 
"ns1.ns2") // 1
     qt_sql28 """show databases like "ns1.ns2.ns3"""" // empty
     qt_sql29 """select * from `ns1.ns2`.test_table2"""
     // drop `ns1.ns2`.test_table2, and then ns1.ns2 will disappeal
     sql """drop table `ns1.ns2`.test_table2"""
     sql """refresh catalog ${catalog_name}"""
-    qtWithRefreshRetry("sql30", """show databases like "ns1.ns2"""") // empty
+    qtWithRefreshRetry("sql30", """show databases like "ns1.ns2"""", "") // 
empty
 
     // test dropping and creating table in nested ns spark created
     sql """drop table if exists `nested.db1`.spark_table"""


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

Reply via email to