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/10/28 07:28:20 UTC
[incubator-iotdb] branch dev_new_merge_strategy updated: add tests
for squeeze
This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch dev_new_merge_strategy
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/dev_new_merge_strategy by this push:
new 3b0681b add tests for squeeze
3b0681b is described below
commit 3b0681b71e0911dae1008512a21fe60db6c2cc0f
Author: jt <jt...@163.com>
AuthorDate: Mon Oct 28 15:27:39 2019 +0800
add tests for squeeze
---
.../iotdb/db/engine/merge/BaseFileSelector.java | 18 ++--
.../engine/merge/MaxSeriesMergeFileSelector.java | 13 ++-
.../inplace/selector/InplaceMaxFileSelector.java | 2 +-
.../squeeze/selector/SqueezeMaxFileSelector.java | 70 ++++++++++++++-
.../engine/storagegroup/StorageGroupProcessor.java | 2 +-
.../iotdb/db/engine/merge/MergeOverLapTest.java | 44 ++++++---
.../apache/iotdb/db/engine/merge/MergeTest.java | 3 +-
.../inplace/MaxSeriesMergeFileSelectorTest.java | 1 +
.../db/engine/merge/inplace/MergeLogTest.java | 2 +-
.../MaxFileMergeFileSelectorTest.java} | 45 +++-------
.../MaxSeriesMergeFileSelectorTest.java | 24 ++---
.../merge/{inplace => squeeze}/MergeLogTest.java | 15 ++--
.../db/engine/merge/squeeze/MergeTaskTest.java | 100 ++++++++++-----------
.../iotdb/db/integration/IoTDBMergeTest.java | 18 +++-
14 files changed, 219 insertions(+), 138 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/BaseFileSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/BaseFileSelector.java
index 97e4551..7f38dd6 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/BaseFileSelector.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/BaseFileSelector.java
@@ -90,7 +90,7 @@ public abstract class BaseFileSelector implements IMergeFileSelector{
}
}
- public void select(boolean useTightBound) throws IOException {
+ protected void selectByUnseq(boolean useTightBound) throws IOException {
seqSelectedNum = 0;
selectedSeqFiles = new ArrayList<>();
selectedUnseqFiles = new ArrayList<>();
@@ -127,7 +127,7 @@ public abstract class BaseFileSelector implements IMergeFileSelector{
protected abstract void updateCost(long newCost, TsFileResource unseqFile);
- private long calculateMetadataSize(TsFileResource seqFile) throws IOException {
+ protected long calculateMetadataSize(TsFileResource seqFile) throws IOException {
Long cost = fileMetaSizeMap.get(seqFile);
if (cost == null) {
cost = MergeUtils.getFileMetaSize(seqFile, resource.getFileReader(seqFile));
@@ -154,7 +154,7 @@ public abstract class BaseFileSelector implements IMergeFileSelector{
// this method traverses all ChunkMetadata to find out which series has the most chunks and uses
// its proportion to all series to get a maximum estimation
- private long calculateTightSeqMemoryCost(TsFileResource seqFile) throws IOException {
+ protected long calculateTightSeqMemoryCost(TsFileResource seqFile) throws IOException {
long singleSeriesCost = calculateTightFileMemoryCost(seqFile, this::calculateMetadataSize);
long multiSeriesCost = concurrentMergeNum * singleSeriesCost;
long maxCost = calculateMetadataSize(seqFile);
@@ -174,18 +174,18 @@ public abstract class BaseFileSelector implements IMergeFileSelector{
IFileQueryMemMeasurement unseqMeasurement,
IFileQueryMemMeasurement seqMeasurement, long startTime, long timeLimit) throws IOException {
long cost = 0;
- Long fileCost = unseqMeasurement.measure(tmpSelectedUnseqFile);
- cost += fileCost;
+ Long fileReadCost = unseqMeasurement.measure(tmpSelectedUnseqFile);
+ cost += fileReadCost;
for (Integer seqFileIdx : tmpSelectedSeqIterable) {
TsFileResource seqFile = resource.getSeqFiles().get(seqFileIdx);
- fileCost = seqMeasurement.measure(seqFile);
- if (fileCost > tempMaxSeqFileCost) {
+ fileReadCost = seqMeasurement.measure(seqFile);
+ if (fileReadCost > tempMaxSeqFileCost) {
// memory used when read data from a seq file:
// only one file will be read at the same time, so only the largest one is recorded here
cost -= tempMaxSeqFileCost;
- cost += fileCost;
- tempMaxSeqFileCost = fileCost;
+ cost += fileReadCost;
+ tempMaxSeqFileCost = fileReadCost;
}
// memory used to cache the metadata before the new file is closed
// but writing data into a new file may generate the same amount of metadata in memory
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/MaxSeriesMergeFileSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/MaxSeriesMergeFileSelector.java
index 7278d09..f90b3ab 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/MaxSeriesMergeFileSelector.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/MaxSeriesMergeFileSelector.java
@@ -37,7 +37,7 @@ public class MaxSeriesMergeFileSelector<T extends IMergeFileSelector> implements
private T baseSelector;
private MergeResource resource;
- public static final int MAX_SERIES_NUM = 10240;
+ public static final int MAX_SERIES_NUM = 256;
private static final Logger logger = LoggerFactory.getLogger(
MaxSeriesMergeFileSelector.class);
@@ -133,12 +133,19 @@ public class MaxSeriesMergeFileSelector<T extends IMergeFileSelector> implements
}
baseSelector.setConcurrentMergeNum(mid);
baseSelector.select(false);
- if (baseSelector.getSelectedUnseqFiles().isEmpty() && baseSelector.getSelectedSeqFiles().isEmpty()) {
+ if (baseSelector.getSelectedUnseqFiles().size() + baseSelector.getSelectedSeqFiles().size() <= 1) {
baseSelector.select(true);
}
- if (baseSelector.getSelectedUnseqFiles().isEmpty() && baseSelector.getSelectedSeqFiles().isEmpty()) {
+ if (baseSelector.getSelectedUnseqFiles().size() + baseSelector.getSelectedSeqFiles().size() <= 1) {
+ // did not find candidates, lower concurrent merge number and retry
+ ub = mid;
+ } else if (baseSelector.getSelectedUnseqFiles().size() == 0 && lastSelectedUnseqFiles != null
+ && lastSelectedUnseqFiles.size() > 0) {
+ // found candidates with no unseq files while the previous result has unseq files
+ // take the previous results because we try to merge at least one unseq file
ub = mid;
} else {
+ // found candidates, record them and try to find a higher concurrent number
lastSelectedSeqFiles = baseSelector.getSelectedSeqFiles();
lastSelectedUnseqFiles = baseSelector.getSelectedUnseqFiles();
lastTotalMemoryCost = baseSelector.getTotalCost();
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/inplace/selector/InplaceMaxFileSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/inplace/selector/InplaceMaxFileSelector.java
index 7e80490..1a0fc90 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/inplace/selector/InplaceMaxFileSelector.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/inplace/selector/InplaceMaxFileSelector.java
@@ -53,7 +53,7 @@ public class InplaceMaxFileSelector extends BaseFileSelector {
public void select(boolean useTightBound) throws IOException {
tmpSelectedSeqFiles = new HashSet<>();
seqSelected = new boolean[resource.getSeqFiles().size()];
- super.select(useTightBound);
+ super.selectByUnseq(useTightBound);
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/squeeze/selector/SqueezeMaxFileSelector.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/squeeze/selector/SqueezeMaxFileSelector.java
index d6e3c56..c32bfb9 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/squeeze/selector/SqueezeMaxFileSelector.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/squeeze/selector/SqueezeMaxFileSelector.java
@@ -62,12 +62,78 @@ public class SqueezeMaxFileSelector extends BaseFileSelector {
}
public void select(boolean useTightBound) throws IOException {
- super.select(useTightBound);
- for (int i = firstOverlapIdx; i < lastOverlapIdx; i++) {
+ super.selectByUnseq(useTightBound);
+
+ if (firstOverlapIdx <= lastOverlapIdx) {
+ // selectByUnseq has found candidates, check if we can extend the selection
+ extendCurrentSelection(useTightBound);
+ } else {
+ // try selecting only seq files as candidates
+ selectBySeq(useTightBound);
+ }
+ for (int i = firstOverlapIdx; i <= lastOverlapIdx; i++) {
selectedSeqFiles.add(resource.getSeqFiles().get(i));
}
}
+ private void selectBySeq(boolean useTightBound) throws IOException {
+ for (int i = 0; i < resource.getSeqFiles().size() - 1; i ++) {
+ // try to find candidates starting from i
+ TsFileResource seqFile = resource.getSeqFiles().get(i);
+ long fileCost = calculateSeqFileCost(seqFile, useTightBound);
+ if (fileCost < memoryBudget) {
+ firstOverlapIdx = i;
+ lastOverlapIdx = i;
+ totalCost = fileCost;
+ extendCurrentSelection(useTightBound);
+ if (lastOverlapIdx > firstOverlapIdx) {
+ // if candidates starting from i are found, return
+ return;
+ } else {
+ totalCost = 0;
+ firstOverlapIdx = Integer.MAX_VALUE;
+ lastOverlapIdx = Integer.MIN_VALUE;
+ }
+ }
+ }
+ }
+
+ // if we have selected seqFiles[3] to seqFiles[6], check if we can add seqFiles[7] into the
+ // selection without exceeding the budget
+ private void extendCurrentSelection(boolean useTightBound) throws IOException {
+ for (int i = lastOverlapIdx + 1; i < resource.getSeqFiles().size(); i++) {
+ TsFileResource seqFile = resource.getSeqFiles().get(i);
+ long fileCost = calculateSeqFileCost(seqFile, useTightBound);
+
+ if (fileCost + totalCost < memoryBudget) {
+ maxSeqFileCost = tempMaxSeqFileCost;
+ totalCost += fileCost;
+ lastOverlapIdx++;
+ } else {
+ tempMaxSeqFileCost = maxSeqFileCost;
+ break;
+ }
+ }
+ }
+
+ private long calculateSeqFileCost(TsFileResource seqFile, boolean useTightBound)
+ throws IOException {
+ long fileCost = 0;
+ long fileReadCost = useTightBound ? calculateTightSeqMemoryCost(seqFile) :
+ calculateMetadataSize(seqFile);
+ if (fileReadCost > tempMaxSeqFileCost) {
+ // memory used when read data from a seq file:
+ // only one file will be read at the same time, so only the largest one is recorded here
+ fileCost -= tempMaxSeqFileCost;
+ fileCost += fileReadCost;
+ tempMaxSeqFileCost = fileReadCost;
+ }
+ // memory used to cache the metadata before the new file is closed
+ // but writing data into a new file may generate the same amount of metadata in memory
+ fileCost += calculateMetadataSize(seqFile);
+ return fileCost;
+ }
+
protected void updateCost(long newCost, TsFileResource unseqFile) {
if (totalCost + newCost < memoryBudget) {
selectedUnseqFiles.add(unseqFile);
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
index 98a83e4..37b230c 100755
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java
@@ -899,7 +899,7 @@ public class StorageGroupProcessor {
IMergeFileSelector fileSelector = strategy.getFileSelector(mergeResource, budget);
try {
fileSelector.select();
- if (fileSelector.getSelectedSeqFiles().isEmpty() && fileSelector.getSelectedUnseqFiles().isEmpty()) {
+ if (fileSelector.getSelectedSeqFiles().size() + fileSelector.getSelectedUnseqFiles().size() <= 1) {
logger.info("{} cannot select merge candidates under the budget {}", storageGroupName,
budget);
return;
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeOverLapTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeOverLapTest.java
index 04373a5..2251fc3 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeOverLapTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeOverLapTest.java
@@ -15,7 +15,6 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
package org.apache.iotdb.db.engine.merge;
@@ -25,12 +24,15 @@ import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
+import java.util.concurrent.Callable;
import org.apache.commons.io.FileUtils;
import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
+import org.apache.iotdb.db.engine.merge.inplace.task.InplaceMergeTask;
import org.apache.iotdb.db.engine.merge.manage.MergeResource;
-import org.apache.iotdb.db.engine.merge.task.MergeTask;
+import org.apache.iotdb.db.engine.merge.squeeze.task.SqueezeMergeTask;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.exception.MetadataErrorException;
+import org.apache.iotdb.db.exception.PathErrorException;
import org.apache.iotdb.db.exception.StorageEngineException;
import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.query.reader.resourceRelated.SeqResourceIterateReader;
@@ -50,7 +52,8 @@ public class MergeOverLapTest extends MergeTest {
private File tempSGDir;
@Before
- public void setUp() throws IOException, WriteProcessException, MetadataErrorException {
+ public void setUp()
+ throws IOException, WriteProcessException, MetadataErrorException, PathErrorException {
ptNum = 1000;
super.setUp();
tempSGDir = new File("tempSG");
@@ -64,26 +67,26 @@ public class MergeOverLapTest extends MergeTest {
}
@Override
- void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WriteProcessException {
+ protected void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WriteProcessException {
for (int i = 0; i < seqFileNum; i++) {
- File file = SystemFileFactory.INSTANCE.getFile(i + "seq.tsfile");
+ File file = SystemFileFactory.INSTANCE.getFile("seq" + i + "-" + i + ".tsfile");
TsFileResource tsFileResource = new TsFileResource(file);
seqResources.add(tsFileResource);
prepareFile(tsFileResource, i * ptNum, ptNum, 0);
}
for (int i = 0; i < unseqFileNum; i++) {
- File file = SystemFileFactory.INSTANCE.getFile(i + "unseq.tsfile");
+ File file = SystemFileFactory.INSTANCE.getFile("unseq" + i + "-" + i + ".tsfile");
TsFileResource tsFileResource = new TsFileResource(file);
unseqResources.add(tsFileResource);
prepareFile(tsFileResource, i * ptNum, ptNum * (i + 1) / unseqFileNum, 10000);
}
- File file = SystemFileFactory.INSTANCE.getFile(unseqFileNum + "unseq.tsfile");
+ File file = SystemFileFactory.INSTANCE.getFile("unseq" + unseqFileNum + "-" + unseqFileNum + ".tsfile");
TsFileResource tsFileResource = new TsFileResource(file);
unseqResources.add(tsFileResource);
prepareUnseqFile(tsFileResource, 0, ptNum * unseqFileNum, 20000);
}
- void prepareUnseqFile(TsFileResource tsFileResource, long timeOffset, long ptNum,
+ private void prepareUnseqFile(TsFileResource tsFileResource, long timeOffset, long ptNum,
long valueOffset)
throws IOException, WriteProcessException {
TsFileWriter fileWriter = new TsFileWriter(tsFileResource.getFile());
@@ -122,16 +125,31 @@ public class MergeOverLapTest extends MergeTest {
}
@Test
- public void testFullMerge() throws Exception {
- MergeTask mergeTask =
- new MergeTask(new MergeResource(seqResources, unseqResources), tempSGDir.getPath(), (k, v, l) -> {}, "test",
+ public void testInplaceFullMerge() throws Exception {
+ Callable mergeTask =
+ new InplaceMergeTask(new MergeResource(seqResources, unseqResources), tempSGDir.getPath(),
+ (k, v, l, n) -> {}, "test",
true, 1, MERGE_TEST_SG);
mergeTask.call();
+ check(seqResources.get(0), 1000);
+ }
+
+ @Test
+ public void testSqueezeFullMerge() throws Exception {
+ TsFileResource[] newResource = new TsFileResource[1];
+ Callable mergeTask =
+ new SqueezeMergeTask(new MergeResource(seqResources, unseqResources), tempSGDir.getPath(),
+ (k, v, l, n) -> newResource[0] = n, "test", 1, MERGE_TEST_SG);
+ mergeTask.call();
+ check(newResource[0], 5000);
+ }
+
+ private void check(TsFileResource mergedFile, long expected) throws IOException {
QueryContext context = new QueryContext();
Path path = new Path(deviceIds[0], measurementSchemas[0].getMeasurementId());
SeqResourceIterateReader tsFilesReader = new SeqResourceIterateReader(path,
- Collections.singletonList(seqResources.get(0)),
+ Collections.singletonList(mergedFile),
null, context);
int cnt = 0;
try {
@@ -142,7 +160,7 @@ public class MergeOverLapTest extends MergeTest {
assertEquals(batchData.getTimeByIndex(i) + 20000.0, batchData.getDoubleByIndex(i), 0.001);
}
}
- assertEquals(1000, cnt);
+ assertEquals(expected, cnt);
} finally {
tsFilesReader.close();
}
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeTest.java
index 7bd2afb..e3dad01 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeTest.java
@@ -114,7 +114,8 @@ public abstract class MergeTest {
}
}
- void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException, WriteProcessException {
+ protected void prepareFiles(int seqFileNum, int unseqFileNum) throws IOException,
+ WriteProcessException {
for (int i = 0; i < seqFileNum; i++) {
File file = SystemFileFactory.INSTANCE.getFile("seq" + i + "-" + i + ".tsfile");
TsFileResource tsFileResource = new TsFileResource(file);
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java
index 01ada2a..c6953e3 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java
@@ -27,6 +27,7 @@ import java.util.List;
import org.apache.iotdb.db.engine.merge.MaxSeriesMergeFileSelector;
import org.apache.iotdb.db.engine.merge.MergeTest;
import org.apache.iotdb.db.engine.merge.inplace.selector.InplaceMaxFileSelector;
+import org.apache.iotdb.db.engine.merge.squeeze.selector.SqueezeMaxFileSelector;
import org.apache.iotdb.db.engine.merge.manage.MergeResource;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.exception.MergeException;
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergeLogTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergeLogTest.java
index a0a73f6..e3c80db 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergeLogTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergeLogTest.java
@@ -42,7 +42,7 @@ import org.junit.Test;
public class MergeLogTest extends MergeTest {
- File tempSGDir;
+ private File tempSGDir;
@Before
public void setUp() throws IOException, WriteProcessException, MetadataErrorException, PathErrorException {
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MaxFileMergeFileSelectorTest.java
similarity index 59%
copy from server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java
copy to server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MaxFileMergeFileSelectorTest.java
index 01ada2a..3b3bdab 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MaxFileMergeFileSelectorTest.java
@@ -17,64 +17,57 @@
* under the License.
*/
-package org.apache.iotdb.db.engine.merge.inplace;
+package org.apache.iotdb.db.engine.merge.squeeze;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.List;
-import org.apache.iotdb.db.engine.merge.MaxSeriesMergeFileSelector;
+import org.apache.iotdb.db.engine.merge.IMergeFileSelector;
import org.apache.iotdb.db.engine.merge.MergeTest;
-import org.apache.iotdb.db.engine.merge.inplace.selector.InplaceMaxFileSelector;
import org.apache.iotdb.db.engine.merge.manage.MergeResource;
+import org.apache.iotdb.db.engine.merge.squeeze.selector.SqueezeMaxFileSelector;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.exception.MergeException;
import org.junit.Test;
-public class MaxSeriesMergeFileSelectorTest extends MergeTest {
+public class MaxFileMergeFileSelectorTest extends MergeTest {
@Test
public void testFullSelection() throws MergeException, IOException {
MergeResource resource = new MergeResource(seqResources, unseqResources);
- MaxSeriesMergeFileSelector mergeFileSelector =
- new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource, Long.MAX_VALUE));
+ IMergeFileSelector mergeFileSelector = new SqueezeMaxFileSelector(resource, Long.MAX_VALUE);
mergeFileSelector.select();
List<TsFileResource> seqSelected = mergeFileSelector.getSelectedSeqFiles();
List<TsFileResource> unseqSelected = mergeFileSelector.getSelectedUnseqFiles();
assertEquals(seqResources, seqSelected);
assertEquals(unseqResources, unseqSelected);
- assertEquals(MaxSeriesMergeFileSelector.MAX_SERIES_NUM, mergeFileSelector.getConcurrentMergeNum());
resource.clear();
resource = new MergeResource(seqResources.subList(0, 1), unseqResources);
- mergeFileSelector = new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource,
- Long.MAX_VALUE));
+ mergeFileSelector = new SqueezeMaxFileSelector(resource, Long.MAX_VALUE);
mergeFileSelector.select();
seqSelected = mergeFileSelector.getSelectedSeqFiles();
unseqSelected = mergeFileSelector.getSelectedUnseqFiles();
assertEquals(seqResources.subList(0, 1), seqSelected);
assertEquals(unseqResources, unseqSelected);
- assertEquals(MaxSeriesMergeFileSelector.MAX_SERIES_NUM, mergeFileSelector.getConcurrentMergeNum());
resource.clear();
resource = new MergeResource(seqResources, unseqResources.subList(0, 1));
- mergeFileSelector = new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource,
- Long.MAX_VALUE));
+ mergeFileSelector = new SqueezeMaxFileSelector(resource, Long.MAX_VALUE);
mergeFileSelector.select();
seqSelected = mergeFileSelector.getSelectedSeqFiles();
unseqSelected = mergeFileSelector.getSelectedUnseqFiles();
- assertEquals(seqResources.subList(0, 1), seqSelected);
+ assertEquals(seqResources.subList(0, 5), seqSelected);
assertEquals(unseqResources.subList(0, 1), unseqSelected);
- assertEquals(MaxSeriesMergeFileSelector.MAX_SERIES_NUM, mergeFileSelector.getConcurrentMergeNum());
resource.clear();
}
@Test
public void testNonSelection() throws MergeException, IOException {
MergeResource resource = new MergeResource(seqResources, unseqResources);
- MaxSeriesMergeFileSelector mergeFileSelector =
- new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource, 1));
+ IMergeFileSelector mergeFileSelector = new SqueezeMaxFileSelector(resource, 1);
mergeFileSelector.select();
assertTrue(mergeFileSelector.getSelectedSeqFiles().isEmpty());
assertTrue(mergeFileSelector.getSelectedUnseqFiles().isEmpty());
@@ -84,28 +77,12 @@ public class MaxSeriesMergeFileSelectorTest extends MergeTest {
@Test
public void testRestrictedSelection() throws MergeException, IOException {
MergeResource resource = new MergeResource(seqResources, unseqResources);
- MaxSeriesMergeFileSelector mergeFileSelector =
- new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource, 400000));
+ IMergeFileSelector mergeFileSelector = new SqueezeMaxFileSelector(resource, 400000);
mergeFileSelector.select();
List<TsFileResource> seqSelected = mergeFileSelector.getSelectedSeqFiles();
List<TsFileResource> unseqSelected = mergeFileSelector.getSelectedUnseqFiles();
- assertEquals(seqResources.subList(0, 2), seqSelected);
+ assertEquals(seqResources.subList(0, 4), seqSelected);
assertEquals(unseqResources.subList(0, 2), unseqSelected);
- assertEquals(MaxSeriesMergeFileSelector.MAX_SERIES_NUM, mergeFileSelector.getConcurrentMergeNum());
- resource.clear();
- }
-
- @Test
- public void testRestrictedSelection2() throws MergeException, IOException {
- MergeResource resource = new MergeResource(seqResources, unseqResources);
- MaxSeriesMergeFileSelector mergeFileSelector = new MaxSeriesMergeFileSelector(
- new InplaceMaxFileSelector(resource, 100000));
- mergeFileSelector.select();
- List<TsFileResource> seqSelected = mergeFileSelector.getSelectedSeqFiles();
- List<TsFileResource> unseqSelected = mergeFileSelector.getSelectedUnseqFiles();
- assertEquals(seqResources.subList(0, 1), seqSelected);
- assertEquals(unseqResources.subList(0, 1), unseqSelected);
- assertEquals(34, mergeFileSelector.getConcurrentMergeNum());
resource.clear();
}
}
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MaxSeriesMergeFileSelectorTest.java
similarity index 85%
copy from server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java
copy to server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MaxSeriesMergeFileSelectorTest.java
index 01ada2a..7e8cb44 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MaxSeriesMergeFileSelectorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MaxSeriesMergeFileSelectorTest.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.engine.merge.inplace;
+package org.apache.iotdb.db.engine.merge.squeeze;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -26,8 +26,8 @@ import java.io.IOException;
import java.util.List;
import org.apache.iotdb.db.engine.merge.MaxSeriesMergeFileSelector;
import org.apache.iotdb.db.engine.merge.MergeTest;
-import org.apache.iotdb.db.engine.merge.inplace.selector.InplaceMaxFileSelector;
import org.apache.iotdb.db.engine.merge.manage.MergeResource;
+import org.apache.iotdb.db.engine.merge.squeeze.selector.SqueezeMaxFileSelector;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.exception.MergeException;
import org.junit.Test;
@@ -38,7 +38,7 @@ public class MaxSeriesMergeFileSelectorTest extends MergeTest {
public void testFullSelection() throws MergeException, IOException {
MergeResource resource = new MergeResource(seqResources, unseqResources);
MaxSeriesMergeFileSelector mergeFileSelector =
- new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource, Long.MAX_VALUE));
+ new MaxSeriesMergeFileSelector(new SqueezeMaxFileSelector(resource, Long.MAX_VALUE));
mergeFileSelector.select();
List<TsFileResource> seqSelected = mergeFileSelector.getSelectedSeqFiles();
List<TsFileResource> unseqSelected = mergeFileSelector.getSelectedUnseqFiles();
@@ -48,7 +48,7 @@ public class MaxSeriesMergeFileSelectorTest extends MergeTest {
resource.clear();
resource = new MergeResource(seqResources.subList(0, 1), unseqResources);
- mergeFileSelector = new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource,
+ mergeFileSelector = new MaxSeriesMergeFileSelector(new SqueezeMaxFileSelector(resource,
Long.MAX_VALUE));
mergeFileSelector.select();
seqSelected = mergeFileSelector.getSelectedSeqFiles();
@@ -59,12 +59,12 @@ public class MaxSeriesMergeFileSelectorTest extends MergeTest {
resource.clear();
resource = new MergeResource(seqResources, unseqResources.subList(0, 1));
- mergeFileSelector = new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource,
+ mergeFileSelector = new MaxSeriesMergeFileSelector(new SqueezeMaxFileSelector(resource,
Long.MAX_VALUE));
mergeFileSelector.select();
seqSelected = mergeFileSelector.getSelectedSeqFiles();
unseqSelected = mergeFileSelector.getSelectedUnseqFiles();
- assertEquals(seqResources.subList(0, 1), seqSelected);
+ assertEquals(seqResources.subList(0, 5), seqSelected);
assertEquals(unseqResources.subList(0, 1), unseqSelected);
assertEquals(MaxSeriesMergeFileSelector.MAX_SERIES_NUM, mergeFileSelector.getConcurrentMergeNum());
resource.clear();
@@ -74,7 +74,7 @@ public class MaxSeriesMergeFileSelectorTest extends MergeTest {
public void testNonSelection() throws MergeException, IOException {
MergeResource resource = new MergeResource(seqResources, unseqResources);
MaxSeriesMergeFileSelector mergeFileSelector =
- new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource, 1));
+ new MaxSeriesMergeFileSelector(new SqueezeMaxFileSelector(resource, 1));
mergeFileSelector.select();
assertTrue(mergeFileSelector.getSelectedSeqFiles().isEmpty());
assertTrue(mergeFileSelector.getSelectedUnseqFiles().isEmpty());
@@ -85,12 +85,12 @@ public class MaxSeriesMergeFileSelectorTest extends MergeTest {
public void testRestrictedSelection() throws MergeException, IOException {
MergeResource resource = new MergeResource(seqResources, unseqResources);
MaxSeriesMergeFileSelector mergeFileSelector =
- new MaxSeriesMergeFileSelector(new InplaceMaxFileSelector(resource, 400000));
+ new MaxSeriesMergeFileSelector(new SqueezeMaxFileSelector(resource, 400000));
mergeFileSelector.select();
List<TsFileResource> seqSelected = mergeFileSelector.getSelectedSeqFiles();
List<TsFileResource> unseqSelected = mergeFileSelector.getSelectedUnseqFiles();
- assertEquals(seqResources.subList(0, 2), seqSelected);
- assertEquals(unseqResources.subList(0, 2), unseqSelected);
+ assertEquals(seqResources.subList(0, 4), seqSelected);
+ assertEquals(unseqResources.subList(0, 1), unseqSelected);
assertEquals(MaxSeriesMergeFileSelector.MAX_SERIES_NUM, mergeFileSelector.getConcurrentMergeNum());
resource.clear();
}
@@ -99,13 +99,13 @@ public class MaxSeriesMergeFileSelectorTest extends MergeTest {
public void testRestrictedSelection2() throws MergeException, IOException {
MergeResource resource = new MergeResource(seqResources, unseqResources);
MaxSeriesMergeFileSelector mergeFileSelector = new MaxSeriesMergeFileSelector(
- new InplaceMaxFileSelector(resource, 100000));
+ new SqueezeMaxFileSelector(resource, 100000));
mergeFileSelector.select();
List<TsFileResource> seqSelected = mergeFileSelector.getSelectedSeqFiles();
List<TsFileResource> unseqSelected = mergeFileSelector.getSelectedUnseqFiles();
assertEquals(seqResources.subList(0, 1), seqSelected);
assertEquals(unseqResources.subList(0, 1), unseqSelected);
- assertEquals(34, mergeFileSelector.getConcurrentMergeNum());
+ assertEquals(128, mergeFileSelector.getConcurrentMergeNum());
resource.clear();
}
}
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergeLogTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MergeLogTest.java
similarity index 87%
copy from server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergeLogTest.java
copy to server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MergeLogTest.java
index a0a73f6..45b740e 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergeLogTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MergeLogTest.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.iotdb.db.engine.merge.inplace;
+package org.apache.iotdb.db.engine.merge.squeeze;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@@ -30,7 +30,7 @@ import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.iotdb.db.engine.merge.MergeTest;
import org.apache.iotdb.db.engine.merge.manage.MergeResource;
-import org.apache.iotdb.db.engine.merge.inplace.task.InplaceMergeTask;
+import org.apache.iotdb.db.engine.merge.squeeze.task.SqueezeMergeTask;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.exception.MetadataErrorException;
import org.apache.iotdb.db.exception.PathErrorException;
@@ -42,7 +42,7 @@ import org.junit.Test;
public class MergeLogTest extends MergeTest {
- File tempSGDir;
+ private File tempSGDir;
@Before
public void setUp() throws IOException, WriteProcessException, MetadataErrorException, PathErrorException {
@@ -59,9 +59,9 @@ public class MergeLogTest extends MergeTest {
@Test
public void testMergeLog() throws Exception {
- InplaceMergeTask mergeTask =
- new InplaceMergeTask(new MergeResource(seqResources.subList(0, 1), unseqResources.subList(0, 1)),
- tempSGDir.getPath(), this::testCallBack, "test", false, 1, MERGE_TEST_SG);
+ SqueezeMergeTask mergeTask =
+ new SqueezeMergeTask(new MergeResource(seqResources.subList(0, 1), unseqResources.subList(0, 1)),
+ tempSGDir.getPath(), this::testCallBack, "test", 1, MERGE_TEST_SG);
mergeTask.call();
}
@@ -78,7 +78,8 @@ public class MergeLogTest extends MergeTest {
e.printStackTrace();
fail(e.getMessage());
}
- assertEquals(309, lineCnt);
+ assertEquals(6, lineCnt);
+ newFile.remove();
}
}
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MergeTaskTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MergeTaskTest.java
index c81c318..9e63e17 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MergeTaskTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/squeeze/MergeTaskTest.java
@@ -27,7 +27,6 @@ import java.util.Collections;
import org.apache.commons.io.FileUtils;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.merge.MergeTest;
-import org.apache.iotdb.db.engine.merge.inplace.task.InplaceMergeTask;
import org.apache.iotdb.db.engine.merge.manage.MergeResource;
import org.apache.iotdb.db.engine.merge.squeeze.task.SqueezeMergeTask;
import org.apache.iotdb.db.engine.modification.Deletion;
@@ -66,7 +65,7 @@ public class MergeTaskTest extends MergeTest {
TsFileResource[] newResource = new TsFileResource[1];
SqueezeMergeTask mergeTask =
new SqueezeMergeTask(new MergeResource(seqResources, unseqResources), tempSGDir.getPath(), (k, v
- , l, n) -> {newResource[0] = n;}, "test", 1, MERGE_TEST_SG);
+ , l, n) -> newResource[0] = n, "test", 1, MERGE_TEST_SG);
mergeTask.call();
QueryContext context = new QueryContext();
@@ -78,72 +77,55 @@ public class MergeTaskTest extends MergeTest {
while (tsFilesReader.hasNext()) {
BatchData batchData = tsFilesReader.nextBatch();
for (int i = 0; i < batchData.length(); i++) {
- System.out.println(batchData.getTimeByIndex(i) + " " + batchData.getDoubleByIndex(i));
assertEquals(batchData.getTimeByIndex(i) + 20000.0, batchData.getDoubleByIndex(i), 0.001);
cnt++;
}
}
- assertEquals(2000, cnt);
- tsFilesReader.close();
- }
-
- @Test
- public void testFullMerge() throws Exception {
- InplaceMergeTask mergeTask =
- new InplaceMergeTask(new MergeResource(seqResources, unseqResources), tempSGDir.getPath()
- , (k, v, l, n) -> {}, "test",
- true, 1, MERGE_TEST_SG);
- mergeTask.call();
-
- QueryContext context = new QueryContext();
- Path path = new Path(deviceIds[0], measurementSchemas[0].getMeasurementId());
- SeqResourceIterateReader tsFilesReader = new SeqResourceIterateReader(path,
- Collections.singletonList(seqResources.get(0)),
- null, context);
- while (tsFilesReader.hasNext()) {
- BatchData batchData = tsFilesReader.nextBatch();
- for (int i = 0; i < batchData.length(); i++) {
- assertEquals(batchData.getTimeByIndex(i) + 20000.0, batchData.getDoubleByIndex(i), 0.001);
- }
- }
+ assertEquals(500, cnt);
tsFilesReader.close();
+ newResource[0].remove();
}
@Test
public void testChunkNumThreshold() throws Exception {
IoTDBDescriptor.getInstance().getConfig().setChunkMergePointThreshold(Integer.MAX_VALUE);
- InplaceMergeTask mergeTask =
- new InplaceMergeTask(new MergeResource(seqResources, unseqResources), tempSGDir.getPath()
- , (k, v, l, n) -> {}, "test",
- false, 1, MERGE_TEST_SG);
+ TsFileResource[] newResource = new TsFileResource[1];
+ SqueezeMergeTask mergeTask =
+ new SqueezeMergeTask(new MergeResource(seqResources, unseqResources), tempSGDir.getPath()
+ , (k, v, l, n) -> newResource[0] = n, "test",1, MERGE_TEST_SG);
mergeTask.call();
QueryContext context = new QueryContext();
Path path = new Path(deviceIds[0], measurementSchemas[0].getMeasurementId());
SeqResourceIterateReader tsFilesReader = new SeqResourceIterateReader(path,
- Collections.singletonList(seqResources.get(0)),
+ Collections.singletonList(newResource[0]),
null, context);
+ int cnt = 0;
while (tsFilesReader.hasNext()) {
BatchData batchData = tsFilesReader.nextBatch();
for (int i = 0; i < batchData.length(); i++) {
assertEquals(batchData.getTimeByIndex(i) + 20000.0, batchData.getDoubleByIndex(i), 0.001);
+ cnt++;
}
}
+ assertEquals(500, cnt);
tsFilesReader.close();
+ newResource[0].remove();
}
@Test
public void testPartialMerge1() throws Exception {
- InplaceMergeTask mergeTask =
- new InplaceMergeTask(new MergeResource(seqResources, unseqResources.subList(0, 1)), tempSGDir.getPath(),
- (k, v, l, n) -> {}, "test", false, 1, MERGE_TEST_SG);
+ TsFileResource[] newResource = new TsFileResource[1];
+ SqueezeMergeTask mergeTask =
+ new SqueezeMergeTask(new MergeResource(seqResources, unseqResources.subList(0, 1)), tempSGDir.getPath(),
+ (k, v, l, n) -> newResource[0] = n, "test", 1, MERGE_TEST_SG);
mergeTask.call();
QueryContext context = new QueryContext();
Path path = new Path(deviceIds[0], measurementSchemas[0].getMeasurementId());
SeqResourceIterateReader tsFilesReader = new SeqResourceIterateReader(path,
- Collections.singletonList(seqResources.get(0)),
- null, context);
+ Collections.singletonList(newResource[0]), null, context);
+ int cnt = 0;
while (tsFilesReader.hasNext()) {
BatchData batchData = tsFilesReader.nextBatch();
for (int i = 0; i < batchData.length(); i++) {
@@ -152,79 +134,96 @@ public class MergeTaskTest extends MergeTest {
} else {
assertEquals(batchData.getTimeByIndex(i) + 0.0, batchData.getDoubleByIndex(i), 0.001);
}
+ cnt++;
}
}
+ assertEquals(500, cnt);
tsFilesReader.close();
+ newResource[0].remove();
}
@Test
public void testPartialMerge2() throws Exception {
- InplaceMergeTask mergeTask =
- new InplaceMergeTask(new MergeResource(seqResources, unseqResources.subList(5, 6)), tempSGDir.getPath(),
- (k, v, l, n) -> {}, "test", false, 1, MERGE_TEST_SG);
+ TsFileResource[] newResource = new TsFileResource[1];
+ SqueezeMergeTask mergeTask =
+ new SqueezeMergeTask(new MergeResource(seqResources, unseqResources.subList(5, 6)), tempSGDir.getPath(),
+ (k, v, l, n) -> newResource[0] = n, "test", 1, MERGE_TEST_SG);
mergeTask.call();
QueryContext context = new QueryContext();
Path path = new Path(deviceIds[0], measurementSchemas[0].getMeasurementId());
SeqResourceIterateReader tsFilesReader = new SeqResourceIterateReader(path,
- Collections.singletonList(seqResources.get(0)),
+ Collections.singletonList(newResource[0]),
null, context);
+ int cnt = 0;
while (tsFilesReader.hasNext()) {
BatchData batchData = tsFilesReader.nextBatch();
for (int i = 0; i < batchData.length(); i++) {
assertEquals(batchData.getTimeByIndex(i) + 20000.0, batchData.getDoubleByIndex(i), 0.001);
+ cnt++;
}
}
+ assertEquals(500, cnt);
tsFilesReader.close();
+ newResource[0].remove();
}
@Test
public void testPartialMerge3() throws Exception {
- InplaceMergeTask mergeTask =
- new InplaceMergeTask(new MergeResource(seqResources, unseqResources.subList(0, 5)), tempSGDir.getPath(),
- (k, v, l, n) -> {}, "test", false, 1, MERGE_TEST_SG);
+ TsFileResource[] newResource = new TsFileResource[1];
+ SqueezeMergeTask mergeTask =
+ new SqueezeMergeTask(new MergeResource(seqResources, unseqResources.subList(0, 5)), tempSGDir.getPath(),
+ (k, v, l, n) -> newResource[0] = n, "test",1, MERGE_TEST_SG);
mergeTask.call();
QueryContext context = new QueryContext();
Path path = new Path(deviceIds[0], measurementSchemas[0].getMeasurementId());
SeqResourceIterateReader tsFilesReader = new SeqResourceIterateReader(path,
- Collections.singletonList(seqResources.get(2)),
+ Collections.singletonList(newResource[0]),
null, context);
+ int cnt = 0;
while (tsFilesReader.hasNext()) {
BatchData batchData = tsFilesReader.nextBatch();
for (int i = 0; i < batchData.length(); i++) {
- if (batchData.getTimeByIndex(i) < 260) {
+ long time = batchData.getTimeByIndex(i);
+ boolean overflowed = time < (100 * (time / 100) + 20 * (time / 100 + 1));
+ if (overflowed) {
assertEquals(batchData.getTimeByIndex(i) + 10000.0, batchData.getDoubleByIndex(i), 0.001);
} else {
assertEquals(batchData.getTimeByIndex(i) + 0.0, batchData.getDoubleByIndex(i), 0.001);
}
+ cnt++;
}
}
+ assertEquals(500, cnt);
tsFilesReader.close();
+ newResource[0].remove();
}
@Test
public void mergeWithDeletionTest() throws Exception {
+ TsFileResource[] newResource = new TsFileResource[1];
seqResources.get(0).getModFile().write(new Deletion(new Path(deviceIds[0],
measurementSchemas[0].getMeasurementId()), 10000, 49));
seqResources.get(0).getModFile().close();
- InplaceMergeTask mergeTask =
- new InplaceMergeTask(new MergeResource(seqResources, unseqResources.subList(0, 1)), tempSGDir.getPath(),
+ SqueezeMergeTask mergeTask =
+ new SqueezeMergeTask(new MergeResource(seqResources, unseqResources.subList(0, 1)), tempSGDir.getPath(),
(k, v, l, n) -> {
try {
seqResources.get(0).removeModFile();
} catch (IOException e) {
e.printStackTrace();
}
- }, "test", false, 1, MERGE_TEST_SG);
+ newResource[0] = n;
+ }, "test", 1, MERGE_TEST_SG);
mergeTask.call();
QueryContext context = new QueryContext();
Path path = new Path(deviceIds[0], measurementSchemas[0].getMeasurementId());
SeqResourceIterateReader tsFilesReader = new SeqResourceIterateReader(path,
- Collections.singletonList(seqResources.get(0)),
+ Collections.singletonList(newResource[0]),
null, context);
int count = 0;
while (tsFilesReader.hasNext()) {
@@ -238,7 +237,8 @@ public class MergeTaskTest extends MergeTest {
count ++;
}
}
- assertEquals(70, count);
+ assertEquals(470, count);
tsFilesReader.close();
+ newResource[0].remove();
}
}
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java
index 6284842..8a7a7f4 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java
@@ -26,6 +26,8 @@ import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.engine.merge.MergeFileStrategy;
import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.jdbc.Config;
@@ -37,7 +39,6 @@ public class IoTDBMergeTest {
private static IoTDB daemon;
- @Before
public void setUp() throws Exception {
EnvironmentUtils.closeStatMonitor();
@@ -47,14 +48,12 @@ public class IoTDBMergeTest {
Class.forName(Config.JDBC_DRIVER_NAME);
}
- @After
public void tearDown() throws Exception {
daemon.stop();
EnvironmentUtils.cleanEnv();
}
- @Test
- public void test() throws SQLException {
+ private void doTest() throws SQLException {
try (Connection connection = DriverManager
.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
Statement statement = connection.createStatement()) {
@@ -94,4 +93,15 @@ public class IoTDBMergeTest {
}
}
+ @Test
+ public void test() throws Exception {
+ for (MergeFileStrategy strategy : MergeFileStrategy.values()) {
+ IoTDBDescriptor.getInstance().getConfig().setMergeFileStrategy(strategy);
+ System.out.println("Testing merge strategy: " + strategy);
+ setUp();
+ doTest();
+ tearDown();
+ }
+ }
+
}