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 e8010536a0e Add compression ratio in show regions (#15709)
e8010536a0e is described below
commit e8010536a0e91204bff0661463ade71077fcb5a8
Author: Jiang Tian <[email protected]>
AuthorDate: Thu Jul 31 16:38:00 2025 +0800
Add compression ratio in show regions (#15709)
* add compression ratio in show regions
* integrate with information schema
* limit result precision
---
.../heartbeat/DataNodeHeartbeatHandler.java | 5 +
.../confignode/manager/load/cache/LoadCache.java | 11 ++
.../manager/partition/PartitionManager.java | 9 +-
.../impl/DataNodeInternalRPCServiceImpl.java | 6 ++
.../InformationSchemaContentSupplierFactory.java | 5 +
.../execution/config/metadata/ShowRegionTask.java | 11 +-
.../dataregion/flush/CompressionRatio.java | 116 +++++++++++++++++++--
.../dataregion/memtable/TsFileProcessor.java | 2 +-
.../file/UnsealedTsFileRecoverPerformer.java | 2 +-
.../dataregion/flush/CompressionRatioTest.java | 3 +-
.../schema/column/ColumnHeaderConstant.java | 5 +-
.../commons/schema/table/InformationSchema.java | 3 +
.../src/main/thrift/confignode.thrift | 1 +
.../src/main/thrift/datanode.thrift | 1 +
14 files changed, 165 insertions(+), 15 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/handlers/heartbeat/DataNodeHeartbeatHandler.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/handlers/heartbeat/DataNodeHeartbeatHandler.java
index 3613c337862..e7a31b1dc73 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/handlers/heartbeat/DataNodeHeartbeatHandler.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/async/handlers/heartbeat/DataNodeHeartbeatHandler.java
@@ -158,6 +158,11 @@ public class DataNodeHeartbeatHandler implements
AsyncMethodCallback<TDataNodeHe
if (heartbeatResp.isSetRegionDisk()) {
loadManager.getLoadCache().updateRegionSizeMap(nodeId,
heartbeatResp.getRegionDisk());
}
+ if (heartbeatResp.isSetDataRegionRawDataSize()) {
+ loadManager
+ .getLoadCache()
+ .updateRegionRawSizeMap(nodeId,
heartbeatResp.getDataRegionRawDataSize());
+ }
}
@Override
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/LoadCache.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/LoadCache.java
index dfc495ef90d..07105d96bbd 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/LoadCache.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/cache/LoadCache.java
@@ -93,6 +93,8 @@ public class LoadCache {
private final Map<TConsensusGroupId, RegionGroupCache> regionGroupCacheMap;
// Map<NodeId, Map<RegionGroupId, RegionSize>>
private final Map<Integer, Map<Integer, Long>> regionSizeMap;
+ // Map<NodeId, Map<RegionGroupId, RegionRawSize>>
+ private final Map<Integer, Map<Integer, Long>> regionRawSizeMap;
// Map<RegionGroupId, ConsensusGroupCache>
private final Map<TConsensusGroupId, ConsensusGroupCache>
consensusGroupCacheMap;
// Map<DataNodeId, confirmedConfigNodes>
@@ -105,6 +107,7 @@ public class LoadCache {
this.heartbeatProcessingMap = new ConcurrentHashMap<>();
this.regionGroupCacheMap = new ConcurrentHashMap<>();
this.regionSizeMap = new ConcurrentHashMap<>();
+ this.regionRawSizeMap = new ConcurrentHashMap<>();
this.consensusGroupCacheMap = new ConcurrentHashMap<>();
this.confirmedConfigNodeMap = new ConcurrentHashMap<>();
this.topologyGraph = new HashMap<>();
@@ -822,7 +825,15 @@ public class LoadCache {
this.regionSizeMap.put(dataNodeId, regionSizeMap);
}
+ public void updateRegionRawSizeMap(int dataNodeId, Map<Integer, Long>
regionRawSizeMap) {
+ this.regionRawSizeMap.put(dataNodeId, regionRawSizeMap);
+ }
+
public Map<Integer, Map<Integer, Long>> getRegionSizeMap() {
return regionSizeMap;
}
+
+ public Map<Integer, Map<Integer, Long>> getRegionRawSizeMap() {
+ return regionRawSizeMap;
+ }
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
index fa051b74155..8259efb567f 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
@@ -1097,10 +1097,17 @@ public class PartitionManager {
.getOrDefault(regionInfo.getDataNodeId(),
Collections.emptyMap())
.getOrDefault(regionInfo.getConsensusGroupId().getId(), -1L);
regionInfo.setTsFileSize(regionSize);
+
+ long rawDataSize =
+ getLoadManager()
+ .getLoadCache()
+ .getRegionRawSizeMap()
+ .getOrDefault(regionInfo.getDataNodeId(),
Collections.emptyMap())
+
.getOrDefault(regionInfo.getConsensusGroupId().getId(), -1L);
+ regionInfo.setRawDataSize(rawDataSize);
});
return regionInfoListResp;
-
} catch (final ConsensusException e) {
LOGGER.warn(CONSENSUS_READ_ERROR, e);
final TSStatus res = new
TSStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
index 62337fc9291..18fd199f188 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -181,6 +181,7 @@ import
org.apache.iotdb.db.storageengine.dataregion.compaction.repair.RepairTask
import
org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.CompactionScheduleTaskManager;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.CompactionTaskManager;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.settle.SettleRequestHandler;
+import org.apache.iotdb.db.storageengine.dataregion.flush.CompressionRatio;
import
org.apache.iotdb.db.storageengine.dataregion.modification.DeletionPredicate;
import org.apache.iotdb.db.storageengine.dataregion.modification.IDPredicate;
import
org.apache.iotdb.db.storageengine.dataregion.modification.TableDeletionEntry;
@@ -2069,6 +2070,11 @@ public class DataNodeInternalRPCServiceImpl implements
IDataNodeRPCService.Iface
resp.setLoadSample(loadSample);
resp.setRegionDisk(FileMetrics.getInstance().getRegionSizeMap());
+ Map<Integer, Long> regionRawDataSize = new HashMap<>();
+ CompressionRatio.getInstance()
+ .getDataRegionRatioMap()
+ .forEach((key, value) ->
regionRawDataSize.put(Integer.parseInt(key), value.getLeft()));
+ resp.setDataRegionRawDataSize(regionRawDataSize);
}
AuthorityChecker.getAuthorityFetcher().refreshToken();
resp.setHeartbeatTimestamp(req.getHeartbeatTimestamp());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
index b011a49b077..543e148fdc9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
@@ -72,6 +72,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.util.ReservedIdentifiers;
import org.apache.iotdb.db.relational.grammar.sql.RelationalSqlKeywords;
import org.apache.iotdb.db.schemaengine.table.InformationSchemaUtils;
+import org.apache.iotdb.db.utils.MathUtils;
import org.apache.iotdb.db.utils.TimestampPrecisionUtils;
import org.apache.tsfile.block.column.ColumnBuilder;
@@ -516,8 +517,12 @@ public class InformationSchemaContentSupplierFactory {
if (regionInfo.getConsensusGroupId().getType().ordinal()
== TConsensusGroupType.DataRegion.ordinal()) {
columnBuilders[12].writeLong(regionInfo.getTsFileSize());
+ columnBuilders[13].writeDouble(
+ MathUtils.roundWithGivenPrecision(
+ (double) regionInfo.getRawDataSize() /
regionInfo.getTsFileSize(), 2));
} else {
columnBuilders[12].appendNull();
+ columnBuilders[13].appendNull();
}
resultBuilder.declarePosition();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowRegionTask.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowRegionTask.java
index ae40ca6284d..95ddd28ff74 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowRegionTask.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/metadata/ShowRegionTask.java
@@ -110,15 +110,22 @@ public class ShowRegionTask implements IConfigTask {
BytesUtils.valueOf(DateTimeUtils.convertLongToDate(regionInfo.getCreateTime())));
// region size
String regionSizeStr = "";
+ double compressionRatio = Double.NaN;
if (regionInfo.getConsensusGroupId().getType().ordinal()
== TConsensusGroupType.DataRegion.ordinal()) {
- if (regionInfo.getTsFileSize() != -1) {
- regionSizeStr =
FileUtils.humanReadableByteCountSI(regionInfo.getTsFileSize());
+ long tsFileSize = regionInfo.getTsFileSize();
+ if (tsFileSize != -1) {
+ regionSizeStr = FileUtils.humanReadableByteCountSI(tsFileSize);
} else {
regionSizeStr = "Unknown";
}
+ long rawDataSize = regionInfo.getRawDataSize();
+ if (rawDataSize != -1) {
+ compressionRatio = (double) rawDataSize / tsFileSize;
+ }
}
builder.getColumnBuilder(12).writeBinary(BytesUtils.valueOf(regionSizeStr));
+ builder.getColumnBuilder(13).writeDouble(compressionRatio);
builder.declarePosition();
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/flush/CompressionRatio.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/flush/CompressionRatio.java
index 6253717386e..c22afac0817 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/flush/CompressionRatio.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/flush/CompressionRatio.java
@@ -25,13 +25,17 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.commons.io.FileUtils;
import org.apache.tsfile.utils.FilePathUtils;
+import org.apache.tsfile.utils.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
+import java.util.HashMap;
import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
/**
@@ -65,6 +69,9 @@ public class CompressionRatio {
/** The data size on disk */
private long totalDiskSize = 0L;
+ /** DataRegionId -> (memorySize, diskSize) */
+ private Map<String, Pair<Long, Long>> dataRegionRatioMap = new
ConcurrentHashMap<>();
+
private File directory;
private String oldFileName = String.format(RATIO_FILE_PATH_FORMAT, 0, 0);
@@ -84,8 +91,9 @@ public class CompressionRatio {
* Whenever the task of closing a file ends, the compression ratio of the
file is calculated and
* call this method.
*/
- public synchronized void updateRatio(long memorySize, long diskSize) throws
IOException {
- File oldFile = SystemFileFactory.INSTANCE.getFile(directory, oldFileName);
+ public synchronized void updateRatio(long memorySize, long diskSize, String
dataRegionId)
+ throws IOException {
+ File oldDataNodeFile = SystemFileFactory.INSTANCE.getFile(directory,
oldFileName);
totalMemorySize.addAndGet(memorySize);
totalDiskSize += diskSize;
@@ -95,12 +103,38 @@ public class CompressionRatio {
memorySize,
totalMemorySize);
}
- File newFile =
+ File newDataNodeFile =
SystemFileFactory.INSTANCE.getFile(
directory,
String.format(
Locale.ENGLISH, RATIO_FILE_PATH_FORMAT, totalMemorySize.get(),
totalDiskSize));
- persist(oldFile, newFile);
+ persist(oldDataNodeFile, newDataNodeFile);
+
+ Pair<Long, Long> dataRegionCompressionRatio =
+ dataRegionRatioMap.computeIfAbsent(dataRegionId, id -> new Pair<>(0L,
0L));
+ File oldDataRegionFile =
+ SystemFileFactory.INSTANCE.getFile(
+ directory,
+ String.format(
+ Locale.ENGLISH,
+ RATIO_FILE_PATH_FORMAT,
+ dataRegionCompressionRatio.getLeft(),
+ dataRegionCompressionRatio.getRight())
+ + "."
+ + dataRegionId);
+ dataRegionCompressionRatio.setLeft(dataRegionCompressionRatio.getLeft() +
memorySize);
+ dataRegionCompressionRatio.setRight(dataRegionCompressionRatio.getRight()
+ diskSize);
+ File newDataRegionFile =
+ SystemFileFactory.INSTANCE.getFile(
+ directory,
+ String.format(
+ Locale.ENGLISH,
+ RATIO_FILE_PATH_FORMAT,
+ dataRegionCompressionRatio.getLeft(),
+ dataRegionCompressionRatio.getRight())
+ + "."
+ + dataRegionId);
+ persist(oldDataRegionFile, newDataRegionFile);
}
/** Get the average compression ratio for all closed files */
@@ -108,6 +142,20 @@ public class CompressionRatio {
return (double) totalMemorySize.get() / totalDiskSize;
}
+ public double getRatio(String dataRegionId) {
+ Pair<Long, Long> ratioPair =
+ dataRegionRatioMap.compute(
+ dataRegionId,
+ (dId, oldPair) -> {
+ if (oldPair == null) {
+ return new Pair<>(0L, 0L);
+ }
+ // return a copy to avoid concurrent modification
+ return new Pair<>(oldPair.left, oldPair.right);
+ });
+ return (double) ratioPair.left / ratioPair.right;
+ }
+
private void persist(File oldFile, File newFile) throws IOException {
checkDirectoryExist();
if (!oldFile.exists()) {
@@ -132,12 +180,47 @@ public class CompressionRatio {
}
}
- /** Restore compression ratio statistics from disk when system restart */
- void restore() throws IOException {
- if (!directory.exists()) {
+ private void recoverDataRegionRatio(File[] ratioFiles) {
+ if (ratioFiles == null) {
return;
}
- File[] ratioFiles = directory.listFiles((dir, name) ->
name.startsWith(FILE_PREFIX));
+
+ Map<String, Integer> validFileIndex = new HashMap<>();
+ for (int i = 0, ratioFilesLength = ratioFiles.length; i <
ratioFilesLength; i++) {
+ File ratioFile = ratioFiles[i];
+ String fileName = ratioFile.getName();
+ String ratioPart = fileName.substring(0, fileName.lastIndexOf("."));
+ String dataRegionId = fileName.substring(fileName.lastIndexOf(".") + 1);
+
+ String[] fileNameArray = ratioPart.split("-");
+ // fileNameArray.length != 3 means the compression ratio may be
negative, ignore it
+ if (fileNameArray.length == 3) {
+ try {
+ Pair<Long, Long> regionRatioPair =
+ dataRegionRatioMap.computeIfAbsent(dataRegionId, id -> new
Pair<>(0L, 0L));
+ long diskSize = Long.parseLong(fileNameArray[2]);
+ if (diskSize > regionRatioPair.getRight()) {
+ regionRatioPair.setRight(diskSize);
+ regionRatioPair.setLeft(Long.parseLong(fileNameArray[1]));
+ validFileIndex.put(dataRegionId, i);
+ }
+ } catch (NumberFormatException ignore) {
+ // ignore illegal compression file name
+ }
+ }
+ }
+ validFileIndex.values().forEach(i -> ratioFiles[i] = null);
+
+ for (File ratioFile : ratioFiles) {
+ if (ratioFile != null) {
+ if (!ratioFile.delete()) {
+ LOGGER.warn("Cannot delete ratio file {}",
ratioFile.getAbsolutePath());
+ }
+ }
+ }
+ }
+
+ private void recoverDataNodeRatio(File[] ratioFiles) throws IOException {
// First try to recover from the new version of the file, parse the file
name, and get the file
// with the largest disk size value
if (ratioFiles != null && ratioFiles.length > 0) {
@@ -191,6 +274,19 @@ public class CompressionRatio {
}
}
+ /** Restore compression ratio statistics from disk when system restart */
+ void restore() throws IOException {
+ if (!directory.exists()) {
+ return;
+ }
+ File[] dataNodeRatioFiles =
+ directory.listFiles((dir, name) -> name.startsWith(FILE_PREFIX) &&
!name.contains("."));
+ recoverDataNodeRatio(dataNodeRatioFiles);
+ File[] dataRegionRatioFiles =
+ directory.listFiles((dir, name) -> name.startsWith(FILE_PREFIX) &&
name.contains("."));
+ recoverDataRegionRatio(dataRegionRatioFiles);
+ }
+
public static void deleteRedundantFilesByIndex(File[] files, int index)
throws IOException {
for (int i = 0; i < files.length; i++) {
if (i != index) {
@@ -215,6 +311,10 @@ public class CompressionRatio {
totalDiskSize = 0L;
}
+ public Map<String, Pair<Long, Long>> getDataRegionRatioMap() {
+ return dataRegionRatioMap;
+ }
+
public static CompressionRatio getInstance() {
return CompressionRatioHolder.INSTANCE;
}
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 b9bb04cff4e..0914f98b7ba 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
@@ -1716,7 +1716,7 @@ public class TsFileProcessor {
String dataRegionId = dataRegionInfo.getDataRegion().getDataRegionId();
WritingMetrics.getInstance()
.recordTsFileCompressionRatioOfFlushingMemTable(dataRegionId,
compressionRatio);
- CompressionRatio.getInstance().updateRatio(totalMemTableSize,
writer.getPos());
+ CompressionRatio.getInstance().updateRatio(totalMemTableSize,
writer.getPos(), dataRegionId);
} catch (IOException e) {
logger.error(
"{}: {} update compression ratio failed",
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
index c955f67c79c..f90cb0353bb 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/UnsealedTsFileRecoverPerformer.java
@@ -292,7 +292,7 @@ public class UnsealedTsFileRecoverPerformer extends
AbstractTsFileRecoverPerform
String.format("%.2f", compressionRatio),
memTableSize,
writer.getPos());
- CompressionRatio.getInstance().updateRatio(memTableSize,
writer.getPos());
+ CompressionRatio.getInstance().updateRatio(memTableSize,
writer.getPos(), dataRegionId);
} catch (IOException e) {
logger.error(
"{}: {} update compression ratio failed",
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/flush/CompressionRatioTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/flush/CompressionRatioTest.java
index f088fee719a..d78d61168f7 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/flush/CompressionRatioTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/flush/CompressionRatioTest.java
@@ -63,7 +63,7 @@ public class CompressionRatioTest {
long totalDiskSize = 5;
for (int i = 0; i < 5; i++) {
- this.compressionRatio.updateRatio(10, 5);
+ this.compressionRatio.updateRatio(10, 5, "dr" + i);
if (!new File(
directory,
String.format(
@@ -75,6 +75,7 @@ public class CompressionRatioTest {
fail();
}
assertEquals(2, this.compressionRatio.getRatio(), 0.1);
+ assertEquals(2, this.compressionRatio.getRatio("dr" + i), 0.1);
totalMemorySize += 10;
totalDiskSize += 5;
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
index fee8c301597..ff6e9bc42a6 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeaderConstant.java
@@ -163,6 +163,7 @@ public class ColumnHeaderConstant {
public static final String ROLE = "Role";
public static final String CREATE_TIME = "CreateTime";
public static final String TSFILE_SIZE = "TsFileSize";
+ public static final String COMPRESSION_RATIO = "CompressionRatio";
// column names for show datanodes
public static final String SCHEMA_REGION_NUM = "SchemaRegionNum";
@@ -225,6 +226,7 @@ public class ColumnHeaderConstant {
public static final String INTERNAL_ADDRESS_TABLE_MODEL = "internal_address";
public static final String CREATE_TIME_TABLE_MODEL = "create_time";
public static final String TS_FILE_SIZE_BYTES_TABLE_MODEL =
"tsfile_size_bytes";
+ public static final String COMPRESSION_RATIO_TABLE_MODEL =
"compression_ratio";
public static final String CREATION_TIME_TABLE_MODEL = "creation_time";
public static final String PIPE_SOURCE_TABLE_MODEL = "pipe_source";
@@ -430,7 +432,8 @@ public class ColumnHeaderConstant {
new ColumnHeader(INTERNAL_ADDRESS, TSDataType.TEXT),
new ColumnHeader(ROLE, TSDataType.TEXT),
new ColumnHeader(CREATE_TIME, TSDataType.TEXT),
- new ColumnHeader(TSFILE_SIZE, TSDataType.TEXT));
+ new ColumnHeader(TSFILE_SIZE, TSDataType.TEXT),
+ new ColumnHeader(COMPRESSION_RATIO, TSDataType.DOUBLE));
public static final List<ColumnHeader> showAINodesColumnHeaders =
ImmutableList.of(
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
index 3cb880e27bd..c58ad14989c 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/InformationSchema.java
@@ -175,6 +175,9 @@ public class InformationSchema {
regionTable.addColumnSchema(
new AttributeColumnSchema(
ColumnHeaderConstant.TS_FILE_SIZE_BYTES_TABLE_MODEL,
TSDataType.INT64));
+ regionTable.addColumnSchema(
+ new AttributeColumnSchema(
+ ColumnHeaderConstant.COMPRESSION_RATIO_TABLE_MODEL,
TSDataType.DOUBLE));
regionTable.removeColumnSchema(TsTable.TIME_COLUMN_NAME);
schemaTables.put(REGIONS, regionTable);
diff --git a/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift
b/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift
index a70a1f42ee0..b869d29cde3 100644
--- a/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift
+++ b/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift
@@ -721,6 +721,7 @@ struct TRegionInfo {
10: optional i64 createTime
11: optional string internalAddress
12: optional i64 tsFileSize
+ 13: optional i64 rawDataSize
}
struct TShowRegionResp {
diff --git a/iotdb-protocol/thrift-datanode/src/main/thrift/datanode.thrift
b/iotdb-protocol/thrift-datanode/src/main/thrift/datanode.thrift
index b50358dc1bc..290987d0feb 100644
--- a/iotdb-protocol/thrift-datanode/src/main/thrift/datanode.thrift
+++ b/iotdb-protocol/thrift-datanode/src/main/thrift/datanode.thrift
@@ -311,6 +311,7 @@ struct TDataNodeHeartbeatResp {
14: optional list<bool> pipeCompletedList
15: optional list<i64> pipeRemainingEventCountList
16: optional list<double> pipeRemainingTimeList
+ 17: optional map<i32, i64> dataRegionRawDataSize
}
struct TPipeHeartbeatReq {