This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch rel/0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.12 by this push:
new 6d4d4540de update RewriteFileTool.java (#6166)
6d4d4540de is described below
commit 6d4d4540de152b12cc838f32959a805c92780063
Author: Xiangwei Wei <[email protected]>
AuthorDate: Mon Jun 6 15:57:25 2022 +0800
update RewriteFileTool.java (#6166)
---
.../java/org/apache/iotdb/RewriteFileTool.java | 74 +++++++++++++++++-----
1 file changed, 57 insertions(+), 17 deletions(-)
diff --git
a/rewriteFileTool/src/main/java/org/apache/iotdb/RewriteFileTool.java
b/rewriteFileTool/src/main/java/org/apache/iotdb/RewriteFileTool.java
index 17b5af7cfb..c796548479 100644
--- a/rewriteFileTool/src/main/java/org/apache/iotdb/RewriteFileTool.java
+++ b/rewriteFileTool/src/main/java/org/apache/iotdb/RewriteFileTool.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.session.Session;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
import org.apache.iotdb.tsfile.encoding.decoder.Decoder;
+import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
import org.apache.iotdb.tsfile.file.MetaMarker;
import org.apache.iotdb.tsfile.file.header.ChunkGroupHeader;
import org.apache.iotdb.tsfile.file.header.ChunkHeader;
@@ -43,6 +44,7 @@ import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
import org.apache.iotdb.tsfile.read.common.BatchData;
import org.apache.iotdb.tsfile.read.common.TimeRange;
import org.apache.iotdb.tsfile.read.reader.page.PageReader;
+import org.apache.iotdb.tsfile.utils.Binary;
import org.apache.iotdb.tsfile.write.record.Tablet;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
@@ -74,22 +76,23 @@ public class RewriteFileTool {
private static final String HostIP = "localhost";
private static final String rpcPort = "6667";
- private static final String user = "root";
- private static final String password = "root";
+ private static String user = "root";
+ private static String password = "root";
private static final FSFactory fsFactory = FSFactoryProducer.getFSFactory();
+ private static final long MAX_TABLET_SIZE = 1024 * 1024;
- private static PrintWriter pw;
+ private static PrintWriter writer;
/**
* -b=[path of backUp directory] -vf=[path of validation file]/-f=[path of
tsfile list] -o=[path
- * of output log]
+ * of output log] -u=[username, default="root"] -pw=[password,
default="root"]
*/
public static void main(String[] args) throws IOException {
if (!checkArgs(args)) {
System.exit(1);
}
- pw = new PrintWriter(new FileWriter(outputLogFilePath));
+ writer = new PrintWriter(new FileWriter(outputLogFilePath));
try {
if (validationFilePath != null) {
readValidationFile(validationFilePath);
@@ -101,7 +104,7 @@ public class RewriteFileTool {
printBoth(e.getMessage());
e.printStackTrace();
} finally {
- pw.close();
+ writer.close();
}
}
@@ -140,9 +143,7 @@ public class RewriteFileTool {
}
public static void unloadAndReWriteWrongTsFile(String filename, Session
session) {
- printBoth(String.format("Start moving %s to backup dir.", filename));
try {
- session.executeNonQueryStatement(String.format("move '%s' '%s'",
filename, backUpDirPath));
String[] dirs = filename.split("/");
String targetFilePath = backUpDirPath + File.separator +
dirs[dirs.length - 1];
File targetFile = new File(targetFilePath);
@@ -151,9 +152,15 @@ public class RewriteFileTool {
if (modsFile.exists()) {
fsFactory.moveFile(modsFile, new File(targetFilePath +
ModificationFile.FILE_SUFFIX));
}
+ if (targetFile.exists()) {
+ printBoth(String.format("%s is already in the backup dir. Don't need
to move.", filename));
+ } else {
+ printBoth(String.format("Start moving %s to backup dir.", filename));
+ session.executeNonQueryStatement(String.format("move '%s' '%s'",
filename, backUpDirPath));
+ }
printBoth(String.format("Finish unloading %s.", filename));
- // rewriteFile
+ // try to rewriteFile
printBoth(String.format("Start rewriting %s to iotdb.", filename));
if (targetFile.exists()) {
rewriteWrongTsFile(targetFilePath, session);
@@ -230,17 +237,46 @@ public class RewriteFileTool {
} else {
maxRow = batchData.length();
}
+
Tablet tablet =
new Tablet(curDevice,
Collections.singletonList(measurementSchema), maxRow);
- int rowIndex = 0;
+ long curTabletSize = 0;
while (batchData.hasCurrent()) {
- tablet.addTimestamp(rowIndex, batchData.currentTime());
- tablet.addValue(measurement, rowIndex,
batchData.currentValue());
+ tablet.addTimestamp(tablet.rowSize, batchData.currentTime());
+ tablet.addValue(measurement, tablet.rowSize,
batchData.currentValue());
+ tablet.rowSize++;
+ // calculate curTabletSize based on timestamp and value
+ curTabletSize += 8;
+ switch (header.getDataType()) {
+ case BOOLEAN:
+ curTabletSize += 1;
+ break;
+ case INT32:
+ case FLOAT:
+ curTabletSize += 4;
+ break;
+ case INT64:
+ case DOUBLE:
+ curTabletSize += 8;
+ break;
+ case TEXT:
+ curTabletSize += 4 + ((Binary)
batchData.currentValue()).getLength();
+ break;
+ default:
+ throw new UnSupportedDataTypeException(
+ String.format("Data type %s is not supported.",
header.getDataType()));
+ }
+ // if curTabletSize is over the threshold
+ if (curTabletSize >= MAX_TABLET_SIZE) {
+ session.insertTablet(tablet);
+ curTabletSize = 0;
+ tablet.reset();
+ }
batchData.next();
- rowIndex++;
}
- tablet.rowSize = rowIndex;
- session.insertTablet(tablet);
+ if (tablet.rowSize > 0) {
+ session.insertTablet(tablet);
+ }
dataSize -= pageHeader.getSerializedPageSize();
}
break;
@@ -269,7 +305,7 @@ public class RewriteFileTool {
private static boolean checkArgs(String[] args) {
String paramConfig =
- "-b=[path of backUp directory] -vf=[path of validation file]/-f=[path
of tsfile list] -o=[path of output log]";
+ "-b=[path of backUp directory] -vf=[path of validation file]/-f=[path
of tsfile list] -o=[path of output log] -u=[username, default=\"root\"]
-pw=[password, default=\"root\"]";
for (String arg : args) {
if (arg.startsWith("-b")) {
backUpDirPath = arg.substring(arg.indexOf('=') + 1);
@@ -279,6 +315,10 @@ public class RewriteFileTool {
tsfileListPath = arg.substring(arg.indexOf('=') + 1);
} else if (arg.startsWith("-o")) {
outputLogFilePath = arg.substring(arg.indexOf('=') + 1);
+ } else if (arg.startsWith("-u")) {
+ user = arg.substring(arg.indexOf('=') + 1);
+ } else if (arg.startsWith("-pw")) {
+ password = arg.substring(arg.indexOf('=') + 1);
} else {
System.out.println("Param incorrect!" + paramConfig);
return false;
@@ -295,7 +335,7 @@ public class RewriteFileTool {
private static void printBoth(String msg) {
System.out.println(msg);
- pw.println(msg);
+ writer.println(msg);
}
private static List<TimeRange> getOldSortedDeleteIntervals(