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 <[email protected]> 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();
