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

rong 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 e8e2353f5ee [IOTDB-6204] Pipe: Changed the default settings and add 
manual configuration logic for opc-ua-connector key directory  (#11373)
e8e2353f5ee is described below

commit e8e2353f5eea7d28cfae20ecfc27a96f612b192f
Author: Caideyipi <[email protected]>
AuthorDate: Wed Oct 25 10:36:24 2023 +0800

    [IOTDB-6204] Pipe: Changed the default settings and add manual 
configuration logic for opc-ua-connector key directory  (#11373)
    
    The previous opc-ua-connector key directory setting "java.io.tmpdir" is not 
capable of keeping certificates in a long run, thus the key directory is now 
configurable and resides in "%IOTDB-CONF%/opc-security" directory by default. 
If directory "%IOTDB-CONF% can not be resolved, use 
"user.home/iotdb-opc-security" by default.
---
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  | 44 ++++++++++++----------
 .../config/constant/PipeConnectorConstant.java     |  9 +++++
 .../connector/protocol/opcua/OpcUaConnector.java   |  6 +++
 .../protocol/opcua/OpcUaServerBuilder.java         | 20 ++++++----
 4 files changed, 53 insertions(+), 26 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 5bf62aa2eee..e4ab5e2d392 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -116,33 +116,39 @@ public class IoTDBDescriptor {
     return conf;
   }
 
+  public String getConfDir() {
+    // Check if a config-directory was specified first.
+    String confString = System.getProperty(IoTDBConstant.IOTDB_CONF, null);
+    // If it wasn't, check if a home directory was provided (This usually 
contains a config)
+    if (confString == null) {
+      confString = System.getProperty(IoTDBConstant.IOTDB_HOME, null);
+      if (confString != null) {
+        confString = confString + File.separatorChar + "conf";
+      }
+    }
+    return confString;
+  }
+
   /**
    * get props url location
    *
    * @return url object if location exit, otherwise null.
    */
   public URL getPropsUrl(String configFileName) {
-    // Check if a config-directory was specified first.
-    String urlString = System.getProperty(IoTDBConstant.IOTDB_CONF, null);
-    // If it wasn't, check if a home directory was provided (This usually 
contains a config)
+    String urlString = getConfDir();
     if (urlString == null) {
-      urlString = System.getProperty(IoTDBConstant.IOTDB_HOME, null);
-      if (urlString != null) {
-        urlString = urlString + File.separatorChar + "conf" + 
File.separatorChar + configFileName;
-      } else {
-        // If this too wasn't provided, try to find a default config in the 
root of the classpath.
-        URL uri = IoTDBConfig.class.getResource("/" + configFileName);
-        if (uri != null) {
-          return uri;
-        }
-        logger.warn(
-            "Cannot find IOTDB_HOME or IOTDB_CONF environment variable when 
loading "
-                + "config file {}, use default configuration",
-            configFileName);
-        // update all data seriesPath
-        conf.updatePath();
-        return null;
+      // If urlString wasn't provided, try to find a default config in the 
root of the classpath.
+      URL uri = IoTDBConfig.class.getResource("/" + configFileName);
+      if (uri != null) {
+        return uri;
       }
+      logger.warn(
+          "Cannot find IOTDB_HOME or IOTDB_CONF environment variable when 
loading "
+              + "config file {}, use default configuration",
+          configFileName);
+      // update all data seriesPath
+      conf.updatePath();
+      return null;
     }
     // If a config location was provided, but it doesn't end with a properties 
file,
     // append the default location.
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
index 3414b7a9b29..8ed5af7ed56 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/config/constant/PipeConnectorConstant.java
@@ -20,6 +20,9 @@
 package org.apache.iotdb.db.pipe.config.constant;
 
 import org.apache.iotdb.commons.pipe.config.PipeConfig;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+
+import java.io.File;
 
 import static org.apache.iotdb.commons.conf.IoTDBConstant.MB;
 
@@ -70,6 +73,12 @@ public class PipeConnectorConstant {
   public static final String CONNECTOR_OPC_UA_HTTPS_BIND_PORT_KEY = 
"connector.opcua.https.port";
   public static final int CONNECTOR_OPC_UA_HTTPS_BIND_PORT_DEFAULT_VALUE = 
8443;
 
+  public static final String CONNECTOR_OPC_UA_SECURITY_DIR_KEY = 
"connector.opcua.security.dir";
+  public static final String CONNECTOR_OPC_UA_SECURITY_DIR_DEFAULT_VALUE =
+      IoTDBDescriptor.getInstance().getConfDir() != null
+          ? IoTDBDescriptor.getInstance().getConfDir() + File.separatorChar + 
"opc_security"
+          : System.getProperty("user.home") + File.separatorChar + 
"iotdb_opc_security";
+
   private PipeConnectorConstant() {
     throw new IllegalStateException("Utility class");
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaConnector.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaConnector.java
index bc86efb6ec1..cdfcb044392 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaConnector.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaConnector.java
@@ -56,6 +56,8 @@ import static 
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CON
 import static 
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_IOTDB_USER_KEY;
 import static 
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_HTTPS_BIND_PORT_DEFAULT_VALUE;
 import static 
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_HTTPS_BIND_PORT_KEY;
+import static 
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_SECURITY_DIR_DEFAULT_VALUE;
+import static 
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_SECURITY_DIR_KEY;
 import static 
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_TCP_BIND_PORT_DEFAULT_VALUE;
 import static 
org.apache.iotdb.db.pipe.config.constant.PipeConnectorConstant.CONNECTOR_OPC_UA_TCP_BIND_PORT_KEY;
 
@@ -94,6 +96,9 @@ public class OpcUaConnector implements PipeConnector {
     String password =
         parameters.getStringOrDefault(
             CONNECTOR_IOTDB_PASSWORD_KEY, 
CONNECTOR_IOTDB_PASSWORD_DEFAULT_VALUE);
+    String securityDir =
+        parameters.getStringOrDefault(
+            CONNECTOR_OPC_UA_SECURITY_DIR_KEY, 
CONNECTOR_OPC_UA_SECURITY_DIR_DEFAULT_VALUE);
 
     synchronized (SERVER_KEY_TO_REFERENCE_COUNT_AND_SERVER_MAP) {
       serverKey = httpsBindPort + ":" + tcpBindPort;
@@ -110,6 +115,7 @@ public class OpcUaConnector implements PipeConnector {
                               .setHttpsBindPort(httpsBindPort)
                               .setUser(user)
                               .setPassword(password)
+                              .setSecurityDir(securityDir)
                               .build();
                       newServer.startup();
                       return new Pair<>(new AtomicInteger(0), newServer);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaServerBuilder.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaServerBuilder.java
index 70ddcab732a..0771bc69101 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaServerBuilder.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/connector/protocol/opcua/OpcUaServerBuilder.java
@@ -78,12 +78,14 @@ public class OpcUaServerBuilder {
   private int httpsBindPort;
   private String user;
   private String password;
+  private Path securityDir;
 
   public OpcUaServerBuilder() {
     tcpBindPort = 
PipeConnectorConstant.CONNECTOR_OPC_UA_TCP_BIND_PORT_DEFAULT_VALUE;
     httpsBindPort = 
PipeConnectorConstant.CONNECTOR_OPC_UA_HTTPS_BIND_PORT_DEFAULT_VALUE;
     user = PipeConnectorConstant.CONNECTOR_IOTDB_USER_DEFAULT_VALUE;
     password = PipeConnectorConstant.CONNECTOR_IOTDB_PASSWORD_DEFAULT_VALUE;
+    securityDir = 
Paths.get(PipeConnectorConstant.CONNECTOR_OPC_UA_SECURITY_DIR_DEFAULT_VALUE);
   }
 
   public OpcUaServerBuilder setTcpBindPort(int tcpBindPort) {
@@ -106,22 +108,26 @@ public class OpcUaServerBuilder {
     return this;
   }
 
+  public OpcUaServerBuilder setSecurityDir(String securityDir) {
+    this.securityDir = Paths.get(securityDir);
+    return this;
+  }
+
   public OpcUaServer build() throws Exception {
-    Path securityTempDir = Paths.get(System.getProperty("java.io.tmpdir"), 
"iotdb", "security");
-    Files.createDirectories(securityTempDir);
-    if (!Files.exists(securityTempDir)) {
-      throw new PipeException("Unable to create security temp dir: " + 
securityTempDir);
+    Files.createDirectories(securityDir);
+    if (!Files.exists(securityDir)) {
+      throw new PipeException("Unable to create security dir: " + securityDir);
     }
 
-    File pkiDir = securityTempDir.resolve("pki").toFile();
+    File pkiDir = securityDir.resolve("pki").toFile();
 
     LoggerFactory.getLogger(OpcUaServerBuilder.class)
-        .info("Security dir: {}", securityTempDir.toAbsolutePath());
+        .info("Security dir: {}", securityDir.toAbsolutePath());
     LoggerFactory.getLogger(OpcUaServerBuilder.class)
         .info("Security pki dir: {}", pkiDir.getAbsolutePath());
 
     OpcUaKeyStoreLoader loader =
-        new OpcUaKeyStoreLoader().load(securityTempDir, 
password.toCharArray());
+        new OpcUaKeyStoreLoader().load(securityDir, password.toCharArray());
 
     DefaultCertificateManager certificateManager =
         new DefaultCertificateManager(loader.getServerKeyPair(), 
loader.getServerCertificate());

Reply via email to