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/31 02:05:53 UTC
[incubator-iotdb] branch dev_new_merge_strategy updated: add chunk
provider
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 3fd9a87 add chunk provider
3fd9a87 is described below
commit 3fd9a87660f96c91814d518238112d6333a8bcea
Author: jt <jt...@163.com>
AuthorDate: Thu Oct 31 10:05:24 2019 +0800
add chunk provider
---
.../merge/inplace/task/MergeMultiChunkTask.java | 27 ++++--
.../iotdb/db/engine/merge/util/ChunkProvider.java | 36 +++++++
.../engine/merge/util/ChunkProviderExecutor.java | 68 +++++++++++++
.../db/engine/merge/util/DirectChunkProvider.java | 46 +++++++++
.../engine/merge/util/SharedMapChunkProvider.java | 102 +++++++++++++++++++
.../merge/util/SharedQueueChunkProvider.java | 108 +++++++++++++++++++++
.../java/org/apache/iotdb/db/service/IoTDB.java | 2 +
.../org/apache/iotdb/db/service/ServiceType.java | 3 +-
.../db/engine/merge/inplace/MergePerfTest.java | 9 +-
server/src/test/resources/logback.xml | 4 +-
10 files changed, 392 insertions(+), 13 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/inplace/task/MergeMultiChunkTask.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/inplace/task/MergeMultiChunkTask.java
index 1d6b222..1421ef3 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/inplace/task/MergeMultiChunkTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/inplace/task/MergeMultiChunkTask.java
@@ -27,6 +27,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.PriorityQueue;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@@ -38,6 +39,10 @@ import org.apache.iotdb.db.engine.merge.manage.MergeResource;
import org.apache.iotdb.db.engine.merge.inplace.recover.InplaceMergeLogger;
import org.apache.iotdb.db.engine.merge.IMergePathSelector;
import org.apache.iotdb.db.engine.merge.NaivePathSelector;
+import org.apache.iotdb.db.engine.merge.util.ChunkProvider;
+import org.apache.iotdb.db.engine.merge.util.DirectChunkProvider;
+import org.apache.iotdb.db.engine.merge.util.SharedMapChunkProvider;
+import org.apache.iotdb.db.engine.merge.util.SharedQueueChunkProvider;
import org.apache.iotdb.db.engine.modification.Modification;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.query.reader.IPointReader;
@@ -236,6 +241,7 @@ class MergeMultiChunkTask {
idx++;
ptWrittens[i] = 0;
}
+ ChunkProvider provider = new DirectChunkProvider(reader);
mergedChunkNum.set(0);
unmergedChunkNum.set(0);
@@ -244,8 +250,8 @@ class MergeMultiChunkTask {
for (int i = 0; i < mergeChunkSubTaskNum; i++) {
int finalI = i;
futures.add(MergeManager.getINSTANCE().submitChunkSubTask(() -> {
- mergeChunkHeap(chunkMetaHeaps[finalI], ptWrittens, reader, mergeFileWriter, unseqReaders, currFile,
- isLastFile);
+ mergeChunkHeap(chunkMetaHeaps[finalI], ptWrittens, provider, mergeFileWriter, unseqReaders,
+ currFile, isLastFile);
return null;
}));
}
@@ -266,9 +272,10 @@ class MergeMultiChunkTask {
return mergedChunkNum.get() > 0;
}
- private void mergeChunkHeap(PriorityQueue<MetaListEntry> chunkMetaHeap, int[] ptWrittens, TsFileSequenceReader reader,
- RestorableTsFileIOWriter mergeFileWriter, IPointReader[] unseqReaders, TsFileResource currFile,
- boolean isLastFile) throws IOException {
+ private void mergeChunkHeap(PriorityQueue<MetaListEntry> chunkMetaHeap, int[] ptWrittens,
+ ChunkProvider provider, RestorableTsFileIOWriter mergeFileWriter, IPointReader[] unseqReaders,
+ TsFileResource currFile,
+ boolean isLastFile) throws IOException {
while (!chunkMetaHeap.isEmpty()) {
MetaListEntry metaListEntry = chunkMetaHeap.poll();
ChunkMetaData currMeta = metaListEntry.current();
@@ -280,12 +287,15 @@ class MergeMultiChunkTask {
boolean chunkOverflowed = MergeUtils.isChunkOverflowed(currTimeValuePairs[pathIdx], currMeta);
boolean chunkTooSmall = MergeUtils
- .isChunkTooSmall(ptWrittens[pathIdx], currMeta, isLastChunk, minChunkPointNum);
+ .isChunkTooSmall(ptWrittens[pathIdx], currMeta, isLastChunk, minChunkPointNum);
Chunk chunk;
- synchronized (reader) {
- chunk = reader.readMemChunk(currMeta);
+ try {
+ chunk = provider.require(currMeta);
+ } catch (InterruptedException e) {
+ throw new IOException("Interrupted when reading a chunk", e);
}
+
ptWrittens[pathIdx] = mergeChunkV2(currMeta, chunkOverflowed, chunkTooSmall, chunk,
ptWrittens[pathIdx], pathIdx, mergeFileWriter, unseqReaders[pathIdx], chunkWriter,
currFile);
@@ -377,6 +387,7 @@ class MergeMultiChunkTask {
// the new chunk's size is large enough and it should be flushed
synchronized (mergeFileWriter) {
chunkWriter.writeToFileWriter(mergeFileWriter);
+ mergeContext.incTotalChunkWritten();
}
unclosedChunkPoint = 0;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/util/ChunkProvider.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/ChunkProvider.java
new file mode 100644
index 0000000..4f6c7ba
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/ChunkProvider.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * 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.util;
+
+import java.io.IOException;
+import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
+import org.apache.iotdb.tsfile.read.common.Chunk;
+
+public interface ChunkProvider {
+
+ /**
+ * Require a chunk corresponding meta from this provider. This method will block until
+ * the chunk is read.
+ * @param metaData
+ * @return
+ * @throws InterruptedException
+ */
+ Chunk require(ChunkMetaData metaData) throws InterruptedException, IOException;
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/util/ChunkProviderExecutor.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/ChunkProviderExecutor.java
new file mode 100644
index 0000000..b8b9987
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/ChunkProviderExecutor.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * 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.util;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import org.apache.iotdb.db.exception.StartupException;
+import org.apache.iotdb.db.service.IService;
+import org.apache.iotdb.db.service.ServiceType;
+
+public class ChunkProviderExecutor implements IService {
+
+ private static ChunkProviderExecutor INSTANCE = new ChunkProviderExecutor();
+
+ private ExecutorService providerThreadPool =
+ Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
+
+ private ChunkProviderExecutor() {
+ }
+
+ public static ChunkProviderExecutor getINSTANCE() {
+ return INSTANCE;
+ }
+
+ void submit(Callable providerTask) {
+ providerThreadPool.submit(providerTask);
+ }
+
+ public void close() {
+ providerThreadPool.shutdownNow();
+ while (!providerThreadPool.isTerminated()) {
+ // wait
+ }
+ }
+
+ @Override
+ public void start() throws StartupException {
+
+ }
+
+ @Override
+ public void stop() {
+ close();
+ }
+
+ @Override
+ public ServiceType getID() {
+ return ServiceType.CHUNK_PROVIDER_SERVICE;
+ }
+}
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/util/DirectChunkProvider.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/DirectChunkProvider.java
new file mode 100644
index 0000000..eb1c991
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/DirectChunkProvider.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * 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.util;
+
+import java.io.IOException;
+import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
+import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
+import org.apache.iotdb.tsfile.read.common.Chunk;
+
+/**
+ * DirectChunkProvider directly read the desired Chunk from a TsFileSequenceReader, using
+ * synchronized to provide thread safety.
+ * This class is for experiments in comparison with SharedQueueChunkProvider.
+ */
+public class DirectChunkProvider implements ChunkProvider {
+
+ private TsFileSequenceReader reader;
+
+ public DirectChunkProvider(TsFileSequenceReader reader) {
+ this.reader = reader;
+ }
+
+ @Override
+ public Chunk require(ChunkMetaData metaData) throws IOException {
+ synchronized (reader) {
+ return reader.readMemChunk(metaData);
+ }
+ }
+}
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/util/SharedMapChunkProvider.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/SharedMapChunkProvider.java
new file mode 100644
index 0000000..b21ffd2
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/SharedMapChunkProvider.java
@@ -0,0 +1,102 @@
+/*
+ *
+ * * Licensed to the Apache Software Foundation (ASF) under one
+ * * or more contributor license agreements. See the NOTICE file
+ * * distributed with this work for additional information
+ * * regarding copyright ownership. The ASF licenses this file
+ * * to you under the Apache License, Version 2.0 (the
+ * * "License"); you may not use this file except in compliance
+ * * with the License. You may obtain a copy of the License at
+ * *
+ * * http://www.apache.org/licenses/LICENSE-2.0
+ * *
+ * * Unless required by applicable law or agreed to in writing,
+ * * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * * 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.util;
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
+import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
+import org.apache.iotdb.tsfile.read.common.Chunk;
+
+/**
+ * SharedQueueProvider read the Chunks by the order of their disk offsets and store them in a queue,
+ * which reduces random seeks.
+ */
+public class SharedMapChunkProvider implements ChunkProvider{
+
+ private static final int MAX_SIZE = 512;
+
+ private Map<ChunkMetaData, Chunk> map = new ConcurrentHashMap<>();
+ private List<ChunkMetaData> allChunkMetadataList;
+ private TsFileSequenceReader reader;
+
+ public SharedMapChunkProvider(List<ChunkMetaData>[] chunkMetadataLists, TsFileSequenceReader reader) {
+ allChunkMetadataList = new ArrayList<>();
+ for (List<ChunkMetaData> chunkMetaDataList : chunkMetadataLists) {
+ allChunkMetadataList.addAll(chunkMetaDataList);
+ }
+ allChunkMetadataList.sort(Comparator.comparing(ChunkMetaData::getOffsetOfChunkHeader));
+ this.reader = reader;
+ ChunkProviderExecutor.getINSTANCE().submit(new ProviderTask());
+ }
+
+
+ public Chunk require(ChunkMetaData chunkMetaData) throws InterruptedException {
+ while (true) {
+ synchronized (map) {
+ Chunk chunk = map.get(chunkMetaData);
+ if (chunk == null) {
+ // the queue is empty or the peek is not what we want, wait until a new entry is ready
+ map.wait();
+ continue;
+ }
+ // the entry contains what we want
+ map.remove(chunkMetaData);
+ // notify other appliers and the provider that the head is taken away
+ map.notifyAll();
+ return chunk;
+ }
+ }
+ }
+
+ private class ProviderTask implements Callable<Void> {
+
+ @Override
+ public Void call() throws Exception {
+ for (ChunkMetaData chunkMetaData : allChunkMetadataList) {
+ Chunk chunk = reader.readMemChunk(chunkMetaData);
+
+ synchronized (map) {
+ int size = map.size();
+ if (size >= MAX_SIZE) {
+ // wait until some entry is taken
+ map.wait();
+ map.put(chunkMetaData, chunk);
+ map.notifyAll();
+ } else {
+ // notify appliers that a new entry is available
+ map.put(chunkMetaData, chunk);
+ map.notifyAll();
+ }
+ }
+ }
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/util/SharedQueueChunkProvider.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/SharedQueueChunkProvider.java
new file mode 100644
index 0000000..18ac34d
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/util/SharedQueueChunkProvider.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * 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.util;
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Deque;
+import java.util.List;
+import java.util.concurrent.Callable;
+import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
+import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
+import org.apache.iotdb.tsfile.read.common.Chunk;
+
+/**
+ * SharedQueueProvider read the Chunks by the order of their disk offsets and store them in a queue,
+ * which reduces random seeks.
+ */
+public class SharedQueueChunkProvider implements ChunkProvider{
+
+ private static final int QUEUE_MAX_SIZE = 64;
+
+ private Deque<Entry> queue = new ArrayDeque<>();
+ private List<ChunkMetaData> allChunkMetadataList;
+ private TsFileSequenceReader reader;
+
+ public SharedQueueChunkProvider(List<ChunkMetaData>[] chunkMetadataLists, TsFileSequenceReader reader) {
+ allChunkMetadataList = new ArrayList<>();
+ for (List<ChunkMetaData> chunkMetaDataList : chunkMetadataLists) {
+ allChunkMetadataList.addAll(chunkMetaDataList);
+ }
+ allChunkMetadataList.sort(Comparator.comparing(ChunkMetaData::getOffsetOfChunkHeader));
+ this.reader = reader;
+ ChunkProviderExecutor.getINSTANCE().submit(new ProviderTask());
+ }
+
+
+ public Chunk require(ChunkMetaData chunkMetaData) throws InterruptedException {
+ while (true) {
+ synchronized (queue) {
+ Entry head = queue.peek();
+ if (head == null || head.meta != chunkMetaData) {
+ // the queue is empty or the peek is not what we want, wait until a new entry is ready
+ queue.wait();
+ continue;
+ }
+ // the entry contains what we want
+ queue.poll();
+ // notify other appliers and the provider that the head is taken away
+ queue.notifyAll();
+ return head.chunk;
+ }
+ }
+ }
+
+ private static class Entry {
+
+ Entry(ChunkMetaData meta, Chunk chunk) {
+ this.meta = meta;
+ this.chunk = chunk;
+ }
+
+ private ChunkMetaData meta;
+ private Chunk chunk;
+ }
+
+ private class ProviderTask implements Callable<Void> {
+
+ @Override
+ public Void call() throws Exception {
+ for (ChunkMetaData chunkMetaData : allChunkMetadataList) {
+ Chunk chunk = reader.readMemChunk(chunkMetaData);
+
+ synchronized (queue) {
+ int size = queue.size();
+ if (size >= QUEUE_MAX_SIZE) {
+ // wait until some entry is taken
+ queue.wait();
+ queue.addLast(new Entry(chunkMetaData, chunk));
+ queue.notifyAll();
+ } else {
+ queue.addLast(new Entry(chunkMetaData, chunk));
+ // notify appliers that a new entry is available
+ queue.notifyAll();
+ }
+ }
+ }
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
index 290efea..b874849 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.db.engine.StorageEngine;
import org.apache.iotdb.db.engine.cache.CacheHitRatioMonitor;
import org.apache.iotdb.db.engine.merge.manage.MergeManager;
import org.apache.iotdb.db.engine.flush.FlushManager;
+import org.apache.iotdb.db.engine.merge.util.ChunkProviderExecutor;
import org.apache.iotdb.db.exception.StartupException;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.db.monitor.StatMonitor;
@@ -104,6 +105,7 @@ public class IoTDB implements IoTDBMBean {
registerManager.register(MergeManager.getINSTANCE());
registerManager.register(CacheHitRatioMonitor.getInstance());
registerManager.register(MetricsService.getInstance());
+ registerManager.register(ChunkProviderExecutor.getINSTANCE());
JMXService.registerMBean(getInstance(), mbeanName);
logger.info("IoTDB is set up.");
diff --git a/server/src/main/java/org/apache/iotdb/db/service/ServiceType.java b/server/src/main/java/org/apache/iotdb/db/service/ServiceType.java
index e2cd8d4..20eb945 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/ServiceType.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/ServiceType.java
@@ -42,7 +42,8 @@ public enum ServiceType {
generateJmxName(IoTDBConstant.IOTDB_PACKAGE, "Cache Hit Ratio")),
FLUSH_SERVICE("Flush ServerService",
- generateJmxName("org.apache.iotdb.db.engine.pool", "Flush Manager"));
+ generateJmxName("org.apache.iotdb.db.engine.pool", "Flush Manager")),
+ CHUNK_PROVIDER_SERVICE("Chunk provider service", "");
private String name;
private String jmxName;
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergePerfTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergePerfTest.java
index 1508415..d51a665 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergePerfTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/inplace/MergePerfTest.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
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.util.ChunkProviderExecutor;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -39,6 +40,8 @@ public class MergePerfTest extends MergeTest {
File tempSGDir = new File("tempSG");
tempSGDir.mkdirs();
setUp();
+ System.out.println("Files prepared.");
+
long timeConsumption = System.currentTimeMillis();
MergeResource resource = new MergeResource(seqResources, unseqResources);
resource.setCacheDeviceMeta(true);
@@ -48,7 +51,9 @@ public class MergePerfTest extends MergeTest {
mergeTask.call();
timeConsumption = System.currentTimeMillis() - timeConsumption;
tearDown();
+ ChunkProviderExecutor.getINSTANCE().close();
FileUtils.deleteDirectory(tempSGDir);
+ System.out.println(timeConsumption);
}
public static void main(String[] args) throws Exception {
@@ -59,8 +64,8 @@ public class MergePerfTest extends MergeTest {
perfTest.seqFileNum = 5;
perfTest.unseqFileNum = 5;
- perfTest.measurementNum = 100;
- perfTest.deviceNum = 10;
+ perfTest.measurementNum = 10000;
+ perfTest.deviceNum = 1;
perfTest.ptNum = 5000;
perfTest.flushInterval = 1000;
perfTest.fullMerge = true;
diff --git a/server/src/test/resources/logback.xml b/server/src/test/resources/logback.xml
index a4aa6da..d69e3b1 100644
--- a/server/src/test/resources/logback.xml
+++ b/server/src/test/resources/logback.xml
@@ -30,12 +30,12 @@
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>ERROR</level>
+ <level>INFO</level>
</filter>
</appender>
<!--<logger name="org.apache.iotdb.db.utils.OpenFileNumUtil" level="debug" />-->
<!--<logger name="org.apache.iotdb.db.utils.OpenFileNumUtilTest" level="debug" />-->
- <root level="ERROR">
+ <root level="INFO">
<appender-ref ref="stdout"/>
</root>
</configuration>