You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2020/01/08 07:48:19 UTC

[incubator-iotdb] 01/02: change lock file path and uuid file path to system folder

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

lta pushed a commit to branch sync_minor_fix
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 94f34c2a8d229b98765acab94ba9de63da3929bb
Author: lta <li...@163.com>
AuthorDate: Wed Jan 8 15:30:52 2020 +0800

    change lock file path and uuid file path to system folder
---
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 14 +++++
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |  6 ++
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  8 ++-
 .../iotdb/db/sync/conf/SyncSenderConfig.java       | 18 ------
 .../iotdb/db/sync/sender/transfer/SyncClient.java  | 64 ++++++++++++----------
 5 files changed, 59 insertions(+), 51 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 f3a4fce..642898a 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
@@ -128,6 +128,11 @@ public class IoTDBConfig {
   private String schemaDir = "data/system/schema";
 
   /**
+   * Sync directory, including the lock file and uuid file
+   */
+  private String syncDir = "data/system/sync";
+
+  /**
    * Query directory, stores temporary files of query
    */
   private String queryDir = "data/query";
@@ -479,6 +484,7 @@ public class IoTDBConfig {
     baseDir = addHomeDir(baseDir);
     systemDir = addHomeDir(systemDir);
     schemaDir = addHomeDir(schemaDir);
+    syncDir = addHomeDir(syncDir);
     walFolder = addHomeDir(walFolder);
 
     if (TSFileDescriptor.getInstance().getConfig().getTSFileStorageFs().equals(FSType.HDFS)) {
@@ -626,6 +632,14 @@ public class IoTDBConfig {
     this.schemaDir = schemaDir;
   }
 
+  public String getSyncDir() {
+    return syncDir;
+  }
+
+  public void setSyncDir(String syncDir) {
+    this.syncDir = syncDir;
+  }
+
   public String getQueryDir() {
     return queryDir;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
index 7bf9f64..8fe49c0 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
@@ -74,4 +74,10 @@ public class IoTDBConstant {
 
   public static final int MEMTABLE_NUM_IN_EACH_STORAGE_GROUP = 4;
 
+  // system folder name
+  public static final String SYSTEM_FOLDER_NAME = "system";
+  public static final String SCHEMA_FOLDER_NAME = "schema";
+  public static final String SYNC_FOLDER_NAME = "sync";
+  public static final String QUERY_FOLDER_NAME = "query";
+
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 9b684dc..896b495 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -140,11 +140,13 @@ public class IoTDBDescriptor {
 
       conf.setBaseDir(properties.getProperty("base_dir", conf.getBaseDir()));
 
-      conf.setSystemDir(FilePathUtils.regularizePath(conf.getBaseDir()) + "system");
+      conf.setSystemDir(FilePathUtils.regularizePath(conf.getBaseDir()) + IoTDBConstant.SYSTEM_FOLDER_NAME);
 
-      conf.setSchemaDir(FilePathUtils.regularizePath(conf.getSystemDir()) + "schema");
+      conf.setSchemaDir(FilePathUtils.regularizePath(conf.getSystemDir()) + IoTDBConstant.SCHEMA_FOLDER_NAME);
 
-      conf.setQueryDir(FilePathUtils.regularizePath(conf.getBaseDir()) + "query");
+      conf.setSyncDir(FilePathUtils.regularizePath(conf.getSystemDir()) + IoTDBConstant.SYNC_FOLDER_NAME);
+
+      conf.setQueryDir(FilePathUtils.regularizePath(conf.getBaseDir()) + IoTDBConstant.QUERY_FOLDER_NAME);
 
       conf.setDataDirs(properties.getProperty("data_dirs", conf.getDataDirs()[0])
           .split(","));
diff --git a/server/src/main/java/org/apache/iotdb/db/sync/conf/SyncSenderConfig.java b/server/src/main/java/org/apache/iotdb/db/sync/conf/SyncSenderConfig.java
index e3ed539..e7d9466 100644
--- a/server/src/main/java/org/apache/iotdb/db/sync/conf/SyncSenderConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/sync/conf/SyncSenderConfig.java
@@ -32,10 +32,6 @@ public class SyncSenderConfig {
 
   private String senderFolderPath;
 
-  private String lockFilePath;
-
-  private String uuidPath;
-
   private String lastFileInfoPath;
 
   private String snapshotPath;
@@ -57,8 +53,6 @@ public class SyncSenderConfig {
     senderFolderPath =
         dataDirectory + File.separatorChar + SyncConstant.SYNC_SENDER + File.separatorChar +
             getSyncReceiverName();
-    lockFilePath = senderFolderPath + File.separatorChar + SyncConstant.LOCK_FILE_NAME;
-    uuidPath = senderFolderPath + File.separatorChar + SyncConstant.UUID_FILE_NAME;
     lastFileInfoPath = senderFolderPath + File.separatorChar + SyncConstant.LAST_LOCAL_FILE_NAME;
     snapshotPath = senderFolderPath + File.separatorChar + SyncConstant.DATA_SNAPSHOT_NAME;
     if (!new File(snapshotPath).exists()) {
@@ -98,14 +92,6 @@ public class SyncSenderConfig {
     this.senderFolderPath = senderFolderPath;
   }
 
-  public String getLockFilePath() {
-    return lockFilePath;
-  }
-
-  public void setLockFilePath(String lockFilePath) {
-    this.lockFilePath = lockFilePath;
-  }
-
   public String getLastFileInfoPath() {
     return lastFileInfoPath;
   }
@@ -122,10 +108,6 @@ public class SyncSenderConfig {
     this.snapshotPath = snapshotPath;
   }
 
-  public String getUuidPath() {
-    return uuidPath;
-  }
-
   public String getSyncReceiverName() {
     return serverIp + SyncConstant.SYNC_DIR_NAME_SEPARATOR + serverPort;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/sync/sender/transfer/SyncClient.java b/server/src/main/java/org/apache/iotdb/db/sync/sender/transfer/SyncClient.java
index 692509a..11c5535 100644
--- a/server/src/main/java/org/apache/iotdb/db/sync/sender/transfer/SyncClient.java
+++ b/server/src/main/java/org/apache/iotdb/db/sync/sender/transfer/SyncClient.java
@@ -64,8 +64,8 @@ import org.apache.iotdb.db.sync.sender.recover.ISyncSenderLogger;
 import org.apache.iotdb.db.sync.sender.recover.SyncSenderLogAnalyzer;
 import org.apache.iotdb.db.sync.sender.recover.SyncSenderLogger;
 import org.apache.iotdb.db.utils.SyncUtils;
-import org.apache.iotdb.service.sync.thrift.SyncStatus;
 import org.apache.iotdb.service.sync.thrift.SyncService;
+import org.apache.iotdb.service.sync.thrift.SyncStatus;
 import org.apache.iotdb.tsfile.utils.BytesUtils;
 import org.apache.thrift.TException;
 import org.apache.thrift.protocol.TBinaryProtocol;
@@ -139,32 +139,27 @@ public class SyncClient implements ISyncClient {
 
   @Override
   public void verifySingleton() throws IOException {
-    String[] dataDirs = IoTDBDescriptor.getInstance().getConfig().getDataDirs();
-    for (String dataDir : dataDirs) {
-      config.update(dataDir);
-      File lockFile = new File(config.getLockFilePath());
-      if (!lockFile.getParentFile().exists()) {
-        lockFile.getParentFile().mkdirs();
-      }
-      if (!lockFile.exists()) {
-        lockFile.createNewFile();
-      }
-      if (!lockInstance(config.getLockFilePath())) {
-        logger.error("Sync client is already running.");
-        System.exit(1);
-      }
+    File lockFile = getLockFile();
+    if (!lockFile.getParentFile().exists()) {
+      lockFile.getParentFile().mkdirs();
+    }
+    if (!lockFile.exists()) {
+      lockFile.createNewFile();
+    }
+    if (!lockInstance(lockFile)) {
+      logger.error("Sync client is already running.");
+      System.exit(1);
     }
   }
 
   /**
-   * Try to lock lockfile. if failed, it means that sync client has benn started.
+   * Try to lock lockfile. if failed, it means that sync client has been started.
    *
-   * @param lockFile path of lock file
+   * @param lockFile lock file
    */
-  private boolean lockInstance(final String lockFile) {
+  private boolean lockInstance(File lockFile) {
     try {
-      final File file = new File(lockFile);
-      final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
+      final RandomAccessFile randomAccessFile = new RandomAccessFile(lockFile, "rw");
       final FileLock fileLock = randomAccessFile.getChannel().tryLock();
       if (fileLock != null) {
         Runtime.getRuntime().addShutdownHook(new Thread(() -> {
@@ -288,7 +283,7 @@ public class SyncClient implements ISyncClient {
   public void confirmIdentity() throws SyncConnectionException {
     try (Socket socket = new Socket(config.getServerIp(), config.getServerPort())){
       SyncStatus status = serviceClient
-          .check(socket.getLocalAddress().getHostAddress(), getOrCreateUUID(config.getUuidPath()));
+          .check(socket.getLocalAddress().getHostAddress(), getOrCreateUUID(getUuidFile()));
       if (status.code != SUCCESS_CODE) {
         throw new SyncConnectionException(
             "The receiver rejected the synchronization task because " + status.msg);
@@ -302,25 +297,24 @@ public class SyncClient implements ISyncClient {
   /**
    * UUID marks the identity of sender for receiver.
    */
-  private String getOrCreateUUID(String uuidPath) throws IOException {
-    File file = new File(uuidPath);
+  private String getOrCreateUUID(File uuidFile) throws IOException {
     String uuid;
-    if (!file.getParentFile().exists()) {
-      file.getParentFile().mkdirs();
+    if (!uuidFile.getParentFile().exists()) {
+      uuidFile.getParentFile().mkdirs();
     }
-    if (!file.exists()) {
-      try (FileOutputStream out = new FileOutputStream(file)) {
+    if (!uuidFile.exists()) {
+      try (FileOutputStream out = new FileOutputStream(uuidFile)) {
         uuid = generateUUID();
         out.write(uuid.getBytes());
       } catch (IOException e) {
-        logger.error("Cannot insert UUID to file {}", file.getPath());
+        logger.error("Cannot insert UUID to file {}", uuidFile.getPath());
         throw new IOException(e);
       }
     } else {
-      try (BufferedReader bf = new BufferedReader((new FileReader(uuidPath)))) {
+      try (BufferedReader bf = new BufferedReader((new FileReader(uuidFile.getAbsolutePath())))) {
         uuid = bf.readLine();
       } catch (IOException e) {
-        logger.error("Cannot read UUID from file{}", file.getPath());
+        logger.error("Cannot read UUID from file{}", uuidFile.getPath());
         throw new IOException(e);
       }
     }
@@ -656,6 +650,16 @@ public class SyncClient implements ISyncClient {
         MetadataConstant.METADATA_LOG);
   }
 
+  private File getLockFile() {
+    return new File(IoTDBDescriptor.getInstance().getConfig().getSyncDir(),
+        SyncConstant.LOCK_FILE_NAME);
+  }
+
+  private File getUuidFile() {
+    return new File(IoTDBDescriptor.getInstance().getConfig().getSyncDir(),
+        SyncConstant.UUID_FILE_NAME);
+  }
+
   private static class InstanceHolder {
 
     private static final SyncClient INSTANCE = new SyncClient();