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); + } + } } /**