This is an automated email from the ASF dual-hosted git repository. rong pushed a commit to branch iotdb-3227 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit ffffe4f723c59b54778d11e7f0b4eb40d7d4d8a4 Author: Steve Yurong Su <[email protected]> AuthorDate: Tue May 24 12:19:35 2022 +0800 data node: create function --- .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 9 ++++++ .../java/org/apache/iotdb/db/service/DataNode.java | 34 +++++++++++++++------- .../service/thrift/impl/InternalServiceImpl.java | 18 ++++++++++-- 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java index 7e651bae80..58dedbee7a 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java @@ -249,6 +249,10 @@ public class IoTDBConfig { private String udfDir = IoTDBConstant.EXT_FOLDER_NAME + File.separator + IoTDBConstant.UDF_FOLDER_NAME; + /** External temporary lib directory for storing downloaded JAR files */ + private String temporaryLibDir = + IoTDBConstant.EXT_FOLDER_NAME + File.separator + IoTDBConstant.TMP_FOLDER_NAME; + /** External lib directory for trigger, stores user-uploaded JAR files */ private String triggerDir = IoTDBConstant.EXT_FOLDER_NAME + File.separator + IoTDBConstant.TRIGGER_FOLDER_NAME; @@ -984,6 +988,7 @@ public class IoTDBConfig { indexRootFolder = addHomeDir(indexRootFolder); extDir = addHomeDir(extDir); udfDir = addHomeDir(udfDir); + temporaryLibDir = addHomeDir(temporaryLibDir); triggerDir = addHomeDir(triggerDir); mqttDir = addHomeDir(mqttDir); for (int i = 0; i < walDirs.length; i++) { @@ -1177,6 +1182,10 @@ public class IoTDBConfig { return udfDir; } + public String getTemporaryLibDir() { + return temporaryLibDir; + } + public void setUdfDir(String udfDir) { this.udfDir = udfDir; } diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java index 05ad28efcf..6629c2bd05 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java +++ b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java @@ -30,6 +30,7 @@ import org.apache.iotdb.commons.service.JMXService; import org.apache.iotdb.commons.service.RegisterManager; import org.apache.iotdb.commons.service.StartupChecks; import org.apache.iotdb.commons.udf.service.UDFClassLoaderManager; +import org.apache.iotdb.commons.udf.service.UDFExecutableManager; import org.apache.iotdb.commons.udf.service.UDFRegistrationService; import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRegisterReq; import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRegisterResp; @@ -277,16 +278,8 @@ public class DataNode implements DataNodeMBean { .getConfig() .setRpcImplClassName(DataNodeTSIServiceImpl.class.getName()); - registerManager.register(TemporaryQueryDataFileService.getInstance()); - registerManager.register( - UDFClassLoaderManager.setupAndGetInstance( - IoTDBDescriptor.getInstance().getConfig().getUdfDir())); - registerManager.register( - UDFRegistrationService.setupAndGetInstance( - IoTDBDescriptor.getInstance().getConfig().getSystemDir() - + File.separator - + "udf" - + File.separator)); + initUdfServices(); + registerManager.register(ReceiverService.getInstance()); registerManager.register(MetricsService.getInstance()); @@ -328,6 +321,27 @@ public class DataNode implements DataNodeMBean { logger.info("Congratulation, IoTDB DataNode is set up successfully. Now, enjoy yourself!"); } + private void initUdfServices() throws StartupException { + try { + UDFExecutableManager.setupAndGetInstance( + IoTDBDescriptor.getInstance().getConfig().getTemporaryLibDir(), + IoTDBDescriptor.getInstance().getConfig().getUdfDir()); + } catch (Exception e) { + throw new StartupException(e); + } + + registerManager.register(TemporaryQueryDataFileService.getInstance()); + registerManager.register( + UDFClassLoaderManager.setupAndGetInstance( + IoTDBDescriptor.getInstance().getConfig().getUdfDir())); + registerManager.register( + UDFRegistrationService.setupAndGetInstance( + IoTDBDescriptor.getInstance().getConfig().getSystemDir() + + File.separator + + "udf" + + File.separator)); + } + private void initConfigManager() { long time = System.currentTimeMillis(); IoTDB.configManager.init(); diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/InternalServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/InternalServiceImpl.java index 805b4846ed..1c9721d091 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/InternalServiceImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/InternalServiceImpl.java @@ -32,6 +32,8 @@ import org.apache.iotdb.commons.consensus.SchemaRegionId; import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.commons.udf.service.UDFExecutableManager; +import org.apache.iotdb.commons.udf.service.UDFRegistrationService; import org.apache.iotdb.consensus.IConsensus; import org.apache.iotdb.consensus.common.Peer; import org.apache.iotdb.consensus.common.request.ByteBufferConsensusRequest; @@ -345,8 +347,20 @@ public class InternalServiceImpl implements InternalService.Iface { } @Override - public TSStatus createFunction(TCreateFunctionRequest req) throws TException { - throw new NotImplementedException(); + public TSStatus createFunction(TCreateFunctionRequest request) throws TException { + try { + UDFRegistrationService.getInstance() + .register( + request.getUdfName(), + request.getClassName(), + request.getUris(), + UDFExecutableManager.getInstance(), + true); + return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()); + } catch (Exception e) { + return new TSStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode()) + .setMessage(e.getMessage()); + } } public void handleClientExit() {}
