Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,18 @@ public void setModified(boolean modified) {
}
}

@Override
public boolean isDataTypeModifiedAndCannotUseStatistics() {
return timeChunkMetadata.isDataTypeModifiedAndCannotUseStatistics();
}

@Override
public void setDataTypeModifiedAndCannotUseStatistics(
boolean dataTypeModifiedAndCannotUseStatistics) {
timeChunkMetadata.setDataTypeModifiedAndCannotUseStatistics(
dataTypeModifiedAndCannotUseStatistics);
}

@Override
public boolean isSeq() {
return timeChunkMetadata.isSeq();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,18 @@ public void setModified(boolean modified) {
}
}

@Override
public boolean isDataTypeModifiedAndCannotUseStatistics() {
return timeseriesMetadata.isDataTypeModifiedAndCannotUseStatistics();
}

@Override
public void setDataTypeModifiedAndCannotUseStatistics(
boolean dataTypeModifiedAndCannotUseStatistics) {
timeseriesMetadata.setDataTypeModifiedAndCannotUseStatistics(
dataTypeModifiedAndCannotUseStatistics);
}

@Override
public boolean isSeq() {
return timeseriesMetadata.isSeq();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -329,14 +333,25 @@ public void setChunkLoader(IChunkLoader chunkLoader) {

@Override
public boolean isModified() {
return modified;
return modified || dataTypeModifiedAndCannotUseStatistics;
}

@Override
public void setModified(boolean modified) {
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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -343,21 +347,33 @@ public List<IChunkMetadata> getChunkMetadataList() {
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
public void setModified(boolean modified) {
this.modified |= modified;
}

public boolean isDataTypeModifiedAndCannotUseStatistics() {
return dataTypeModifiedAndCannotUseStatistics;
}

public void setDataTypeModifiedAndCannotUseStatistics(
boolean dataTypeModifiedAndCannotUseStatistics) {
this.dataTypeModifiedAndCannotUseStatistics |= dataTypeModifiedAndCannotUseStatistics;
}

@Override
public void setSeq(boolean seq) {
isSeq = seq;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,7 @@ public interface IChunkReader {

void close() throws IOException;

void markDataTypeModifiedAndCannotUseStatistics();

List<IPageReader> loadPageReaderList() throws IOException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ default BatchData getAllSatisfiedPageData() throws IOException {

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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,13 @@ public void close() {
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);
}
}
}
Loading