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

stigahuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 774c01c2b50ea9108da5fd9e0fb608e1b903071f
Author: stiga-huang <huangquanl...@gmail.com>
AuthorDate: Tue Aug 26 17:27:43 2025 +0800

    IMPALA-14306: Frontend.getDataSrcs() should retry for 
InconsistentMetadataFetchException
    
    After IMPALA-14283, coordinator will throw an
    InconsistentMetadataFetchException when witness catalogd service ID
    changes. The Frontend code should retry the request to use fresh
    metadata. This patch resolves the TODO item in Frontend.getDataSrcs() to
    add the retry as other methods do. Also change the catch clause in
    LocalCatalog.getDataSources() so InconsistentMetadataFetchException can
    be thrown from it.
    
    Tests:
     - Ran TestExtDataSources.test_catalogd_ha_failover 100 times.
    
    Change-Id: I483423680a5c953aaf3446b62c8b8ee08d6c6385
    Reviewed-on: http://gerrit.cloudera.org:8080/23347
    Reviewed-by: Wenzhe Zhou <wz...@cloudera.com>
    Reviewed-by: Riza Suminto <riza.sumi...@cloudera.com>
    Tested-by: Impala Public Jenkins <impala-public-jenk...@cloudera.com>
---
 .../java/org/apache/impala/catalog/local/LocalCatalog.java  |  5 ++---
 fe/src/main/java/org/apache/impala/service/Frontend.java    | 13 ++++++++++---
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/fe/src/main/java/org/apache/impala/catalog/local/LocalCatalog.java 
b/fe/src/main/java/org/apache/impala/catalog/local/LocalCatalog.java
index 6122fb309..5301e48b2 100644
--- a/fe/src/main/java/org/apache/impala/catalog/local/LocalCatalog.java
+++ b/fe/src/main/java/org/apache/impala/catalog/local/LocalCatalog.java
@@ -245,9 +245,8 @@ public class LocalCatalog implements FeCatalog {
     try {
       List<DataSource> dataSrcs = metaProvider_.loadDataSources();
       return Catalog.filterCatalogObjectsByPattern(dataSrcs, matcher);
-    } catch (Exception e) {
-      LOG.info("Unable to load DataSource objects, ", e);
-      // Return empty list.
+    } catch (TException e) {
+      LOG.error("Unable to load DataSource objects. Returning empty list. ", 
e);
       return Lists.newArrayList();
     }
   }
diff --git a/fe/src/main/java/org/apache/impala/service/Frontend.java 
b/fe/src/main/java/org/apache/impala/service/Frontend.java
index fad6f556f..b71f052c9 100644
--- a/fe/src/main/java/org/apache/impala/service/Frontend.java
+++ b/fe/src/main/java/org/apache/impala/service/Frontend.java
@@ -1620,9 +1620,16 @@ public class Frontend {
    * matches all data sources.
    */
   public List<? extends FeDataSource> getDataSrcs(String pattern) {
-    // TODO: handle InconsistentMetadataException for data sources.
-    return getCatalog().getDataSources(
-        PatternMatcher.createHivePatternMatcher(pattern));
+    RetryTracker retries = new RetryTracker(
+        String.format("fetching data sources using pattern %s", pattern));
+    while (true) {
+      try {
+        return getCatalog().getDataSources(
+            PatternMatcher.createHivePatternMatcher(pattern));
+      } catch (InconsistentMetadataFetchException e) {
+        retries.handleRetryOrThrow(e);
+      }
+    }
   }
 
   /**

Reply via email to