This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/develop by this push:
new 052ff6b4 add 'dataTypeModifiedAndCannotUseStatistics' (#724)
052ff6b4 is described below
commit 052ff6b44f68d3f2e04bfd7190067e4f5efb038c
Author: shuwenwei <[email protected]>
AuthorDate: Fri Feb 6 15:18:35 2026 +0800
add 'dataTypeModifiedAndCannotUseStatistics' (#724)
---
.../file/metadata/AbstractAlignedChunkMetadata.java | 12 ++++++++++++
.../metadata/AbstractAlignedTimeSeriesMetadata.java | 12 ++++++++++++
.../apache/tsfile/file/metadata/ChunkMetadata.java | 17 ++++++++++++++++-
.../apache/tsfile/file/metadata/IChunkMetadata.java | 4 ++++
.../tsfile/file/metadata/ITimeSeriesMetadata.java | 4 ++++
.../tsfile/file/metadata/TimeseriesMetadata.java | 20 ++++++++++++++++++--
.../org/apache/tsfile/read/reader/IChunkReader.java | 2 ++
.../org/apache/tsfile/read/reader/IPageReader.java | 2 ++
.../read/reader/chunk/AbstractChunkReader.java | 9 +++++++++
9 files changed, 79 insertions(+), 3 deletions(-)
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
index 52a1913c..8b7cfcc4 100644
---
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
+++
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
@@ -85,6 +85,18 @@ public abstract class AbstractAlignedChunkMetadata
implements IChunkMetadata {
}
}
+ @Override
+ public boolean isDataTypeModifiedAndCannotUseStatistics() {
+ return timeChunkMetadata.isDataTypeModifiedAndCannotUseStatistics();
+ }
+
+ @Override
+ public void setDataTypeModifiedAndCannotUseStatistics(
+ boolean dataTypeModifiedAndCannotUseStatistics) {
+ timeChunkMetadata.setDataTypeModifiedAndCannotUseStatistics(
+ dataTypeModifiedAndCannotUseStatistics);
+ }
+
@Override
public boolean isSeq() {
return timeChunkMetadata.isSeq();
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
index b7a15250..74ee4db7 100644
---
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
+++
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
@@ -84,6 +84,18 @@ public abstract class AbstractAlignedTimeSeriesMetadata
implements ITimeSeriesMe
}
}
+ @Override
+ public boolean isDataTypeModifiedAndCannotUseStatistics() {
+ return timeseriesMetadata.isDataTypeModifiedAndCannotUseStatistics();
+ }
+
+ @Override
+ public void setDataTypeModifiedAndCannotUseStatistics(
+ boolean dataTypeModifiedAndCannotUseStatistics) {
+ timeseriesMetadata.setDataTypeModifiedAndCannotUseStatistics(
+ dataTypeModifiedAndCannotUseStatistics);
+ }
+
@Override
public boolean isSeq() {
return timeseriesMetadata.isSeq();
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ChunkMetadata.java
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ChunkMetadata.java
index 42648621..09d33989 100644
---
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ChunkMetadata.java
+++
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ChunkMetadata.java
@@ -75,6 +75,10 @@ public class ChunkMetadata implements IChunkMetadata {
private boolean modified;
+ // data type modified
+ // Unlike the 'modified' property, this property should be passed down to a
lower level.
+ private boolean dataTypeModifiedAndCannotUseStatistics;
+
/** ChunkLoader of metadata, used to create ChunkReaderWrap. */
private IChunkLoader chunkLoader;
@@ -329,7 +333,7 @@ public class ChunkMetadata implements IChunkMetadata {
@Override
public boolean isModified() {
- return modified;
+ return modified || dataTypeModifiedAndCannotUseStatistics;
}
@Override
@@ -337,6 +341,17 @@ public class ChunkMetadata implements IChunkMetadata {
this.modified |= modified;
}
+ @Override
+ public boolean isDataTypeModifiedAndCannotUseStatistics() {
+ return dataTypeModifiedAndCannotUseStatistics;
+ }
+
+ @Override
+ public void setDataTypeModifiedAndCannotUseStatistics(
+ boolean dataTypeModifiedAndCannotUseStatistics) {
+ this.dataTypeModifiedAndCannotUseStatistics |=
dataTypeModifiedAndCannotUseStatistics;
+ }
+
public static long calculateRamSize(String measurementId, TSDataType
dataType) {
return CHUNK_METADATA_FIXED_RAM_SIZE
+ RamUsageEstimator.sizeOf(measurementId)
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IChunkMetadata.java
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IChunkMetadata.java
index f391ed7f..41d1bbc3 100644
---
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IChunkMetadata.java
+++
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IChunkMetadata.java
@@ -33,6 +33,10 @@ public interface IChunkMetadata extends IMetadata {
void setModified(boolean modified);
+ boolean isDataTypeModifiedAndCannotUseStatistics();
+
+ void setDataTypeModifiedAndCannotUseStatistics(boolean
dataTypeModifiedAndCannotUseStatistics);
+
boolean isSeq();
void setSeq(boolean seq);
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ITimeSeriesMetadata.java
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ITimeSeriesMetadata.java
index c2ddca15..878b8a65 100644
---
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ITimeSeriesMetadata.java
+++
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ITimeSeriesMetadata.java
@@ -30,6 +30,10 @@ public interface ITimeSeriesMetadata extends IMetadata {
void setModified(boolean modified);
+ boolean isDataTypeModifiedAndCannotUseStatistics();
+
+ void setDataTypeModifiedAndCannotUseStatistics(boolean
dataTypeModifiedAndCannotUseStatistics);
+
boolean isSeq();
void setSeq(boolean seq);
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TimeseriesMetadata.java
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TimeseriesMetadata.java
index 1e254e06..790f457d 100644
---
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TimeseriesMetadata.java
+++
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TimeseriesMetadata.java
@@ -81,6 +81,10 @@ public class TimeseriesMetadata implements
ITimeSeriesMetadata {
// modified is true when there are modifications of the series, or from
unseq file
private boolean modified;
+ // data type modified
+ // Unlike the 'modified' property, this property should be passed down to a
lower level.
+ private boolean dataTypeModifiedAndCannotUseStatistics;
+
private IChunkMetadataLoader chunkMetadataLoader;
// used for SeriesReader to indicate whether it is a seq/unseq timeseries
metadata
@@ -343,14 +347,17 @@ public class TimeseriesMetadata implements
ITimeSeriesMetadata {
public List<IChunkMetadata> getCopiedChunkMetadataList() {
List<IChunkMetadata> res = new ArrayList<>(chunkMetadataList.size());
for (IChunkMetadata chunkMetadata : chunkMetadataList) {
- res.add(new ChunkMetadata((ChunkMetadata) chunkMetadata));
+ ChunkMetadata copiedChunkMetadata = new ChunkMetadata((ChunkMetadata)
chunkMetadata);
+ copiedChunkMetadata.setDataTypeModifiedAndCannotUseStatistics(
+ dataTypeModifiedAndCannotUseStatistics);
+ res.add(copiedChunkMetadata);
}
return res;
}
@Override
public boolean isModified() {
- return modified;
+ return modified || dataTypeModifiedAndCannotUseStatistics;
}
@Override
@@ -358,6 +365,15 @@ public class TimeseriesMetadata implements
ITimeSeriesMetadata {
this.modified |= modified;
}
+ public boolean isDataTypeModifiedAndCannotUseStatistics() {
+ return dataTypeModifiedAndCannotUseStatistics;
+ }
+
+ public void setDataTypeModifiedAndCannotUseStatistics(
+ boolean dataTypeModifiedAndCannotUseStatistics) {
+ this.dataTypeModifiedAndCannotUseStatistics |=
dataTypeModifiedAndCannotUseStatistics;
+ }
+
@Override
public void setSeq(boolean seq) {
isSeq = seq;
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IChunkReader.java
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IChunkReader.java
index acda8af6..e13d32d9 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IChunkReader.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IChunkReader.java
@@ -32,5 +32,7 @@ public interface IChunkReader {
void close() throws IOException;
+ void markDataTypeModifiedAndCannotUseStatistics();
+
List<IPageReader> loadPageReaderList() throws IOException;
}
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IPageReader.java
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IPageReader.java
index 1b870f86..1227fd01 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IPageReader.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IPageReader.java
@@ -41,6 +41,8 @@ public interface IPageReader extends IMetadata {
void addRecordFilter(Filter filter);
+ // The 'modified' property is also true when a data type need to be modified
in query and
+ // statistics are no longer available.
boolean isModified();
void setModified(boolean modified);
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/AbstractChunkReader.java
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/AbstractChunkReader.java
index 301134d4..627ace07 100644
---
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/AbstractChunkReader.java
+++
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/AbstractChunkReader.java
@@ -80,4 +80,13 @@ public abstract class AbstractChunkReader implements
IChunkReader {
public List<IPageReader> loadPageReaderList() {
return pageReaderList;
}
+
+ @Override
+ public void markDataTypeModifiedAndCannotUseStatistics() {
+ // In all implementations for now, pageReaderList is completed during
construction.
+ // In other cases, this method should be overridden.
+ for (IPageReader iPageReader : pageReaderList) {
+ iPageReader.setModified(true);
+ }
+ }
}