This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push: new 78dd7bb4bc [Fix](Nereids)add nereids load function in read fields of GlobalFunctionMgr and Database (#23249) 78dd7bb4bc is described below commit 78dd7bb4bce201ad414f24ecf19a2a441bc34d83 Author: mch_ucchi <41606806+sohardforan...@users.noreply.github.com> AuthorDate: Wed Aug 23 18:00:56 2023 +0800 [Fix](Nereids)add nereids load function in read fields of GlobalFunctionMgr and Database (#23249) --- .../java/org/apache/doris/catalog/Database.java | 2 +- .../org/apache/doris/catalog/FunctionRegistry.java | 1 - .../org/apache/doris/catalog/FunctionUtil.java | 15 +++++++++++---- .../apache/doris/catalog/GlobalFunctionMgr.java | 2 +- .../doris/nereids/trees/expressions/UdfTest.java | 22 ++++++++++++++++++++++ 5 files changed, 35 insertions(+), 7 deletions(-) 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 a92992d530..d12e607522 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 @@ -635,7 +635,7 @@ public class Database extends MetaObject implements Writable, DatabaseIf<Table> dbState = DbState.valueOf(Text.readString(in)); attachDbName = Text.readString(in); - FunctionUtil.readFields(in, name2Function); + FunctionUtil.readFields(in, this.getFullName(), name2Function); // read encryptKeys if (Env.getCurrentEnvJournalVersion() >= FeMetaVersion.VERSION_102) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java index 53c729fd62..012f15faea 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java @@ -157,7 +157,6 @@ public class FunctionRegistry { .collect(Collectors.joining(", ", "[", "]")); } - public void addUdf(String dbName, String name, UdfBuilder builder) { if (dbName == null) { dbName = GLOBAL_FUNCTION; diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java index 403ae42b51..34f3a8b6f9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java @@ -181,7 +181,8 @@ public class FunctionUtil { } } - public static void readFields(DataInput in, ConcurrentMap<String, ImmutableList<Function>> name2Function) + public static void readFields(DataInput in, String dbName, + ConcurrentMap<String, ImmutableList<Function>> name2Function) throws IOException { int numEntries = in.readInt(); for (int i = 0; i < numEntries; ++i) { @@ -191,7 +192,11 @@ public class FunctionUtil { for (int j = 0; j < numFunctions; ++j) { builder.add(Function.read(in)); } - name2Function.put(name, builder.build()); + ImmutableList<Function> functions = builder.build(); + name2Function.put(name, functions); + for (Function f : functions) { + translateToNereids(dbName, f); + } } } @@ -234,7 +239,8 @@ public class FunctionUtil { JavaUdaf.translateToNereidsFunction(dbName, ((AggregateFunction) function)); } } catch (Exception e) { - LOG.warn("Nereids create function {}:{} failed", dbName, function.getFunctionName().getFunction(), e); + LOG.warn("Nereids create function {}:{} failed, caused by: {}", dbName == null ? "_global_" : dbName, + function.getFunctionName().getFunction(), e); } return true; } @@ -246,7 +252,8 @@ public class FunctionUtil { .collect(Collectors.toList()); Env.getCurrentEnv().getFunctionRegistry().dropUdf(dbName, fnName, argTypes); } catch (Exception e) { - LOG.warn("Nereids drop function {}:{} failed", dbName, function.getName(), e); + LOG.warn("Nereids drop function {}:{} failed, caused by: {}", dbName == null ? "_global_" : dbName, + function.getName(), e); } return false; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/GlobalFunctionMgr.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/GlobalFunctionMgr.java index b62d0b2fe5..e95fc4b1bb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/GlobalFunctionMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/GlobalFunctionMgr.java @@ -57,7 +57,7 @@ public class GlobalFunctionMgr extends MetaObject { @Override public void readFields(DataInput in) throws IOException { super.readFields(in); - FunctionUtil.readFields(in, name2Function); + FunctionUtil.readFields(in, null, name2Function); } public synchronized void addFunction(Function function, boolean ifNotExists) throws UserException { diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/UdfTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/UdfTest.java index 35cb8ba14d..a7e1357d26 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/UdfTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/UdfTest.java @@ -40,9 +40,15 @@ import org.apache.doris.nereids.util.PlanChecker; import org.apache.doris.nereids.util.PlanPatternMatchSupported; import org.apache.doris.utframe.TestWithFeService; +import avro.shaded.com.google.common.collect.ImmutableList; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; + public class UdfTest extends TestWithFeService implements PlanPatternMatchSupported { @Override protected void runBeforeAll() throws Exception { @@ -171,4 +177,20 @@ public class UdfTest extends TestWithFeService implements PlanPatternMatchSuppor && relation.getProjects().get(0).child(0).equals(expected)) ); } + + @Test + public void testReadFromStream() throws Exception { + createFunction("create global alias function f8(int) with parameter(n) as hours_add(now(3), n)"); + Env.getCurrentEnv().getFunctionRegistry().dropUdf(null, "f8", + ImmutableList.of(IntegerType.INSTANCE)); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + Env.getCurrentEnv().getGlobalFunctionMgr().write(new DataOutputStream(outputStream)); + byte[] buffer = outputStream.toByteArray(); + ByteArrayInputStream inputStream = new ByteArrayInputStream(buffer); + Env.getCurrentEnv().getGlobalFunctionMgr().readFields(new DataInputStream(inputStream)); + + Assertions.assertEquals(1, Env.getCurrentEnv().getFunctionRegistry() + .findUdfBuilder(connectContext.getDatabase(), "f8").size()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org