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/08 07:20:45 UTC
[incubator-iotdb] 01/01: not delete incompatible file in file level
api
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch fix_imcompatible_file
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 9ff06605458e8f1aa9b57028db6c3f769f5585e5
Author: qiaojialin <64...@qq.com>
AuthorDate: Wed Apr 8 15:20:38 2020 +0800
not delete incompatible file in file level api
---
.../writelog/recover/TsFileRecoverPerformer.java | 23 +++++++++++++---------
...tion.java => NotCompatibleTsFileException.java} | 4 ++--
.../iotdb/tsfile/read/TsFileSequenceReader.java | 4 ++--
.../write/writer/RestorableTsFileIOWriter.java | 6 +++---
.../iotdb/tsfile/write/TsFileIOWriterTest.java | 4 ++--
.../write/writer/RestorableTsFileIOWriterTest.java | 10 +++++++---
6 files changed, 30 insertions(+), 21 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java b/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java
index f126c78..aff32c8 100644
--- a/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java
@@ -37,6 +37,7 @@ import org.apache.iotdb.db.engine.version.VersionController;
import org.apache.iotdb.db.exception.StorageGroupProcessorException;
import org.apache.iotdb.db.utils.FileLoaderUtils;
import org.apache.iotdb.db.writelog.manager.MultiFileLogNodeManager;
+import org.apache.iotdb.tsfile.exception.NotCompatibleTsFileException;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
import org.apache.iotdb.tsfile.file.metadata.TsFileMetadata;
@@ -55,7 +56,7 @@ public class TsFileRecoverPerformer {
private static final Logger logger = LoggerFactory.getLogger(TsFileRecoverPerformer.class);
- private String insertFilePath;
+ private String filePath;
private String logNodePrefix;
private VersionController versionController;
private TsFileResource resource;
@@ -64,7 +65,7 @@ public class TsFileRecoverPerformer {
public TsFileRecoverPerformer(String logNodePrefix, VersionController versionController,
TsFileResource currentTsFileResource, boolean acceptUnseq, boolean isLastFile) {
- this.insertFilePath = currentTsFileResource.getPath();
+ this.filePath = currentTsFileResource.getPath();
this.logNodePrefix = logNodePrefix;
this.versionController = versionController;
this.resource = currentTsFileResource;
@@ -80,15 +81,19 @@ public class TsFileRecoverPerformer {
*/
public RestorableTsFileIOWriter recover() throws StorageGroupProcessorException {
- File insertFile = FSFactoryProducer.getFSFactory().getFile(insertFilePath);
- if (!insertFile.exists()) {
- logger.error("TsFile {} is missing, will skip its recovery.", insertFilePath);
+ File file = FSFactoryProducer.getFSFactory().getFile(filePath);
+ if (!file.exists()) {
+ logger.error("TsFile {} is missing, will skip its recovery.", filePath);
return null;
}
// remove corrupted part of the TsFile
RestorableTsFileIOWriter restorableTsFileIOWriter;
try {
- restorableTsFileIOWriter = new RestorableTsFileIOWriter(insertFile);
+ restorableTsFileIOWriter = new RestorableTsFileIOWriter(file);
+ } catch (NotCompatibleTsFileException e) {
+ boolean result = file.delete();
+ logger.warn("TsFile {} is incompatible. Delete it successfully {}", filePath, result);
+ throw new StorageGroupProcessorException(e);
} catch (IOException e) {
throw new StorageGroupProcessorException(e);
}
@@ -115,7 +120,7 @@ public class TsFileRecoverPerformer {
return restorableTsFileIOWriter;
} catch (IOException e) {
throw new StorageGroupProcessorException(
- "recover the resource file failed: " + insertFilePath
+ "recover the resource file failed: " + filePath
+ RESOURCE_SUFFIX + e);
}
} else {
@@ -130,7 +135,7 @@ public class TsFileRecoverPerformer {
// clean logs
try {
MultiFileLogNodeManager.getInstance()
- .deleteNode(logNodePrefix + SystemFileFactory.INSTANCE.getFile(insertFilePath).getName());
+ .deleteNode(logNodePrefix + SystemFileFactory.INSTANCE.getFile(filePath).getName());
} catch (IOException e) {
throw new StorageGroupProcessorException(e);
}
@@ -187,7 +192,7 @@ public class TsFileRecoverPerformer {
private void redoLogs(RestorableTsFileIOWriter restorableTsFileIOWriter)
throws StorageGroupProcessorException {
IMemTable recoverMemTable = new PrimitiveMemTable();
- LogReplayer logReplayer = new LogReplayer(logNodePrefix, insertFilePath, resource.getModFile(),
+ LogReplayer logReplayer = new LogReplayer(logNodePrefix, filePath, resource.getModFile(),
versionController, resource, recoverMemTable, acceptUnseq);
logReplayer.replayLogs();
try {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotCompatibleException.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotCompatibleTsFileException.java
similarity index 87%
rename from tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotCompatibleException.java
rename to tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotCompatibleTsFileException.java
index 0ff3a5d..649d9b2 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotCompatibleException.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotCompatibleTsFileException.java
@@ -18,11 +18,11 @@
*/
package org.apache.iotdb.tsfile.exception;
-public class NotCompatibleException extends TsFileRuntimeException {
+public class NotCompatibleTsFileException extends TsFileRuntimeException {
private static final long serialVersionUID = -3765109817887078265L;
- public NotCompatibleException(String message) {
+ public NotCompatibleTsFileException(String message) {
super(message);
}
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
index b7122b8..d4ef435 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
@@ -22,7 +22,7 @@ import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
import org.apache.iotdb.tsfile.compress.IUnCompressor;
import org.apache.iotdb.tsfile.encoding.common.EndianType;
-import org.apache.iotdb.tsfile.exception.NotCompatibleException;
+import org.apache.iotdb.tsfile.exception.NotCompatibleTsFileException;
import org.apache.iotdb.tsfile.file.MetaMarker;
import org.apache.iotdb.tsfile.file.footer.ChunkGroupFooter;
import org.apache.iotdb.tsfile.file.header.ChunkHeader;
@@ -230,7 +230,7 @@ public class TsFileSequenceReader implements AutoCloseable {
/**
* this function reads version number and checks compatibility of TsFile.
*/
- public String readVersionNumber() throws IOException, NotCompatibleException {
+ public String readVersionNumber() throws IOException, NotCompatibleTsFileException {
ByteBuffer versionNumberBytes = ByteBuffer
.allocate(TSFileConfig.VERSION_NUMBER.getBytes().length);
tsFileInput.read(versionNumberBytes, TSFileConfig.MAGIC_STRING.getBytes().length);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java
index 9f88c05..3af18fc 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java
@@ -29,6 +29,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.exception.NotCompatibleTsFileException;
import org.apache.iotdb.tsfile.file.metadata.ChunkGroupMetadata;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
import org.apache.iotdb.tsfile.file.metadata.TsFileMetadata;
@@ -93,9 +94,8 @@ public class RestorableTsFileIOWriter extends TsFileIOWriter {
totalChunkNum = reader.getTotalChunkNum();
if (truncatedPosition == TsFileCheckStatus.INCOMPATIBLE_FILE) {
out.close();
- boolean result = file.delete();
- logger.warn("TsFile {} is incompatible. Delete it successfully {}", file.getAbsolutePath(), result);
- throw new IOException(String.format("%s is not in TsFile format.", file.getAbsolutePath()));
+ throw new NotCompatibleTsFileException(
+ String.format("%s is not in TsFile format.", file.getAbsolutePath()));
} else if (truncatedPosition == TsFileCheckStatus.ONLY_MAGIC_HEAD) {
crashed = true;
out.truncate(
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
index 32a77b7..c79fd77 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
@@ -22,7 +22,7 @@ import java.io.File;
import java.io.IOException;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.constant.TestConstant;
-import org.apache.iotdb.tsfile.exception.NotCompatibleException;
+import org.apache.iotdb.tsfile.exception.NotCompatibleTsFileException;
import org.apache.iotdb.tsfile.file.MetaMarker;
import org.apache.iotdb.tsfile.file.footer.ChunkGroupFooter;
import org.apache.iotdb.tsfile.file.header.ChunkHeader;
@@ -81,7 +81,7 @@ public class TsFileIOWriterTest {
}
@Test
- public void endFileTest() throws IOException, NotCompatibleException {
+ public void endFileTest() throws IOException, NotCompatibleTsFileException {
TsFileSequenceReader reader = new TsFileSequenceReader(tsfile);
// magic_string
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriterTest.java
index db873ba..51fee77 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriterTest.java
@@ -27,10 +27,10 @@ import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileWriter;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.iotdb.tsfile.constant.TestConstant;
+import org.apache.iotdb.tsfile.exception.NotCompatibleTsFileException;
import org.apache.iotdb.tsfile.file.MetaMarker;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -59,13 +59,17 @@ public class RestorableTsFileIOWriterTest {
private static final String FILE_NAME = TestConstant.BASE_OUTPUT_PATH.concat("test.ts");
private static FSFactory fsFactory = FSFactoryProducer.getFSFactory();
- @Test(expected = IOException.class)
+ @Test(expected = NotCompatibleTsFileException.class)
public void testBadHeadMagic() throws Exception {
File file = fsFactory.getFile(FILE_NAME);
FileWriter fWriter = new FileWriter(file);
fWriter.write("Tsfile");
fWriter.close();
- new RestorableTsFileIOWriter(file);
+ try {
+ new RestorableTsFileIOWriter(file);
+ } finally {
+ assertTrue(file.delete());
+ }
}
@Test