This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 8ebe2764805 Change UDF creation error code and avoid logging thread 
stack in warn log (#17467)
8ebe2764805 is described below

commit 8ebe2764805685c140e72c53a901fd724fefa5af
Author: Jackie Tien <[email protected]>
AuthorDate: Tue Apr 14 15:27:36 2026 +0800

    Change UDF creation error code and avoid logging thread stack in warn log 
(#17467)
---
 .../src/main/java/org/apache/iotdb/rpc/TSStatusCode.java      |  1 +
 .../java/org/apache/iotdb/confignode/manager/UDFManager.java  |  3 +++
 .../java/org/apache/iotdb/confignode/persistence/UDFInfo.java | 11 +++++++----
 .../db/queryengine/plan/execution/config/ConfigExecution.java |  4 ++++
 .../execution/config/executor/ClusterConfigTaskExecutor.java  |  7 +------
 5 files changed, 16 insertions(+), 10 deletions(-)

diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
index 53c23626b13..f9e750f4012 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
@@ -230,6 +230,7 @@ public enum TSStatusCode {
   CREATE_UDF_ERROR(1204),
   DROP_UDF_ERROR(1205),
   EXECUTE_UDF_ERROR(1206),
+  UDF_ALREADY_EXISTS(1207),
 
   // Trigger
   CREATE_TRIGGER_ERROR(1300),
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/UDFManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/UDFManager.java
index 6c6477e2418..cfe21f9f37b 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/UDFManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/UDFManager.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.common.rpc.thrift.Model;
 import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
 import org.apache.iotdb.commons.udf.UDFInformation;
 import org.apache.iotdb.commons.udf.UDFType;
 import org.apache.iotdb.confignode.client.async.CnToDnAsyncRequestType;
@@ -137,6 +138,8 @@ public class UDFManager {
 
       LOGGER.info("Start to activate UDF [{}] in UDF_Table on Config Nodes", 
udfName);
       return configManager.getConsensusManager().write(new 
UpdateFunctionPlan(udfInformation));
+    } catch (IoTDBRuntimeException e) {
+      return new TSStatus(e.getErrorCode()).setMessage(e.getMessage());
     } catch (Exception e) {
       LOGGER.warn(e.getMessage(), e);
       return new TSStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode())
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
index 002813038cf..308a442f765 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.confignode.persistence;
 
 import org.apache.iotdb.common.rpc.thrift.Model;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
+import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
 import org.apache.iotdb.commons.executable.ExecutableManager;
 import org.apache.iotdb.commons.snapshot.SnapshotProcessor;
 import org.apache.iotdb.commons.udf.UDFInformation;
@@ -96,15 +97,17 @@ public class UDFInfo implements SnapshotProcessor {
       throws UDFManagementException {
     if (udfTable.containsUDF(model, udfName)
         && udfTable.getUDFInformation(model, udfName).isAvailable()) {
-      throw new UDFManagementException(
-          String.format("Failed to create UDF [%s], the same name UDF has been 
created", udfName));
+      throw new IoTDBRuntimeException(
+          String.format("Failed to create UDF [%s], the same name UDF has been 
created", udfName),
+          TSStatusCode.UDF_ALREADY_EXISTS.getStatusCode());
     }
 
     if (existedJarToMD5.containsKey(jarName) && 
!existedJarToMD5.get(jarName).equals(jarMD5)) {
-      throw new UDFManagementException(
+      throw new IoTDBRuntimeException(
           String.format(
               "Failed to create UDF [%s], the same name Jar [%s] but different 
MD5 [%s] has existed",
-              udfName, jarName, jarMD5));
+              udfName, jarName, jarMD5),
+          TSStatusCode.UDF_ALREADY_EXISTS.getStatusCode());
     }
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
index 2b70a667be9..75f5ddd25bf 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
@@ -72,6 +72,10 @@ public class ConfigExecution implements IQueryExecution {
                   TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode(),
                   TSStatusCode.DATABASE_CONFLICT.getStatusCode(),
                   TSStatusCode.DATABASE_CONFIG_ERROR.getStatusCode(),
+                  TSStatusCode.UDF_LOAD_CLASS_ERROR.getStatusCode(),
+                  TSStatusCode.DROP_UDF_ERROR.getStatusCode(),
+                  TSStatusCode.UDF_DOWNLOAD_ERROR.getStatusCode(),
+                  TSStatusCode.UDF_ALREADY_EXISTS.getStatusCode(),
                   TSStatusCode.PATH_NOT_EXIST.getStatusCode(),
                   
TSStatusCode.MEASUREMENT_ALREADY_EXISTS_IN_TEMPLATE.getStatusCode(),
                   TSStatusCode.SCHEMA_QUOTA_EXCEEDED.getStatusCode(),
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index cf404e8d57b..5325560301c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -604,7 +604,7 @@ public class ClusterConfigTaskExecutor implements 
IConfigTaskExecutor {
               String.format(
                   "Failed to create UDF [%s], the given function name 
conflicts with the built-in function name.",
                   udfName.toUpperCase()),
-              TSStatusCode.CREATE_UDF_ERROR.getStatusCode()));
+              TSStatusCode.UDF_ALREADY_EXISTS.getStatusCode()));
       return future;
     }
     try (ConfigNodeClient client =
@@ -738,11 +738,6 @@ public class ClusterConfigTaskExecutor implements 
IConfigTaskExecutor {
 
       final TSStatus executionStatus = 
client.createFunction(tCreateFunctionReq);
       if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != 
executionStatus.getCode()) {
-        LOGGER.warn(
-            "Failed to create function {}({}) because {}",
-            udfName,
-            className,
-            executionStatus.getMessage());
         future.setException(new IoTDBException(executionStatus));
       } else {
         future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));

Reply via email to