From 49842eecc59c2b76dda23ebab1a46e40d83057c2 Mon Sep 17 00:00:00 2001 From: Xiangyu Wang Date: Fri, 23 Feb 2024 20:58:33 +0800 Subject: [PATCH] [Fix](multi-catalog) Fix NPE when refreshing catalog on Slave FE. (#31335) --------- Co-authored-by: wangxiangyu --- .../hive/event/MetastoreEventsProcessor.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/event/MetastoreEventsProcessor.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/event/MetastoreEventsProcessor.java index 00f7bd1be08142..e5db75ff9f3a1d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/event/MetastoreEventsProcessor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hive/event/MetastoreEventsProcessor.java @@ -19,6 +19,7 @@ package org.apache.doris.datasource.hive.event; import org.apache.doris.analysis.RedirectStatus; +import org.apache.doris.analysis.UserIdentity; import org.apache.doris.catalog.Env; import org.apache.doris.common.Config; import org.apache.doris.common.util.MasterDaemon; @@ -29,6 +30,7 @@ import org.apache.doris.qe.ConnectContext; import org.apache.doris.qe.MasterOpExecutor; import org.apache.doris.qe.OriginStatement; +import org.apache.doris.system.SystemInfoService; import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; @@ -264,7 +266,7 @@ private NotificationEventResponse getNextEventResponseForSlave(HMSExternalCatalo // Need a fallback to handle this because this error state can not be recovered until restarting FE if (StringUtils.isNotEmpty(e.getMessage()) && e.getMessage().contains(HiveMetaStoreClient.REPL_EVENTS_MISSING_IN_METASTORE)) { - refreshCatalogForMaster(hmsExternalCatalog); + refreshCatalogForSlave(hmsExternalCatalog); // set masterLastSyncedEventId to lastSyncedEventId after refresh catalog successfully updateLastSyncedEventId(hmsExternalCatalog, masterLastSyncedEventId); LOG.warn("Notification events are missing, maybe an event can not be handled " @@ -314,8 +316,13 @@ private void refreshCatalogForSlave(HMSExternalCatalog hmsExternalCatalog) throw // Transfer to master to refresh catalog String sql = "REFRESH CATALOG " + hmsExternalCatalog.getName(); OriginStatement originStmt = new OriginStatement(sql, 0); - MasterOpExecutor masterOpExecutor = new MasterOpExecutor(originStmt, new ConnectContext(), - RedirectStatus.FORWARD_WITH_SYNC, false); + ConnectContext ctx = new ConnectContext(); + ctx.setQualifiedUser(UserIdentity.ROOT.getQualifiedUser()); + ctx.setCurrentUserIdentity(UserIdentity.ROOT); + ctx.setEnv(Env.getCurrentEnv()); + ctx.setCluster(SystemInfoService.DEFAULT_CLUSTER); + MasterOpExecutor masterOpExecutor = new MasterOpExecutor(originStmt, ctx, + RedirectStatus.FORWARD_WITH_SYNC, false); if (LOG.isDebugEnabled()) { LOG.debug("Transfer to master to refresh catalog, stmt: {}", sql); }