You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2019/06/14 11:49:53 UTC
[incubator-iotdb] branch feature_async_close_tsfile updated: fix
tests
This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch feature_async_close_tsfile
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/feature_async_close_tsfile by this push:
new 4e5cfde fix tests
new 3679d41 Merge branch 'feature_async_close_tsfile' of github.com:apache/incubator-iotdb into feature_async_close_tsfile
4e5cfde is described below
commit 4e5cfde0f535afef7a1a52272238a98df9832e2b
Author: 江天 <jt...@163.com>
AuthorDate: Fri Jun 14 19:47:15 2019 +0800
fix tests
---
.../db/engine/filenode/FileNodeProcessor.java | 5 +-
.../db/engine/overflow/io/OverflowProcessor.java | 6 +-
.../iotdb/db/writelog/io/MultiFileLogReader.java | 2 +-
.../memcontrol/OverflowFileSizeControlTest.java | 4 +-
.../memcontrol/OverflowMetaSizeControlTest.java | 4 +-
.../overflow/io/OverflowProcessorBenchmark.java | 3 +-
.../engine/overflow/io/OverflowProcessorTest.java | 9 +-
.../engine/overflow/io/OverflowResourceTest.java | 4 +-
.../org/apache/iotdb/db/writelog/RecoverTest.java | 234 +++------------------
.../iotdb/db/writelog/WriteLogNodeManagerTest.java | 40 ----
.../apache/iotdb/db/writelog/WriteLogNodeTest.java | 8 +-
11 files changed, 55 insertions(+), 264 deletions(-)
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
index a7d7bec..cb9b183 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
@@ -467,7 +467,7 @@ public class FileNodeProcessor extends Processor implements IStatistic {
parameters.put(FileNodeConstants.FILENODE_PROCESSOR_FLUSH_ACTION, fileNodeFlushAction);
recoverUpdateTimeMap();
-
+
for (int i = 0; i < newFileNodes.size(); i++) {
TsFileResource tsFile = newFileNodes.get(i);
String baseDir = directories
@@ -486,6 +486,7 @@ public class FileNodeProcessor extends Processor implements IStatistic {
throw new FileNodeProcessorException(e);
}
}
+ recoverUpdateTimeMap();
// restore the overflow processor
LOGGER.info("The filenode processor {} will recover the overflow processor.",
@@ -513,8 +514,6 @@ public class FileNodeProcessor extends Processor implements IStatistic {
}
// add file into index of file
addAllFileIntoIndex(newFileNodes);
-
- recoverUpdateTimeMap();
}
private void recoverUpdateTimeMap() {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessor.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessor.java
index 76e2ee3..7a0f1f7 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessor.java
@@ -35,6 +35,7 @@ import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.iotdb.db.conf.IoTDBConfig;
+import org.apache.iotdb.db.conf.IoTDBConstant;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.Processor;
import org.apache.iotdb.db.engine.bufferwrite.Action;
@@ -61,6 +62,7 @@ import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.query.control.FileReaderManager;
import org.apache.iotdb.db.utils.ImmediateFuture;
import org.apache.iotdb.db.utils.MemUtils;
+import org.apache.iotdb.db.writelog.manager.MultiFileLogNodeManager;
import org.apache.iotdb.db.writelog.node.WriteLogNode;
import org.apache.iotdb.db.writelog.recover.LogReplayer;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
@@ -198,7 +200,9 @@ public class OverflowProcessor extends Processor {
replayer.replayLogs();
flushTask("recover flush", memTable, 0, (a,b) -> {});
try {
- getLogNode().delete();
+ WriteLogNode node = MultiFileLogNodeManager.getInstance().getNode(
+ workResource.logNodePrefix() + IoTDBConstant.OVERFLOW_LOG_NODE_SUFFIX);
+ node.delete();
} catch (IOException e) {
throw new ProcessorException(e);
}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/writelog/io/MultiFileLogReader.java b/iotdb/src/main/java/org/apache/iotdb/db/writelog/io/MultiFileLogReader.java
index 562d189..2c25117 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/writelog/io/MultiFileLogReader.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/writelog/io/MultiFileLogReader.java
@@ -43,7 +43,7 @@ public class MultiFileLogReader implements ILogReader {
@Override
public boolean hasNext() throws IOException {
- if (files == null) {
+ if (files == null || files.length == 0) {
return false;
}
if (currentReader == null) {
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/OverflowFileSizeControlTest.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/OverflowFileSizeControlTest.java
index d5cdabf..48557b7 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/OverflowFileSizeControlTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/OverflowFileSizeControlTest.java
@@ -33,6 +33,7 @@ import org.apache.iotdb.db.engine.bufferwrite.FileNodeConstants;
import org.apache.iotdb.db.engine.version.SysTimeVersionController;
import org.apache.iotdb.db.engine.overflow.io.OverflowProcessor;
import org.apache.iotdb.db.exception.OverflowProcessorException;
+import org.apache.iotdb.db.exception.ProcessorException;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.db.utils.FileSchemaUtils;
import org.apache.iotdb.db.utils.MemUtils;
@@ -114,7 +115,8 @@ public class OverflowFileSizeControlTest {
}
@Test
- public void testInsert() throws InterruptedException, IOException, WriteProcessException {
+ public void testInsert()
+ throws InterruptedException, IOException, WriteProcessException, ProcessorException {
if (skip) {
return;
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/OverflowMetaSizeControlTest.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/OverflowMetaSizeControlTest.java
index c687c1d..56afc32 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/OverflowMetaSizeControlTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/OverflowMetaSizeControlTest.java
@@ -33,6 +33,7 @@ import org.apache.iotdb.db.engine.bufferwrite.FileNodeConstants;
import org.apache.iotdb.db.engine.version.SysTimeVersionController;
import org.apache.iotdb.db.engine.overflow.io.OverflowProcessor;
import org.apache.iotdb.db.exception.OverflowProcessorException;
+import org.apache.iotdb.db.exception.ProcessorException;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.db.utils.FileSchemaUtils;
import org.apache.iotdb.db.utils.MemUtils;
@@ -114,7 +115,8 @@ public class OverflowMetaSizeControlTest {
}
@Test
- public void testInsert() throws InterruptedException, IOException, WriteProcessException {
+ public void testInsert()
+ throws InterruptedException, IOException, WriteProcessException, ProcessorException {
if (skip) {
return;
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessorBenchmark.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessorBenchmark.java
index 161c291..4c77958 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessorBenchmark.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessorBenchmark.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.db.engine.bufferwrite.ActionException;
import org.apache.iotdb.db.engine.bufferwrite.FileNodeConstants;
import org.apache.iotdb.db.engine.version.SysTimeVersionController;
import org.apache.iotdb.db.exception.OverflowProcessorException;
+import org.apache.iotdb.db.exception.ProcessorException;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.write.record.TSRecord;
@@ -78,7 +79,7 @@ public class OverflowProcessorBenchmark {
FileUtils.deleteDirectory(new File(TsFileDBConf.getOverflowDataDir()));
}
- public static void main(String[] args) throws IOException, OverflowProcessorException {
+ public static void main(String[] args) throws IOException, ProcessorException {
Map<String, Action> parameters = new HashMap<>();
parameters.put(FileNodeConstants.OVERFLOW_FLUSH_ACTION, new Action() {
@Override
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessorTest.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessorTest.java
index 73a6bfc..4b4cdf9 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessorTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowProcessorTest.java
@@ -35,6 +35,7 @@ import org.apache.iotdb.db.engine.querycontext.MergeSeriesDataSource;
import org.apache.iotdb.db.engine.querycontext.OverflowSeriesDataSource;
import org.apache.iotdb.db.engine.version.SysTimeVersionController;
import org.apache.iotdb.db.exception.OverflowProcessorException;
+import org.apache.iotdb.db.exception.ProcessorException;
import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.db.utils.TimeValuePair;
@@ -78,7 +79,7 @@ public class OverflowProcessorTest {
@Test
public void testInsertUpdate()
- throws IOException, OverflowProcessorException, InterruptedException {
+ throws IOException, ProcessorException, InterruptedException {
processor = new OverflowProcessor(processorName, parameters, OverflowTestUtils.getFileSchema(),
SysTimeVersionController.INSTANCE);
assertEquals(true, new File(PathUtils.getOverflowWriteDir(processorName),
@@ -147,7 +148,7 @@ public class OverflowProcessorTest {
}
@Test
- public void testWriteMemoryAndQuery() throws IOException, OverflowProcessorException {
+ public void testWriteMemoryAndQuery() throws IOException, ProcessorException {
processor = new OverflowProcessor(processorName, parameters, OverflowTestUtils.getFileSchema(),
SysTimeVersionController.INSTANCE);
OverflowTestUtils.produceInsertData(processor);
@@ -165,7 +166,7 @@ public class OverflowProcessorTest {
}
@Test
- public void testFlushAndQuery() throws IOException, OverflowProcessorException {
+ public void testFlushAndQuery() throws IOException, ProcessorException {
processor = new OverflowProcessor(processorName, parameters, OverflowTestUtils.getFileSchema(),
SysTimeVersionController.INSTANCE);
processor.flush();
@@ -185,7 +186,7 @@ public class OverflowProcessorTest {
}
@Test
- public void testRecovery() throws OverflowProcessorException, IOException {
+ public void testRecovery() throws ProcessorException, IOException {
processor = new OverflowProcessor(processorName, parameters, OverflowTestUtils.getFileSchema(),
SysTimeVersionController.INSTANCE);
processor.close();
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowResourceTest.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowResourceTest.java
index 3a4e013..28eefb0 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowResourceTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/overflow/io/OverflowResourceTest.java
@@ -46,7 +46,7 @@ public class OverflowResourceTest {
@Before
public void setUp() throws Exception {
- work = new OverflowResource(folderPath, dataPath, SysTimeVersionController.INSTANCE);
+ work = new OverflowResource(folderPath, dataPath, SysTimeVersionController.INSTANCE,"processorName");
insertFile = new File(new File(folderPath, dataPath), insertFileName);
}
@@ -86,7 +86,7 @@ public class OverflowResourceTest {
fileOutputStream.write(new byte[20]);
fileOutputStream.close();
assertEquals(originlength + 20, insertFile.length());
- work = new OverflowResource(folderPath, dataPath, SysTimeVersionController.INSTANCE);
+ work = new OverflowResource(folderPath, dataPath, SysTimeVersionController.INSTANCE, "processorName");
chunkMetaDatas = work
.getInsertMetadatas(OverflowTestUtils.deviceId1, OverflowTestUtils.measurementId1,
OverflowTestUtils.dataType1, context);
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/writelog/RecoverTest.java b/iotdb/src/test/java/org/apache/iotdb/db/writelog/RecoverTest.java
index 4caaed4..87e6779 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/writelog/RecoverTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/writelog/RecoverTest.java
@@ -18,16 +18,16 @@
*/
package org.apache.iotdb.db.writelog;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.engine.filenode.TsFileResource;
+import org.apache.iotdb.db.engine.version.SysTimeVersionController;
import org.apache.iotdb.db.exception.PathErrorException;
import org.apache.iotdb.db.exception.ProcessorException;
import org.apache.iotdb.db.exception.RecoverException;
@@ -38,10 +38,13 @@ import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
import org.apache.iotdb.db.qp.physical.crud.UpdatePlan;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.db.writelog.node.ExclusiveWriteLogNode;
-import org.apache.iotdb.db.writelog.recover.ExclusiveLogRecoverPerformer;
-import org.apache.iotdb.db.writelog.recover.RecoverPerformer;
-import org.apache.iotdb.db.writelog.replay.LogReplayer;
+import org.apache.iotdb.db.writelog.recover.TsFileRecoverPerformer;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
+import org.apache.iotdb.tsfile.write.schema.FileSchema;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+import org.apache.iotdb.tsfile.write.writer.TsFileIOWriter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -66,22 +69,27 @@ public class RecoverTest {
}
@Test
- public void testFullRecover() throws IOException, RecoverException {
+ public void testFullRecover() throws IOException, RecoverException, ProcessorException {
// this test write a log file and try to recover from these logs as if no previous attempts exist.
- File tempRestore = new File("testtemp", "restore");
- File tempProcessorStore = new File("testtemp", "processorStore");
- tempRestore.getParentFile().mkdirs();
- tempRestore.createNewFile();
- tempProcessorStore.createNewFile();
-
+ File insertFile = new File("testTemp");
+ FileSchema schema = new FileSchema();
+ String deviceId = "root.testLogNode";
+ schema.registerMeasurement(new MeasurementSchema("s1", TSDataType.FLOAT, TSEncoding.PLAIN));
+ schema.registerMeasurement(new MeasurementSchema("s2", TSDataType.INT32, TSEncoding.PLAIN));
+ schema.registerMeasurement(new MeasurementSchema("s3", TSDataType.TEXT, TSEncoding.PLAIN));
+ schema.registerMeasurement(new MeasurementSchema("s4", TSDataType.BOOLEAN, TSEncoding.PLAIN));
+
+ TsFileIOWriter writer = new TsFileIOWriter(insertFile);
+ writer.endFile(schema);
+ TsFileResource tsFileResource = new TsFileResource(insertFile, true);
try {
- MManager.getInstance().setStorageLevelToMTree("root.testLogNode");
+ MManager.getInstance().setStorageLevelToMTree(deviceId);
} catch (PathErrorException ignored) {
}
- ExclusiveWriteLogNode logNode = new ExclusiveWriteLogNode("root.testLogNode");
+ ExclusiveWriteLogNode logNode = new ExclusiveWriteLogNode(deviceId);
try {
- InsertPlan bwInsertPlan = new InsertPlan(1, "logTestDevice", 100,
+ InsertPlan bwInsertPlan = new InsertPlan(1, deviceId, 100,
new String[]{"s1", "s2", "s3", "s4"},
new String[]{"1.0", "15", "str", "false"});
UpdatePlan updatePlan = new UpdatePlan(0, 100, "2.0", new Path("root.logTestDevice.s1"));
@@ -98,22 +106,11 @@ public class RecoverTest {
logNode.write(deletePlan);
logNode.forceSync();
- ExclusiveLogRecoverPerformer performer = new ExclusiveLogRecoverPerformer(
- tempRestore.getPath(),
- tempProcessorStore.getPath(), logNode);
+ TsFileRecoverPerformer performer = new TsFileRecoverPerformer(
+ insertFile.getPath(), deviceId, schema, SysTimeVersionController.INSTANCE, tsFileResource,
+ tsFileResource.getModFile());
// used to check if logs are replayed in order
- DummyLogReplayer dummyLogReplayer = new DummyLogReplayer();
- dummyLogReplayer.plansToCheck = plansToCheck;
- performer.setReplayer(dummyLogReplayer);
- // used to check that FileNode does recover
- DummyFileNodeRecoverPerformer fileNodeRecoverPerformer = new DummyFileNodeRecoverPerformer();
- performer.setFileNodeRecoverPerformer(fileNodeRecoverPerformer);
- logNode.setRecoverPerformer(performer);
-
- logNode.recover();
- assertTrue(fileNodeRecoverPerformer.called);
- // ensure all logs are replayed
- assertEquals(plansToCheck.size(), dummyLogReplayer.currPos);
+ performer.recover();
// the log diretory should be empty now
File logDir = new File(logNode.getLogDirectory());
@@ -121,182 +118,7 @@ public class RecoverTest {
assertTrue(files == null || files.length == 0);
} finally {
logNode.delete();
- tempRestore.delete();
- tempProcessorStore.delete();
- tempRestore.getParentFile().delete();
- }
- }
-
- @Test
- public void testRecoverFromRecoverFiles() throws IOException, RecoverException {
- // this test write a log file and try to recover from these logs as if a previous attempt is interrupted when
- // recovering files or replaying logs.
- // skip file backup by setting backup flag and creating backup files.
- File tempRestore = new File("testtemp", "restore");
- File tempProcessorStore = new File("testtemp", "processorStore");
- File tempRestoreRecovery = new File("testtemp",
- "restore" + ExclusiveLogRecoverPerformer.RECOVER_SUFFIX);
- File tempProcessorStoreRecovery = new File("testtemp",
- "processorStore" + ExclusiveLogRecoverPerformer.RECOVER_SUFFIX);
- tempRestore.getParentFile().mkdirs();
- tempRestore.createNewFile();
- tempProcessorStore.createNewFile();
- tempRestoreRecovery.createNewFile();
- tempProcessorStoreRecovery.createNewFile();
-
- try {
- MManager.getInstance().setStorageLevelToMTree("root.testLogNode");
- } catch (PathErrorException ignored) {
- }
- ExclusiveWriteLogNode logNode = new ExclusiveWriteLogNode("root.testLogNode");
-
- try {
- // set flag
- File flagFile = new File(logNode.getLogDirectory() + File.separator
- + ExclusiveLogRecoverPerformer.RECOVER_FLAG_NAME + "-" + RecoverStage.BACK_UP.name());
- flagFile.createNewFile();
-
- InsertPlan bwInsertPlan = new InsertPlan(1, "logTestDevice", 100,
- new String[]{"s1", "s2", "s3", "s4"},
- new String[]{"1.0", "15", "str", "false"});
- UpdatePlan updatePlan = new UpdatePlan(0, 100, "2.0", new Path("root.logTestDevice.s1"));
- DeletePlan deletePlan = new DeletePlan(50, new Path("root.logTestDevice.s1"));
-
- List<PhysicalPlan> plansToCheck = new ArrayList<>();
- plansToCheck.add(bwInsertPlan);
- plansToCheck.add(updatePlan);
- plansToCheck.add(deletePlan);
-
- logNode.write(bwInsertPlan);
- logNode.write(updatePlan);
- logNode.write(deletePlan);
- logNode.forceSync();
-
- ExclusiveLogRecoverPerformer performer = new ExclusiveLogRecoverPerformer(
- tempRestore.getPath(),
- tempProcessorStore.getPath(), logNode);
- // used to check if logs are replayed in order
- DummyLogReplayer dummyLogReplayer = new DummyLogReplayer();
- dummyLogReplayer.plansToCheck = plansToCheck;
- performer.setReplayer(dummyLogReplayer);
- // used to check that FileNode does recover
- DummyFileNodeRecoverPerformer fileNodeRecoverPerformer = new DummyFileNodeRecoverPerformer();
- performer.setFileNodeRecoverPerformer(fileNodeRecoverPerformer);
- logNode.setRecoverPerformer(performer);
-
- logNode.recover();
- assertTrue(fileNodeRecoverPerformer.called);
- // ensure all logs are replayed
- assertEquals(plansToCheck.size(), dummyLogReplayer.currPos);
-
- // the log diretory should be empty now
- File logDir = new File(logNode.getLogDirectory());
- File[] files = logDir.listFiles();
- assertTrue(files == null || files.length == 0);
- } finally {
- logNode.delete();
- tempRestore.delete();
- tempProcessorStore.delete();
- assertTrue(!tempRestoreRecovery.exists());
- assertTrue(!tempProcessorStoreRecovery.exists());
- tempRestore.getParentFile().delete();
- }
- }
-
- @Test
- public void testRecoverFromCleanup() throws IOException, RecoverException {
- // this test write a log file and try to recover from these logs as if a previous attempt is interrupted when
- // cleanup files.
- // skip previous stage by setting backup flag and creating backup files.
- File tempRestore = new File("testtemp", "restore");
- File tempProcessorStore = new File("testtemp", "processorStore");
- File tempRestoreRecovery = new File("testtemp",
- "restore" + ExclusiveLogRecoverPerformer.RECOVER_SUFFIX);
- File tempProcessorStoreRecovery = new File("testtemp",
- "processorStore" + ExclusiveLogRecoverPerformer.RECOVER_SUFFIX);
- tempRestore.getParentFile().mkdirs();
- tempRestore.createNewFile();
- tempProcessorStore.createNewFile();
- tempRestoreRecovery.createNewFile();
- tempProcessorStoreRecovery.createNewFile();
-
- try {
- MManager.getInstance().setStorageLevelToMTree("root.testLogNode");
- } catch (PathErrorException ignored) {
- }
- ExclusiveWriteLogNode logNode = new ExclusiveWriteLogNode("root.testLogNode");
-
- try {
- // set flag
- File flagFile = new File(logNode.getLogDirectory() + File.separator
- + ExclusiveLogRecoverPerformer.RECOVER_FLAG_NAME + "-" + RecoverStage.REPLAY_LOG.name());
- flagFile.createNewFile();
-
- InsertPlan bwInsertPlan = new InsertPlan(1, "logTestDevice", 100,
- new String[]{"s1", "s2", "s3", "s4"},
- new String[]{"1.0", "15", "str", "false"});
- UpdatePlan updatePlan = new UpdatePlan(0, 100, "2.0", new Path("root.logTestDevice.s1"));
- DeletePlan deletePlan = new DeletePlan(50, new Path("root.logTestDevice.s1"));
-
- List<PhysicalPlan> plansToCheck = new ArrayList<>();
- plansToCheck.add(bwInsertPlan);
- plansToCheck.add(updatePlan);
- plansToCheck.add(deletePlan);
-
- logNode.write(bwInsertPlan);
- logNode.write(updatePlan);
- logNode.write(deletePlan);
- logNode.forceSync();
-
- ExclusiveLogRecoverPerformer performer = new ExclusiveLogRecoverPerformer(
- tempRestore.getPath(),
- tempProcessorStore.getPath(), logNode);
- // used to check that no log is replayed
- DummyLogReplayer dummyLogReplayer = new DummyLogReplayer();
- performer.setReplayer(dummyLogReplayer);
- // used to check that FileNode does recover
- DummyFileNodeRecoverPerformer fileNodeRecoverPerformer = new DummyFileNodeRecoverPerformer();
- performer.setFileNodeRecoverPerformer(fileNodeRecoverPerformer);
- logNode.setRecoverPerformer(performer);
-
- logNode.recover();
- assertTrue(!fileNodeRecoverPerformer.called);
-
- // the log diretory should be empty now
- File logDir = new File(logNode.getLogDirectory());
- File[] files = logDir.listFiles();
- assertTrue(files == null || files.length == 0);
- } finally {
- logNode.delete();
- tempRestore.delete();
- tempProcessorStore.delete();
- assertTrue(!tempRestoreRecovery.exists());
- assertTrue(!tempProcessorStoreRecovery.exists());
- tempRestore.getParentFile().delete();
- }
- }
-
- class DummyFileNodeRecoverPerformer implements RecoverPerformer {
-
- public boolean called = false;
-
- @Override
- public void recover() {
- called = true;
- }
- }
-
- class DummyLogReplayer implements LogReplayer {
-
- public List<PhysicalPlan> plansToCheck;
- public int currPos = 0;
-
- @Override
- public void replay(PhysicalPlan plan, boolean isOverflow) throws ProcessorException {
- if (currPos >= plansToCheck.size()) {
- throw new ProcessorException("More plans recovered than expected");
- }
- assertEquals(plansToCheck.get(currPos++), plan);
+ insertFile.delete();
}
}
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java b/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java
index 13c372c..4b393e6 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java
@@ -96,44 +96,4 @@ public class WriteLogNodeManagerTest {
tempProcessorStore.delete();
tempRestore.getParentFile().delete();
}
-
- @Test
- public void testRecoverAll() throws IOException, RecoverException, MetadataArgsErrorException {
- // this test create 5 log nodes and recover them
- File tempRestore = File.createTempFile("managerTest", "restore");
- File tempProcessorStore = File.createTempFile("managerTest", "processorStore");
-
- WriteLogNodeManager manager = MultiFileLogNodeManager.getInstance();
- for (int i = 0; i < 5; i++) {
- String deviceName = "root.managerTest" + i;
- try {
- MManager.getInstance().setStorageLevelToMTree(deviceName);
- MManager.getInstance().addPathToMTree(deviceName + ".s1", TSDataType.DOUBLE.name(),
- TSEncoding.PLAIN.name());
- MManager.getInstance().addPathToMTree(deviceName + ".s2", TSDataType.INT32.name(),
- TSEncoding.PLAIN.name());
- MManager.getInstance().addPathToMTree(deviceName + ".s3", TSDataType.TEXT.name(),
- TSEncoding.PLAIN.name());
- MManager.getInstance().addPathToMTree(deviceName + ".s4", TSDataType.BOOLEAN.name(),
- TSEncoding.PLAIN.name());
- } catch (PathErrorException ignored) {
- }
- WriteLogNode logNode = manager
- .getNode(deviceName);
-
- InsertPlan bwInsertPlan = new InsertPlan(1, deviceName, 100,
- new String[]{"s1", "s2", "s3", "s4"},
- new String[]{"1.0", "15", "str", "false"});
- UpdatePlan updatePlan = new UpdatePlan(0, 100, "2.0", new Path(deviceName + ".s1"));
- DeletePlan deletePlan = new DeletePlan(50, new Path(deviceName + ".s1"));
-
- logNode.write(bwInsertPlan);
- logNode.write(updatePlan);
- logNode.write(deletePlan);
-
- logNode.forceSync();
- logNode.close();
- }
- manager.recover();
- }
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeTest.java b/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeTest.java
index 33fe9b0..5679dd8 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeTest.java
@@ -158,16 +158,16 @@ public class WriteLogNodeTest {
logNode.forceSync();
File walFile = new File(
- config.getWalFolder() + File.separator + "root.logTestDevice" + File.separator + "wal");
+ config.getWalFolder() + File.separator + "root.logTestDevice" + File.separator + "wal0");
assertTrue(walFile.exists());
- long taskId = logNode.notifyStartFlush();
+ logNode.notifyStartFlush();
File oldWalFile = new File(
- config.getWalFolder() + File.separator + "root.logTestDevice" + File.separator + "wal-old"+taskId);
+ config.getWalFolder() + File.separator + "root.logTestDevice" + File.separator + "wal1");
assertTrue(oldWalFile.exists());
assertTrue(oldWalFile.length() > 0);
- logNode.notifyEndFlush(taskId);
+ logNode.notifyEndFlush();
assertTrue(!oldWalFile.exists());
assertEquals(0, walFile.length());