You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ma...@apache.org on 2022/12/26 11:41:22 UTC
[iotdb] branch rel/1.0 updated: [IOTDB-5209] Limit the read rate of compaction execution (#8461) (#8487)
This is an automated email from the ASF dual-hosted git repository.
marklau99 pushed a commit to branch rel/1.0
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.0 by this push:
new 076c261296 [IOTDB-5209] Limit the read rate of compaction execution (#8461) (#8487)
076c261296 is described below
commit 076c261296ce00e81bd2000dc9e977c3fbfb3e3c
Author: Liu Xuxin <37...@users.noreply.github.com>
AuthorDate: Mon Dec 26 19:41:17 2022 +0800
[IOTDB-5209] Limit the read rate of compaction execution (#8461) (#8487)
---
docs/UserGuide/Reference/Common-Config-Manual.md | 16 ++++++++--------
docs/zh/UserGuide/Reference/Common-Config-Manual.md | 16 ++++++++--------
.../src/assembly/resources/conf/iotdb-common.properties | 4 ++--
.../main/java/org/apache/iotdb/db/conf/IoTDBConfig.java | 12 ++++++------
.../java/org/apache/iotdb/db/conf/IoTDBDescriptor.java | 11 +++++------
.../db/engine/compaction/CompactionTaskManager.java | 15 ++-------------
.../cross/utils/AlignedSeriesCompactionExecutor.java | 8 ++++++++
.../cross/utils/NonAlignedSeriesCompactionExecutor.java | 2 ++
.../inner/utils/AlignedSeriesCompactionExecutor.java | 9 ++++-----
.../inner/utils/SingleSeriesCompactionExecutor.java | 11 +++++------
.../compaction/writer/AbstractCompactionWriter.java | 12 +++++-------
.../compaction/utils/CompactionConfigRestorer.java | 2 +-
12 files changed, 56 insertions(+), 62 deletions(-)
diff --git a/docs/UserGuide/Reference/Common-Config-Manual.md b/docs/UserGuide/Reference/Common-Config-Manual.md
index e2c79e093e..4d1d24281c 100644
--- a/docs/UserGuide/Reference/Common-Config-Manual.md
+++ b/docs/UserGuide/Reference/Common-Config-Manual.md
@@ -990,14 +990,14 @@ Different configuration parameters take effect in the following three ways:
| Default | 60000 |
| Effective | After restart system |
-* compaction\_write\_throughput\_mb\_per\_sec
-
-|Name| compaction\_write\_throughput\_mb\_per\_sec |
-|:---:|:---|
-|Description| The write rate of all compaction tasks in MB/s |
-|Type| int32 |
-|Default| 16 |
-|Effective|After restart system|
+* compaction\_io\_rate\_per\_sec
+
+|Name| compaction\_io\_rate\_per\_sec |
+|:---:|:-----------------------------------------------|
+|Description| The io rate of all compaction tasks per second |
+|Type| int32 |
+|Default| 50 |
+|Effective| After restart system |
* sub\_compaction\_thread\_count
diff --git a/docs/zh/UserGuide/Reference/Common-Config-Manual.md b/docs/zh/UserGuide/Reference/Common-Config-Manual.md
index 0c6c28fcfb..fa91601017 100644
--- a/docs/zh/UserGuide/Reference/Common-Config-Manual.md
+++ b/docs/zh/UserGuide/Reference/Common-Config-Manual.md
@@ -1045,14 +1045,14 @@ IoTDB ConfigNode 和 DataNode 的公共配置参数位于 `conf` 目录下。
| 默认值 | 60000 |
| 改后生效方式 | 重启服务生效 |
-* compaction\_write\_throughput\_mb\_per\_sec
-
-|名字| compaction\_write\_throughput\_mb\_per\_sec |
-|:---:|:---|
-|描述| 每秒可达到的写入吞吐量合并限制。|
-|类型| int32 |
-|默认值| 16 |
-|改后生效方式| 重启服务生效|
+* compaction\_io\_rate\_per\_sec
+
+|名字| compaction\_io\_rate\_per\_sec |
+|:---:|:-------------------------------|
+|描述| 每秒合并随机IO的次数。 |
+|类型| int32 |
+|默认值| 50 |
+|改后生效方式| 重启服务生效 |
* sub\_compaction\_thread\_count
diff --git a/node-commons/src/assembly/resources/conf/iotdb-common.properties b/node-commons/src/assembly/resources/conf/iotdb-common.properties
index f4147b8bd1..cd718c9781 100644
--- a/node-commons/src/assembly/resources/conf/iotdb-common.properties
+++ b/node-commons/src/assembly/resources/conf/iotdb-common.properties
@@ -619,9 +619,9 @@
# Datatype: long, Unit: ms
# compaction_submission_interval_in_ms=60000
-# The limit of write throughput merge can reach per second
+# The limit of io rate can reach per second
# Datatype: int
-# compaction_write_throughput_mb_per_sec=16
+# compaction_io_rate_per_sec=50
# The number of sub compaction threads to be set up to perform compaction.
# Currently only works for nonAligned data in cross space compaction and unseq inner space compaction.
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 663c6c5fdb..cfb4aaef13 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -665,8 +665,8 @@ public class IoTDBConfig {
*/
private long mergeIntervalSec = 0L;
- /** The limit of compaction merge can reach per second */
- private int compactionWriteThroughputMbPerSec = 16;
+ /** The limit of io rate can reach per second */
+ private int compactionIORatePerSec = 50;
/**
* How many thread will be set up to perform compaction, 10 by default. Set to 1 when less than or
@@ -1920,12 +1920,12 @@ public class IoTDBConfig {
this.intoOperationExecutionThreadCount = intoOperationExecutionThreadCount;
}
- public int getCompactionWriteThroughputMbPerSec() {
- return compactionWriteThroughputMbPerSec;
+ public int getCompactionIORatePerSec() {
+ return compactionIORatePerSec;
}
- public void setCompactionWriteThroughputMbPerSec(int compactionWriteThroughputMbPerSec) {
- this.compactionWriteThroughputMbPerSec = compactionWriteThroughputMbPerSec;
+ public void setCompactionIORatePerSec(int compactionIORatePerSec) {
+ this.compactionIORatePerSec = compactionIORatePerSec;
}
public boolean isEnableMemControl() {
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index fd0dc0d998..7ba0807316 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -655,11 +655,10 @@ public class IoTDBDescriptor {
"max_cross_compaction_candidate_file_size",
Long.toString(conf.getMaxCrossCompactionCandidateFileSize()))));
- conf.setCompactionWriteThroughputMbPerSec(
+ conf.setCompactionIORatePerSec(
Integer.parseInt(
properties.getProperty(
- "compaction_write_throughput_mb_per_sec",
- Integer.toString(conf.getCompactionWriteThroughputMbPerSec()))));
+ "compaction_io_rate_per_sec", Integer.toString(conf.getCompactionIORatePerSec()))));
conf.setEnableCompactionValidation(
Boolean.parseBoolean(
@@ -1436,11 +1435,11 @@ public class IoTDBDescriptor {
properties.getProperty(
"slow_query_threshold", Long.toString(conf.getSlowQueryThreshold()))));
// update merge_write_throughput_mb_per_sec
- conf.setCompactionWriteThroughputMbPerSec(
+ conf.setCompactionIORatePerSec(
Integer.parseInt(
properties.getProperty(
- "merge_write_throughput_mb_per_sec",
- Integer.toString(conf.getCompactionWriteThroughputMbPerSec()))));
+ "compaction_io_rate_per_sec",
+ Integer.toString(conf.getCompactionIORatePerSec()))));
// update insert-tablet-plan's row limit for select-into
conf.setSelectIntoInsertTabletPlanRowLimit(
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
index ea7e70805f..1e5424bc51 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManager.java
@@ -240,9 +240,8 @@ public class CompactionTaskManager implements IService {
.containsKey(task);
}
- public RateLimiter getMergeWriteRateLimiter() {
- setWriteMergeRate(
- IoTDBDescriptor.getInstance().getConfig().getCompactionWriteThroughputMbPerSec());
+ public RateLimiter getCompactionIORateLimiter() {
+ setWriteMergeRate(IoTDBDescriptor.getInstance().getConfig().getCompactionIORatePerSec());
return mergeWriteRateLimiter;
}
@@ -256,16 +255,6 @@ public class CompactionTaskManager implements IService {
mergeWriteRateLimiter.setRate(throughout);
}
}
- /** wait by throughoutMbPerSec limit to avoid continuous Write Or Read */
- public static void mergeRateLimiterAcquire(RateLimiter limiter, long bytesLength) {
- while (bytesLength >= Integer.MAX_VALUE) {
- limiter.acquire(Integer.MAX_VALUE);
- bytesLength -= Integer.MAX_VALUE;
- }
- if (bytesLength > 0) {
- limiter.acquire((int) bytesLength);
- }
- }
public synchronized void removeRunningTaskFuture(AbstractCompactionTask task) {
String regionWithSG = getSGWithRegionId(task.getStorageGroupName(), task.getDataRegionId());
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/utils/AlignedSeriesCompactionExecutor.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/utils/AlignedSeriesCompactionExecutor.java
index 72b364adb8..ac9e3b17c0 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/utils/AlignedSeriesCompactionExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/utils/AlignedSeriesCompactionExecutor.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.engine.compaction.cross.utils;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.engine.compaction.CompactionTaskManager;
import org.apache.iotdb.db.engine.compaction.task.SubCompactionTaskSummary;
import org.apache.iotdb.db.engine.compaction.writer.AbstractCompactionWriter;
import org.apache.iotdb.db.engine.modification.Modification;
@@ -40,6 +41,8 @@ import org.apache.iotdb.tsfile.read.reader.chunk.ChunkReader;
import org.apache.iotdb.tsfile.utils.Pair;
import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
+import com.google.common.util.concurrent.RateLimiter;
+
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
@@ -54,6 +57,9 @@ public class AlignedSeriesCompactionExecutor extends SeriesCompactionExecutor {
private final List<IMeasurementSchema> measurementSchemas;
+ private final RateLimiter rateLimiter =
+ CompactionTaskManager.getInstance().getCompactionIORateLimiter();
+
public AlignedSeriesCompactionExecutor(
AbstractCompactionWriter compactionWriter,
Map<String, Map<TsFileResource, Pair<Long, Long>>> timeseriesMetadataOffsetMap,
@@ -281,6 +287,7 @@ public class AlignedSeriesCompactionExecutor extends SeriesCompactionExecutor {
void readChunk(ChunkMetadataElement chunkMetadataElement) throws IOException {
AlignedChunkMetadata alignedChunkMetadata =
(AlignedChunkMetadata) chunkMetadataElement.chunkMetadata;
+ rateLimiter.acquire(1);
chunkMetadataElement.chunk =
readerCacheMap
.get(chunkMetadataElement.fileElement.resource)
@@ -292,6 +299,7 @@ public class AlignedSeriesCompactionExecutor extends SeriesCompactionExecutor {
valueChunks.add(null);
continue;
}
+ rateLimiter.acquire(1);
valueChunks.add(
readerCacheMap
.get(chunkMetadataElement.fileElement.resource)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/utils/NonAlignedSeriesCompactionExecutor.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/utils/NonAlignedSeriesCompactionExecutor.java
index da26d515c7..1c0d3a1e75 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/utils/NonAlignedSeriesCompactionExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/utils/NonAlignedSeriesCompactionExecutor.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.engine.compaction.cross.utils;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
+import org.apache.iotdb.db.engine.compaction.CompactionTaskManager;
import org.apache.iotdb.db.engine.compaction.task.SubCompactionTaskSummary;
import org.apache.iotdb.db.engine.compaction.writer.AbstractCompactionWriter;
import org.apache.iotdb.db.engine.modification.Modification;
@@ -171,6 +172,7 @@ public class NonAlignedSeriesCompactionExecutor extends SeriesCompactionExecutor
@Override
void readChunk(ChunkMetadataElement chunkMetadataElement) throws IOException {
+ CompactionTaskManager.getInstance().getCompactionIORateLimiter().acquire(1);
chunkMetadataElement.chunk =
readerCacheMap
.get(chunkMetadataElement.fileElement.resource)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java
index 3f4d475679..3ecc19d11e 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/AlignedSeriesCompactionExecutor.java
@@ -63,7 +63,7 @@ public class AlignedSeriesCompactionExecutor {
private final List<IMeasurementSchema> schemaList;
private long remainingPointInChunkWriter = 0L;
private final RateLimiter rateLimiter =
- CompactionTaskManager.getInstance().getMergeWriteRateLimiter();
+ CompactionTaskManager.getInstance().getCompactionIORateLimiter();
private final long chunkSizeThreshold =
IoTDBDescriptor.getInstance().getConfig().getTargetChunkSize();
@@ -139,13 +139,13 @@ public class AlignedSeriesCompactionExecutor {
while (readerIterator.hasNext()) {
Pair<AlignedChunkReader, Long> chunkReaderAndChunkSize = readerIterator.nextReader();
CompactionMetricsRecorder.recordReadInfo(chunkReaderAndChunkSize.right);
+ rateLimiter.acquire(schemaList.size() + 1);
compactOneAlignedChunk(chunkReaderAndChunkSize.left);
}
}
if (remainingPointInChunkWriter != 0L) {
- CompactionTaskManager.mergeRateLimiterAcquire(
- rateLimiter, chunkWriter.estimateMaxSeriesMemSize());
+ rateLimiter.acquire(chunkWriter.getValueChunkWriterList().size() + 1);
CompactionMetricsRecorder.recordWriteInfo(
CompactionType.INNER_SEQ_COMPACTION,
ProcessChunkType.DESERIALIZE_CHUNK,
@@ -187,8 +187,7 @@ public class AlignedSeriesCompactionExecutor {
private void flushChunkWriterIfLargeEnough() throws IOException {
if (remainingPointInChunkWriter >= chunkPointNumThreshold
|| chunkWriter.estimateMaxSeriesMemSize() >= chunkSizeThreshold * schemaList.size()) {
- CompactionTaskManager.mergeRateLimiterAcquire(
- rateLimiter, chunkWriter.estimateMaxSeriesMemSize());
+ rateLimiter.acquire(chunkWriter.getValueChunkWriterList().size() + 1);
CompactionMetricsRecorder.recordWriteInfo(
CompactionType.INNER_SEQ_COMPACTION,
ProcessChunkType.DESERIALIZE_CHUNK,
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java
index 9575757906..e8f7a1186a 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/SingleSeriesCompactionExecutor.java
@@ -58,7 +58,7 @@ public class SingleSeriesCompactionExecutor {
private Chunk cachedChunk;
private ChunkMetadata cachedChunkMetadata;
private RateLimiter compactionRateLimiter =
- CompactionTaskManager.getInstance().getMergeWriteRateLimiter();
+ CompactionTaskManager.getInstance().getCompactionIORateLimiter();
// record the min time and max time to update the target resource
private long minStartTimestamp = Long.MAX_VALUE;
private long maxEndTimestamp = Long.MIN_VALUE;
@@ -118,6 +118,7 @@ public class SingleSeriesCompactionExecutor {
TsFileSequenceReader reader = readerListPair.left;
List<ChunkMetadata> chunkMetadataList = readerListPair.right;
for (ChunkMetadata chunkMetadata : chunkMetadataList) {
+ compactionRateLimiter.acquire(1);
Chunk currentChunk = reader.readMemChunk(chunkMetadata);
if (this.chunkWriter == null) {
constructChunkWriterFromReadChunk(currentChunk);
@@ -299,7 +300,7 @@ public class SingleSeriesCompactionExecutor {
private void flushChunkToFileWriter(
Chunk chunk, ChunkMetadata chunkMetadata, boolean isCachedChunk) throws IOException {
- CompactionTaskManager.mergeRateLimiterAcquire(compactionRateLimiter, getChunkSize(chunk));
+ compactionRateLimiter.acquire(1);
if (chunkMetadata.getStartTime() < minStartTimestamp) {
minStartTimestamp = chunkMetadata.getStartTime();
}
@@ -317,8 +318,7 @@ public class SingleSeriesCompactionExecutor {
private void flushChunkWriterIfLargeEnough() throws IOException {
if (pointCountInChunkWriter >= targetChunkPointNum
|| chunkWriter.estimateMaxSeriesMemSize() >= targetChunkSize) {
- CompactionTaskManager.mergeRateLimiterAcquire(
- compactionRateLimiter, chunkWriter.estimateMaxSeriesMemSize());
+ compactionRateLimiter.acquire(1);
CompactionMetricsRecorder.recordWriteInfo(
CompactionType.INNER_SEQ_COMPACTION,
ProcessChunkType.DESERIALIZE_CHUNK,
@@ -339,8 +339,7 @@ public class SingleSeriesCompactionExecutor {
}
private void flushChunkWriter() throws IOException {
- CompactionTaskManager.mergeRateLimiterAcquire(
- compactionRateLimiter, chunkWriter.estimateMaxSeriesMemSize());
+ compactionRateLimiter.acquire(1);
CompactionMetricsRecorder.recordWriteInfo(
CompactionType.INNER_SEQ_COMPACTION,
ProcessChunkType.DESERIALIZE_CHUNK,
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java
index 1a0973602d..e95a386b72 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/writer/AbstractCompactionWriter.java
@@ -49,7 +49,7 @@ public abstract class AbstractCompactionWriter implements AutoCloseable {
protected int subTaskNum = IoTDBDescriptor.getInstance().getConfig().getSubCompactionTaskNum();
private RateLimiter compactionRateLimiter =
- CompactionTaskManager.getInstance().getMergeWriteRateLimiter();
+ CompactionTaskManager.getInstance().getCompactionIORateLimiter();
// check if there is unseq error point during writing
protected long[] lastTime = new long[subTaskNum];
@@ -164,8 +164,7 @@ public abstract class AbstractCompactionWriter implements AutoCloseable {
protected void sealChunk(TsFileIOWriter targetWriter, IChunkWriter iChunkWriter, int subTaskId)
throws IOException {
- CompactionTaskManager.mergeRateLimiterAcquire(
- compactionRateLimiter, iChunkWriter.estimateMaxSeriesMemSize());
+ compactionRateLimiter.acquire(1);
synchronized (targetWriter) {
iChunkWriter.writeToFileWriter(targetWriter);
}
@@ -186,11 +185,11 @@ public abstract class AbstractCompactionWriter implements AutoCloseable {
protected void flushNonAlignedChunkToFileWriter(
TsFileIOWriter targetWriter, Chunk chunk, ChunkMetadata chunkMetadata, int subTaskId)
throws IOException {
- CompactionTaskManager.mergeRateLimiterAcquire(compactionRateLimiter, getChunkSize(chunk));
synchronized (targetWriter) {
// seal last chunk to file writer
chunkWriters[subTaskId].writeToFileWriter(targetWriter);
chunkPointNumArray[subTaskId] = 0;
+ compactionRateLimiter.acquire(1);
targetWriter.writeChunk(chunk, chunkMetadata);
}
}
@@ -210,7 +209,7 @@ public abstract class AbstractCompactionWriter implements AutoCloseable {
chunkPointNumArray[subTaskId] = 0;
// flush time chunk
- CompactionTaskManager.mergeRateLimiterAcquire(compactionRateLimiter, getChunkSize(timeChunk));
+ compactionRateLimiter.acquire(1);
targetWriter.writeChunk(timeChunk, (ChunkMetadata) timeChunkMetadata);
// flush value chunks
@@ -227,8 +226,7 @@ public abstract class AbstractCompactionWriter implements AutoCloseable {
valueChunkWriter.getStatistics());
continue;
}
- CompactionTaskManager.mergeRateLimiterAcquire(
- compactionRateLimiter, getChunkSize(valueChunk));
+ compactionRateLimiter.acquire(1);
targetWriter.writeChunk(valueChunk, (ChunkMetadata) valueChunkMetadatas.get(i));
}
}
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/CompactionConfigRestorer.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/CompactionConfigRestorer.java
index 613308c5d7..ada6af6de5 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/CompactionConfigRestorer.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/utils/CompactionConfigRestorer.java
@@ -74,7 +74,7 @@ public class CompactionConfigRestorer {
config.setCompactionThreadCount(concurrentCompactionThread);
config.setCompactionScheduleIntervalInMs(compactionScheduleIntervalInMs);
config.setCompactionSubmissionIntervalInMs(compactionSubmissionIntervalInMs);
- config.setCompactionWriteThroughputMbPerSec(compactionWriteThroughputMbPerSec);
+ config.setCompactionIORatePerSec(compactionWriteThroughputMbPerSec);
config.setCrossCompactionPerformer(oldCrossPerformer);
config.setInnerSeqCompactionPerformer(oldInnerSeqPerformer);
config.setInnerUnseqCompactionPerformer(oldInnerUnseqPerformer);