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

Reply via email to