This is an automated email from the ASF dual-hosted git repository.
jackietien 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 06537dc2fd0 correct metadata "modified" flags and related logic
(#17172)
06537dc2fd0 is described below
commit 06537dc2fd0f618cf737dccb85def5e53be70729
Author: shuwenwei <[email protected]>
AuthorDate: Mon Feb 9 15:58:18 2026 +0800
correct metadata "modified" flags and related logic (#17172)
---
.../db/it/schema/IoTDBAlterTimeSeriesTypeIT.java | 6 +-
.../execution/operator/source/FileLoaderUtils.java | 80 ++++---------
.../execution/operator/source/SeriesScanUtil.java | 47 +-------
.../schemaregion/utils/ResourceByPathUtils.java | 6 +-
.../read/reader/chunk/MemAlignedChunkReader.java | 7 ++
.../read/reader/chunk/MemAlignedPageReader.java | 9 +-
.../read/reader/chunk/MemChunkReader.java | 7 ++
.../read/reader/chunk/MemPageReader.java | 9 +-
.../org/apache/iotdb/db/utils/SchemaUtils.java | 126 ++++++---------------
pom.xml | 2 +-
10 files changed, 89 insertions(+), 210 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBAlterTimeSeriesTypeIT.java
b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBAlterTimeSeriesTypeIT.java
index 3effc3a8b83..e5fa5ca59a7 100644
---
a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBAlterTimeSeriesTypeIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBAlterTimeSeriesTypeIT.java
@@ -26,8 +26,8 @@ import org.apache.iotdb.isession.ISession;
import org.apache.iotdb.isession.SessionDataSet;
import org.apache.iotdb.it.env.EnvFactory;
import org.apache.iotdb.it.framework.IoTDBTestRunner;
-import org.apache.iotdb.itbase.category.TableClusterIT;
-import org.apache.iotdb.itbase.category.TableLocalStandaloneIT;
+import org.apache.iotdb.itbase.category.ClusterIT;
+import org.apache.iotdb.itbase.category.LocalStandaloneIT;
import org.apache.iotdb.rpc.IoTDBConnectionException;
import org.apache.iotdb.rpc.StatementExecutionException;
@@ -87,7 +87,7 @@ import static org.junit.Assert.fail;
@SuppressWarnings("ResultOfMethodCallIgnored")
@RunWith(IoTDBTestRunner.class)
-@Category({TableLocalStandaloneIT.class, TableClusterIT.class})
+@Category({LocalStandaloneIT.class, ClusterIT.class})
public class IoTDBAlterTimeSeriesTypeIT {
private static final Logger log =
LoggerFactory.getLogger(IoTDBAlterTimeSeriesTypeIT.class);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
index 9b341dc9971..3eff3b9a53f 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
@@ -40,7 +40,6 @@ import org.apache.iotdb.db.utils.ModificationUtils;
import org.apache.iotdb.db.utils.SchemaUtils;
import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
import org.apache.tsfile.file.metadata.AbstractAlignedTimeSeriesMetadata;
import org.apache.tsfile.file.metadata.AlignedTimeSeriesMetadata;
import org.apache.tsfile.file.metadata.IChunkMetadata;
@@ -113,13 +112,11 @@ public class FileLoaderUtils {
context.isDebug(),
context);
if (timeSeriesMetadata != null) {
- SchemaUtils.changeMetadataModified(timeSeriesMetadata,
seriesPath.getSeriesType());
long t2 = System.nanoTime();
List<ModEntry> pathModifications =
context.getPathModifications(
resource, seriesPath.getDeviceId(),
seriesPath.getMeasurement());
- timeSeriesMetadata.setModified(
- timeSeriesMetadata.isModified() || !pathModifications.isEmpty());
+ timeSeriesMetadata.setModified(!pathModifications.isEmpty());
timeSeriesMetadata.setChunkMetadataLoader(
new DiskChunkMetadataLoader(resource, context, globalTimeFilter,
pathModifications));
int modificationCount = pathModifications.size();
@@ -141,13 +138,14 @@ public class FileLoaderUtils {
timeSeriesMetadata =
(TimeseriesMetadata) resource.getTimeSeriesMetadata(seriesPath,
globalTimeFilter);
if (timeSeriesMetadata != null) {
- SchemaUtils.changeMetadataModified(timeSeriesMetadata,
seriesPath.getSeriesType());
timeSeriesMetadata.setChunkMetadataLoader(
new MemChunkMetadataLoader(resource, seriesPath, context,
globalTimeFilter));
}
}
if (timeSeriesMetadata != null) {
+ SchemaUtils.changeTimeseriesMetadataModified(
+ timeSeriesMetadata, seriesPath.getSeriesType());
if (timeSeriesMetadata.getStatistics().getStartTime()
> timeSeriesMetadata.getStatistics().getEndTime()) {
return null;
@@ -209,15 +207,12 @@ public class FileLoaderUtils {
alignedTimeSeriesMetadata =
loadAlignedTimeSeriesMetadataFromDisk(
resource, alignedPath, context, globalTimeFilter,
ignoreAllNullRows);
- SchemaUtils.changeAlignedMetadataModified(alignedTimeSeriesMetadata,
targetDataTypeList);
} else { // if the tsfile is unclosed, we just get it directly from
TsFileResource
loadFromMem = true;
alignedTimeSeriesMetadata =
(AbstractAlignedTimeSeriesMetadata)
resource.getTimeSeriesMetadata(alignedPath, globalTimeFilter);
if (alignedTimeSeriesMetadata != null) {
- SchemaUtils.changeAlignedMetadataModified(alignedTimeSeriesMetadata,
targetDataTypeList);
-
alignedTimeSeriesMetadata.setChunkMetadataLoader(
new MemAlignedChunkMetadataLoader(
resource, alignedPath, context, globalTimeFilter,
ignoreAllNullRows));
@@ -226,6 +221,8 @@ public class FileLoaderUtils {
}
if (alignedTimeSeriesMetadata != null) {
+ SchemaUtils.changeAlignedTimeseriesMetadataModified(
+ alignedTimeSeriesMetadata, targetDataTypeList);
if
(alignedTimeSeriesMetadata.getTimeseriesMetadata().getStatistics().getStartTime()
>
alignedTimeSeriesMetadata.getTimeseriesMetadata().getStatistics().getEndTime())
{
return null;
@@ -320,25 +317,18 @@ public class FileLoaderUtils {
new ArrayList<>(valueMeasurementList.size());
// if all the queried aligned sensors does not exist, we will return
null
boolean exist = false;
- int i = 0;
- for (String valueMeasurement : valueMeasurementList) {
+ for (String measurement : valueMeasurementList) {
TimeseriesMetadata valueColumn =
cache.get(
filePath,
- new TimeSeriesMetadataCacheKey(
- resource.getTsFileID(), deviceId, valueMeasurement),
+ new TimeSeriesMetadataCacheKey(resource.getTsFileID(),
deviceId, measurement),
allSensors,
context.ignoreNotExistsDevice()
|| resource.getTimeIndexType() ==
ITimeIndex.FILE_TIME_INDEX_TYPE,
isDebug,
context);
exist = (exist || (valueColumn != null));
- if (valueColumn != null) {
- SchemaUtils.changeAlignedMetadataModified(
- valueColumn, alignedPath.getSchemaList().get(i).getType());
- }
valueTimeSeriesMetadataList.add(valueColumn);
- i++;
}
if (!ignoreAllNullRows || exist) {
alignedTimeSeriesMetadata =
@@ -458,55 +448,23 @@ public class FileLoaderUtils {
* IOException will be thrown
*/
public static List<IPageReader> loadPageReaderList(
- IChunkMetadata chunkMetaData,
- Filter globalTimeFilter,
- boolean isAligned,
- List<TSDataType> targetDataTypeList)
+ IChunkMetadata chunkMetaData, Filter globalTimeFilter, List<TSDataType>
targetDataTypeList)
throws IOException {
checkArgument(chunkMetaData != null, "Can't init null chunkMeta");
+ IChunkLoader chunkLoader = chunkMetaData.getChunkLoader();
IChunkReader chunkReader;
- boolean isModified = false;
- if (isAligned) {
- AbstractAlignedChunkMetadata alignedChunkMetadata =
- (AbstractAlignedChunkMetadata) chunkMetaData;
- for (int i = 0; i <
alignedChunkMetadata.getValueChunkMetadataList().size(); i++) {
- if (alignedChunkMetadata.getValueChunkMetadataList().get(i) != null) {
- if (!SchemaUtils.isUsingSameStatistics(
-
alignedChunkMetadata.getValueChunkMetadataList().get(i).getDataType(),
- targetDataTypeList.get(i))
- &&
!SchemaUtils.canUseStatisticsAfterAlter(targetDataTypeList.get(i))) {
- isModified = true;
-
alignedChunkMetadata.getValueChunkMetadataList().get(i).setModified(true);
- }
- }
- }
- IChunkLoader chunkLoader = alignedChunkMetadata.getChunkLoader();
- chunkReader = chunkLoader.getChunkReader(alignedChunkMetadata,
globalTimeFilter);
- } else {
- if (!SchemaUtils.isUsingSameStatistics(chunkMetaData.getDataType(),
targetDataTypeList.get(0))
- &&
!SchemaUtils.canUseStatisticsAfterAlter(targetDataTypeList.get(0))) {
- isModified = true;
- chunkMetaData.setModified(true);
- }
- IChunkLoader chunkLoader = chunkMetaData.getChunkLoader();
- try {
- chunkReader = chunkLoader.getChunkReader(chunkMetaData,
globalTimeFilter);
- } catch (ChunkTypeInconsistentException e) {
- // if the chunk in tsfile is a value chunk of aligned series, we
should skip all data of
- // this chunk.
- return Collections.emptyList();
- }
+ try {
+ chunkReader = chunkLoader.getChunkReader(chunkMetaData,
globalTimeFilter);
+ } catch (ChunkTypeInconsistentException e) {
+ // if the chunk in tsfile is a value chunk of aligned series but
registered series is
+ // non-aligned, we should skip all data of this chunk.
+ return Collections.emptyList();
}
-
- return isModified
- ? chunkReader.loadPageReaderList().stream()
- .peek(
- iPageReader -> {
- iPageReader.setModified(true);
- })
- .collect(Collectors.toList())
- : chunkReader.loadPageReaderList();
+ if (chunkMetaData.isDataTypeModifiedAndCannotUseStatistics()) {
+ chunkReader.markDataTypeModifiedAndCannotUseStatistics();
+ }
+ return chunkReader.loadPageReaderList();
}
/**
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
index 1e1cffba5ff..5e7111bf09c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
@@ -45,8 +45,6 @@ import
org.apache.iotdb.db.utils.datastructure.MemPointIterator;
import org.apache.tsfile.block.column.Column;
import org.apache.tsfile.common.conf.TSFileDescriptor;
import org.apache.tsfile.enums.TSDataType;
-import org.apache.tsfile.file.metadata.AbstractAlignedChunkMetadata;
-import org.apache.tsfile.file.metadata.ChunkMetadata;
import org.apache.tsfile.file.metadata.IChunkMetadata;
import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.file.metadata.IMetadata;
@@ -453,15 +451,6 @@ public class SeriesScanUtil implements Accountable {
orderUtils.getOverlapCheckTime(firstChunkMetadata.getStatistics()));
unpackAllOverlappedTimeSeriesMetadataToCachedChunkMetadata(
orderUtils.getOverlapCheckTime(firstChunkMetadata.getStatistics()), false);
- if (isAligned) {
- SchemaUtils.changeAlignedMetadataModified(
- (AbstractAlignedChunkMetadata) firstChunkMetadata,
- firstChunkMetadata.getDataType(),
- getTsDataTypeList());
- } else {
- SchemaUtils.changeMetadataModified(
- firstChunkMetadata, firstChunkMetadata.getDataType(), dataType);
- }
if (firstChunkMetadata.equals(cachedChunkMetadata.peek())) {
firstChunkMetadata = cachedChunkMetadata.poll();
break;
@@ -489,45 +478,13 @@ public class SeriesScanUtil implements Accountable {
if (init && firstChunkMetadata == null && !cachedChunkMetadata.isEmpty()) {
firstChunkMetadata = cachedChunkMetadata.poll();
- if (isAligned) {
- SchemaUtils.changeAlignedMetadataModified(
- (AbstractAlignedChunkMetadata) firstChunkMetadata,
- firstChunkMetadata.getDataType(),
- getTsDataTypeList());
- } else {
- SchemaUtils.changeMetadataModified(
- firstChunkMetadata, firstChunkMetadata.getDataType(), dataType);
- }
}
}
protected void unpackOneTimeSeriesMetadata(ITimeSeriesMetadata
timeSeriesMetadata) {
List<IChunkMetadata> chunkMetadataList =
FileLoaderUtils.loadChunkMetadataList(timeSeriesMetadata);
- chunkMetadataList.forEach(
- chunkMetadata -> {
- if (chunkMetadata instanceof AbstractAlignedChunkMetadata) {
- AbstractAlignedChunkMetadata alignedChunkMetadata =
- (AbstractAlignedChunkMetadata) chunkMetadata;
- for (int i = 0; i <
alignedChunkMetadata.getValueChunkMetadataList().size(); i++) {
- if ((alignedChunkMetadata.getValueChunkMetadataList().get(i) !=
null)
- && !SchemaUtils.isUsingSameStatistics(
-
alignedChunkMetadata.getValueChunkMetadataList().get(i).getDataType(),
- getTsDataTypeList().get(i))
- &&
!SchemaUtils.canUseStatisticsAfterAlter(getTsDataTypeList().get(i))) {
-
alignedChunkMetadata.getValueChunkMetadataList().get(i).setModified(true);
- }
- }
- chunkMetadata = alignedChunkMetadata;
- } else if (chunkMetadata instanceof ChunkMetadata) {
- if (!SchemaUtils.isUsingSameStatistics(
- chunkMetadata.getDataType(), getTsDataTypeList().get(0))
- &&
!SchemaUtils.canUseStatisticsAfterAlter(getTsDataTypeList().get(0))) {
- chunkMetadata.setModified(true);
- }
- }
- chunkMetadata.setSeq(timeSeriesMetadata.isSeq());
- });
+ chunkMetadataList.forEach(chunkMetadata ->
chunkMetadata.setSeq(timeSeriesMetadata.isSeq()));
cachedChunkMetadata.addAll(chunkMetadataList);
}
@@ -704,7 +661,7 @@ public class SeriesScanUtil implements Accountable {
}
List<IPageReader> pageReaderList =
FileLoaderUtils.loadPageReaderList(
- chunkMetaData, scanOptions.getGlobalTimeFilter(), isAligned,
getTsDataTypeList());
+ chunkMetaData, scanOptions.getGlobalTimeFilter(),
getTsDataTypeList());
// init TsBlockBuilder for each page reader
pageReaderList.forEach(p -> p.initTsBlockBuilder(getTsDataTypeList()));
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
index 690cea9f03b..adb76d9bbdd 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
@@ -364,7 +364,7 @@ class AlignedResourceByPathUtils extends
ResourceByPathUtils {
TSDataType targetDataType = measurementMap.get(measurement);
if (valueChunkMetadata.getDataType() != targetDataType) {
SchemaUtils.rewriteAlignedChunkMetadataStatistics(alignedChunkMetadata, i,
targetDataType);
- alignedChunkMetadata.setModified(true);
+ alignedChunkMetadata.setDataTypeModifiedAndCannotUseStatistics(true);
}
}
}
@@ -571,7 +571,7 @@ class MeasurementResourceByPathUtils extends
ResourceByPathUtils {
return null;
}
chunkMetadataList.set(index, chunkMetadata);
- chunkMetadata.setModified(true);
+ chunkMetadata.setDataTypeModifiedAndCannotUseStatistics(true);
}
if (!useFakeStatistics) {
if (chunkMetadata != null &&
targetDataType.isCompatible(chunkMetadata.getDataType())) {
@@ -597,7 +597,7 @@ class MeasurementResourceByPathUtils extends
ResourceByPathUtils {
return null;
}
memChunk.setChunkMetadata(rewritedChunkMetadata);
- memChunk.getChunkMetaData().setModified(true);
+
memChunk.getChunkMetaData().setDataTypeModifiedAndCannotUseStatistics(true);
}
if (useFakeStatistics) {
memChunk.initChunkMetaFromTVListsWithFakeStatistics();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
index 093ae9cc327..c85dcef9ace 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
@@ -85,6 +85,13 @@ public class MemAlignedChunkReader implements IChunkReader {
// Do nothing because mem chunk reader will not open files
}
+ @Override
+ public void markDataTypeModifiedAndCannotUseStatistics() {
+ for (IPageReader iPageReader : pageReaderList) {
+ iPageReader.setModified(true);
+ }
+ }
+
@Override
public List<IPageReader> loadPageReaderList() {
return this.pageReaderList;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
index a299684a49c..758721f9a05 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
@@ -60,6 +60,9 @@ public class MemAlignedPageReader implements IPageReader {
private Filter recordFilter;
private PaginationController paginationController =
UNLIMITED_PAGINATION_CONTROLLER;
+ // data type is modified in query and statistics cannot be used
+ private boolean modified;
+
private TsBlockBuilder builder;
public MemAlignedPageReader(
@@ -214,11 +217,13 @@ public class MemAlignedPageReader implements IPageReader {
@Override
public boolean isModified() {
- return false;
+ return modified;
}
@Override
- public void setModified(boolean modified) {}
+ public void setModified(boolean modified) {
+ this.modified = modified;
+ }
@Override
public void initTsBlockBuilder(List<TSDataType> dataTypes) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkReader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkReader.java
index 4b21d87d114..8cee8b970c5 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkReader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkReader.java
@@ -129,6 +129,13 @@ public class MemChunkReader implements IChunkReader,
IPointReader {
// Do nothing because mem chunk reader will not open files
}
+ @Override
+ public void markDataTypeModifiedAndCannotUseStatistics() {
+ for (IPageReader pageReader : this.pageReaderList) {
+ pageReader.setModified(true);
+ }
+ }
+
@Override
public List<IPageReader> loadPageReaderList() {
return this.pageReaderList;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemPageReader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemPageReader.java
index e7427ef87d8..0f656a96f69 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemPageReader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemPageReader.java
@@ -57,6 +57,9 @@ public class MemPageReader implements IPageReader {
private PaginationController paginationController =
UNLIMITED_PAGINATION_CONTROLLER;
+ // data type is modified in query and statistics cannot be used
+ private boolean modified;
+
public MemPageReader(
Supplier<TsBlock> tsBlockSupplier,
int pageIndex,
@@ -223,11 +226,13 @@ public class MemPageReader implements IPageReader {
@Override
public boolean isModified() {
- return false;
+ return modified;
}
@Override
- public void setModified(boolean modified) {}
+ public void setModified(boolean modified) {
+ this.modified = modified;
+ }
@Override
public void initTsBlockBuilder(List<TSDataType> dataTypes) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
index 6044b2331d1..281b1be2b35 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
@@ -40,6 +40,8 @@ import org.apache.tsfile.utils.Binary;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.annotation.Nullable;
+
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
@@ -314,120 +316,58 @@ public class SchemaUtils {
dataTypeColumnClassMap.get(originalDataType),
dataTypeColumnClassMap.get(dataType));
}
- public static boolean isUsingSameStatistics(TSDataType originalDataType,
TSDataType dataType) {
- if (originalDataType == dataType) {
- return true;
- }
- if (!dataTypeColumnStatisticsClassMap.containsKey(originalDataType)
- || !dataTypeColumnStatisticsClassMap.containsKey(dataType)) {
- return false;
- }
- return Objects.equals(
- dataTypeColumnStatisticsClassMap.get(originalDataType),
- dataTypeColumnStatisticsClassMap.get(dataType));
- }
-
- public static boolean canUseStatisticsAfterAlter(TSDataType dataType) {
- return !canNotUseStatisticAfterAlterClassSet.contains(dataType);
- }
-
- public static void changeMetadataModified(
- TimeseriesMetadata timeseriesMetadata, TSDataType targetDataType) {
+ public static void changeTimeseriesMetadataModified(
+ @Nullable TimeseriesMetadata timeseriesMetadata, TSDataType
targetDataType) {
if (timeseriesMetadata == null) {
return;
}
- if (!SchemaUtils.isUsingSameStatistics(timeseriesMetadata.getTsDataType(),
targetDataType)
- && !SchemaUtils.canUseStatisticsAfterAlter(targetDataType)) {
- timeseriesMetadata.setModified(true);
- List<IChunkMetadata> chunkMetadataList =
timeseriesMetadata.getChunkMetadataList();
- if (chunkMetadataList != null) {
- for (IChunkMetadata chunkMetadata : chunkMetadataList) {
- if (chunkMetadata != null) {
- chunkMetadata.setModified(true);
- }
- }
- }
+ if (!SchemaUtils.canUseStatisticsAfterAlter(
+ timeseriesMetadata.getTsDataType(), targetDataType)) {
+ timeseriesMetadata.setDataTypeModifiedAndCannotUseStatistics(true);
}
}
- public static void changeAlignedMetadataModified(
- AbstractAlignedTimeSeriesMetadata alignedTimeSeriesMetadata,
+ public static void changeAlignedTimeseriesMetadataModified(
+ @Nullable AbstractAlignedTimeSeriesMetadata alignedTimeSeriesMetadata,
List<TSDataType> targetDataTypeList) {
if (alignedTimeSeriesMetadata == null) {
return;
}
-
- int i = 0;
- for (TimeseriesMetadata timeseriesMetadata :
- alignedTimeSeriesMetadata.getValueTimeseriesMetadataList()) {
- if ((timeseriesMetadata != null)
- && !SchemaUtils.isUsingSameStatistics(
- timeseriesMetadata.getTsDataType(), targetDataTypeList.get(i))
- &&
!SchemaUtils.canUseStatisticsAfterAlter(targetDataTypeList.get(i))) {
- timeseriesMetadata.setModified(true);
- alignedTimeSeriesMetadata.setModified(true);
- List<IChunkMetadata> chunkMetadataList =
timeseriesMetadata.getChunkMetadataList();
- if (chunkMetadataList != null) {
- for (IChunkMetadata chunkMetadata : chunkMetadataList) {
- if (chunkMetadata != null) {
- chunkMetadata.setModified(true);
- }
- }
- }
+ for (int i = 0; i <
alignedTimeSeriesMetadata.getValueTimeseriesMetadataList().size(); i++) {
+ TimeseriesMetadata valueTimeseriesMetadata =
+ alignedTimeSeriesMetadata.getValueTimeseriesMetadataList().get(i);
+ if (valueTimeseriesMetadata != null
+ && !SchemaUtils.canUseStatisticsAfterAlter(
+ valueTimeseriesMetadata.getTsDataType(),
targetDataTypeList.get(i))) {
+
alignedTimeSeriesMetadata.setDataTypeModifiedAndCannotUseStatistics(true);
+ return;
}
- i++;
}
}
- public static void changeAlignedMetadataModified(
- TimeseriesMetadata timeseriesMetadata, TSDataType targetDataType) {
- if (timeseriesMetadata == null) {
- return;
- }
-
- if (!SchemaUtils.isUsingSameStatistics(timeseriesMetadata.getTsDataType(),
targetDataType)
- && !SchemaUtils.canUseStatisticsAfterAlter(targetDataType)) {
- timeseriesMetadata.setModified(true);
- List<IChunkMetadata> chunkMetadataList =
timeseriesMetadata.getChunkMetadataList();
- if (chunkMetadataList != null) {
- for (IChunkMetadata chunkMetadata : chunkMetadataList) {
- if (chunkMetadata != null) {
- chunkMetadata.setModified(true);
- }
- }
- }
+ public static boolean canUseStatisticsAfterAlter(
+ TSDataType originalDataType, TSDataType targetDataType) {
+ if (isUsingSameStatistics(originalDataType, targetDataType)) {
+ return true;
}
+ return canUseStatisticsAfterAlter(targetDataType);
}
- public static void changeMetadataModified(
- IChunkMetadata chunkMetadata, TSDataType sourceDataType, TSDataType
targetDataType) {
- if (chunkMetadata == null) {
- return;
+ private static boolean isUsingSameStatistics(TSDataType originalDataType,
TSDataType dataType) {
+ if (originalDataType == dataType) {
+ return true;
}
- if (!SchemaUtils.isUsingSameStatistics(sourceDataType, targetDataType)
- && !SchemaUtils.canUseStatisticsAfterAlter(targetDataType)) {
- chunkMetadata.setModified(true);
+ if (!dataTypeColumnStatisticsClassMap.containsKey(originalDataType)
+ || !dataTypeColumnStatisticsClassMap.containsKey(dataType)) {
+ return false;
}
+ return Objects.equals(
+ dataTypeColumnStatisticsClassMap.get(originalDataType),
+ dataTypeColumnStatisticsClassMap.get(dataType));
}
- public static void changeAlignedMetadataModified(
- AbstractAlignedChunkMetadata chunkMetadata,
- TSDataType sourceDataType,
- List<TSDataType> targetDataTypeList) {
- if (chunkMetadata == null) {
- return;
- }
- int i = 0;
- for (IChunkMetadata iChunkMetadata :
chunkMetadata.getValueChunkMetadataList()) {
- if ((iChunkMetadata != null)
- && !SchemaUtils.isUsingSameStatistics(
- iChunkMetadata.getDataType(), targetDataTypeList.get(i))
- &&
!SchemaUtils.canUseStatisticsAfterAlter(targetDataTypeList.get(i))) {
- iChunkMetadata.setModified(true);
- chunkMetadata.setModified(true);
- }
- i++;
- }
+ private static boolean canUseStatisticsAfterAlter(TSDataType dataType) {
+ return !canNotUseStatisticAfterAlterClassSet.contains(dataType);
}
public static void rewriteAlignedChunkMetadataStatistics(
diff --git a/pom.xml b/pom.xml
index 9be2fa2359a..99ba9725ca6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -173,7 +173,7 @@
<thrift.version>0.14.1</thrift.version>
<xz.version>1.9</xz.version>
<zstd-jni.version>1.5.6-3</zstd-jni.version>
- <tsfile.version>2.2.1-260203-SNAPSHOT</tsfile.version>
+ <tsfile.version>2.2.1-260206-SNAPSHOT</tsfile.version>
</properties>
<!--
if we claim dependencies in dependencyManagement, then we do not claim