You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/04/22 15:01:23 UTC
[incubator-iotdb] branch master updated: Upgrade mlog (#1081)
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new e92f24e Upgrade mlog (#1081)
e92f24e is described below
commit e92f24e6231b88a0541c58ef9829554112b56df3
Author: Haonan <hh...@outlook.com>
AuthorDate: Wed Apr 22 23:01:13 2020 +0800
Upgrade mlog (#1081)
---
.../org/apache/iotdb/db/conf/IoTDBConfigCheck.java | 17 +++++++
.../org/apache/iotdb/db/metadata/MLogWriter.java | 52 +++++++++++++++++++++-
2 files changed, 67 insertions(+), 2 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java
index ec14db3..a5b30d5 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java
@@ -19,6 +19,8 @@
package org.apache.iotdb.db.conf;
import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
+import org.apache.iotdb.db.metadata.MLogWriter;
+import org.apache.iotdb.db.metadata.MetadataConstant;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,6 +41,7 @@ public class IoTDBConfigCheck {
private static String timestampPrecision = "ms";
private static long partitionInterval = 86400;
private static String tsfileFileSystem = "LOCAL";
+ private static String iotdbVersion = "0.10.0";
private Properties properties = new Properties();
public static final IoTDBConfigCheck getInstance() {
@@ -93,6 +96,7 @@ public class IoTDBConfigCheck {
properties.setProperty("timestamp_precision", timestampPrecision);
properties.setProperty("storage_group_time_range", String.valueOf(partitionInterval));
properties.setProperty("tsfile_storage_fs", tsfileFileSystem);
+ properties.setProperty("iotdb_version", iotdbVersion);
properties.store(outputStream, "System properties:");
}
}
@@ -120,6 +124,19 @@ public class IoTDBConfigCheck {
.getProperty("tsfile_storage_fs") + " !");
System.exit(-1);
}
+ if (properties.getProperty("iotdb_version") == null) {
+ logger.info("Lower iotdb version detected, upgrading old mlog file... ");
+ MLogWriter.upgradeMLog(IoTDBDescriptor.getInstance().getConfig().getSchemaDir(),
+ MetadataConstant.METADATA_LOG);
+ logger.info("Old mlog file is upgraded.");
+ try (FileOutputStream outputStream = new FileOutputStream(file.toString())) {
+ properties.setProperty("timestamp_precision", timestampPrecision);
+ properties.setProperty("storage_group_time_range", String.valueOf(partitionInterval));
+ properties.setProperty("tsfile_storage_fs", tsfileFileSystem);
+ properties.setProperty("iotdb_version", iotdbVersion);
+ properties.store(outputStream, "System properties:");
+ }
+ }
} catch (IOException e) {
logger.error("Load system.properties from {} failed.", file.getAbsolutePath(), e);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MLogWriter.java b/server/src/main/java/org/apache/iotdb/db/metadata/MLogWriter.java
index 4067a3d..2e957a8 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MLogWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MLogWriter.java
@@ -20,11 +20,14 @@ package org.apache.iotdb.db.metadata;
import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
+import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
+import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Map;
@@ -84,8 +87,6 @@ public class MLogWriter {
writer.write(String.valueOf(offset));
}
- writer.write(",");
-
writer.newLine();
writer.flush();
}
@@ -113,4 +114,51 @@ public class MLogWriter {
writer.newLine();
writer.flush();
}
+
+ public static void upgradeMLog(String schemaDir, String logFileName) throws IOException {
+ File logFile = FSFactoryProducer.getFSFactory()
+ .getFile(schemaDir + File.separator + logFileName);
+ File tmpLogFile = new File(logFile.getAbsolutePath() + ".tmp");
+
+ // if both old mlog and mlog.tmp do not exist, nothing to do
+ if (!logFile.exists() && !tmpLogFile.exists()) {
+ return;
+ } else if (!logFile.exists() && tmpLogFile.exists()) {
+ // if old mlog doesn't exsit but mlog.tmp exists, rename tmp file to mlog
+ FSFactoryProducer.getFSFactory().moveFile(tmpLogFile, logFile);
+ return;
+ }
+
+ // if both old mlog and mlog.tmp exist, delete mlog tmp, then do upgrading
+ if (tmpLogFile.exists()) {
+ if (!tmpLogFile.delete()) {
+ throw new IOException("Deleting " + tmpLogFile + "failed.");
+ }
+ }
+ // upgrading
+ try (BufferedReader reader = new BufferedReader(new FileReader(logFile));
+ BufferedWriter writer = new BufferedWriter(new FileWriter(tmpLogFile, true));) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ StringBuilder buf = new StringBuilder();
+ buf.append(line);
+ if (line.startsWith(MetadataOperationType.CREATE_TIMESERIES)) {
+ buf.append(",,,");
+ }
+ writer.write(buf.toString());
+ writer.newLine();
+ writer.flush();
+
+ }
+ }
+
+ // upgrade finished, delete old mlog file
+ if (!logFile.delete()) {
+ throw new IOException("Deleting " + logFile + "failed.");
+ }
+
+ // rename tmpLogFile to mlog
+ FSFactoryProducer.getFSFactory().moveFile(tmpLogFile, logFile);
+ }
+
}