Skip to content

Commit 36f98a9

Browse files
zhujt20CRZbulabula
andauthored
encrypt audit log (#16551)
* encrypt audit log * update tsfile version * add Deprecated symbol * add testOnly symbol --------- Co-authored-by: Yongzao <532741407@qq.com>
1 parent d6c2719 commit 36f98a9

48 files changed

Lines changed: 744 additions & 68 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949

5050
import org.apache.tsfile.common.conf.TSFileDescriptor;
5151
import org.apache.tsfile.common.constant.TsFileConstant;
52+
import org.apache.tsfile.encrypt.EncryptParameter;
5253
import org.apache.tsfile.enums.TSDataType;
5354
import org.apache.tsfile.file.metadata.enums.CompressionType;
5455
import org.apache.tsfile.file.metadata.enums.TSEncoding;
@@ -62,9 +63,11 @@
6263
import java.lang.reflect.Field;
6364
import java.util.ArrayList;
6465
import java.util.Arrays;
66+
import java.util.Collections;
6567
import java.util.List;
6668
import java.util.Objects;
6769
import java.util.Properties;
70+
import java.util.concurrent.ConcurrentHashMap;
6871
import java.util.concurrent.TimeUnit;
6972
import java.util.regex.Pattern;
7073

@@ -1176,6 +1179,10 @@ public class IoTDBConfig {
11761179

11771180
private boolean includeNullValueInWriteThroughputMetric = false;
11781181

1182+
private ConcurrentHashMap<String, EncryptParameter> tsFileDBToEncryptMap =
1183+
new ConcurrentHashMap<>(
1184+
Collections.singletonMap("root.__audit", new EncryptParameter("UNENCRYPTED", null)));
1185+
11791186
IoTDBConfig() {}
11801187

11811188
public int getMaxLogEntriesNumPerBatch() {
@@ -4225,4 +4232,8 @@ public int getPasswordLockTimeMinutes() {
42254232
public void setPasswordLockTimeMinutes(int passwordLockTimeMinutes) {
42264233
this.passwordLockTimeMinutes = passwordLockTimeMinutes;
42274234
}
4235+
4236+
public ConcurrentHashMap<String, EncryptParameter> getTSFileDBToEncryptMap() {
4237+
return tsFileDBToEncryptMap;
4238+
}
42284239
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
import org.apache.iotdb.db.tools.settle.TsFileAndModSettleTool;
154154
import org.apache.iotdb.db.utils.CommonUtils;
155155
import org.apache.iotdb.db.utils.DateTimeUtils;
156+
import org.apache.iotdb.db.utils.EncryptDBUtils;
156157
import org.apache.iotdb.db.utils.ModificationUtils;
157158
import org.apache.iotdb.metrics.utils.MetricLevel;
158159
import org.apache.iotdb.rpc.RpcUtils;
@@ -3087,7 +3088,9 @@ public int executeCompaction() throws InterruptedException {
30873088
if (!isCompactionSelecting.compareAndSet(false, true)) {
30883089
return 0;
30893090
}
3090-
CompactionScheduleContext context = new CompactionScheduleContext();
3091+
CompactionScheduleContext context =
3092+
new CompactionScheduleContext(
3093+
EncryptDBUtils.getFirstEncryptParamFromDatabase(databaseName));
30913094
try {
30923095
List<Long> timePartitions = new ArrayList<>(tsFileManager.getTimePartitions());
30933096
// Sort the time partition from largest to smallest
@@ -3140,7 +3143,9 @@ public int executeTTLCheck() throws InterruptedException {
31403143
return 0;
31413144
}
31423145
logger.info("[TTL] {}-{} Start ttl and modification checking.", databaseName, dataRegionId);
3143-
CompactionScheduleContext context = new CompactionScheduleContext();
3146+
CompactionScheduleContext context =
3147+
new CompactionScheduleContext(
3148+
EncryptDBUtils.getFirstEncryptParamFromDatabase(databaseName));
31443149
List<Long> timePartitions = new ArrayList<>(tsFileManager.getTimePartitions());
31453150
// Sort the time partition from smallest to largest
31463151
Collections.sort(timePartitions);

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/CrossCompactionPerformer.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@
1919

2020
package org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.constant;
2121

22+
import org.apache.iotdb.commons.utils.TestOnly;
2223
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.IllegalCompactionPerformerException;
2324
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.ICrossCompactionPerformer;
2425
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.FastCompactionPerformer;
2526
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.ReadPointCompactionPerformer;
2627

28+
import org.apache.tsfile.encrypt.EncryptParameter;
29+
2730
public enum CrossCompactionPerformer {
2831
READ_POINT,
2932
FAST;
@@ -38,6 +41,7 @@ public static CrossCompactionPerformer getCrossCompactionPerformer(String name)
3841
"Illegal compaction performer for cross compaction " + name);
3942
}
4043

44+
@TestOnly
4145
public ICrossCompactionPerformer createInstance() {
4246
switch (this) {
4347
case READ_POINT:
@@ -49,4 +53,16 @@ public ICrossCompactionPerformer createInstance() {
4953
"Illegal compaction performer for cross compaction " + this);
5054
}
5155
}
56+
57+
public ICrossCompactionPerformer createInstance(EncryptParameter encryptParameter) {
58+
switch (this) {
59+
case READ_POINT:
60+
return new ReadPointCompactionPerformer(encryptParameter);
61+
case FAST:
62+
return new FastCompactionPerformer(true, encryptParameter);
63+
default:
64+
throw new IllegalCompactionPerformerException(
65+
"Illegal compaction performer for cross compaction " + this);
66+
}
67+
}
5268
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerSeqCompactionPerformer.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@
1919

2020
package org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.constant;
2121

22+
import org.apache.iotdb.commons.utils.TestOnly;
2223
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.IllegalCompactionPerformerException;
2324
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.ISeqCompactionPerformer;
2425
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.FastCompactionPerformer;
2526
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.ReadChunkCompactionPerformer;
2627

28+
import org.apache.tsfile.encrypt.EncryptParameter;
29+
2730
public enum InnerSeqCompactionPerformer {
2831
READ_CHUNK,
2932
FAST;
@@ -38,6 +41,7 @@ public static InnerSeqCompactionPerformer getInnerSeqCompactionPerformer(String
3841
"Illegal compaction performer for seq inner compaction " + name);
3942
}
4043

44+
@TestOnly
4145
public ISeqCompactionPerformer createInstance() {
4246
switch (this) {
4347
case READ_CHUNK:
@@ -49,4 +53,16 @@ public ISeqCompactionPerformer createInstance() {
4953
"Illegal compaction performer for seq inner compaction " + this);
5054
}
5155
}
56+
57+
public ISeqCompactionPerformer createInstance(EncryptParameter encryptParameter) {
58+
switch (this) {
59+
case READ_CHUNK:
60+
return new ReadChunkCompactionPerformer(encryptParameter);
61+
case FAST:
62+
return new FastCompactionPerformer(false, encryptParameter);
63+
default:
64+
throw new IllegalCompactionPerformerException(
65+
"Illegal compaction performer for seq inner compaction " + this);
66+
}
67+
}
5268
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/constant/InnerUnseqCompactionPerformer.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@
1919

2020
package org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.constant;
2121

22+
import org.apache.iotdb.commons.utils.TestOnly;
2223
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.IllegalCompactionPerformerException;
2324
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.IUnseqCompactionPerformer;
2425
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.FastCompactionPerformer;
2526
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.ReadPointCompactionPerformer;
2627

28+
import org.apache.tsfile.encrypt.EncryptParameter;
29+
2730
public enum InnerUnseqCompactionPerformer {
2831
READ_POINT,
2932
FAST;
@@ -38,6 +41,7 @@ public static InnerUnseqCompactionPerformer getInnerUnseqCompactionPerformer(Str
3841
"Illegal compaction performer for unseq inner compaction " + name);
3942
}
4043

44+
@TestOnly
4145
public IUnseqCompactionPerformer createInstance() {
4246
switch (this) {
4347
case READ_POINT:
@@ -49,4 +53,16 @@ public IUnseqCompactionPerformer createInstance() {
4953
"Illegal compaction performer for unseq inner compaction " + this);
5054
}
5155
}
56+
57+
public IUnseqCompactionPerformer createInstance(EncryptParameter encryptParameter) {
58+
switch (this) {
59+
case READ_POINT:
60+
return new ReadPointCompactionPerformer(encryptParameter);
61+
case FAST:
62+
return new FastCompactionPerformer(false, encryptParameter);
63+
default:
64+
throw new IllegalCompactionPerformerException(
65+
"Illegal compaction performer for unseq inner compaction " + this);
66+
}
67+
}
5268
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/FastCompactionPerformer.java

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.iotdb.commons.conf.IoTDBConstant;
2323
import org.apache.iotdb.commons.exception.IllegalPathException;
2424
import org.apache.iotdb.commons.path.PatternTreeMap;
25+
import org.apache.iotdb.commons.utils.TestOnly;
2526
import org.apache.iotdb.db.conf.IoTDBDescriptor;
2627
import org.apache.iotdb.db.exception.WriteProcessException;
2728
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.exception.CompactionLastTimeCheckFailedException;
@@ -47,6 +48,8 @@
4748
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
4849
import org.apache.iotdb.db.utils.datastructure.PatternTreeMapFactory;
4950

51+
import org.apache.tsfile.common.conf.TSFileDescriptor;
52+
import org.apache.tsfile.encrypt.EncryptParameter;
5053
import org.apache.tsfile.exception.StopReadTsFileByInterruptException;
5154
import org.apache.tsfile.exception.write.PageException;
5255
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -96,6 +99,9 @@ public class FastCompactionPerformer
9699

97100
private final boolean isCrossCompaction;
98101

102+
private EncryptParameter encryptParameter;
103+
104+
@TestOnly
99105
public FastCompactionPerformer(
100106
List<TsFileResource> seqFiles,
101107
List<TsFileResource> unseqFiles,
@@ -109,10 +115,41 @@ public FastCompactionPerformer(
109115
} else {
110116
isCrossCompaction = true;
111117
}
118+
this.encryptParameter =
119+
new EncryptParameter(
120+
TSFileDescriptor.getInstance().getConfig().getEncryptType(),
121+
TSFileDescriptor.getInstance().getConfig().getEncryptKey());
122+
}
123+
124+
public FastCompactionPerformer(
125+
List<TsFileResource> seqFiles,
126+
List<TsFileResource> unseqFiles,
127+
List<TsFileResource> targetFiles,
128+
EncryptParameter encryptParameter) {
129+
this.seqFiles = seqFiles;
130+
this.unseqFiles = unseqFiles;
131+
this.targetFiles = targetFiles;
132+
if (seqFiles.isEmpty() || unseqFiles.isEmpty()) {
133+
// inner space compaction
134+
isCrossCompaction = false;
135+
} else {
136+
isCrossCompaction = true;
137+
}
138+
this.encryptParameter = encryptParameter;
112139
}
113140

141+
@TestOnly
114142
public FastCompactionPerformer(boolean isCrossCompaction) {
115143
this.isCrossCompaction = isCrossCompaction;
144+
this.encryptParameter =
145+
new EncryptParameter(
146+
TSFileDescriptor.getInstance().getConfig().getEncryptType(),
147+
TSFileDescriptor.getInstance().getConfig().getEncryptKey());
148+
}
149+
150+
public FastCompactionPerformer(boolean isCrossCompaction, EncryptParameter encryptParameter) {
151+
this.isCrossCompaction = isCrossCompaction;
152+
this.encryptParameter = encryptParameter;
116153
}
117154

118155
@Override
@@ -122,8 +159,9 @@ public void perform() throws Exception {
122159
new MultiTsFileDeviceIterator(seqFiles, unseqFiles, readerCacheMap);
123160
AbstractCompactionWriter compactionWriter =
124161
isCrossCompaction
125-
? new FastCrossCompactionWriter(targetFiles, seqFiles, readerCacheMap)
126-
: new FastInnerCompactionWriter(targetFiles)) {
162+
? new FastCrossCompactionWriter(
163+
targetFiles, seqFiles, readerCacheMap, encryptParameter)
164+
: new FastInnerCompactionWriter(targetFiles, encryptParameter)) {
127165
List<Schema> schemas =
128166
CompactionTableSchemaCollector.collectSchema(
129167
seqFiles, unseqFiles, readerCacheMap, deviceIterator.getDeprecatedTableSchemaMap());

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.apache.iotdb.commons.exception.IllegalPathException;
2323
import org.apache.iotdb.commons.exception.MetadataException;
24+
import org.apache.iotdb.commons.utils.TestOnly;
2425
import org.apache.iotdb.db.conf.IoTDBDescriptor;
2526
import org.apache.iotdb.db.exception.StorageEngineException;
2627
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.ISeqCompactionPerformer;
@@ -35,7 +36,10 @@
3536
import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.estimator.ReadChunkInnerCompactionEstimator;
3637
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
3738
import org.apache.iotdb.db.storageengine.rescon.memory.SystemInfo;
39+
import org.apache.iotdb.db.utils.EncryptDBUtils;
3840

41+
import org.apache.tsfile.common.conf.TSFileDescriptor;
42+
import org.apache.tsfile.encrypt.EncryptParameter;
3943
import org.apache.tsfile.enums.TSDataType;
4044
import org.apache.tsfile.exception.write.PageException;
4145
import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
@@ -66,21 +70,60 @@ public class ReadChunkCompactionPerformer implements ISeqCompactionPerformer {
6670
* IoTDBDescriptor.getInstance().getConfig().getChunkMetadataSizeProportion());
6771
private Schema schema = null;
6872

73+
private EncryptParameter firstEncryptParameter;
74+
75+
@TestOnly
6976
public ReadChunkCompactionPerformer(List<TsFileResource> sourceFiles, TsFileResource targetFile) {
7077
this(sourceFiles, Collections.singletonList(targetFile));
7178
}
7279

80+
public ReadChunkCompactionPerformer(
81+
List<TsFileResource> sourceFiles,
82+
TsFileResource targetFile,
83+
EncryptParameter encryptParameter) {
84+
this(sourceFiles, Collections.singletonList(targetFile), encryptParameter);
85+
}
86+
87+
@TestOnly
7388
public ReadChunkCompactionPerformer(
7489
List<TsFileResource> sourceFiles, List<TsFileResource> targetFiles) {
7590
setSourceFiles(sourceFiles);
7691
setTargetFiles(targetFiles);
92+
this.firstEncryptParameter = EncryptDBUtils.getDefaultFirstEncryptParam();
93+
}
94+
95+
public ReadChunkCompactionPerformer(
96+
List<TsFileResource> sourceFiles,
97+
List<TsFileResource> targetFiles,
98+
EncryptParameter encryptParameter) {
99+
setSourceFiles(sourceFiles);
100+
setTargetFiles(targetFiles);
101+
this.firstEncryptParameter = encryptParameter;
77102
}
78103

104+
@TestOnly
79105
public ReadChunkCompactionPerformer(List<TsFileResource> sourceFiles) {
80106
setSourceFiles(sourceFiles);
107+
this.firstEncryptParameter = EncryptDBUtils.getDefaultFirstEncryptParam();
108+
}
109+
110+
public ReadChunkCompactionPerformer(
111+
List<TsFileResource> sourceFiles, EncryptParameter encryptParameter) {
112+
setSourceFiles(sourceFiles);
113+
this.firstEncryptParameter = encryptParameter;
114+
}
115+
116+
@TestOnly
117+
public ReadChunkCompactionPerformer() {
118+
this.firstEncryptParameter =
119+
new EncryptParameter(
120+
TSFileDescriptor.getInstance().getConfig().getEncryptType(),
121+
TSFileDescriptor.getInstance().getConfig().getEncryptKey());
81122
}
82123

83-
public ReadChunkCompactionPerformer() {}
124+
public ReadChunkCompactionPerformer(EncryptParameter encryptParameter) {
125+
this.firstEncryptParameter = encryptParameter;
126+
}
84127

85128
@Override
86129
public void perform()
@@ -164,7 +207,8 @@ private void useNewWriter() throws IOException {
164207
new CompactionTsFileWriter(
165208
targetResources.get(currentTargetFileIndex).getTsFile(),
166209
memoryBudgetForFileWriter,
167-
CompactionType.INNER_SEQ_COMPACTION);
210+
CompactionType.INNER_SEQ_COMPACTION,
211+
firstEncryptParameter);
168212
currentWriter.setSchema(CompactionTableSchemaCollector.copySchema(schema));
169213
}
170214

0 commit comments

Comments
 (0)