You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2020/04/21 09:25:05 UTC

[incubator-iotdb] 01/01: upgrade mlog

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

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

commit cebc4f01e1e33e4a2fe965c6a0a8b09f23f799cc
Author: HTHou <hh...@outlook.com>
AuthorDate: Tue Apr 21 17:24:17 2020 +0800

    upgrade mlog
---
 .../org/apache/iotdb/db/conf/IoTDBConfigCheck.java | 17 ++++++++++++
 .../org/apache/iotdb/db/metadata/MLogWriter.java   | 31 ++++++++++++++++++++++
 2 files changed, 48 insertions(+)

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..cd48988 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.warn("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..dc2da5a 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
@@ -23,8 +23,10 @@ import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 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;
@@ -113,4 +115,33 @@ public class MLogWriter {
     writer.newLine();
     writer.flush();
   }
+
+  public static File upgradeMLog(String schemaDir, String logFileName) throws IOException {
+    File logFile = SystemFileFactory.INSTANCE.getFile(schemaDir + File.separator + logFileName);
+    FileReader fileReader;
+    String line;
+    fileReader = new FileReader(logFile);
+    BufferedReader reader = new BufferedReader(fileReader);
+    StringBuffer bufAll = new StringBuffer();
+    while ((line = reader.readLine()) != null) {
+      StringBuffer buf = new StringBuffer();
+      if (line.startsWith(MetadataOperationType.CREATE_TIMESERIES)) {
+        line = line + ",,,,";
+      }
+      buf.append(line);
+      buf.append(System.getProperty("line.separator"));
+      bufAll.append(buf);
+    }
+    reader.close();
+    logFile.delete();
+    File newFile = new File(logFile.getAbsolutePath());
+    FileWriter fileWriter;
+    fileWriter = new FileWriter(newFile, true);
+    BufferedWriter writer = new BufferedWriter(fileWriter);
+    writer.write(bufAll.toString());
+    writer.flush();
+    writer.close();
+    return newFile;
+  }
+  
 }