You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/10/29 06:07:02 UTC
[iotdb] branch master updated: [IOTDB-4787] Make Using clause in CREATE FUNCTION optional (ConfigNode) (#7785)
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 69582de2b5 [IOTDB-4787] Make Using clause in CREATE FUNCTION optional (ConfigNode) (#7785)
69582de2b5 is described below
commit 69582de2b59a85babd2611976d425a9d70d6bffc
Author: Weihao Li <60...@users.noreply.github.com>
AuthorDate: Sat Oct 29 14:06:56 2022 +0800
[IOTDB-4787] Make Using clause in CREATE FUNCTION optional (ConfigNode) (#7785)
---
.../org/apache/iotdb/confignode/manager/UDFManager.java | 11 ++++++-----
.../org/apache/iotdb/confignode/persistence/UDFInfo.java | 12 +++++++-----
.../resources/confignode1conf/iotdb-confignode.properties | 1 +
.../resources/confignode2conf/iotdb-confignode.properties | 1 +
.../resources/confignode3conf/iotdb-confignode.properties | 1 +
.../iotdb/commons/executable/ExecutableManager.java | 4 ++++
.../java/org/apache/iotdb/commons/udf/UDFInformation.java | 15 +++++++++++----
.../iotdb/commons/udf/service/UDFManagementService.java | 2 +-
.../config/executor/ClusterConfigTaskExecutor.java | 2 +-
9 files changed, 33 insertions(+), 16 deletions(-)
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/UDFManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/UDFManager.java
index 299b2c8466..848acef942 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/UDFManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/UDFManager.java
@@ -69,14 +69,15 @@ public class UDFManager {
public TSStatus createFunction(TCreateFunctionReq req) {
udfInfo.acquireUDFTableLock();
try {
+ final boolean isUsingURI = req.isIsUsingURI();
final String udfName = req.udfName.toUpperCase(),
- jarName = req.getJarName(),
- jarMD5 = req.jarMD5;
+ jarMD5 = req.getJarMD5(),
+ jarName = req.getJarName();
final byte[] jarFile = req.getJarFile();
udfInfo.validate(udfName, jarName, jarMD5);
final UDFInformation udfInformation =
- new UDFInformation(udfName, req.getClassName(), false, true, jarName, jarMD5);
+ new UDFInformation(udfName, req.getClassName(), false, isUsingURI, jarName, jarMD5);
LOGGER.info("Start to create UDF [{}] on Data Nodes", udfName);
@@ -87,7 +88,7 @@ public class UDFManager {
return dataNodesStatus;
}
- final boolean needToSaveJar = udfInfo.needToSaveJar(jarName);
+ final boolean needToSaveJar = isUsingURI && udfInfo.needToSaveJar(jarName);
LOGGER.info(
"Start to add UDF [{}] in UDF_Table on Config Nodes, needToSaveJar[{}]",
@@ -112,7 +113,7 @@ public class UDFManager {
final Map<Integer, TDataNodeLocation> dataNodeLocationMap =
configManager.getNodeManager().getRegisteredDataNodeLocations();
final TCreateFunctionInstanceReq req =
- new TCreateFunctionInstanceReq(udfInformation.serialize());
+ new TCreateFunctionInstanceReq(udfInformation.serialize()).setJarFile(jarFile);
AsyncClientHandler<TCreateFunctionInstanceReq, TSStatus> clientHandler =
new AsyncClientHandler<>(DataNodeRequestType.CREATE_FUNCTION, req, dataNodeLocationMap);
AsyncDataNodeClientPool.getInstance().sendAsyncRequestToDataNodeWithRetry(clientHandler);
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
index 22e04a1132..c8a3f9dbaf 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/UDFInfo.java
@@ -115,10 +115,12 @@ public class UDFInfo implements SnapshotProcessor {
try {
final UDFInformation udfInformation = physicalPlan.getUdfInformation();
udfTable.addUDFInformation(udfInformation.getFunctionName(), udfInformation);
- existedJarToMD5.put(udfInformation.getJarName(), udfInformation.getJarMD5());
- if (physicalPlan.getJarFile() != null) {
- udfExecutableManager.saveToLibDir(
- ByteBuffer.wrap(physicalPlan.getJarFile().getValues()), udfInformation.getJarName());
+ if (udfInformation.isUsingURI()) {
+ existedJarToMD5.put(udfInformation.getJarName(), udfInformation.getJarMD5());
+ if (physicalPlan.getJarFile() != null) {
+ udfExecutableManager.saveToInstallDir(
+ ByteBuffer.wrap(physicalPlan.getJarFile().getValues()), udfInformation.getJarName());
+ }
}
return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
} catch (Exception e) {
@@ -144,7 +146,7 @@ public class UDFInfo implements SnapshotProcessor {
for (String jarName : physicalPlan.getJarNames()) {
jarList.add(
ExecutableManager.transferToBytebuffer(
- UDFExecutableManager.getInstance().getFileStringUnderLibRootByName(jarName)));
+ UDFExecutableManager.getInstance().getFileStringUnderInstallByName(jarName)));
}
} catch (Exception e) {
LOGGER.error("Get UDF_Jar failed", e);
diff --git a/confignode/src/test/resources/confignode1conf/iotdb-confignode.properties b/confignode/src/test/resources/confignode1conf/iotdb-confignode.properties
index 28dfa895a4..bf1706fda7 100644
--- a/confignode/src/test/resources/confignode1conf/iotdb-confignode.properties
+++ b/confignode/src/test/resources/confignode1conf/iotdb-confignode.properties
@@ -29,6 +29,7 @@ data_replication_factor=3
system_dir=target/confignode1/system
data_dirs=target/confignode1/data
consensus_dir=target/confignode1/consensus
+udf_lib_dir=target/confignode1/ext/udf
trigger_lib_dir=target/confignode1/ext/trigger
proc_wal_dir=target/confignode1/proc
partition_region_ratis_log_appender_buffer_size_max = 14194304
\ No newline at end of file
diff --git a/confignode/src/test/resources/confignode2conf/iotdb-confignode.properties b/confignode/src/test/resources/confignode2conf/iotdb-confignode.properties
index b4b54e981c..ca328db04c 100644
--- a/confignode/src/test/resources/confignode2conf/iotdb-confignode.properties
+++ b/confignode/src/test/resources/confignode2conf/iotdb-confignode.properties
@@ -28,6 +28,7 @@ data_replication_factor=3
system_dir=target/confignode2/system
data_dirs=target/confignode2/data
consensus_dir=target/confignode2/consensus
+udf_lib_dir=target/confignode2/ext/udf
trigger_lib_dir=target/confignode2/ext/trigger
proc_wal_dir=target/confignode2/proc
partition_region_ratis_log_appender_buffer_size_max = 14194304
\ No newline at end of file
diff --git a/confignode/src/test/resources/confignode3conf/iotdb-confignode.properties b/confignode/src/test/resources/confignode3conf/iotdb-confignode.properties
index 229def86cb..4b1f760984 100644
--- a/confignode/src/test/resources/confignode3conf/iotdb-confignode.properties
+++ b/confignode/src/test/resources/confignode3conf/iotdb-confignode.properties
@@ -28,6 +28,7 @@ data_replication_factor=3
system_dir=target/confignode3/system
data_dirs=target/confignode3/data
consensus_dir=target/confignode3/consensus
+udf_lib_dir=target/confignode3/ext/udf
trigger_lib_dir=target/confignode3/ext/trigger
proc_wal_dir=target/confignode3/proc
partition_region_ratis_log_appender_buffer_size_max = 14194304
diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/executable/ExecutableManager.java b/node-commons/src/main/java/org/apache/iotdb/commons/executable/ExecutableManager.java
index 9106c8db86..058a370ce7 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/executable/ExecutableManager.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/executable/ExecutableManager.java
@@ -190,6 +190,10 @@ public class ExecutableManager {
return libRoot + File.separator + name;
}
+ public String getFileStringUnderInstallByName(String name) {
+ return libRoot + File.separator + INSTALL_DIR + File.separator + name;
+ }
+
private File getFileByFullPath(String path) {
return FSFactoryProducer.getFSFactory().getFile(path);
}
diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/udf/UDFInformation.java b/node-commons/src/main/java/org/apache/iotdb/commons/udf/UDFInformation.java
index 8e62817c8d..c2abaccb1c 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/udf/UDFInformation.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/udf/UDFInformation.java
@@ -126,8 +126,11 @@ public class UDFInformation {
ReadWriteIOUtils.write(functionName, outputStream);
ReadWriteIOUtils.write(className, outputStream);
ReadWriteIOUtils.write(isBuiltin, outputStream);
- ReadWriteIOUtils.write(jarName, outputStream);
- ReadWriteIOUtils.write(jarMD5, outputStream);
+ ReadWriteIOUtils.write(isUsingURI, outputStream);
+ if (isUsingURI) {
+ ReadWriteIOUtils.write(jarName, outputStream);
+ ReadWriteIOUtils.write(jarMD5, outputStream);
+ }
}
public static UDFInformation deserialize(ByteBuffer byteBuffer) {
@@ -135,8 +138,12 @@ public class UDFInformation {
udfInformation.setFunctionName(ReadWriteIOUtils.readString(byteBuffer));
udfInformation.setClassName(ReadWriteIOUtils.readString(byteBuffer));
udfInformation.setBuiltin(ReadWriteIOUtils.readBool(byteBuffer));
- udfInformation.setJarName(ReadWriteIOUtils.readString(byteBuffer));
- udfInformation.setJarMD5(ReadWriteIOUtils.readString(byteBuffer));
+ boolean isUsingURI = ReadWriteIOUtils.readBool(byteBuffer);
+ udfInformation.setUsingURI(isUsingURI);
+ if (isUsingURI) {
+ udfInformation.setJarName(ReadWriteIOUtils.readString(byteBuffer));
+ udfInformation.setJarMD5(ReadWriteIOUtils.readString(byteBuffer));
+ }
return udfInformation;
}
}
diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/udf/service/UDFManagementService.java b/node-commons/src/main/java/org/apache/iotdb/commons/udf/service/UDFManagementService.java
index 2212a0c930..3e03f2d604 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/udf/service/UDFManagementService.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/udf/service/UDFManagementService.java
@@ -186,7 +186,7 @@ public class UDFManagementService {
private void saveJarFile(String jarName, ByteBuffer byteBuffer) throws IOException {
if (byteBuffer != null) {
- UDFExecutableManager.getInstance().saveToLibDir(byteBuffer, jarName);
+ UDFExecutableManager.getInstance().saveToInstallDir(byteBuffer, jarName);
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 3ead0fb787..88aa45b0cd 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -291,7 +291,7 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
String jarMd5;
if (createFunctionStatement.isUsingURI()) {
String uriString = createFunctionStatement.getUriString();
- jarFileName = uriString.substring(uriString.lastIndexOf("/") + 1);
+ jarFileName = new File(createFunctionStatement.getUriString()).getName();
if (!new URI(uriString).getScheme().equals("file")) {
try {
// download executable