From ea646c6682f375d80ec04b0400b1378ac1b25903 Mon Sep 17 00:00:00 2001 From: zhangdong <493738387@qq.com> Date: Wed, 20 Dec 2023 19:46:58 +0800 Subject: [PATCH] [fix](mtmv)fix thread local reference to checkpoint's Env, causing Env to be unable to be reclaimed, resulting in excessive memory usage by FE (#28723) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit when replay addTaskResult log,will create one ConnectContext,and set Env.getCurrentEnv,then store this ctx in ConnectContext.threadLocalInfo,threadLocalInfo is static,so this ctx can not be recycling,Env of replay thread also can not be recycling --- .../src/main/java/org/apache/doris/catalog/MTMV.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java index 30160a8ef8..9cd5bdac78 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/MTMV.java @@ -153,11 +153,13 @@ public class MTMV extends OlapTable { this.status.setSchemaChangeDetail(null); this.status.setRefreshState(MTMVRefreshState.SUCCESS); this.relation = relation; - try { - this.cache = MTMVCache.from(this, MTMVPlanUtil.createMTMVContext(this)); - } catch (Throwable e) { - this.cache = null; - LOG.warn("generate cache failed", e); + if (!Env.isCheckpointThread()) { + try { + this.cache = MTMVCache.from(this, MTMVPlanUtil.createMTMVContext(this)); + } catch (Throwable e) { + this.cache = null; + LOG.warn("generate cache failed", e); + } } } else { this.status.setRefreshState(MTMVRefreshState.FAIL);