This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch iotdb
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/iotdb by this push:
new a0101bff Modify isDeleted method in page reader to public access (#241)
a0101bff is described below
commit a0101bffb92a496a3f400cf2c94705d42c17ebad
Author: shuwenwei <[email protected]>
AuthorDate: Fri Sep 20 09:36:22 2024 +0800
Modify isDeleted method in page reader to public access (#241)
* modify isDeleted method access
* modify getAlignedChunkMetadataByMetadataIndexNode
* spotless
* fix compile
(cherry picked from commit e90a4c0e9e9808540fbf3bac9ca884431146b2d8)
---
.../apache/tsfile/read/TsFileSequenceReader.java | 25 ++++++++++++++++------
.../tsfile/read/reader/page/TimePageReader.java | 2 +-
.../tsfile/read/reader/page/ValuePageReader.java | 2 +-
.../org/apache/tsfile/read/TsFileReaderTest.java | 6 +++---
.../AlignedChunkReaderWithoutStatisticsTest.java | 3 ++-
5 files changed, 25 insertions(+), 13 deletions(-)
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
index 9daff0c1..c1777ed2 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
@@ -38,6 +38,7 @@ import org.apache.tsfile.file.MetaMarker;
import org.apache.tsfile.file.header.ChunkGroupHeader;
import org.apache.tsfile.file.header.ChunkHeader;
import org.apache.tsfile.file.header.PageHeader;
+import org.apache.tsfile.file.metadata.AbstractAlignedTimeSeriesMetadata;
import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
import org.apache.tsfile.file.metadata.AlignedTimeSeriesMetadata;
import org.apache.tsfile.file.metadata.ChunkGroupMetadata;
@@ -48,6 +49,7 @@ import org.apache.tsfile.file.metadata.IDeviceID;
import org.apache.tsfile.file.metadata.ITimeSeriesMetadata;
import org.apache.tsfile.file.metadata.MeasurementMetadataIndexEntry;
import org.apache.tsfile.file.metadata.MetadataIndexNode;
+import org.apache.tsfile.file.metadata.TableDeviceMetadata;
import org.apache.tsfile.file.metadata.TimeseriesMetadata;
import org.apache.tsfile.file.metadata.TsFileMetadata;
import org.apache.tsfile.file.metadata.enums.CompressionType;
@@ -2356,7 +2358,8 @@ public class TsFileSequenceReader implements
AutoCloseable {
*
* @param device device name
*/
- public List<AlignedChunkMetadata> getAlignedChunkMetadata(IDeviceID device)
throws IOException {
+ public List<AlignedChunkMetadata> getAlignedChunkMetadata(
+ IDeviceID device, boolean ignoreAllNullRows) throws IOException {
readFileMetadata();
MetadataIndexNode deviceMetadataIndexNode =
tsFileMetaData.getTableMetadataIndexNode(device.getTableName());
@@ -2376,7 +2379,7 @@ public class TsFileSequenceReader implements
AutoCloseable {
logger.error(METADATA_INDEX_NODE_DESERIALIZE_ERROR, file);
throw e;
}
- return getAlignedChunkMetadataByMetadataIndexNode(device,
metadataIndexNode);
+ return getAlignedChunkMetadataByMetadataIndexNode(device,
metadataIndexNode, ignoreAllNullRows);
}
/**
@@ -2385,9 +2388,11 @@ public class TsFileSequenceReader implements
AutoCloseable {
*
* @param device device name
* @param metadataIndexNode the first measurement metadata index node of the
device
+ * @param ignoreAllNullRows ignore all null rows
*/
public List<AlignedChunkMetadata> getAlignedChunkMetadataByMetadataIndexNode(
- IDeviceID device, MetadataIndexNode metadataIndexNode) throws
IOException {
+ IDeviceID device, MetadataIndexNode metadataIndexNode, boolean
ignoreAllNullRows)
+ throws IOException {
TimeseriesMetadata firstTimeseriesMetadata =
getTimeColumnMetadata(metadataIndexNode);
if (firstTimeseriesMetadata == null) {
throw new IOException("Timeseries of device {" + device + "} are not
aligned");
@@ -2438,8 +2443,14 @@ public class TsFileSequenceReader implements
AutoCloseable {
valueTimeseriesMetadataList.add(timeseriesMetadataList.get(i));
}
- AlignedTimeSeriesMetadata alignedTimeSeriesMetadata =
- new AlignedTimeSeriesMetadata(timeseriesMetadata,
valueTimeseriesMetadataList);
+ AbstractAlignedTimeSeriesMetadata alignedTimeSeriesMetadata;
+ if (ignoreAllNullRows) {
+ alignedTimeSeriesMetadata =
+ new AlignedTimeSeriesMetadata(timeseriesMetadata,
valueTimeseriesMetadataList);
+ } else {
+ alignedTimeSeriesMetadata =
+ new TableDeviceMetadata(timeseriesMetadata,
valueTimeseriesMetadataList);
+ }
List<AlignedChunkMetadata> chunkMetadataList = new ArrayList<>();
for (IChunkMetadata chunkMetadata :
readIChunkMetaDataList(alignedTimeSeriesMetadata)) {
chunkMetadataList.add((AlignedChunkMetadata) chunkMetadata);
@@ -2461,9 +2472,9 @@ public class TsFileSequenceReader implements
AutoCloseable {
// This method is only used for TsFile
public List<IChunkMetadata> readIChunkMetaDataList(ITimeSeriesMetadata
timeseriesMetaData) {
- if (timeseriesMetaData instanceof AlignedTimeSeriesMetadata) {
+ if (timeseriesMetaData instanceof AbstractAlignedTimeSeriesMetadata) {
return new ArrayList<>(
- ((AlignedTimeSeriesMetadata)
timeseriesMetaData).getChunkMetadataList());
+ ((AbstractAlignedTimeSeriesMetadata)
timeseriesMetaData).getChunkMetadataList());
} else {
return new ArrayList<>(((TimeseriesMetadata)
timeseriesMetaData).getChunkMetadataList());
}
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/TimePageReader.java
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/TimePageReader.java
index a7964558..aa1b5548 100644
---
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/TimePageReader.java
+++
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/TimePageReader.java
@@ -103,7 +103,7 @@ public class TimePageReader {
return pageHeader.isModified();
}
- protected boolean isDeleted(long timestamp) {
+ public boolean isDeleted(long timestamp) {
while (deleteIntervalList != null && deleteCursor <
deleteIntervalList.size()) {
if (deleteIntervalList.get(deleteCursor).contains(timestamp)) {
return true;
diff --git
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/ValuePageReader.java
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/ValuePageReader.java
index cf79e68a..317b493c 100644
---
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/ValuePageReader.java
+++
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/page/ValuePageReader.java
@@ -584,7 +584,7 @@ public class ValuePageReader {
return pageHeader.isModified();
}
- protected boolean isDeleted(long timestamp) {
+ public boolean isDeleted(long timestamp) {
while (deleteIntervalList != null && deleteCursor <
deleteIntervalList.size()) {
if (deleteIntervalList.get(deleteCursor).contains(timestamp)) {
return true;
diff --git
a/java/tsfile/src/test/java/org/apache/tsfile/read/TsFileReaderTest.java
b/java/tsfile/src/test/java/org/apache/tsfile/read/TsFileReaderTest.java
index 42238509..233d05a5 100644
--- a/java/tsfile/src/test/java/org/apache/tsfile/read/TsFileReaderTest.java
+++ b/java/tsfile/src/test/java/org/apache/tsfile/read/TsFileReaderTest.java
@@ -524,7 +524,7 @@ public class TsFileReaderTest {
// query for non-exist device
IDeviceID d3 = IDeviceID.Factory.DEFAULT_FACTORY.create("d3");
try {
- reader.getAlignedChunkMetadata(d3);
+ reader.getAlignedChunkMetadata(d3, true);
} catch (IOException e) {
Assert.assertEquals("Device {" + d3 + "} is not in tsFileMetaData",
e.getMessage());
}
@@ -532,7 +532,7 @@ public class TsFileReaderTest {
// query for non-aligned device
IDeviceID d2 = IDeviceID.Factory.DEFAULT_FACTORY.create("d2");
try {
- reader.getAlignedChunkMetadata(d2);
+ reader.getAlignedChunkMetadata(d2, true);
} catch (IOException e) {
Assert.assertEquals("Timeseries of device {" + d2 + "} are not
aligned", e.getMessage());
}
@@ -540,7 +540,7 @@ public class TsFileReaderTest {
String[] expected = new String[] {"s1", "s2", "s3", "s4"};
List<AlignedChunkMetadata> chunkMetadataList =
-
reader.getAlignedChunkMetadata(IDeviceID.Factory.DEFAULT_FACTORY.create("d1"));
+
reader.getAlignedChunkMetadata(IDeviceID.Factory.DEFAULT_FACTORY.create("d1"),
true);
AlignedChunkMetadata alignedChunkMetadata = chunkMetadataList.get(0);
Assert.assertEquals("",
alignedChunkMetadata.getTimeChunkMetadata().getMeasurementUid());
int i = 0;
diff --git
a/java/tsfile/src/test/java/org/apache/tsfile/read/reader/AlignedChunkReaderWithoutStatisticsTest.java
b/java/tsfile/src/test/java/org/apache/tsfile/read/reader/AlignedChunkReaderWithoutStatisticsTest.java
index 510ac1fe..7984e3e5 100644
---
a/java/tsfile/src/test/java/org/apache/tsfile/read/reader/AlignedChunkReaderWithoutStatisticsTest.java
+++
b/java/tsfile/src/test/java/org/apache/tsfile/read/reader/AlignedChunkReaderWithoutStatisticsTest.java
@@ -98,7 +98,8 @@ public class AlignedChunkReaderWithoutStatisticsTest {
for (int i = 0; i < deviceNum; i++) {
final List<AlignedChunkMetadata> chunkMetadataList =
tsFileSequenceReader.getAlignedChunkMetadata(
- Factory.DEFAULT_FACTORY.create(testStorageGroup +
PATH_SEPARATOR + "d1000" + i));
+ Factory.DEFAULT_FACTORY.create(testStorageGroup +
PATH_SEPARATOR + "d1000" + i),
+ true);
for (final AlignedChunkMetadata chunkMetadata : chunkMetadataList) {
Chunk timeChunk =
tsFileSequenceReader.readMemChunk(