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

xingtanzjr pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/1.2 by this push:
     new 7c295f95370 Get canonical path when using IOTDB_DATA_HOME and 
IOTDB_HOME (#10035)
7c295f95370 is described below

commit 7c295f95370dbed44c47a34a43d6b54ccb9b5260
Author: Alan Choo <[email protected]>
AuthorDate: Fri Jun 2 20:35:55 2023 +0800

    Get canonical path when using IOTDB_DATA_HOME and IOTDB_HOME (#10035)
---
 .../apache/iotdb/commons/conf/CommonConfig.java    | 31 +++++++++++-----------
 .../org/apache/iotdb/commons/utils/FileUtils.java  | 12 +++++++++
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 21 ++++++++-------
 3 files changed, 39 insertions(+), 25 deletions(-)

diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java 
b/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
index 5c7c91545ee..4f70504681e 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
@@ -22,12 +22,14 @@ import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import 
org.apache.iotdb.commons.client.property.ClientPoolProperty.DefaultProperty;
 import org.apache.iotdb.commons.cluster.NodeStatus;
 import org.apache.iotdb.commons.enums.HandleSystemErrorStrategy;
+import org.apache.iotdb.commons.utils.FileUtils;
 import org.apache.iotdb.tsfile.fileSystem.FSType;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.concurrent.TimeUnit;
 
 public class CommonConfig {
@@ -163,24 +165,23 @@ public class CommonConfig {
   CommonConfig() {}
 
   public void updatePath(String homeDir) {
-    userFolder = addHomeDir(userFolder, homeDir);
-    roleFolder = addHomeDir(roleFolder, homeDir);
-    procedureWalFolder = addHomeDir(procedureWalFolder, homeDir);
-    syncDir = addHomeDir(syncDir, homeDir);
-    for (int i = 0; i < walDirs.length; i++) {
-      walDirs[i] = addHomeDir(walDirs[i], homeDir);
+    if (homeDir == null) {
+      return;
     }
-  }
 
-  private String addHomeDir(String dir, String homeDir) {
-    if (!new File(dir).isAbsolute() && homeDir != null && homeDir.length() > 
0) {
-      if (!homeDir.endsWith(File.separator)) {
-        dir = homeDir + File.separatorChar + dir;
-      } else {
-        dir = homeDir + dir;
-      }
+    File homeFile = new File(homeDir);
+    try {
+      homeDir = homeFile.getCanonicalPath();
+    } catch (IOException e) {
+      logger.error("Fail to get canonical path of {}", homeFile, e);
+    }
+    userFolder = FileUtils.addPrefix2FilePath(homeDir, userFolder);
+    roleFolder = FileUtils.addPrefix2FilePath(homeDir, roleFolder);
+    procedureWalFolder = FileUtils.addPrefix2FilePath(homeDir, 
procedureWalFolder);
+    syncDir = FileUtils.addPrefix2FilePath(homeDir, syncDir);
+    for (int i = 0; i < walDirs.length; i++) {
+      walDirs[i] = FileUtils.addPrefix2FilePath(homeDir, walDirs[i]);
     }
-    return dir;
   }
 
   public String getEncryptDecryptProvider() {
diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/utils/FileUtils.java 
b/node-commons/src/main/java/org/apache/iotdb/commons/utils/FileUtils.java
index 6a5e3e0f6cd..98ef533b358 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/utils/FileUtils.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/utils/FileUtils.java
@@ -153,4 +153,16 @@ public class FileUtils {
       org.apache.commons.io.FileUtils.delete(file);
     }
   }
+
+  /** Add a prefix to a relative path file */
+  public static String addPrefix2FilePath(String prefix, String file) {
+    if (!new File(file).isAbsolute() && prefix != null && prefix.length() > 0) 
{
+      if (!prefix.endsWith(File.separator)) {
+        file = prefix + File.separatorChar + file;
+      } else {
+        file = prefix + file;
+      }
+    }
+    return file;
+  }
 }
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 cdd894b5d47..816916ac7b1 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
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.conf;
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import 
org.apache.iotdb.commons.client.property.ClientPoolProperty.DefaultProperty;
 import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.commons.utils.FileUtils;
 import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.consensus.ConsensusFactory;
 import org.apache.iotdb.db.audit.AuditLogOperation;
@@ -51,6 +52,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
+import java.io.IOException;
 import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Collections;
@@ -1317,18 +1319,17 @@ public class IoTDBConfig {
     if (dataHomeDir == null) {
       dataHomeDir = System.getProperty(IoTDBConstant.IOTDB_HOME, null);
     }
-    return addDirPrefix(dataHomeDir, dir);
-  }
+    if (dataHomeDir == null) {
+      return dir;
+    }
 
-  private String addDirPrefix(String prefix, String dir) {
-    if (!new File(dir).isAbsolute() && prefix != null && prefix.length() > 0) {
-      if (!prefix.endsWith(File.separator)) {
-        dir = prefix + File.separatorChar + dir;
-      } else {
-        dir = prefix + dir;
-      }
+    File dataHomeFile = new File(dataHomeDir);
+    try {
+      dataHomeDir = dataHomeFile.getCanonicalPath();
+    } catch (IOException e) {
+      logger.error("Fail to get canonical path of {}", dataHomeFile, e);
     }
-    return dir;
+    return FileUtils.addPrefix2FilePath(dataHomeDir, dir);
   }
 
   void confirmMultiDirStrategy() {

Reply via email to