From 9faa6e083b114e6268bd648225341524a5dc92b7 Mon Sep 17 00:00:00 2001 From: Mingyu Chen Date: Thu, 26 Oct 2023 21:19:13 +0800 Subject: [PATCH] [fix](udf) avoid exception when fail to find udf in replay logic (#25965) When replaying drop function edit log, the function may not be found, causing runtime exception and FE will fail to start. The function SHOULD be exist, but the reason is still unknown. I change the logic to NOT throw exception if function is not found. This is a workaround to make sure FE can start, and add some log for later debug. --- .../src/main/java/org/apache/doris/catalog/Database.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java index 14e72edf767145..74b8608760c86b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java @@ -740,13 +740,20 @@ public synchronized void dropFunction(FunctionSearchDesc function, boolean ifExi if (FunctionUtil.dropFunctionImpl(function, ifExists, name2Function)) { Env.getCurrentEnv().getEditLog().logDropFunction(function); FunctionUtil.dropFromNereids(this.getFullName(), function); + LOG.info("finished to drop function {}", function.getName().getFunction()); } } public synchronized void replayDropFunction(FunctionSearchDesc functionSearchDesc) { try { - FunctionUtil.dropFunctionImpl(functionSearchDesc, false, name2Function); + // Set ifExists to true to avoid throw exception if function is not found. + // It should not happen but the reason is unknown, so add warn log for debug. + if (!FunctionUtil.dropFunctionImpl(functionSearchDesc, true, name2Function)) { + LOG.warn("failed to find function to drop: {} when replay, skip", + functionSearchDesc.getName().getFunction()); + } FunctionUtil.dropFromNereids(this.getFullName(), functionSearchDesc); + LOG.info("finished to replay drop function {}", functionSearchDesc.getName().getFunction()); } catch (UserException e) { throw new RuntimeException(e); }