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 <[email protected]> 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; + } + }
