This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 36f98a99910 encrypt audit log (#16551)
36f98a99910 is described below
commit 36f98a99910dd6f9513075d525136ec4f6baa395
Author: jintao zhu <[email protected]>
AuthorDate: Sat Oct 11 18:26:24 2025 +0800
encrypt audit log (#16551)
* encrypt audit log
* update tsfile version
* add Deprecated symbol
* add testOnly symbol
---------
Co-authored-by: Yongzao <[email protected]>
---
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 11 +++
.../db/storageengine/dataregion/DataRegion.java | 9 ++-
.../constant/CrossCompactionPerformer.java | 16 ++++
.../constant/InnerSeqCompactionPerformer.java | 16 ++++
.../constant/InnerUnseqCompactionPerformer.java | 16 ++++
.../performer/impl/FastCompactionPerformer.java | 42 ++++++++++-
.../impl/ReadChunkCompactionPerformer.java | 48 +++++++++++-
.../impl/ReadPointCompactionPerformer.java | 53 ++++++++++++-
.../RepairUnsortedFileCompactionPerformer.java | 14 +++-
.../task/RepairUnsortedFileCompactionTask.java | 7 +-
.../task/subtask/ReadPointPerformerSubTask.java | 8 +-
...BatchedFastAlignedSeriesCompactionExecutor.java | 8 +-
...edReadChunkAlignedSeriesCompactionExecutor.java | 9 ++-
.../FirstBatchCompactionAlignedChunkWriter.java | 51 +++++++++++--
...FollowingBatchCompactionAlignedChunkWriter.java | 16 +++-
.../fast/FastAlignedSeriesCompactionExecutor.java | 6 +-
.../FastNonAlignedSeriesCompactionExecutor.java | 8 +-
.../readchunk/AlignedSeriesCompactionExecutor.java | 5 +-
.../ReadChunkAlignedSeriesCompactionExecutor.java | 4 +-
.../readchunk/SingleSeriesCompactionExecutor.java | 9 ++-
.../utils/writer/AbstractCompactionWriter.java | 5 ++
.../writer/AbstractCrossCompactionWriter.java | 23 +++++-
.../writer/AbstractInnerCompactionWriter.java | 30 +++++++-
.../utils/writer/FastCrossCompactionWriter.java | 16 +++-
.../utils/writer/FastInnerCompactionWriter.java | 20 ++++-
.../writer/ReadPointCrossCompactionWriter.java | 14 +++-
.../writer/ReadPointInnerCompactionWriter.java | 20 ++++-
.../writer/RepairUnsortedFileCompactionWriter.java | 12 ++-
.../compaction/io/CompactionTsFileWriter.java | 19 ++++-
.../schedule/CompactionScheduleContext.java | 23 +++++-
.../compaction/schedule/CompactionScheduler.java | 7 +-
.../utils/CrossSpaceCompactionCandidate.java | 1 +
.../compaction/settle/SettleRequestHandler.java | 13 +++-
.../compaction/tool/TsFileStatisticReader.java | 6 +-
.../dataregion/memtable/AbstractMemTable.java | 10 ++-
.../memtable/AbstractWritableMemChunk.java | 4 +
.../memtable/AlignedWritableMemChunk.java | 36 ++++++++-
.../memtable/AlignedWritableMemChunkGroup.java | 9 +++
.../dataregion/memtable/IWritableMemChunk.java | 3 +
.../memtable/IWritableMemChunkGroup.java | 3 +
.../dataregion/memtable/TsFileProcessor.java | 7 +-
.../dataregion/memtable/WritableMemChunk.java | 25 ++++++-
.../dataregion/memtable/WritableMemChunkGroup.java | 19 ++++-
.../dataregion/read/control/FileReaderManager.java | 13 +++-
.../dataregion/utils/TsFileResourceUtils.java | 6 +-
.../file/AbstractTsFileRecoverPerformer.java | 19 ++++-
.../iotdb/db/tools/utils/TsFileSequenceScan.java | 7 +-
.../org/apache/iotdb/db/utils/EncryptDBUtils.java | 86 ++++++++++++++++++++++
48 files changed, 744 insertions(+), 68 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 74a966eacea..4786460bac2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -49,6 +49,7 @@ import org.apache.iotdb.rpc.ZeroCopyRpcTransportFactory;
import org.apache.tsfile.common.conf.TSFileDescriptor;
import org.apache.tsfile.common.constant.TsFileConstant;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.enums.CompressionType;
import org.apache.tsfile.file.metadata.enums.TSEncoding;
@@ -62,9 +63,11 @@ import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
@@ -1176,6 +1179,10 @@ public class IoTDBConfig {
private boolean includeNullValueInWriteThroughputMetric = false;
+ private ConcurrentHashMap<String, EncryptParameter> tsFileDBToEncryptMap =
+ new ConcurrentHashMap<>(
+ Collections.singletonMap("root.__audit", new
EncryptParameter("UNENCRYPTED", null)));
+
IoTDBConfig() {}
public int getMaxLogEntriesNumPerBatch() {
@@ -4225,4 +4232,8 @@ public class IoTDBConfig {
public void setPasswordLockTimeMinutes(int passwordLockTimeMinutes) {
this.passwordLockTimeMinutes = passwordLockTimeMinutes;
}
+
+ public ConcurrentHashMap<String, EncryptParameter> getTSFileDBToEncryptMap()
{
+ return tsFileDBToEncryptMap;
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index 133f878ef3a..dfe5e4e9e10 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -153,6 +153,7 @@ import
org.apache.iotdb.db.storageengine.rescon.quotas.DataNodeSpaceQuotaManager
import org.apache.iotdb.db.tools.settle.TsFileAndModSettleTool;
import org.apache.iotdb.db.utils.CommonUtils;
import org.apache.iotdb.db.utils.DateTimeUtils;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.iotdb.db.utils.ModificationUtils;
import org.apache.iotdb.metrics.utils.MetricLevel;
import org.apache.iotdb.rpc.RpcUtils;
@@ -3087,7 +3088,9 @@ public class DataRegion implements IDataRegionForQuery {
if (!isCompactionSelecting.compareAndSet(false, true)) {
return 0;
}
- CompactionScheduleContext context = new CompactionScheduleContext();
+ CompactionScheduleContext context =
+ new CompactionScheduleContext(
+ EncryptDBUtils.getFirstEncryptParamFromDatabase(databaseName));
try {
List<Long> timePartitions = new
ArrayList<>(tsFileManager.getTimePartitions());
// Sort the time partition from largest to smallest
@@ -3140,7 +3143,9 @@ public class DataRegion implements IDataRegionForQuery {
return 0;
}
logger.info("[TTL] {}-{} Start ttl and modification checking.",
databaseName, dataRegionId);
- CompactionScheduleContext context = new CompactionScheduleContext();
+ CompactionScheduleContext context =
+ new CompactionScheduleContext(
+ EncryptDBUtils.getFirstEncryptParamFromDatabase(databaseName));
List<Long> timePartitions = new
ArrayList<>(tsFileManager.getTimePartitions());
// Sort the time partition from smallest to largest
Collections.sort(timePartitions);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/CrossCompactionPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/CrossCompactionPerformer.java
index 55289515cf1..2e5ff20f964 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/CrossCompactionPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/CrossCompactionPerformer.java
@@ -19,11 +19,14 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.constant;
+import org.apache.iotdb.commons.utils.TestOnly;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.IllegalCompactionPerformerException;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.ICrossCompactionPerformer;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.FastCompactionPerformer;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.ReadPointCompactionPerformer;
+import org.apache.tsfile.encrypt.EncryptParameter;
+
public enum CrossCompactionPerformer {
READ_POINT,
FAST;
@@ -38,6 +41,7 @@ public enum CrossCompactionPerformer {
"Illegal compaction performer for cross compaction " + name);
}
+ @TestOnly
public ICrossCompactionPerformer createInstance() {
switch (this) {
case READ_POINT:
@@ -49,4 +53,16 @@ public enum CrossCompactionPerformer {
"Illegal compaction performer for cross compaction " + this);
}
}
+
+ public ICrossCompactionPerformer createInstance(EncryptParameter
encryptParameter) {
+ switch (this) {
+ case READ_POINT:
+ return new ReadPointCompactionPerformer(encryptParameter);
+ case FAST:
+ return new FastCompactionPerformer(true, encryptParameter);
+ default:
+ throw new IllegalCompactionPerformerException(
+ "Illegal compaction performer for cross compaction " + this);
+ }
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerSeqCompactionPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerSeqCompactionPerformer.java
index 21215d92e7d..f64597e25d4 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerSeqCompactionPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerSeqCompactionPerformer.java
@@ -19,11 +19,14 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.constant;
+import org.apache.iotdb.commons.utils.TestOnly;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.IllegalCompactionPerformerException;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.ISeqCompactionPerformer;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.FastCompactionPerformer;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.ReadChunkCompactionPerformer;
+import org.apache.tsfile.encrypt.EncryptParameter;
+
public enum InnerSeqCompactionPerformer {
READ_CHUNK,
FAST;
@@ -38,6 +41,7 @@ public enum InnerSeqCompactionPerformer {
"Illegal compaction performer for seq inner compaction " + name);
}
+ @TestOnly
public ISeqCompactionPerformer createInstance() {
switch (this) {
case READ_CHUNK:
@@ -49,4 +53,16 @@ public enum InnerSeqCompactionPerformer {
"Illegal compaction performer for seq inner compaction " + this);
}
}
+
+ public ISeqCompactionPerformer createInstance(EncryptParameter
encryptParameter) {
+ switch (this) {
+ case READ_CHUNK:
+ return new ReadChunkCompactionPerformer(encryptParameter);
+ case FAST:
+ return new FastCompactionPerformer(false, encryptParameter);
+ default:
+ throw new IllegalCompactionPerformerException(
+ "Illegal compaction performer for seq inner compaction " + this);
+ }
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerUnseqCompactionPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerUnseqCompactionPerformer.java
index bf6956d8be7..857a5f63924 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerUnseqCompactionPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerUnseqCompactionPerformer.java
@@ -19,11 +19,14 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.constant;
+import org.apache.iotdb.commons.utils.TestOnly;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.IllegalCompactionPerformerException;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.IUnseqCompactionPerformer;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.FastCompactionPerformer;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.ReadPointCompactionPerformer;
+import org.apache.tsfile.encrypt.EncryptParameter;
+
public enum InnerUnseqCompactionPerformer {
READ_POINT,
FAST;
@@ -38,6 +41,7 @@ public enum InnerUnseqCompactionPerformer {
"Illegal compaction performer for unseq inner compaction " + name);
}
+ @TestOnly
public IUnseqCompactionPerformer createInstance() {
switch (this) {
case READ_POINT:
@@ -49,4 +53,16 @@ public enum InnerUnseqCompactionPerformer {
"Illegal compaction performer for unseq inner compaction " + this);
}
}
+
+ public IUnseqCompactionPerformer createInstance(EncryptParameter
encryptParameter) {
+ switch (this) {
+ case READ_POINT:
+ return new ReadPointCompactionPerformer(encryptParameter);
+ case FAST:
+ return new FastCompactionPerformer(false, encryptParameter);
+ default:
+ throw new IllegalCompactionPerformerException(
+ "Illegal compaction performer for unseq inner compaction " + this);
+ }
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/FastCompactionPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/FastCompactionPerformer.java
index fafba7ac1bd..91184aaec82 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/FastCompactionPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/FastCompactionPerformer.java
@@ -22,6 +22,7 @@ package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performe
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PatternTreeMap;
+import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.WriteProcessException;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.CompactionLastTimeCheckFailedException;
@@ -47,6 +48,8 @@ import
org.apache.iotdb.db.storageengine.dataregion.modification.ModEntry;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.utils.datastructure.PatternTreeMapFactory;
+import org.apache.tsfile.common.conf.TSFileDescriptor;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.exception.StopReadTsFileByInterruptException;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -96,6 +99,9 @@ public class FastCompactionPerformer
private final boolean isCrossCompaction;
+ private EncryptParameter encryptParameter;
+
+ @TestOnly
public FastCompactionPerformer(
List<TsFileResource> seqFiles,
List<TsFileResource> unseqFiles,
@@ -109,10 +115,41 @@ public class FastCompactionPerformer
} else {
isCrossCompaction = true;
}
+ this.encryptParameter =
+ new EncryptParameter(
+ TSFileDescriptor.getInstance().getConfig().getEncryptType(),
+ TSFileDescriptor.getInstance().getConfig().getEncryptKey());
+ }
+
+ public FastCompactionPerformer(
+ List<TsFileResource> seqFiles,
+ List<TsFileResource> unseqFiles,
+ List<TsFileResource> targetFiles,
+ EncryptParameter encryptParameter) {
+ this.seqFiles = seqFiles;
+ this.unseqFiles = unseqFiles;
+ this.targetFiles = targetFiles;
+ if (seqFiles.isEmpty() || unseqFiles.isEmpty()) {
+ // inner space compaction
+ isCrossCompaction = false;
+ } else {
+ isCrossCompaction = true;
+ }
+ this.encryptParameter = encryptParameter;
}
+ @TestOnly
public FastCompactionPerformer(boolean isCrossCompaction) {
this.isCrossCompaction = isCrossCompaction;
+ this.encryptParameter =
+ new EncryptParameter(
+ TSFileDescriptor.getInstance().getConfig().getEncryptType(),
+ TSFileDescriptor.getInstance().getConfig().getEncryptKey());
+ }
+
+ public FastCompactionPerformer(boolean isCrossCompaction, EncryptParameter
encryptParameter) {
+ this.isCrossCompaction = isCrossCompaction;
+ this.encryptParameter = encryptParameter;
}
@Override
@@ -122,8 +159,9 @@ public class FastCompactionPerformer
new MultiTsFileDeviceIterator(seqFiles, unseqFiles,
readerCacheMap);
AbstractCompactionWriter compactionWriter =
isCrossCompaction
- ? new FastCrossCompactionWriter(targetFiles, seqFiles,
readerCacheMap)
- : new FastInnerCompactionWriter(targetFiles)) {
+ ? new FastCrossCompactionWriter(
+ targetFiles, seqFiles, readerCacheMap, encryptParameter)
+ : new FastInnerCompactionWriter(targetFiles,
encryptParameter)) {
List<Schema> schemas =
CompactionTableSchemaCollector.collectSchema(
seqFiles, unseqFiles, readerCacheMap,
deviceIterator.getDeprecatedTableSchemaMap());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
index 837978b4ce1..eaed8a7f6eb 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
@@ -21,6 +21,7 @@ package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performe
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.MetadataException;
+import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.StorageEngineException;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.ISeqCompactionPerformer;
@@ -35,7 +36,10 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.selector.estimato
import
org.apache.iotdb.db.storageengine.dataregion.compaction.selector.estimator.ReadChunkInnerCompactionEstimator;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+import org.apache.tsfile.common.conf.TSFileDescriptor;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
@@ -66,21 +70,60 @@ public class ReadChunkCompactionPerformer implements
ISeqCompactionPerformer {
*
IoTDBDescriptor.getInstance().getConfig().getChunkMetadataSizeProportion());
private Schema schema = null;
+ private EncryptParameter firstEncryptParameter;
+
+ @TestOnly
public ReadChunkCompactionPerformer(List<TsFileResource> sourceFiles,
TsFileResource targetFile) {
this(sourceFiles, Collections.singletonList(targetFile));
}
+ public ReadChunkCompactionPerformer(
+ List<TsFileResource> sourceFiles,
+ TsFileResource targetFile,
+ EncryptParameter encryptParameter) {
+ this(sourceFiles, Collections.singletonList(targetFile), encryptParameter);
+ }
+
+ @TestOnly
public ReadChunkCompactionPerformer(
List<TsFileResource> sourceFiles, List<TsFileResource> targetFiles) {
setSourceFiles(sourceFiles);
setTargetFiles(targetFiles);
+ this.firstEncryptParameter = EncryptDBUtils.getDefaultFirstEncryptParam();
+ }
+
+ public ReadChunkCompactionPerformer(
+ List<TsFileResource> sourceFiles,
+ List<TsFileResource> targetFiles,
+ EncryptParameter encryptParameter) {
+ setSourceFiles(sourceFiles);
+ setTargetFiles(targetFiles);
+ this.firstEncryptParameter = encryptParameter;
}
+ @TestOnly
public ReadChunkCompactionPerformer(List<TsFileResource> sourceFiles) {
setSourceFiles(sourceFiles);
+ this.firstEncryptParameter = EncryptDBUtils.getDefaultFirstEncryptParam();
+ }
+
+ public ReadChunkCompactionPerformer(
+ List<TsFileResource> sourceFiles, EncryptParameter encryptParameter) {
+ setSourceFiles(sourceFiles);
+ this.firstEncryptParameter = encryptParameter;
+ }
+
+ @TestOnly
+ public ReadChunkCompactionPerformer() {
+ this.firstEncryptParameter =
+ new EncryptParameter(
+ TSFileDescriptor.getInstance().getConfig().getEncryptType(),
+ TSFileDescriptor.getInstance().getConfig().getEncryptKey());
}
- public ReadChunkCompactionPerformer() {}
+ public ReadChunkCompactionPerformer(EncryptParameter encryptParameter) {
+ this.firstEncryptParameter = encryptParameter;
+ }
@Override
public void perform()
@@ -164,7 +207,8 @@ public class ReadChunkCompactionPerformer implements
ISeqCompactionPerformer {
new CompactionTsFileWriter(
targetResources.get(currentTargetFileIndex).getTsFile(),
memoryBudgetForFileWriter,
- CompactionType.INNER_SEQ_COMPACTION);
+ CompactionType.INNER_SEQ_COMPACTION,
+ firstEncryptParameter);
currentWriter.setSchema(CompactionTableSchemaCollector.copySchema(schema));
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadPointCompactionPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadPointCompactionPerformer.java
index ca650f28a75..c58870357d9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadPointCompactionPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadPointCompactionPerformer.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.AlignedFullPath;
import org.apache.iotdb.commons.path.IFullPath;
import org.apache.iotdb.commons.path.NonAlignedFullPath;
+import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.ICrossCompactionPerformer;
@@ -43,8 +44,11 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.selector.estimato
import org.apache.iotdb.db.storageengine.dataregion.read.QueryDataSource;
import
org.apache.iotdb.db.storageengine.dataregion.read.control.QueryResourceManager;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.tsfile.common.constant.TsFileConstant;
+import org.apache.tsfile.encrypt.EncryptParameter;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.read.common.block.TsBlock;
import org.apache.tsfile.read.reader.IPointReader;
@@ -83,6 +87,9 @@ public class ReadPointCompactionPerformer
protected List<TsFileResource> targetFiles = Collections.emptyList();
+ private EncryptParameter encryptParameter;
+
+ @TestOnly
public ReadPointCompactionPerformer(
List<TsFileResource> seqFiles,
List<TsFileResource> unseqFiles,
@@ -90,15 +97,45 @@ public class ReadPointCompactionPerformer
this.seqFiles = seqFiles;
this.unseqFiles = unseqFiles;
this.targetFiles = targetFiles;
+ this.encryptParameter = EncryptDBUtils.getDefaultFirstEncryptParam();
}
+ public ReadPointCompactionPerformer(
+ List<TsFileResource> seqFiles,
+ List<TsFileResource> unseqFiles,
+ List<TsFileResource> targetFiles,
+ EncryptParameter encryptParameter) {
+ this.seqFiles = seqFiles;
+ this.unseqFiles = unseqFiles;
+ this.targetFiles = targetFiles;
+ this.encryptParameter = encryptParameter;
+ }
+
+ @TestOnly
public ReadPointCompactionPerformer(
List<TsFileResource> seqFiles, List<TsFileResource> unseqFiles) {
this.seqFiles = seqFiles;
this.unseqFiles = unseqFiles;
+ this.encryptParameter = EncryptDBUtils.getDefaultFirstEncryptParam();
}
- public ReadPointCompactionPerformer() {}
+ public ReadPointCompactionPerformer(
+ List<TsFileResource> seqFiles,
+ List<TsFileResource> unseqFiles,
+ EncryptParameter encryptParameter) {
+ this.seqFiles = seqFiles;
+ this.unseqFiles = unseqFiles;
+ this.encryptParameter = encryptParameter;
+ }
+
+ @TestOnly
+ public ReadPointCompactionPerformer() {
+ this.encryptParameter = EncryptDBUtils.getDefaultFirstEncryptParam();
+ }
+
+ public ReadPointCompactionPerformer(EncryptParameter encryptParameter) {
+ this.encryptParameter = encryptParameter;
+ }
@SuppressWarnings("squid:S2095") // Do not close device iterator
@Override
@@ -162,6 +199,10 @@ public class ReadPointCompactionPerformer
this.summary = summary;
}
+ public EncryptParameter getEncryptParameter() {
+ return encryptParameter;
+ }
+
private void compactAlignedSeries(
IDeviceID device,
MultiTsFileDeviceIterator deviceIterator,
@@ -197,7 +238,10 @@ public class ReadPointCompactionPerformer
measurementSchemas.add(0, timeSchema);
compactionWriter.startMeasurement(
TsFileConstant.TIME_COLUMN_ID,
- new AlignedChunkWriterImpl(measurementSchemas.remove(0),
measurementSchemas),
+ new AlignedChunkWriterImpl(
+ measurementSchemas.remove(0),
+ measurementSchemas,
+ EncryptUtils.getEncryptParameter(getEncryptParameter())),
0);
writeWithReader(compactionWriter, dataBlockReader, device, 0, true);
compactionWriter.endMeasurement(0);
@@ -307,10 +351,11 @@ public class ReadPointCompactionPerformer
throws IOException {
if (!seqFileResources.isEmpty() && !unseqFileResources.isEmpty()) {
// cross space
- return new ReadPointCrossCompactionWriter(targetFileResources,
seqFileResources);
+ return new ReadPointCrossCompactionWriter(
+ targetFileResources, seqFileResources, encryptParameter);
} else {
// inner space
- return new ReadPointInnerCompactionWriter(targetFileResources);
+ return new ReadPointInnerCompactionWriter(targetFileResources,
encryptParameter);
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/RepairUnsortedFileCompactionPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/RepairUnsortedFileCompactionPerformer.java
index 3bdfefbdac2..962957f4f02 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/RepairUnsortedFileCompactionPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/RepairUnsortedFileCompactionPerformer.java
@@ -19,6 +19,7 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl;
+import org.apache.iotdb.commons.utils.TestOnly;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.CompactionUtils;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer.AbstractCompactionWriter;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer.RepairUnsortedFileCompactionWriter;
@@ -28,6 +29,9 @@ import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ArrayDeviceTimeIndex;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ITimeIndex;
import org.apache.iotdb.db.storageengine.rescon.memory.TsFileResourceManager;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+
+import org.apache.tsfile.encrypt.EncryptParameter;
import java.io.IOException;
import java.nio.file.Files;
@@ -37,8 +41,13 @@ import java.util.List;
/** Used for fixing files which contains internal unsorted data */
public class RepairUnsortedFileCompactionPerformer extends
ReadPointCompactionPerformer {
+ @TestOnly
public RepairUnsortedFileCompactionPerformer() {
- super();
+ super(EncryptDBUtils.getDefaultFirstEncryptParam());
+ }
+
+ public RepairUnsortedFileCompactionPerformer(EncryptParameter
encryptParameter) {
+ super(encryptParameter);
}
@Override
@@ -47,7 +56,8 @@ public class RepairUnsortedFileCompactionPerformer extends
ReadPointCompactionPe
List<TsFileResource> unseqFileResources,
List<TsFileResource> targetFileResources)
throws IOException {
- return new RepairUnsortedFileCompactionWriter(targetFileResources.get(0));
+ return new RepairUnsortedFileCompactionWriter(
+ targetFileResources.get(0), getEncryptParameter());
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/RepairUnsortedFileCompactionTask.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/RepairUnsortedFileCompactionTask.java
index 8619c4c04f7..fe1957975cf 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/RepairUnsortedFileCompactionTask.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/RepairUnsortedFileCompactionTask.java
@@ -32,6 +32,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.generator.TsFileNameGenerator;
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import java.io.File;
import java.io.IOException;
@@ -72,7 +73,8 @@ public class RepairUnsortedFileCompactionTask extends
InnerSpaceCompactionTask {
tsFileManager,
Collections.singletonList(sourceFile),
sequence,
- new RepairUnsortedFileCompactionPerformer(),
+ new RepairUnsortedFileCompactionPerformer(
+
EncryptDBUtils.getFirstEncryptParamFromDatabase(tsFileManager.getStorageGroupName())),
serialId);
this.sourceFile = sourceFile;
if (this.sourceFile.getTsFileRepairStatus() !=
TsFileRepairStatus.NEED_TO_REPAIR_BY_MOVE) {
@@ -93,7 +95,8 @@ public class RepairUnsortedFileCompactionTask extends
InnerSpaceCompactionTask {
tsFileManager,
Collections.singletonList(sourceFile),
sequence,
- new RepairUnsortedFileCompactionPerformer(),
+ new RepairUnsortedFileCompactionPerformer(
+
EncryptDBUtils.getFirstEncryptParamFromDatabase(tsFileManager.getStorageGroupName())),
serialId);
this.sourceFile = sourceFile;
if (this.sourceFile.getTsFileRepairStatus() !=
TsFileRepairStatus.NEED_TO_REPAIR_BY_MOVE) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/subtask/ReadPointPerformerSubTask.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/subtask/ReadPointPerformerSubTask.java
index 6ab56e68b55..74f72590745 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/subtask/ReadPointPerformerSubTask.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/subtask/ReadPointPerformerSubTask.java
@@ -26,6 +26,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.rea
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer.AbstractCompactionWriter;
import org.apache.iotdb.db.storageengine.dataregion.read.QueryDataSource;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.write.chunk.ChunkWriterImpl;
import org.apache.tsfile.write.schema.IMeasurementSchema;
@@ -91,7 +92,12 @@ public class ReadPointPerformerSubTask implements
Callable<Void> {
if (dataBlockReader.hasNextBatch()) {
compactionWriter.startMeasurement(
- measurement, new ChunkWriterImpl(measurementSchemas.get(0), true),
taskId);
+ measurement,
+ new ChunkWriterImpl(
+ measurementSchemas.get(0),
+ true,
+
EncryptUtils.getEncryptParameter(compactionWriter.getEncryptParameter())),
+ taskId);
ReadPointCompactionPerformer.writeWithReader(
compactionWriter, dataBlockReader, device, taskId, false);
compactionWriter.endMeasurement(taskId);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedFastAlignedSeriesCompactionExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedFastAlignedSeriesCompactionExecutor.java
index 636fba8c2ca..0c1f12e9886 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedFastAlignedSeriesCompactionExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedFastAlignedSeriesCompactionExecutor.java
@@ -42,6 +42,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.utils.datastructure.PatternTreeMapFactory;
import org.apache.tsfile.common.constant.TsFileConstant;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
import org.apache.tsfile.file.metadata.ChunkMetadata;
@@ -249,7 +250,9 @@ public class BatchedFastAlignedSeriesCompactionExecutor
throws PageException, IllegalPathException, IOException,
WriteProcessException {
FirstBatchCompactionAlignedChunkWriter
firstBatchCompactionAlignedChunkWriter =
new FirstBatchCompactionAlignedChunkWriter(
- this.measurementSchemas.remove(0), this.measurementSchemas);
+ this.measurementSchemas.remove(0),
+ this.measurementSchemas,
+
EncryptUtils.getEncryptParameter(compactionWriter.getEncryptParameter()));
firstBatchCompactionAlignedChunkWriter.registerBeforeFlushChunkWriterCallback(
chunkWriter -> {
@@ -359,7 +362,8 @@ public class BatchedFastAlignedSeriesCompactionExecutor
new FollowingBatchCompactionAlignedChunkWriter(
measurementSchemas.remove(0),
measurementSchemas,
- batchCompactionPlan.getCompactChunkPlan(0));
+ batchCompactionPlan.getCompactChunkPlan(0),
+
EncryptUtils.getEncryptParameter(compactionWriter.getEncryptParameter()));
flushController =
new FollowedBatchedCompactionFlushController(
batchCompactionPlan, followingBatchCompactionAlignedChunkWriter);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedReadChunkAlignedSeriesCompactionExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedReadChunkAlignedSeriesCompactionExecutor.java
index e343ea59b92..dc030787566 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedReadChunkAlignedSeriesCompactionExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/BatchedReadChunkAlignedSeriesCompactionExecutor.java
@@ -37,6 +37,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.exe
import
org.apache.iotdb.db.storageengine.dataregion.compaction.io.CompactionTsFileWriter;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
import org.apache.tsfile.file.metadata.ChunkMetadata;
@@ -209,7 +210,8 @@ public class BatchedReadChunkAlignedSeriesCompactionExecutor
@Override
protected AlignedChunkWriterImpl constructAlignedChunkWriter() {
- return new FirstBatchCompactionAlignedChunkWriter(timeSchema,
schemaList);
+ return new FirstBatchCompactionAlignedChunkWriter(
+ timeSchema, schemaList,
EncryptUtils.getEncryptParameter(writer.getEncryptParameter()));
}
@Override
@@ -326,7 +328,10 @@ public class
BatchedReadChunkAlignedSeriesCompactionExecutor
this.flushController = new
FollowingBatchReadChunkAlignedSeriesCompactionFlushController();
this.chunkWriter =
new FollowingBatchCompactionAlignedChunkWriter(
- timeSchema, schemaList,
batchCompactionPlan.getCompactChunkPlan(0));
+ timeSchema,
+ schemaList,
+ batchCompactionPlan.getCompactChunkPlan(0),
+ EncryptUtils.getEncryptParameter(writer.getEncryptParameter()));
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/FirstBatchCompactionAlignedChunkWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/FirstBatchCompactionAlignedChunkWriter.java
index 4d074c3c3a6..0109fcda16c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/FirstBatchCompactionAlignedChunkWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/FirstBatchCompactionAlignedChunkWriter.java
@@ -19,9 +19,13 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.batch.utils;
+import org.apache.iotdb.commons.utils.TestOnly;
+
import org.apache.tsfile.common.conf.TSFileDescriptor;
import org.apache.tsfile.encoding.encoder.Encoder;
import org.apache.tsfile.encoding.encoder.TSEncodingBuilder;
+import org.apache.tsfile.encrypt.EncryptParameter;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.header.PageHeader;
@@ -45,13 +49,16 @@ public class FirstBatchCompactionAlignedChunkWriter extends
AlignedChunkWriterIm
private ChunkWriterFlushCallback beforeChunkWriterFlushCallback;
+ @TestOnly
public FirstBatchCompactionAlignedChunkWriter(VectorMeasurementSchema
schema) {
+ this.encryptParam = EncryptUtils.getEncryptParameter();
timeChunkWriter =
new FirstBatchCompactionTimeChunkWriter(
schema.getMeasurementName(),
schema.getCompressor(),
schema.getTimeTSEncoding(),
- schema.getTimeEncoder());
+ schema.getTimeEncoder(),
+ encryptParam);
List<String> valueMeasurementIdList = schema.getSubMeasurementsList();
List<TSDataType> valueTSDataTypeList =
schema.getSubMeasurementsTSDataTypeList();
@@ -66,21 +73,32 @@ public class FirstBatchCompactionAlignedChunkWriter extends
AlignedChunkWriterIm
schema.getCompressor(),
valueTSDataTypeList.get(i),
valueTSEncodingList.get(i),
- valueEncoderList.get(i)));
+ valueEncoderList.get(i),
+ encryptParam));
}
this.valueIndex = 0;
this.remainingPointsNumber =
timeChunkWriter.getRemainingPointNumberForCurrentPage();
}
+ @TestOnly
public FirstBatchCompactionAlignedChunkWriter(
IMeasurementSchema timeSchema, List<IMeasurementSchema> valueSchemaList)
{
+ this(timeSchema, valueSchemaList, EncryptUtils.getEncryptParameter());
+ }
+
+ public FirstBatchCompactionAlignedChunkWriter(
+ IMeasurementSchema timeSchema,
+ List<IMeasurementSchema> valueSchemaList,
+ EncryptParameter param) {
+ this.encryptParam = param;
timeChunkWriter =
new FirstBatchCompactionTimeChunkWriter(
timeSchema.getMeasurementName(),
timeSchema.getCompressor(),
timeSchema.getEncodingType(),
- timeSchema.getTimeEncoder());
+ timeSchema.getTimeEncoder(),
+ param);
valueChunkWriterList = new ArrayList<>(valueSchemaList.size());
for (int i = 0; i < valueSchemaList.size(); i++) {
@@ -90,14 +108,17 @@ public class FirstBatchCompactionAlignedChunkWriter
extends AlignedChunkWriterIm
valueSchemaList.get(i).getCompressor(),
valueSchemaList.get(i).getType(),
valueSchemaList.get(i).getEncodingType(),
- valueSchemaList.get(i).getValueEncoder()));
+ valueSchemaList.get(i).getValueEncoder(),
+ param));
}
this.valueIndex = 0;
this.remainingPointsNumber =
timeChunkWriter.getRemainingPointNumberForCurrentPage();
}
+ @TestOnly
public FirstBatchCompactionAlignedChunkWriter(List<IMeasurementSchema>
schemaList) {
+ this.encryptParam = EncryptUtils.getEncryptParameter();
TSEncoding timeEncoding =
TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getTimeEncoder());
TSDataType timeType =
TSFileDescriptor.getInstance().getConfig().getTimeSeriesDataType();
@@ -108,7 +129,8 @@ public class FirstBatchCompactionAlignedChunkWriter extends
AlignedChunkWriterIm
"",
timeCompression,
timeEncoding,
-
TSEncodingBuilder.getEncodingBuilder(timeEncoding).getEncoder(timeType));
+
TSEncodingBuilder.getEncodingBuilder(timeEncoding).getEncoder(timeType),
+ encryptParam);
valueChunkWriterList = new ArrayList<>(schemaList.size());
for (int i = 0; i < schemaList.size(); i++) {
@@ -118,7 +140,8 @@ public class FirstBatchCompactionAlignedChunkWriter extends
AlignedChunkWriterIm
schemaList.get(i).getCompressor(),
schemaList.get(i).getType(),
schemaList.get(i).getEncodingType(),
- schemaList.get(i).getValueEncoder()));
+ schemaList.get(i).getValueEncoder(),
+ encryptParam));
}
this.valueIndex = 0;
@@ -154,7 +177,21 @@ public class FirstBatchCompactionAlignedChunkWriter
extends AlignedChunkWriterIm
CompressionType compressionType,
TSEncoding encodingType,
Encoder timeEncoder) {
- super(measurementId, compressionType, encodingType, timeEncoder);
+ super(
+ measurementId,
+ compressionType,
+ encodingType,
+ timeEncoder,
+ EncryptUtils.getEncryptParameter());
+ }
+
+ public FirstBatchCompactionTimeChunkWriter(
+ String measurementId,
+ CompressionType compressionType,
+ TSEncoding encodingType,
+ Encoder timeEncoder,
+ EncryptParameter encryptParam) {
+ super(measurementId, compressionType, encodingType, timeEncoder,
encryptParam);
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/FollowingBatchCompactionAlignedChunkWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/FollowingBatchCompactionAlignedChunkWriter.java
index a00a568d7b3..85813d2cd4d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/FollowingBatchCompactionAlignedChunkWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/FollowingBatchCompactionAlignedChunkWriter.java
@@ -19,8 +19,11 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.batch.utils;
+import org.apache.iotdb.commons.utils.TestOnly;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.BatchCompactionCannotAlignedException;
+import org.apache.tsfile.encrypt.EncryptParameter;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.header.PageHeader;
@@ -43,10 +46,20 @@ public class FollowingBatchCompactionAlignedChunkWriter
extends AlignedChunkWrit
private CompactChunkPlan compactChunkPlan;
private ChunkWriterFlushCallback afterChunkWriterFlushCallback;
+ @TestOnly
public FollowingBatchCompactionAlignedChunkWriter(
IMeasurementSchema timeSchema,
List<IMeasurementSchema> valueSchemaList,
CompactChunkPlan compactChunkPlan) {
+ this(timeSchema, valueSchemaList, compactChunkPlan,
EncryptUtils.getEncryptParameter());
+ }
+
+ public FollowingBatchCompactionAlignedChunkWriter(
+ IMeasurementSchema timeSchema,
+ List<IMeasurementSchema> valueSchemaList,
+ CompactChunkPlan compactChunkPlan,
+ EncryptParameter encryptParameter) {
+ this.encryptParam = encryptParameter;
timeChunkWriter = new FollowingBatchCompactionTimeChunkWriter();
valueChunkWriterList = new ArrayList<>(valueSchemaList.size());
@@ -57,7 +70,8 @@ public class FollowingBatchCompactionAlignedChunkWriter
extends AlignedChunkWrit
valueSchemaList.get(i).getCompressor(),
valueSchemaList.get(i).getType(),
valueSchemaList.get(i).getEncodingType(),
- valueSchemaList.get(i).getValueEncoder()));
+ valueSchemaList.get(i).getValueEncoder(),
+ encryptParameter));
}
this.valueIndex = 0;
this.compactChunkPlan = compactChunkPlan;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastAlignedSeriesCompactionExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastAlignedSeriesCompactionExecutor.java
index 7ad78814c5f..4e71c03d25f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastAlignedSeriesCompactionExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastAlignedSeriesCompactionExecutor.java
@@ -40,6 +40,7 @@ import org.apache.iotdb.db.utils.ModificationUtils;
import org.apache.iotdb.db.utils.datastructure.PatternTreeMapFactory;
import org.apache.tsfile.common.constant.TsFileConstant;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.header.ChunkHeader;
import org.apache.tsfile.file.header.PageHeader;
@@ -106,7 +107,10 @@ public class FastAlignedSeriesCompactionExecutor extends
SeriesCompactionExecuto
throws PageException, IllegalPathException, IOException,
WriteProcessException {
compactionWriter.startMeasurement(
TsFileConstant.TIME_COLUMN_ID,
- new AlignedChunkWriterImpl(measurementSchemas.remove(0),
measurementSchemas),
+ new AlignedChunkWriterImpl(
+ measurementSchemas.remove(0),
+ measurementSchemas,
+
EncryptUtils.getEncryptParameter(compactionWriter.getEncryptParameter())),
subTaskId);
compactFiles();
compactionWriter.endMeasurement(subTaskId);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastNonAlignedSeriesCompactionExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastNonAlignedSeriesCompactionExecutor.java
index e2be4be0cc2..b07407c7db6 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastNonAlignedSeriesCompactionExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/FastNonAlignedSeriesCompactionExecutor.java
@@ -35,6 +35,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.utils.ModificationUtils;
import org.apache.iotdb.db.utils.datastructure.PatternTreeMapFactory;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.header.ChunkHeader;
import org.apache.tsfile.file.header.PageHeader;
@@ -207,7 +208,12 @@ public class FastNonAlignedSeriesCompactionExecutor
extends SeriesCompactionExec
header.getEncodingType(),
header.getCompressionType());
compactionWriter.startMeasurement(
- schema.getMeasurementName(), new ChunkWriterImpl(schema, true),
subTaskId);
+ schema.getMeasurementName(),
+ new ChunkWriterImpl(
+ schema,
+ true,
+
EncryptUtils.getEncryptParameter(compactionWriter.getEncryptParameter())),
+ subTaskId);
hasStartMeasurement = true;
seriesCompressionType = header.getCompressionType();
seriesTSEncoding = header.getEncodingType();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/AlignedSeriesCompactionExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/AlignedSeriesCompactionExecutor.java
index 1abef8e85d6..af836c3919e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/AlignedSeriesCompactionExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/AlignedSeriesCompactionExecutor.java
@@ -26,6 +26,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.io.CompactionTsFi
import
org.apache.iotdb.db.storageengine.dataregion.compaction.io.CompactionTsFileWriter;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.file.header.ChunkHeader;
import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
import org.apache.tsfile.file.metadata.ChunkMetadata;
@@ -82,7 +83,9 @@ public class AlignedSeriesCompactionExecutor {
this.writer = writer;
this.targetResource = targetResource;
schemaList =
collectSchemaFromAlignedChunkMetadataList(readerAndChunkMetadataList);
- chunkWriter = new AlignedChunkWriterImpl(schemaList);
+ chunkWriter =
+ new AlignedChunkWriterImpl(
+ schemaList,
EncryptUtils.getEncryptParameter(writer.getEncryptParameter()));
this.summary = summary;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
index e6891199bb4..928c0cdbc6b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
@@ -35,6 +35,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.tsfile.common.conf.TSFileDescriptor;
import org.apache.tsfile.encoding.decoder.Decoder;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.header.ChunkHeader;
@@ -193,7 +194,8 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
}
protected AlignedChunkWriterImpl constructAlignedChunkWriter() {
- return new AlignedChunkWriterImpl(timeSchema, schemaList);
+ return new AlignedChunkWriterImpl(
+ timeSchema, schemaList,
EncryptUtils.getEncryptParameter(writer.getEncryptParameter()));
}
public void execute() throws IOException, PageException {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/SingleSeriesCompactionExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/SingleSeriesCompactionExecutor.java
index 69ce89d5af3..b09adb17bba 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/SingleSeriesCompactionExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/SingleSeriesCompactionExecutor.java
@@ -25,6 +25,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.task.Comp
import
org.apache.iotdb.db.storageengine.dataregion.compaction.io.CompactionTsFileWriter;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.file.header.ChunkHeader;
import org.apache.tsfile.file.metadata.ChunkMetadata;
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -86,7 +87,9 @@ public class SingleSeriesCompactionExecutor {
this.readerAndChunkMetadataList = readerAndChunkMetadataList;
this.fileWriter = fileWriter;
this.schema = measurementSchema;
- this.chunkWriter = new ChunkWriterImpl(this.schema);
+ this.chunkWriter =
+ new ChunkWriterImpl(
+ this.schema,
EncryptUtils.getEncryptParameter(fileWriter.getEncryptParameter()));
this.cachedChunk = null;
this.cachedChunkMetadata = null;
this.targetResource = targetResource;
@@ -175,7 +178,9 @@ public class SingleSeriesCompactionExecutor {
chunkHeader.getDataType(),
chunkHeader.getEncodingType(),
chunkHeader.getCompressionType());
- this.chunkWriter = new ChunkWriterImpl(this.schema);
+ this.chunkWriter =
+ new ChunkWriterImpl(
+ this.schema,
EncryptUtils.getEncryptParameter(fileWriter.getEncryptParameter()));
}
private long getChunkSize(Chunk chunk) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractCompactionWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractCompactionWriter.java
index 5e794746894..3458f9870d4 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractCompactionWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractCompactionWriter.java
@@ -28,6 +28,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.wri
import
org.apache.iotdb.db.storageengine.dataregion.compaction.io.CompactionTsFileWriter;
import org.apache.iotdb.db.storageengine.dataregion.modification.ModEntry;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.header.PageHeader;
import org.apache.tsfile.file.metadata.ChunkMetadata;
@@ -102,6 +103,8 @@ public abstract class AbstractCompactionWriter implements
AutoCloseable {
protected ModEntry ttlDeletionForCurrentDevice;
+ private EncryptParameter encryptParameter;
+
public abstract void startChunkGroup(IDeviceID deviceId, boolean isAlign)
throws IOException;
public abstract void endChunkGroup() throws IOException;
@@ -185,6 +188,8 @@ public abstract class AbstractCompactionWriter implements
AutoCloseable {
chunkPointNumArray[subTaskId] = 0;
}
+ public abstract EncryptParameter getEncryptParameter();
+
public abstract boolean flushNonAlignedChunk(
Chunk chunk, ChunkMetadata chunkMetadata, int subTaskId) throws
IOException;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractCrossCompactionWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractCrossCompactionWriter.java
index e66ee1b697c..f970ad65e56 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractCrossCompactionWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractCrossCompactionWriter.java
@@ -19,6 +19,7 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer;
+import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.CompactionUtils;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.io.CompactionTsFileWriter;
@@ -26,7 +27,9 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.constant
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ITimeIndex;
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.file.metadata.TimeseriesMetadata;
import org.apache.tsfile.read.TimeValuePair;
@@ -68,13 +71,25 @@ public abstract class AbstractCrossCompactionWriter extends
AbstractCompactionWr
protected List<TsFileResource> targetResources;
+ private final EncryptParameter encryptParameter;
+
+ @TestOnly
protected AbstractCrossCompactionWriter(
List<TsFileResource> targetResources, List<TsFileResource>
seqFileResources)
throws IOException {
+ this(targetResources, seqFileResources,
EncryptDBUtils.getDefaultFirstEncryptParam());
+ }
+
+ protected AbstractCrossCompactionWriter(
+ List<TsFileResource> targetResources,
+ List<TsFileResource> seqFileResources,
+ EncryptParameter encryptParameter)
+ throws IOException {
currentDeviceEndTime = new long[seqFileResources.size()];
isCurrentDeviceExistedInSourceSeqFiles = new
boolean[seqFileResources.size()];
isEmptyFile = new boolean[seqFileResources.size()];
isDeviceExistedInTargetFiles = new boolean[targetResources.size()];
+ this.encryptParameter = encryptParameter;
long memorySizeForEachWriter =
(long)
((double) SystemInfo.getInstance().getMemorySizeForCompaction()
@@ -86,7 +101,8 @@ public abstract class AbstractCrossCompactionWriter extends
AbstractCompactionWr
new CompactionTsFileWriter(
targetResources.get(i).getTsFile(),
memorySizeForEachWriter,
- CompactionType.CROSS_COMPACTION));
+ CompactionType.CROSS_COMPACTION,
+ this.encryptParameter));
isEmptyFile[i] = true;
}
this.seqTsFileResources = seqFileResources;
@@ -257,4 +273,9 @@ public abstract class AbstractCrossCompactionWriter extends
AbstractCompactionWr
}
protected abstract TsFileSequenceReader getFileReader(TsFileResource
resource) throws IOException;
+
+ @Override
+ public EncryptParameter getEncryptParameter() {
+ return encryptParameter;
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractInnerCompactionWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractInnerCompactionWriter.java
index 9d5e6f49825..6573bb7e96e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractInnerCompactionWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/AbstractInnerCompactionWriter.java
@@ -19,6 +19,7 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer;
+import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.CompactionTableSchemaCollector;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.CompactionUtils;
@@ -26,7 +27,9 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.io.CompactionTsFi
import
org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.constant.CompactionType;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.read.TimeValuePair;
import org.apache.tsfile.read.common.block.TsBlock;
@@ -42,6 +45,7 @@ public abstract class AbstractInnerCompactionWriter extends
AbstractCompactionWr
protected int currentFileIndex;
protected long endedFileSize = 0;
protected List<Schema> schemas;
+ protected EncryptParameter encryptParameter;
protected final long memoryBudgetForFileWriter =
(long)
@@ -49,12 +53,28 @@ public abstract class AbstractInnerCompactionWriter extends
AbstractCompactionWr
/
IoTDBDescriptor.getInstance().getConfig().getCompactionThreadCount()
*
IoTDBDescriptor.getInstance().getConfig().getChunkMetadataSizeProportion());
+ @TestOnly
protected AbstractInnerCompactionWriter(TsFileResource targetFileResource) {
- this(Collections.singletonList(targetFileResource));
+ this(
+ Collections.singletonList(targetFileResource),
+ EncryptDBUtils.getDefaultFirstEncryptParam());
}
+ protected AbstractInnerCompactionWriter(
+ TsFileResource targetFileResource, EncryptParameter encryptParameter) {
+ this(Collections.singletonList(targetFileResource), encryptParameter);
+ }
+
+ @Deprecated
protected AbstractInnerCompactionWriter(List<TsFileResource>
targetFileResources) {
this.targetResources = targetFileResources;
+ this.encryptParameter = EncryptDBUtils.getDefaultFirstEncryptParam();
+ }
+
+ protected AbstractInnerCompactionWriter(
+ List<TsFileResource> targetFileResources, EncryptParameter
encryptParameter) {
+ this.targetResources = targetFileResources;
+ this.encryptParameter = encryptParameter;
}
@Override
@@ -99,7 +119,8 @@ public abstract class AbstractInnerCompactionWriter extends
AbstractCompactionWr
memoryBudgetForFileWriter,
targetResources.get(currentFileIndex).isSeq()
? CompactionType.INNER_SEQ_COMPACTION
- : CompactionType.INNER_UNSEQ_COMPACTION);
+ : CompactionType.INNER_UNSEQ_COMPACTION,
+ encryptParameter);
fileWriter.setSchema(CompactionTableSchemaCollector.copySchema(schemas.get(0)));
}
@@ -161,4 +182,9 @@ public abstract class AbstractInnerCompactionWriter extends
AbstractCompactionWr
public long getWriterSize() throws IOException {
return endedFileSize + (fileWriter == null ? 0 : fileWriter.getPos());
}
+
+ @Override
+ public EncryptParameter getEncryptParameter() {
+ return encryptParameter;
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastCrossCompactionWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastCrossCompactionWriter.java
index 69a169168aa..59a87b4211c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastCrossCompactionWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastCrossCompactionWriter.java
@@ -19,11 +19,14 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer;
+import org.apache.iotdb.commons.utils.TestOnly;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.fast.element.AlignedPageElement;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.fast.element.ChunkMetadataElement;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer.flushcontroller.AbstractCompactionFlushController;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.header.PageHeader;
import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
@@ -44,12 +47,23 @@ public class FastCrossCompactionWriter extends
AbstractCrossCompactionWriter {
// Only used for fast compaction performer
protected Map<TsFileResource, TsFileSequenceReader> readerMap;
+ @TestOnly
public FastCrossCompactionWriter(
List<TsFileResource> targetResources,
List<TsFileResource> seqSourceResources,
Map<TsFileResource, TsFileSequenceReader> readerMap)
throws IOException {
- super(targetResources, seqSourceResources);
+ super(targetResources, seqSourceResources,
EncryptDBUtils.getDefaultFirstEncryptParam());
+ this.readerMap = readerMap;
+ }
+
+ public FastCrossCompactionWriter(
+ List<TsFileResource> targetResources,
+ List<TsFileResource> seqSourceResources,
+ Map<TsFileResource, TsFileSequenceReader> readerMap,
+ EncryptParameter encryptParameter)
+ throws IOException {
+ super(targetResources, seqSourceResources, encryptParameter);
this.readerMap = readerMap;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastInnerCompactionWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastInnerCompactionWriter.java
index 18ca215ef64..922c3a7822b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastInnerCompactionWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/FastInnerCompactionWriter.java
@@ -19,11 +19,14 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer;
+import org.apache.iotdb.commons.utils.TestOnly;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.fast.element.AlignedPageElement;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.fast.element.ChunkMetadataElement;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer.flushcontroller.AbstractCompactionFlushController;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.header.PageHeader;
import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
@@ -40,12 +43,25 @@ import java.util.List;
public class FastInnerCompactionWriter extends AbstractInnerCompactionWriter {
+ @TestOnly
public FastInnerCompactionWriter(TsFileResource targetFileResource) throws
IOException {
- super(targetFileResource);
+ super(targetFileResource, EncryptDBUtils.getDefaultFirstEncryptParam());
}
+ public FastInnerCompactionWriter(
+ TsFileResource targetFileResource, EncryptParameter encryptParameter)
throws IOException {
+ super(targetFileResource, encryptParameter);
+ }
+
+ @TestOnly
public FastInnerCompactionWriter(List<TsFileResource> targetFileResources)
throws IOException {
- super(targetFileResources);
+ super(targetFileResources, EncryptDBUtils.getDefaultFirstEncryptParam());
+ }
+
+ public FastInnerCompactionWriter(
+ List<TsFileResource> targetFileResources, EncryptParameter
encryptParameter)
+ throws IOException {
+ super(targetFileResources, encryptParameter);
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/ReadPointCrossCompactionWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/ReadPointCrossCompactionWriter.java
index ce596e6dca4..6810df4d1a3 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/ReadPointCrossCompactionWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/ReadPointCrossCompactionWriter.java
@@ -19,13 +19,16 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer;
+import org.apache.iotdb.commons.utils.TestOnly;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.fast.element.AlignedPageElement;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.fast.element.ChunkMetadataElement;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer.flushcontroller.AbstractCompactionFlushController;
import
org.apache.iotdb.db.storageengine.dataregion.read.control.FileReaderManager;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.tsfile.block.column.Column;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.file.header.PageHeader;
import org.apache.tsfile.file.metadata.ChunkMetadata;
import org.apache.tsfile.read.TsFileSequenceReader;
@@ -40,10 +43,19 @@ import java.util.List;
public class ReadPointCrossCompactionWriter extends
AbstractCrossCompactionWriter {
+ @TestOnly
public ReadPointCrossCompactionWriter(
List<TsFileResource> targetResources, List<TsFileResource>
seqFileResources)
throws IOException {
- super(targetResources, seqFileResources);
+ super(targetResources, seqFileResources,
EncryptDBUtils.getDefaultFirstEncryptParam());
+ }
+
+ public ReadPointCrossCompactionWriter(
+ List<TsFileResource> targetResources,
+ List<TsFileResource> seqFileResources,
+ EncryptParameter encryptParameter)
+ throws IOException {
+ super(targetResources, seqFileResources, encryptParameter);
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/ReadPointInnerCompactionWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/ReadPointInnerCompactionWriter.java
index bff091c6a6f..806e708b5fe 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/ReadPointInnerCompactionWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/ReadPointInnerCompactionWriter.java
@@ -19,12 +19,15 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer;
+import org.apache.iotdb.commons.utils.TestOnly;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.fast.element.AlignedPageElement;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.executor.fast.element.ChunkMetadataElement;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer.flushcontroller.AbstractCompactionFlushController;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.tsfile.block.column.Column;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.exception.write.PageException;
import org.apache.tsfile.file.header.PageHeader;
import org.apache.tsfile.file.metadata.ChunkMetadata;
@@ -38,13 +41,26 @@ import java.nio.ByteBuffer;
import java.util.List;
public class ReadPointInnerCompactionWriter extends
AbstractInnerCompactionWriter {
+ @TestOnly
public ReadPointInnerCompactionWriter(TsFileResource targetFileResource)
throws IOException {
- super(targetFileResource);
+ super(targetFileResource, EncryptDBUtils.getDefaultFirstEncryptParam());
}
+ public ReadPointInnerCompactionWriter(
+ TsFileResource targetFileResource, EncryptParameter encryptParameter)
throws IOException {
+ super(targetFileResource, encryptParameter);
+ }
+
+ @TestOnly
public ReadPointInnerCompactionWriter(List<TsFileResource>
targetFileResources)
throws IOException {
- super(targetFileResources);
+ super(targetFileResources, EncryptDBUtils.getDefaultFirstEncryptParam());
+ }
+
+ public ReadPointInnerCompactionWriter(
+ List<TsFileResource> targetFileResources, EncryptParameter
encryptParameter)
+ throws IOException {
+ super(targetFileResources, encryptParameter);
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/RepairUnsortedFileCompactionWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/RepairUnsortedFileCompactionWriter.java
index 5d46eb50ab9..15d59be8d68 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/RepairUnsortedFileCompactionWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/writer/RepairUnsortedFileCompactionWriter.java
@@ -19,8 +19,11 @@
package
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.writer;
+import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.read.TimeValuePair;
import org.apache.tsfile.read.common.block.TsBlock;
import org.apache.tsfile.read.reader.IPointReader;
@@ -36,8 +39,15 @@ import java.util.List;
public class RepairUnsortedFileCompactionWriter extends
ReadPointInnerCompactionWriter {
private List<TimeValuePair>[] dataOfCurrentSeriesArr;
+ @TestOnly
public RepairUnsortedFileCompactionWriter(TsFileResource targetFileResource)
throws IOException {
- super(targetFileResource);
+ super(targetFileResource, EncryptDBUtils.getDefaultFirstEncryptParam());
+ dataOfCurrentSeriesArr = new ArrayList[subTaskNum];
+ }
+
+ public RepairUnsortedFileCompactionWriter(
+ TsFileResource targetFileResource, EncryptParameter encryptParameter)
throws IOException {
+ super(targetFileResource, encryptParameter);
dataOfCurrentSeriesArr = new ArrayList[subTaskNum];
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/io/CompactionTsFileWriter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/io/CompactionTsFileWriter.java
index 4f0ae737704..1f822e3b934 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/io/CompactionTsFileWriter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/io/CompactionTsFileWriter.java
@@ -19,11 +19,14 @@
package org.apache.iotdb.db.storageengine.dataregion.compaction.io;
+import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.service.metrics.CompactionMetrics;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.CompactionTaskManager;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.constant.CompactionIoDataType;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.constant.CompactionType;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.enums.ColumnCategory;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.ChunkMetadata;
@@ -52,15 +55,29 @@ public class CompactionTsFileWriter extends TsFileIOWriter {
private boolean isEmptyTargetFile = true;
private IDeviceID currentDeviceId;
+ private EncryptParameter firstEncryptParameter;
+
+ @TestOnly
public CompactionTsFileWriter(File file, long maxMetadataSize,
CompactionType type)
throws IOException {
- super(file, maxMetadataSize);
+ this(file, maxMetadataSize, type,
EncryptDBUtils.getDefaultFirstEncryptParam());
+ }
+
+ public CompactionTsFileWriter(
+ File file, long maxMetadataSize, CompactionType type, EncryptParameter
encryptParameter)
+ throws IOException {
+ super(file, maxMetadataSize, encryptParameter);
+ this.firstEncryptParameter = encryptParameter;
this.type = type;
super.out =
new CompactionTsFileOutput(
super.out,
CompactionTaskManager.getInstance().getMergeWriteRateLimiter());
}
+ public EncryptParameter getEncryptParameter() {
+ return firstEncryptParameter;
+ }
+
public void markStartingWritingAligned() {
isWritingAligned = true;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduleContext.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduleContext.java
index 1f01cac0b25..2bfc515c5dc 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduleContext.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduleContext.java
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.storageengine.dataregion.compaction.schedule;
+import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.service.metrics.CompactionMetrics;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.constant.CompactionTaskType;
@@ -29,6 +30,9 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.task.Abst
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.task.SettleCompactionTask;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ArrayDeviceTimeIndex;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+
+import org.apache.tsfile.encrypt.EncryptParameter;
import java.util.HashMap;
import java.util.HashSet;
@@ -53,9 +57,19 @@ public class CompactionScheduleContext {
private final Set<Long> timePartitionsDelayInsertionSelection;
+ private EncryptParameter encryptParameter;
+
+ @TestOnly
public CompactionScheduleContext() {
this.partitionFileDeviceInfoCache = new HashMap<>();
this.timePartitionsDelayInsertionSelection = new HashSet<>();
+ this.encryptParameter = EncryptDBUtils.getDefaultFirstEncryptParam();
+ }
+
+ public CompactionScheduleContext(EncryptParameter encryptParameter) {
+ this.partitionFileDeviceInfoCache = new HashMap<>();
+ this.timePartitionsDelayInsertionSelection = new HashSet<>();
+ this.encryptParameter = encryptParameter;
}
public void delayInsertionSelection(long timePartitionId) {
@@ -177,7 +191,7 @@ public class CompactionScheduleContext {
return IoTDBDescriptor.getInstance()
.getConfig()
.getInnerSeqCompactionPerformer()
- .createInstance();
+ .createInstance(encryptParameter);
}
public IUnseqCompactionPerformer getUnseqCompactionPerformer() {
@@ -185,11 +199,14 @@ public class CompactionScheduleContext {
IoTDBDescriptor.getInstance()
.getConfig()
.getInnerUnseqCompactionPerformer()
- .createInstance();
+ .createInstance(encryptParameter);
return unseqCompactionPerformer;
}
public ICrossCompactionPerformer getCrossCompactionPerformer() {
- return
IoTDBDescriptor.getInstance().getConfig().getCrossCompactionPerformer().createInstance();
+ return IoTDBDescriptor.getInstance()
+ .getConfig()
+ .getCrossCompactionPerformer()
+ .createInstance(encryptParameter);
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduler.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduler.java
index 96a6d095f08..cafb3bbae19 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduler.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduler.java
@@ -37,6 +37,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.selector.utils.Cr
import
org.apache.iotdb.db.storageengine.dataregion.compaction.selector.utils.InsertionCrossCompactionTaskResource;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileManager;
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -124,7 +125,11 @@ public class CompactionScheduler {
@TestOnly
public static void scheduleCompaction(TsFileManager tsFileManager, long
timePartition)
throws InterruptedException {
- scheduleCompaction(tsFileManager, timePartition, new
CompactionScheduleContext());
+ scheduleCompaction(
+ tsFileManager,
+ timePartition,
+ new CompactionScheduleContext(
+
EncryptDBUtils.getFirstEncryptParamFromDatabase(tsFileManager.getStorageGroupName())));
}
public static int tryToSubmitInnerSpaceCompactionTask(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/selector/utils/CrossSpaceCompactionCandidate.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/selector/utils/CrossSpaceCompactionCandidate.java
index 52b9d5269b1..1f08cb406c2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/selector/utils/CrossSpaceCompactionCandidate.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/selector/utils/CrossSpaceCompactionCandidate.java
@@ -51,6 +51,7 @@ public class CrossSpaceCompactionCandidate {
init(seqFiles, unseqFiles, new CompactionScheduleContext());
}
+ @TestOnly
public CrossSpaceCompactionCandidate(
List<TsFileResource> seqFiles, List<TsFileResource> unseqFiles, long
ttlLowerBound) {
this(seqFiles, unseqFiles, ttlLowerBound, new CompactionScheduleContext());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/settle/SettleRequestHandler.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/settle/SettleRequestHandler.java
index 29b9bc2b06e..470d82cfc49 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/settle/SettleRequestHandler.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/settle/SettleRequestHandler.java
@@ -37,6 +37,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceList;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.generator.TsFileNameGenerator;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.iotdb.rpc.RpcUtils;
import org.apache.iotdb.rpc.TSStatusCode;
@@ -272,8 +273,16 @@ public class SettleRequestHandler {
private TSStatus submitCompactionTask(List<TsFileResource>
tsFileResources) {
ICompactionPerformer performer =
hasSeqFiles
- ? config.getInnerSeqCompactionPerformer().createInstance()
- : config.getInnerUnseqCompactionPerformer().createInstance();
+ ? config
+ .getInnerSeqCompactionPerformer()
+ .createInstance(
+ EncryptDBUtils.getFirstEncryptParamFromDatabase(
+ tsFileManager.getStorageGroupName()))
+ : config
+ .getInnerUnseqCompactionPerformer()
+ .createInstance(
+ EncryptDBUtils.getFirstEncryptParamFromDatabase(
+ tsFileManager.getStorageGroupName()));
AbstractCompactionTask task =
new InnerSpaceCompactionTask(
targetConsistentSettleInfo.timePartitionId,
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/tool/TsFileStatisticReader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/tool/TsFileStatisticReader.java
index fccfb318985..d932d6c2c70 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/tool/TsFileStatisticReader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/tool/TsFileStatisticReader.java
@@ -19,6 +19,8 @@
package org.apache.iotdb.db.storageengine.dataregion.compaction.tool;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+
import org.apache.tsfile.file.metadata.ChunkMetadata;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.read.TsFileDeviceIterator;
@@ -37,7 +39,9 @@ public class TsFileStatisticReader implements Closeable {
private final TsFileSequenceReader reader;
public TsFileStatisticReader(String filePath) throws IOException {
- reader = new TsFileSequenceReader(filePath);
+ reader =
+ new TsFileSequenceReader(
+ filePath,
EncryptDBUtils.getFirstEncryptParamFromTSFilePath(filePath));
}
public List<ChunkGroupStatistics> getChunkGroupStatisticsList() throws
IOException {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
index f2f4d5e2943..92803984cee 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
@@ -42,6 +42,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.read.filescan.impl.MemAligne
import
org.apache.iotdb.db.storageengine.dataregion.read.filescan.impl.MemChunkHandleImpl;
import
org.apache.iotdb.db.storageengine.dataregion.wal.buffer.IWALByteBufferView;
import org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALWriteUtils;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.iotdb.db.utils.MemUtils;
import org.apache.iotdb.db.utils.ModificationUtils;
@@ -156,7 +157,11 @@ public abstract class AbstractMemTable implements
IMemTable {
private IWritableMemChunkGroup createMemChunkGroupIfNotExistAndGet(
IDeviceID deviceId, List<IMeasurementSchema> schemaList) {
IWritableMemChunkGroup memChunkGroup =
- memTableMap.computeIfAbsent(deviceId, k -> new
WritableMemChunkGroup());
+ memTableMap.computeIfAbsent(
+ deviceId,
+ k ->
+ new WritableMemChunkGroup(
+
EncryptDBUtils.getSecondEncryptParamFromDatabase(database)));
for (IMeasurementSchema schema : schemaList) {
if (schema != null &&
!memChunkGroup.contains(schema.getMeasurementName())) {
seriesNumber++;
@@ -1050,5 +1055,8 @@ public abstract class AbstractMemTable implements
IMemTable {
public void setDatabaseAndDataRegionId(String database, String dataRegionId)
{
this.database = database;
this.dataRegionId = dataRegionId;
+ for (IWritableMemChunkGroup memChunkGroup : memTableMap.values()) {
+
memChunkGroup.setEncryptParameter(EncryptDBUtils.getSecondEncryptParamFromDatabase(database));
+ }
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractWritableMemChunk.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractWritableMemChunk.java
index 268a9213b3c..d1dd692303d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractWritableMemChunk.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractWritableMemChunk.java
@@ -28,6 +28,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.wal.buffer.IWALByteBufferVie
import org.apache.iotdb.db.utils.datastructure.BatchEncodeInfo;
import org.apache.iotdb.db.utils.datastructure.TVList;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.utils.Binary;
import org.apache.tsfile.utils.BitMap;
@@ -227,4 +228,7 @@ public abstract class AbstractWritableMemChunk implements
IWritableMemChunk {
@Override
public abstract int serializedSize();
+
+ @Override
+ public abstract void setEncryptParameter(EncryptParameter encryptParameter);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
index d41ef855d36..f81238bef71 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
@@ -30,6 +30,8 @@ import
org.apache.iotdb.db.utils.datastructure.MemPointIterator;
import org.apache.iotdb.db.utils.datastructure.MemPointIteratorFactory;
import org.apache.iotdb.db.utils.datastructure.TVList;
+import org.apache.tsfile.encrypt.EncryptParameter;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.read.common.TimeRange;
import org.apache.tsfile.utils.Binary;
@@ -71,7 +73,16 @@ public class AlignedWritableMemChunk extends
AbstractWritableMemChunk {
private static final String UNSUPPORTED_TYPE = "Unsupported data type:";
+ private EncryptParameter encryptParameter;
+
public AlignedWritableMemChunk(List<IMeasurementSchema> schemaList, boolean
isTableModel) {
+ this(schemaList, isTableModel, EncryptUtils.getEncryptParameter());
+ }
+
+ public AlignedWritableMemChunk(
+ List<IMeasurementSchema> schemaList,
+ boolean isTableModel,
+ EncryptParameter encryptParameter) {
this.measurementIndexMap = new LinkedHashMap<>();
this.dataTypes = new ArrayList<>();
this.schemaList = schemaList;
@@ -82,10 +93,19 @@ public class AlignedWritableMemChunk extends
AbstractWritableMemChunk {
this.list = AlignedTVList.newAlignedList(dataTypes);
this.sortedList = new ArrayList<>();
this.ignoreAllNullRows = !isTableModel;
+ this.encryptParameter = encryptParameter;
}
private AlignedWritableMemChunk(
List<IMeasurementSchema> schemaList, AlignedTVList list, boolean
isTableModel) {
+ this(schemaList, list, isTableModel, EncryptUtils.getEncryptParameter());
+ }
+
+ private AlignedWritableMemChunk(
+ List<IMeasurementSchema> schemaList,
+ AlignedTVList list,
+ boolean isTableModel,
+ EncryptParameter encryptParameter) {
this.measurementIndexMap = new LinkedHashMap<>();
this.schemaList = schemaList;
for (int i = 0; i < schemaList.size(); i++) {
@@ -95,6 +115,7 @@ public class AlignedWritableMemChunk extends
AbstractWritableMemChunk {
this.dataTypes = list.getTsDataTypes();
this.sortedList = new ArrayList<>();
this.ignoreAllNullRows = !isTableModel;
+ this.encryptParameter = encryptParameter;
}
public Set<String> getAllMeasurements() {
@@ -430,7 +451,7 @@ public class AlignedWritableMemChunk extends
AbstractWritableMemChunk {
@Override
public IChunkWriter createIChunkWriter() {
- return new AlignedChunkWriterImpl(schemaList);
+ return new AlignedChunkWriterImpl(schemaList, encryptParameter);
}
@SuppressWarnings({"squid:S6541", "squid:S3776"})
@@ -508,7 +529,8 @@ public class AlignedWritableMemChunk extends
AbstractWritableMemChunk {
List<TSDataType> dataTypes = list.getTsDataTypes();
Pair<Long, Integer>[] lastValidPointIndexForTimeDupCheck = new
Pair[dataTypes.size()];
for (List<Integer> pageRange : chunkRange) {
- AlignedChunkWriterImpl alignedChunkWriter = new
AlignedChunkWriterImpl(schemaList);
+ AlignedChunkWriterImpl alignedChunkWriter =
+ new AlignedChunkWriterImpl(schemaList, encryptParameter);
for (int pageNum = 0; pageNum < pageRange.size() / 2; pageNum += 1) {
for (int columnIndex = 0; columnIndex < dataTypes.size();
columnIndex++) {
// Pair of Time and Index
@@ -645,7 +667,8 @@ public class AlignedWritableMemChunk extends
AbstractWritableMemChunk {
return;
}
- AlignedChunkWriterImpl alignedChunkWriter = new
AlignedChunkWriterImpl(schemaList);
+ AlignedChunkWriterImpl alignedChunkWriter =
+ new AlignedChunkWriterImpl(schemaList, encryptParameter);
// create MergeSortAlignedTVListIterator.
List<AlignedTVList> alignedTvLists = new ArrayList<>(sortedList);
@@ -674,7 +697,7 @@ public class AlignedWritableMemChunk extends
AbstractWritableMemChunk {
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
- alignedChunkWriter = new AlignedChunkWriterImpl(schemaList);
+ alignedChunkWriter = new AlignedChunkWriterImpl(schemaList,
encryptParameter);
encodeInfo.reset();
}
}
@@ -860,4 +883,9 @@ public class AlignedWritableMemChunk extends
AbstractWritableMemChunk {
}
return avgPointSizeOfLargestColumn;
}
+
+ @Override
+ public void setEncryptParameter(EncryptParameter encryptParameter) {
+ this.encryptParameter = encryptParameter;
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunkGroup.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunkGroup.java
index 36acdedf9bc..ec73e7d9c43 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunkGroup.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunkGroup.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.storageengine.dataregion.modification.ModEntry;
import
org.apache.iotdb.db.storageengine.dataregion.wal.buffer.IWALByteBufferView;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.utils.BitMap;
import org.apache.tsfile.utils.Pair;
import org.apache.tsfile.write.schema.IMeasurementSchema;
@@ -41,6 +42,8 @@ public class AlignedWritableMemChunkGroup implements
IWritableMemChunkGroup {
private AlignedWritableMemChunk memChunk;
+ private EncryptParameter encryptParameter;
+
public AlignedWritableMemChunkGroup(List<IMeasurementSchema> schemaList,
boolean isTableModel) {
memChunk = new AlignedWritableMemChunk(schemaList, isTableModel);
}
@@ -161,6 +164,12 @@ public class AlignedWritableMemChunkGroup implements
IWritableMemChunkGroup {
memChunk.serializeToWAL(buffer);
}
+ @Override
+ public void setEncryptParameter(EncryptParameter encryptParameter) {
+ this.encryptParameter = encryptParameter;
+ memChunk.setEncryptParameter(encryptParameter);
+ }
+
protected static AlignedWritableMemChunkGroup deserialize(
DataInputStream stream, boolean isTableModel) throws IOException {
AlignedWritableMemChunkGroup memChunkGroup = new
AlignedWritableMemChunkGroup();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IWritableMemChunk.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IWritableMemChunk.java
index 13f09a05d8a..635e06da4b7 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IWritableMemChunk.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IWritableMemChunk.java
@@ -23,6 +23,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.wal.buffer.WALEntryValue;
import org.apache.iotdb.db.utils.datastructure.BatchEncodeInfo;
import org.apache.iotdb.db.utils.datastructure.TVList;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.utils.Binary;
import org.apache.tsfile.utils.BitMap;
@@ -127,4 +128,6 @@ public interface IWritableMemChunk extends WALEntryValue {
TVList getWorkingTVList();
void setWorkingTVList(TVList list);
+
+ void setEncryptParameter(EncryptParameter encryptParameter);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IWritableMemChunkGroup.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IWritableMemChunkGroup.java
index 62bf7700218..9e61d7aba92 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IWritableMemChunkGroup.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/IWritableMemChunkGroup.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.db.storageengine.dataregion.modification.ModEntry;
import org.apache.iotdb.db.storageengine.dataregion.wal.buffer.WALEntryValue;
+import org.apache.tsfile.encrypt.EncryptParameter;
import org.apache.tsfile.utils.BitMap;
import org.apache.tsfile.write.schema.IMeasurementSchema;
@@ -59,4 +60,6 @@ public interface IWritableMemChunkGroup extends WALEntryValue
{
IWritableMemChunk getWritableMemChunk(String measurement);
long getMaxTime();
+
+ void setEncryptParameter(EncryptParameter encryptParameter);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
index 6909b3903dc..62756f4620b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
@@ -73,6 +73,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.wal.utils.listener.WALFlushL
import org.apache.iotdb.db.storageengine.rescon.memory.MemTableManager;
import org.apache.iotdb.db.storageengine.rescon.memory.PrimitiveArrayManager;
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.iotdb.db.utils.MemUtils;
import org.apache.iotdb.db.utils.ModificationUtils;
import org.apache.iotdb.db.utils.datastructure.AlignedTVList;
@@ -224,7 +225,11 @@ public class TsFileProcessor {
this.sequence = sequence;
this.tsFileResource = new TsFileResource(tsfile, this);
this.dataRegionInfo = dataRegionInfo;
- this.writer = new RestorableTsFileIOWriter(tsfile);
+ this.writer =
+ new RestorableTsFileIOWriter(
+ tsfile,
+ EncryptDBUtils.getFirstEncryptParamFromDatabase(
+ dataRegionInfo.getDataRegion().getDatabaseName()));
this.updateLatestFlushTimeCallback = updateLatestFlushTimeCallback;
this.walNode =
WALManager.getInstance()
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunk.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunk.java
index 1f4078dfc7d..ebf23154d15 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunk.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunk.java
@@ -20,6 +20,7 @@
package org.apache.iotdb.db.storageengine.dataregion.memtable;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
+import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import
org.apache.iotdb.db.storageengine.dataregion.wal.buffer.IWALByteBufferView;
@@ -29,6 +30,8 @@ import
org.apache.iotdb.db.utils.datastructure.MemPointIterator;
import org.apache.iotdb.db.utils.datastructure.MemPointIteratorFactory;
import org.apache.iotdb.db.utils.datastructure.TVList;
+import org.apache.tsfile.encrypt.EncryptParameter;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.read.TimeValuePair;
import org.apache.tsfile.read.common.TimeRange;
@@ -65,13 +68,26 @@ public class WritableMemChunk extends
AbstractWritableMemChunk {
private static final IoTDBConfig CONFIG =
IoTDBDescriptor.getInstance().getConfig();
private final int TVLIST_SORT_THRESHOLD = CONFIG.getTvListSortThreshold();
+ private EncryptParameter encryptParameter;
+
+ @TestOnly
public WritableMemChunk(IMeasurementSchema schema) {
this.schema = schema;
this.list = TVList.newList(schema.getType());
this.sortedList = new ArrayList<>();
+ this.encryptParameter = EncryptUtils.getEncryptParameter();
+ }
+
+ public WritableMemChunk(IMeasurementSchema schema, EncryptParameter
encryptParameter) {
+ this.schema = schema;
+ this.list = TVList.newList(schema.getType());
+ this.sortedList = new ArrayList<>();
+ this.encryptParameter = encryptParameter;
}
- private WritableMemChunk() {}
+ private WritableMemChunk() {
+ this.encryptParameter = EncryptUtils.getEncryptParameter();
+ }
protected void handoverTvList() {
if (!list.isSorted()) {
@@ -330,7 +346,7 @@ public class WritableMemChunk extends
AbstractWritableMemChunk {
@Override
public ChunkWriterImpl createIChunkWriter() {
- return new ChunkWriterImpl(schema);
+ return new ChunkWriterImpl(schema, encryptParameter);
}
@Override
@@ -594,4 +610,9 @@ public class WritableMemChunk extends
AbstractWritableMemChunk {
Arrays.sort(filteredTimestamps);
return filteredTimestamps;
}
+
+ @Override
+ public void setEncryptParameter(EncryptParameter encryptParameter) {
+ this.encryptParameter = encryptParameter;
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunkGroup.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunkGroup.java
index 56f69a447f6..07c76039ed0 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunkGroup.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunkGroup.java
@@ -24,6 +24,8 @@ import
org.apache.iotdb.db.storageengine.dataregion.modification.ModEntry;
import
org.apache.iotdb.db.storageengine.dataregion.wal.buffer.IWALByteBufferView;
import org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALWriteUtils;
+import org.apache.tsfile.encrypt.EncryptParameter;
+import org.apache.tsfile.encrypt.EncryptUtils;
import org.apache.tsfile.utils.BitMap;
import org.apache.tsfile.utils.ReadWriteIOUtils;
import org.apache.tsfile.write.schema.IMeasurementSchema;
@@ -39,9 +41,16 @@ import java.util.Map.Entry;
public class WritableMemChunkGroup implements IWritableMemChunkGroup {
private Map<String, IWritableMemChunk> memChunkMap;
+ private EncryptParameter encryptParameter;
public WritableMemChunkGroup() {
memChunkMap = new HashMap<>();
+ encryptParameter = EncryptUtils.getEncryptParameter();
+ }
+
+ public WritableMemChunkGroup(EncryptParameter encryptParameter) {
+ memChunkMap = new HashMap<>();
+ this.encryptParameter = encryptParameter;
}
@Override
@@ -70,7 +79,7 @@ public class WritableMemChunkGroup implements
IWritableMemChunkGroup {
private IWritableMemChunk createMemChunkIfNotExistAndGet(IMeasurementSchema
schema) {
return memChunkMap.computeIfAbsent(
- schema.getMeasurementName(), k -> new WritableMemChunk(schema));
+ schema.getMeasurementName(), k -> new WritableMemChunk(schema,
encryptParameter));
}
@Override
@@ -183,6 +192,14 @@ public class WritableMemChunkGroup implements
IWritableMemChunkGroup {
}
}
+ @Override
+ public void setEncryptParameter(EncryptParameter encryptParameter) {
+ this.encryptParameter = encryptParameter;
+ for (IWritableMemChunk memChunk : memChunkMap.values()) {
+ memChunk.setEncryptParameter(encryptParameter);
+ }
+ }
+
public static WritableMemChunkGroup deserialize(DataInputStream stream)
throws IOException {
WritableMemChunkGroup memChunkGroup = new WritableMemChunkGroup();
int memChunkMapSize = stream.readInt();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/control/FileReaderManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/control/FileReaderManager.java
index 738f0038e5b..6df6866109d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/control/FileReaderManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/control/FileReaderManager.java
@@ -22,6 +22,7 @@ package
org.apache.iotdb.db.storageengine.dataregion.read.control;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileID;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.tsfile.read.TsFileSequenceReader;
import org.apache.tsfile.read.UnClosedTsFileReader;
@@ -148,10 +149,18 @@ public class FileReaderManager {
TsFileSequenceReader tsFileReader = null;
// check if the file is old version
if (!isClosed) {
- tsFileReader = new UnClosedTsFileReader(filePath, ioSizeRecorder);
+ tsFileReader =
+ new UnClosedTsFileReader(
+ filePath,
+ EncryptDBUtils.getFirstEncryptParamFromTSFilePath(filePath),
+ ioSizeRecorder);
} else {
// already do the version check in TsFileSequenceReader's constructor
- tsFileReader = new TsFileSequenceReader(filePath, ioSizeRecorder);
+ tsFileReader =
+ new TsFileSequenceReader(
+ filePath,
+ ioSizeRecorder,
+ EncryptDBUtils.getFirstEncryptParamFromTSFilePath(filePath));
}
readerMap.put(tsFileID, tsFileReader);
return tsFileReader;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileResourceUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileResourceUtils.java
index 875aaaec17a..ed1dba06350 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileResourceUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/TsFileResourceUtils.java
@@ -26,6 +26,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ArrayDeviceTimeIndex;
import
org.apache.iotdb.db.storageengine.dataregion.tsfile.timeindex.ITimeIndex;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.tsfile.common.conf.TSFileConfig;
import org.apache.tsfile.common.conf.TSFileDescriptor;
@@ -130,7 +131,10 @@ public class TsFileResourceUtils {
}
public static boolean validateTsFileDataCorrectness(TsFileResource resource)
{
- try (TsFileSequenceReader reader = new
TsFileSequenceReader(resource.getTsFilePath())) {
+ try (TsFileSequenceReader reader =
+ new TsFileSequenceReader(
+ resource.getTsFilePath(),
+
EncryptDBUtils.getFirstEncryptParamFromTSFilePath(resource.getTsFilePath()))) {
if (!reader.isComplete()) {
logger.error("{} {} illegal tsfile", resource.getTsFilePath(),
VALIDATE_FAILED);
return false;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/AbstractTsFileRecoverPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/AbstractTsFileRecoverPerformer.java
index 73621a5208e..aec0151d80e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/AbstractTsFileRecoverPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/AbstractTsFileRecoverPerformer.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.db.exception.DataRegionException;
import org.apache.iotdb.db.pipe.agent.PipeDataNodeAgent;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.storageengine.dataregion.utils.TsFileResourceUtils;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
import org.apache.commons.io.FileUtils;
import org.apache.tsfile.common.conf.TSFileConfig;
@@ -79,11 +80,15 @@ public abstract class AbstractTsFileRecoverPerformer
implements Closeable {
return;
}
- writer = new RestorableTsFileIOWriter(tsFile);
+ writer =
+ new RestorableTsFileIOWriter(
+ tsFile,
EncryptDBUtils.getFirstEncryptParamFromTSFilePath(tsFile.getAbsolutePath()));
if (writer.hasCrashed()) {
byte versionNumber;
try (TsFileSequenceReader sequenceReader =
- new TsFileSequenceReader(tsFile.getAbsolutePath())) {
+ new TsFileSequenceReader(
+ tsFile.getAbsolutePath(),
+
EncryptDBUtils.getFirstEncryptParamFromTSFilePath(tsFile.getAbsolutePath()))) {
versionNumber = sequenceReader.readVersionNumber();
} catch (NotCompatibleTsFileException e) {
versionNumber = -1;
@@ -93,7 +98,10 @@ public abstract class AbstractTsFileRecoverPerformer
implements Closeable {
// cannot rewrite a file with V3 header, delete it first
writer.close();
tsFile.delete();
- writer = new RestorableTsFileIOWriter(tsFile);
+ writer =
+ new RestorableTsFileIOWriter(
+ tsFile,
+
EncryptDBUtils.getFirstEncryptParamFromTSFilePath(tsFile.getAbsolutePath()));
}
} else {
reconstructResourceFile();
@@ -114,7 +122,10 @@ public abstract class AbstractTsFileRecoverPerformer
implements Closeable {
protected void reconstructResourceFile() throws IOException {
try (TsFileSequenceReader reader =
- new
TsFileSequenceReader(tsFileResource.getTsFile().getAbsolutePath())) {
+ new TsFileSequenceReader(
+ tsFileResource.getTsFile().getAbsolutePath(),
+ EncryptDBUtils.getFirstEncryptParamFromTSFilePath(
+ tsFileResource.getTsFile().getAbsolutePath()))) {
TsFileResourceUtils.updateTsFileResource(reader, tsFileResource);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/utils/TsFileSequenceScan.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/utils/TsFileSequenceScan.java
index eddb7a0e80c..a260a6e5339 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/utils/TsFileSequenceScan.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/utils/TsFileSequenceScan.java
@@ -18,6 +18,8 @@
*/
package org.apache.iotdb.db.tools.utils;
+import org.apache.iotdb.db.utils.EncryptDBUtils;
+
import org.apache.tsfile.common.conf.TSFileConfig;
import org.apache.tsfile.file.MetaMarker;
import org.apache.tsfile.file.header.ChunkGroupHeader;
@@ -118,7 +120,10 @@ public abstract class TsFileSequenceScan {
@SuppressWarnings("java:S1181")
public void scanTsFile(File tsFile) {
- try (TsFileSequenceReader r = new
TsFileSequenceReader(tsFile.getAbsolutePath())) {
+ try (TsFileSequenceReader r =
+ new TsFileSequenceReader(
+ tsFile.getAbsolutePath(),
+
EncryptDBUtils.getFirstEncryptParamFromTSFilePath(tsFile.getAbsolutePath()))) {
this.reader = r;
boolean shouldScan = onFileOpen(tsFile);
if (!shouldScan) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/EncryptDBUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/EncryptDBUtils.java
new file mode 100644
index 00000000000..52396d149eb
--- /dev/null
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/EncryptDBUtils.java
@@ -0,0 +1,86 @@
+/*
+ * 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.utils;
+
+import org.apache.iotdb.db.conf.IoTDBConfig;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+
+import org.apache.tsfile.common.conf.TSFileConfig;
+import org.apache.tsfile.common.conf.TSFileDescriptor;
+import org.apache.tsfile.encrypt.EncryptParameter;
+import org.apache.tsfile.encrypt.EncryptUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+
+public class EncryptDBUtils {
+
+ private static final IoTDBConfig conf =
IoTDBDescriptor.getInstance().getConfig();
+ private static final TSFileConfig tsFileConfig =
TSFileDescriptor.getInstance().getConfig();
+
+ private static final Logger LOGGER =
LoggerFactory.getLogger(EncryptDBUtils.class);
+
+ private static volatile EncryptParameter defaultFirstEncryptParam;
+
+ public static EncryptParameter getFirstEncryptParamFromDatabase(String
database) {
+ if (database == null || database.isEmpty()) {
+ return new EncryptParameter(tsFileConfig.getEncryptType(),
tsFileConfig.getEncryptKey());
+ }
+ for (Map.Entry<String, EncryptParameter> entry :
conf.getTSFileDBToEncryptMap().entrySet()) {
+ if (database.trim().equals(entry.getKey().trim())) {
+ return entry.getValue();
+ }
+ }
+ return getDefaultFirstEncryptParam();
+ }
+
+ public static EncryptParameter getSecondEncryptParamFromDatabase(String
database) {
+ return
EncryptUtils.getEncryptParameter(getFirstEncryptParamFromDatabase(database));
+ }
+
+ public static EncryptParameter getFirstEncryptParamFromTSFilePath(String
tsFilePath) {
+ if (tsFilePath == null || tsFilePath.isEmpty()) {
+ return new EncryptParameter(tsFileConfig.getEncryptType(),
tsFileConfig.getEncryptKey());
+ }
+ // Use system-specific file separator
+ String separator = java.io.File.separator;
+ String[] pathSegments = tsFilePath.split(separator.equals("\\") ? "\\\\" :
separator);
+ for (int i = pathSegments.length - 1; i >= 0; i--) {
+ if ("sequence".equals(pathSegments[i]) ||
"unsequence".equals(pathSegments[i])) {
+ if (i + 1 < pathSegments.length) {
+ return getFirstEncryptParamFromDatabase(pathSegments[i + 1]);
+ }
+ }
+ }
+ return getDefaultFirstEncryptParam();
+ }
+
+ public static EncryptParameter getDefaultFirstEncryptParam() {
+ if (defaultFirstEncryptParam == null) {
+ synchronized (EncryptDBUtils.class) {
+ if (defaultFirstEncryptParam == null) {
+ defaultFirstEncryptParam =
+ new EncryptParameter(tsFileConfig.getEncryptType(),
tsFileConfig.getEncryptKey());
+ }
+ }
+ }
+ return defaultFirstEncryptParam;
+ }
+}