You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2021/03/12 08:08:37 UTC
[iotdb] 02/07: make the timeseries metadata and chunk metadata to
be interface
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch TYQuery
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 0ab98773292febc422213ca28eb647df1bf909d3
Author: JackieTien97 <Ja...@foxmail.com>
AuthorDate: Thu Mar 11 18:06:57 2021 +0800
make the timeseries metadata and chunk metadata to be interface
---
.../chunk/metadata/DiskChunkMetadataLoader.java | 15 ++-
.../iotdb/db/query/reader/series/SeriesReader.java | 40 ++++----
.../org/apache/iotdb/db/utils/FileLoaderUtils.java | 41 ++++----
.../java/org/apache/iotdb/db/utils/QueryUtils.java | 11 +-
.../iotdb/tsfile/file/metadata/ChunkMetadata.java | 10 +-
.../iotdb/tsfile/file/metadata/IChunkMetadata.java | 26 +++++
.../tsfile/file/metadata/ITimeSeriesMetadata.java | 2 +
.../tsfile/file/metadata/TimeseriesMetadata.java | 16 ++-
.../tsfile/file/metadata/VectorChunkMetadata.java | 114 +++++++++++++++++++--
.../file/metadata/VectorTimeSeriesMetadata.java | 35 ++++++-
.../iotdb/tsfile/read/TsFileSequenceReader.java | 77 +++++++-------
.../read/controller/IChunkMetadataLoader.java | 7 +-
.../tsfile/read/controller/IMetadataQuerier.java | 13 ++-
.../read/controller/MetadataQuerierByFileImpl.java | 49 +++++----
.../tsfile/v2/read/TsFileSequenceReaderForV2.java | 48 ++++-----
15 files changed, 336 insertions(+), 168 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/DiskChunkMetadataLoader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/DiskChunkMetadataLoader.java
index ebb9521..e3dc79e 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/DiskChunkMetadataLoader.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/DiskChunkMetadataLoader.java
@@ -18,19 +18,18 @@
*/
package org.apache.iotdb.db.query.reader.chunk.metadata;
+import java.util.List;
import org.apache.iotdb.db.engine.modification.Modification;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.metadata.PartialPath;
import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.query.reader.chunk.DiskChunkLoader;
import org.apache.iotdb.db.utils.QueryUtils;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
-import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
+import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
import org.apache.iotdb.tsfile.read.controller.IChunkMetadataLoader;
import org.apache.iotdb.tsfile.read.filter.basic.Filter;
-import java.util.List;
-
public class DiskChunkMetadataLoader implements IChunkMetadataLoader {
private final TsFileResource resource;
@@ -48,8 +47,8 @@ public class DiskChunkMetadataLoader implements IChunkMetadataLoader {
}
@Override
- public List<ChunkMetadata> loadChunkMetadataList(TimeseriesMetadata timeseriesMetadata) {
- List<ChunkMetadata> chunkMetadataList = timeseriesMetadata.getChunkMetadataList();
+ public List<IChunkMetadata> loadChunkMetadataList(ITimeSeriesMetadata timeseriesMetadata) {
+ List<IChunkMetadata> chunkMetadataList = timeseriesMetadata.getChunkMetadataList();
setDiskChunkLoader(chunkMetadataList, resource, seriesPath, context);
@@ -64,7 +63,7 @@ public class DiskChunkMetadataLoader implements IChunkMetadataLoader {
|| chunkMetaData.getStartTime() > chunkMetaData.getEndTime());
// For chunkMetadata from old TsFile, do not set version
- for (ChunkMetadata metadata : chunkMetadataList) {
+ for (IChunkMetadata metadata : chunkMetadataList) {
if (!metadata.isFromOldTsFile()) {
metadata.setVersion(resource.getVersion());
}
@@ -73,7 +72,7 @@ public class DiskChunkMetadataLoader implements IChunkMetadataLoader {
}
public static void setDiskChunkLoader(
- List<ChunkMetadata> chunkMetadataList,
+ List<IChunkMetadata> chunkMetadataList,
TsFileResource resource,
PartialPath seriesPath,
QueryContext context) {
diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
index 01cb4f1..27a3e3f 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
@@ -18,6 +18,16 @@
*/
package org.apache.iotdb.db.query.reader.series;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+import java.util.PriorityQueue;
+import java.util.Set;
+import java.util.function.ToLongFunction;
+import java.util.stream.Collectors;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
@@ -32,7 +42,8 @@ import org.apache.iotdb.db.query.reader.universal.PriorityMergeReader.MergeReade
import org.apache.iotdb.db.utils.FileLoaderUtils;
import org.apache.iotdb.db.utils.QueryUtils;
import org.apache.iotdb.db.utils.TestOnly;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
@@ -43,17 +54,6 @@ import org.apache.iotdb.tsfile.read.filter.basic.Filter;
import org.apache.iotdb.tsfile.read.filter.basic.UnaryFilter;
import org.apache.iotdb.tsfile.read.reader.IPageReader;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Objects;
-import java.util.PriorityQueue;
-import java.util.Set;
-import java.util.function.ToLongFunction;
-import java.util.stream.Collectors;
-
public class SeriesReader {
// inner class of SeriesReader for order purpose
@@ -84,15 +84,15 @@ public class SeriesReader {
/*
* TimeSeriesMetadata cache
*/
- private TimeseriesMetadata firstTimeSeriesMetadata;
- private final List<TimeseriesMetadata> seqTimeSeriesMetadata = new LinkedList<>();
- private final PriorityQueue<TimeseriesMetadata> unSeqTimeSeriesMetadata;
+ private ITimeSeriesMetadata firstTimeSeriesMetadata;
+ private final List<ITimeSeriesMetadata> seqTimeSeriesMetadata = new LinkedList<>();
+ private final PriorityQueue<ITimeSeriesMetadata> unSeqTimeSeriesMetadata;
/*
* chunk cache
*/
- private ChunkMetadata firstChunkMetadata;
- private final PriorityQueue<ChunkMetadata> cachedChunkMetadata;
+ private IChunkMetadata firstChunkMetadata;
+ private final PriorityQueue<IChunkMetadata> cachedChunkMetadata;
/*
* page cache
@@ -328,9 +328,9 @@ public class SeriesReader {
}
}
- private void unpackOneTimeSeriesMetadata(TimeseriesMetadata timeSeriesMetadata)
+ private void unpackOneTimeSeriesMetadata(ITimeSeriesMetadata timeSeriesMetadata)
throws IOException {
- List<ChunkMetadata> chunkMetadataList =
+ List<IChunkMetadata> chunkMetadataList =
FileLoaderUtils.loadChunkMetadataList(timeSeriesMetadata);
chunkMetadataList.forEach(chunkMetadata -> chunkMetadata.setSeq(timeSeriesMetadata.isSeq()));
@@ -508,7 +508,7 @@ public class SeriesReader {
}
}
- private void unpackOneChunkMetaData(ChunkMetadata chunkMetaData) throws IOException {
+ private void unpackOneChunkMetaData(IChunkMetadata chunkMetaData) throws IOException {
FileLoaderUtils.loadPageReaderList(chunkMetaData, timeFilter)
.forEach(
pageReader -> {
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
index a829b69..c241d2f 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/FileLoaderUtils.java
@@ -18,6 +18,10 @@
*/
package org.apache.iotdb.db.utils;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
import org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache;
import org.apache.iotdb.db.engine.modification.Modification;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
@@ -29,8 +33,10 @@ import org.apache.iotdb.db.query.reader.chunk.MemChunkReader;
import org.apache.iotdb.db.query.reader.chunk.metadata.DiskChunkMetadataLoader;
import org.apache.iotdb.db.query.reader.chunk.metadata.MemChunkMetadataLoader;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
-import org.apache.iotdb.tsfile.file.metadata.TsFileMetadata;
+import org.apache.iotdb.tsfile.file.metadata.VectorChunkMetadata;
import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
import org.apache.iotdb.tsfile.read.common.Chunk;
import org.apache.iotdb.tsfile.read.common.Path;
@@ -39,11 +45,7 @@ import org.apache.iotdb.tsfile.read.filter.basic.Filter;
import org.apache.iotdb.tsfile.read.reader.IChunkReader;
import org.apache.iotdb.tsfile.read.reader.IPageReader;
import org.apache.iotdb.tsfile.read.reader.chunk.ChunkReader;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.Set;
+import org.apache.iotdb.tsfile.read.reader.chunk.VectorChunkReader;
public class FileLoaderUtils {
@@ -140,7 +142,7 @@ public class FileLoaderUtils {
*
* @param timeSeriesMetadata the corresponding TimeSeriesMetadata in that file.
*/
- public static List<ChunkMetadata> loadChunkMetadataList(TimeseriesMetadata timeSeriesMetadata)
+ public static List<IChunkMetadata> loadChunkMetadataList(ITimeSeriesMetadata timeSeriesMetadata)
throws IOException {
return timeSeriesMetadata.loadChunkMetadataList();
}
@@ -151,8 +153,9 @@ public class FileLoaderUtils {
* @param chunkMetaData the corresponding chunk metadata
* @param timeFilter it should be a TimeFilter instead of a ValueFilter
*/
- public static List<IPageReader> loadPageReaderList(ChunkMetadata chunkMetaData, Filter timeFilter)
+ public static List<IPageReader> loadPageReaderList(IChunkMetadata chunkMetaData, Filter timeFilter)
throws IOException {
+ // TODO memory Vector chunk metadata
if (chunkMetaData == null) {
throw new IOException("Can't init null chunkMeta");
}
@@ -162,22 +165,24 @@ public class FileLoaderUtils {
MemChunkLoader memChunkLoader = (MemChunkLoader) chunkLoader;
chunkReader = new MemChunkReader(memChunkLoader.getChunk(), timeFilter);
} else {
- Chunk chunk = chunkLoader.loadChunk(chunkMetaData);
- chunk.setFromOldFile(chunkMetaData.isFromOldTsFile());
- chunkReader = new ChunkReader(chunk, timeFilter);
- chunkReader.hasNextSatisfiedPage();
+ if (chunkMetaData instanceof ChunkMetadata) {
+ Chunk chunk = chunkLoader.loadChunk((ChunkMetadata) chunkMetaData);
+ chunk.setFromOldFile(chunkMetaData.isFromOldTsFile());
+ chunkReader = new ChunkReader(chunk, timeFilter);
+ chunkReader.hasNextSatisfiedPage();
+ } else {
+ VectorChunkMetadata vectorChunkMetadata = (VectorChunkMetadata) chunkMetaData;
+ Chunk timeChunk = vectorChunkMetadata.getTimeChunk();
+ List<Chunk> valueChunkList = vectorChunkMetadata.getValueChunkList();
+ chunkReader = new VectorChunkReader(timeChunk, valueChunkList, timeFilter);
+ }
}
return chunkReader.loadPageReaderList();
}
- public static List<ChunkMetadata> getChunkMetadataList(Path path, String filePath)
+ public static List<IChunkMetadata> getChunkMetadataList(Path path, String filePath)
throws IOException {
TsFileSequenceReader tsFileReader = FileReaderManager.getInstance().get(filePath, true);
return tsFileReader.getChunkMetadataList(path);
}
-
- public static TsFileMetadata getTsFileMetadata(String filePath) throws IOException {
- TsFileSequenceReader reader = FileReaderManager.getInstance().get(filePath, true);
- return reader.readFileMetadata();
- }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java
index 5c0409f..194def7 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java
@@ -19,16 +19,15 @@
package org.apache.iotdb.db.utils;
+import java.util.List;
import org.apache.iotdb.db.engine.modification.Deletion;
import org.apache.iotdb.db.engine.modification.Modification;
import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
import org.apache.iotdb.db.query.filter.TsFileFilter;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
import org.apache.iotdb.tsfile.read.common.TimeRange;
-import java.util.List;
-
public class QueryUtils {
private QueryUtils() {
@@ -46,9 +45,9 @@ public class QueryUtils {
*/
@SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
public static void modifyChunkMetaData(
- List<ChunkMetadata> chunkMetaData, List<Modification> modifications) {
+ List<IChunkMetadata> chunkMetaData, List<Modification> modifications) {
for (int metaIndex = 0; metaIndex < chunkMetaData.size(); metaIndex++) {
- ChunkMetadata metaData = chunkMetaData.get(metaIndex);
+ IChunkMetadata metaData = chunkMetaData.get(metaIndex);
for (Modification modification : modifications) {
// When the chunkMetadata come from an old TsFile, the method modification.getFileOffset()
// is gerVersionNum actually. In this case, we compare the versions of modification and
@@ -86,7 +85,7 @@ public class QueryUtils {
});
}
- private static void doModifyChunkMetaData(Modification modification, ChunkMetadata metaData) {
+ private static void doModifyChunkMetaData(Modification modification, IChunkMetadata metaData) {
if (modification instanceof Deletion) {
Deletion deletion = (Deletion) modification;
metaData.insertIntoSortedDeletions(deletion.getStartTime(), deletion.getEndTime());
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
index de6681d..1a3859c 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
@@ -34,7 +34,7 @@ import java.util.List;
import java.util.Objects;
/** Metadata of one chunk. */
-public class ChunkMetadata implements Accountable {
+public class ChunkMetadata implements Accountable, IChunkMetadata {
private String measurementUid;
@@ -106,6 +106,7 @@ public class ChunkMetadata implements Accountable {
*
* @return Byte offset of header of this chunk (includes the marker)
*/
+ @Override
public long getOffsetOfChunkHeader() {
return offsetOfChunkHeader;
}
@@ -114,6 +115,7 @@ public class ChunkMetadata implements Accountable {
return measurementUid;
}
+ @Override
public Statistics getStatistics() {
return statistics;
}
@@ -171,10 +173,12 @@ public class ChunkMetadata implements Accountable {
return chunkMetaData;
}
+ @Override
public long getVersion() {
return version;
}
+ @Override
public void setVersion(long version) {
this.version = version;
}
@@ -239,10 +243,12 @@ public class ChunkMetadata implements Accountable {
measurementUid, deleteIntervalList, tsDataType, statistics, version, offsetOfChunkHeader);
}
+ @Override
public boolean isModified() {
return modified;
}
+ @Override
public void setModified(boolean modified) {
this.modified = modified;
}
@@ -283,10 +289,12 @@ public class ChunkMetadata implements Accountable {
this.ramSize = calculateRamSize();
}
+ @Override
public void setSeq(boolean seq) {
isSeq = seq;
}
+ @Override
public boolean isSeq() {
return isSeq;
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java
index b1259a6..95569db 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java
@@ -18,7 +18,11 @@
*/
package org.apache.iotdb.tsfile.file.metadata;
+import java.util.List;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.controller.IChunkLoader;
public interface IChunkMetadata {
@@ -37,4 +41,26 @@ public interface IChunkMetadata {
void setVersion(long version);
long getOffsetOfChunkHeader();
+
+ long getStartTime();
+
+ long getEndTime();
+
+ boolean isFromOldTsFile();
+
+ IChunkLoader getChunkLoader();
+
+ void setChunkLoader(IChunkLoader chunkLoader);
+
+ void setFilePath(String filePath);
+
+ void setClosed(boolean closed);
+
+ TSDataType getDataType();
+
+ String getMeasurementUid();
+
+ void insertIntoSortedDeletions(long startTime, long endTime);
+
+ List<TimeRange> getDeleteIntervalList();
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
index 4029965..b508f57 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
@@ -36,4 +36,6 @@ public interface ITimeSeriesMetadata {
void setSeq(boolean seq);
List<IChunkMetadata> loadChunkMetadataList() throws IOException;
+
+ List<IChunkMetadata> getChunkMetadataList();
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
index 20dbf05..79f90fd 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
@@ -33,7 +33,7 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
-public class TimeseriesMetadata implements Accountable {
+public class TimeseriesMetadata implements Accountable, ITimeSeriesMetadata {
/** used for old version tsfile */
private long startOffsetOfChunkMetaDataList;
@@ -64,7 +64,7 @@ public class TimeseriesMetadata implements Accountable {
// used to save chunk metadata list while serializing
private PublicBAOS chunkMetadataListBuffer;
- private ArrayList<ChunkMetadata> chunkMetadataList;
+ private ArrayList<IChunkMetadata> chunkMetadataList;
public TimeseriesMetadata() {}
@@ -176,6 +176,7 @@ public class TimeseriesMetadata implements Accountable {
this.dataType = tsDataType;
}
+ @Override
public Statistics getStatistics() {
return statistics;
}
@@ -188,18 +189,21 @@ public class TimeseriesMetadata implements Accountable {
this.chunkMetadataLoader = chunkMetadataLoader;
}
- public List<ChunkMetadata> loadChunkMetadataList() throws IOException {
+ @Override
+ public List<IChunkMetadata> loadChunkMetadataList() throws IOException {
return chunkMetadataLoader.loadChunkMetadataList(this);
}
- public List<ChunkMetadata> getChunkMetadataList() {
+ public List<IChunkMetadata> getChunkMetadataList() {
return chunkMetadataList;
}
+ @Override
public boolean isModified() {
return modified;
}
+ @Override
public void setModified(boolean modified) {
this.modified = modified;
}
@@ -214,10 +218,12 @@ public class TimeseriesMetadata implements Accountable {
return ramSize;
}
+ @Override
public void setSeq(boolean seq) {
isSeq = seq;
}
+ @Override
public boolean isSeq() {
return isSeq;
}
@@ -228,7 +234,7 @@ public class TimeseriesMetadata implements Accountable {
}
// For reading version-2 only
- public void setChunkMetadataList(ArrayList<ChunkMetadata> chunkMetadataList) {
+ public void setChunkMetadataList(ArrayList<IChunkMetadata> chunkMetadataList) {
this.chunkMetadataList = chunkMetadataList;
}
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorChunkMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorChunkMetadata.java
index d512495..321197e 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorChunkMetadata.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorChunkMetadata.java
@@ -18,41 +18,139 @@
*/
package org.apache.iotdb.tsfile.file.metadata;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
+import org.apache.iotdb.tsfile.read.common.Chunk;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.controller.IChunkLoader;
public class VectorChunkMetadata implements IChunkMetadata {
+ private final IChunkMetadata timeChunkMetadata;
+ private final List<IChunkMetadata> valueChunkMetadataList;
+
+ public VectorChunkMetadata(IChunkMetadata timeChunkMetadata,
+ List<IChunkMetadata> valueChunkMetadataList) {
+ this.timeChunkMetadata = timeChunkMetadata;
+ this.valueChunkMetadataList = valueChunkMetadataList;
+ }
+
@Override
public Statistics getStatistics() {
- return null;
+ return timeChunkMetadata.getStatistics();
}
@Override
public boolean isModified() {
- return false;
+ return timeChunkMetadata.isModified();
}
@Override
- public void setModified(boolean modified) {}
+ public void setModified(boolean modified) {
+ timeChunkMetadata.setModified(modified);
+ }
@Override
public boolean isSeq() {
- return false;
+ return timeChunkMetadata.isSeq();
}
@Override
- public void setSeq(boolean seq) {}
+ public void setSeq(boolean seq) {
+ timeChunkMetadata.setSeq(seq);
+ }
@Override
public long getVersion() {
- return 0;
+ return timeChunkMetadata.getVersion();
}
@Override
- public void setVersion(long version) {}
+ public void setVersion(long version) {
+ timeChunkMetadata.setVersion(version);
+ }
@Override
public long getOffsetOfChunkHeader() {
- return 0;
+ return timeChunkMetadata.getOffsetOfChunkHeader();
+ }
+
+ @Override
+ public long getStartTime() {
+ return timeChunkMetadata.getStartTime();
+ }
+
+ @Override
+ public long getEndTime() {
+ return timeChunkMetadata.getEndTime();
+ }
+
+ @Override
+ public boolean isFromOldTsFile() {
+ return false;
+ }
+
+ @Override
+ public IChunkLoader getChunkLoader() {
+ return timeChunkMetadata.getChunkLoader();
+ }
+
+ @Override
+ public void setChunkLoader(IChunkLoader chunkLoader) {
+ timeChunkMetadata.setChunkLoader(chunkLoader);
+ for (IChunkMetadata chunkMetadata : valueChunkMetadataList) {
+ chunkMetadata.setChunkLoader(chunkLoader);
+ }
+ }
+
+ @Override
+ public void setFilePath(String filePath) {
+ timeChunkMetadata.setFilePath(filePath);
+ for (IChunkMetadata chunkMetadata : valueChunkMetadataList) {
+ chunkMetadata.setFilePath(filePath);
+ }
+ }
+
+ @Override
+ public void setClosed(boolean closed) {
+ timeChunkMetadata.setClosed(closed);
+ for (IChunkMetadata chunkMetadata : valueChunkMetadataList) {
+ chunkMetadata.setClosed(closed);
+ }
+ }
+
+ @Override
+ public TSDataType getDataType() {
+ return timeChunkMetadata.getDataType();
+ }
+
+ @Override
+ public String getMeasurementUid() {
+ return timeChunkMetadata.getMeasurementUid();
+ }
+
+ @Override
+ public void insertIntoSortedDeletions(long startTime, long endTime) {
+ timeChunkMetadata.insertIntoSortedDeletions(startTime, endTime);
+ }
+
+ @Override
+ public List<TimeRange> getDeleteIntervalList() {
+ return timeChunkMetadata.getDeleteIntervalList();
+ }
+
+ public Chunk getTimeChunk() throws IOException {
+ return timeChunkMetadata.getChunkLoader().loadChunk((ChunkMetadata) timeChunkMetadata);
+ }
+
+ public List<Chunk> getValueChunkList() throws IOException {
+ List<Chunk> valueChunkList = new ArrayList<>();
+ for (IChunkMetadata chunkMetadata : valueChunkMetadataList) {
+ valueChunkList.add(chunkMetadata.getChunkLoader().loadChunk((ChunkMetadata) chunkMetadata));
+ }
+ return valueChunkList;
}
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorTimeSeriesMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorTimeSeriesMetadata.java
index 49a44aa..82aad19 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorTimeSeriesMetadata.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorTimeSeriesMetadata.java
@@ -18,6 +18,7 @@
*/
package org.apache.iotdb.tsfile.file.metadata;
+import java.util.ArrayList;
import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
import java.io.IOException;
@@ -25,8 +26,16 @@ import java.util.List;
public class VectorTimeSeriesMetadata implements ITimeSeriesMetadata {
- private TimeseriesMetadata timeseriesMetadata;
- private List<TimeseriesMetadata> valueTimeseriesMetadataList;
+ private final TimeseriesMetadata timeseriesMetadata;
+ private final List<TimeseriesMetadata> valueTimeseriesMetadataList;
+
+
+ public VectorTimeSeriesMetadata(
+ TimeseriesMetadata timeseriesMetadata,
+ List<TimeseriesMetadata> valueTimeseriesMetadataList) {
+ this.timeseriesMetadata = timeseriesMetadata;
+ this.valueTimeseriesMetadataList = valueTimeseriesMetadataList;
+ }
@Override
public Statistics getStatistics() {
@@ -55,7 +64,27 @@ public class VectorTimeSeriesMetadata implements ITimeSeriesMetadata {
@Override
public List<IChunkMetadata> loadChunkMetadataList() throws IOException {
- List<ChunkMetadata> timeChunkMetadata = timeseriesMetadata.loadChunkMetadataList();
+ List<IChunkMetadata> timeChunkMetadata = timeseriesMetadata.loadChunkMetadataList();
+ List<List<IChunkMetadata>> valueChunkMetadataList = new ArrayList<>();
+ for (TimeseriesMetadata metadata : valueTimeseriesMetadataList) {
+ valueChunkMetadataList.add(metadata.loadChunkMetadataList());
+ }
+
+ List<IChunkMetadata> res = new ArrayList<>();
+
+ for (int i = 0; i < timeChunkMetadata.size(); i++) {
+ List<IChunkMetadata> chunkMetadataList = new ArrayList<>();
+ for (List<IChunkMetadata> chunkMetadata : valueChunkMetadataList) {
+ chunkMetadataList.add(chunkMetadata.get(i));
+ }
+ res.add(new VectorChunkMetadata(timeChunkMetadata.get(i), chunkMetadataList));
+ }
+
+ return res;
+ }
+
+ @Override
+ public List<IChunkMetadata> getChunkMetadataList() {
return null;
}
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
index 256288f..434d10b 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
@@ -18,6 +18,27 @@
*/
package org.apache.iotdb.tsfile.read;
+import java.io.File;
+import java.io.IOException;
+import java.nio.BufferOverflowException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.stream.Collectors;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
import org.apache.iotdb.tsfile.compress.IUnCompressor;
@@ -29,6 +50,7 @@ import org.apache.iotdb.tsfile.file.header.ChunkHeader;
import org.apache.iotdb.tsfile.file.header.PageHeader;
import org.apache.iotdb.tsfile.file.metadata.ChunkGroupMetadata;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
import org.apache.iotdb.tsfile.file.metadata.MetadataIndexEntry;
import org.apache.iotdb.tsfile.file.metadata.MetadataIndexNode;
import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
@@ -49,32 +71,9 @@ import org.apache.iotdb.tsfile.utils.BloomFilter;
import org.apache.iotdb.tsfile.utils.Pair;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.File;
-import java.io.IOException;
-import java.nio.BufferOverflowException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Queue;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.stream.Collectors;
-
public class TsFileSequenceReader implements AutoCloseable {
private static final Logger logger = LoggerFactory.getLogger(TsFileSequenceReader.class);
@@ -539,14 +538,14 @@ public class TsFileSequenceReader implements AutoCloseable {
* @return measurement -> ChunkMetadata list
* @throws IOException io error
*/
- public Map<String, List<ChunkMetadata>> readChunkMetadataInDevice(String device)
+ public Map<String, List<IChunkMetadata>> readChunkMetadataInDevice(String device)
throws IOException {
readFileMetadata();
List<TimeseriesMetadata> timeseriesMetadataMap = getDeviceTimeseriesMetadata(device);
if (timeseriesMetadataMap.isEmpty()) {
return new HashMap<>();
}
- Map<String, List<ChunkMetadata>> seriesMetadata = new HashMap<>();
+ Map<String, List<IChunkMetadata>> seriesMetadata = new HashMap<>();
for (TimeseriesMetadata timeseriesMetadata : timeseriesMetadataMap) {
seriesMetadata.put(
timeseriesMetadata.getMeasurementId(), timeseriesMetadata.getChunkMetadataList());
@@ -1144,13 +1143,13 @@ public class TsFileSequenceReader implements AutoCloseable {
* @param path timeseries path
* @return List of ChunkMetaData
*/
- public List<ChunkMetadata> getChunkMetadataList(Path path) throws IOException {
+ public List<IChunkMetadata> getChunkMetadataList(Path path) throws IOException {
TimeseriesMetadata timeseriesMetaData = readTimeseriesMetadata(path);
if (timeseriesMetaData == null) {
return Collections.emptyList();
}
- List<ChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetaData);
- chunkMetadataList.sort(Comparator.comparingLong(ChunkMetadata::getStartTime));
+ List<IChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetaData);
+ chunkMetadataList.sort(Comparator.comparingLong(IChunkMetadata::getStartTime));
return chunkMetadataList;
}
@@ -1159,7 +1158,7 @@ public class TsFileSequenceReader implements AutoCloseable {
*
* @return List of ChunkMetaData
*/
- public List<ChunkMetadata> readChunkMetaDataList(TimeseriesMetadata timeseriesMetaData)
+ public List<IChunkMetadata> readChunkMetaDataList(TimeseriesMetadata timeseriesMetaData)
throws IOException {
return timeseriesMetaData.getChunkMetadataList();
}
@@ -1203,7 +1202,7 @@ public class TsFileSequenceReader implements AutoCloseable {
public List<String> getDeviceNameInRange(long start, long end) throws IOException {
List<String> res = new ArrayList<>();
for (String device : getAllDevices()) {
- Map<String, List<ChunkMetadata>> seriesMetadataMap = readChunkMetadataInDevice(device);
+ Map<String, List<IChunkMetadata>> seriesMetadataMap = readChunkMetadataInDevice(device);
if (hasDataInPartition(seriesMetadataMap, start, end)) {
res.add(device);
}
@@ -1219,9 +1218,9 @@ public class TsFileSequenceReader implements AutoCloseable {
* @param end the end position of the space partition
*/
private boolean hasDataInPartition(
- Map<String, List<ChunkMetadata>> seriesMetadataMap, long start, long end) {
- for (List<ChunkMetadata> chunkMetadataList : seriesMetadataMap.values()) {
- for (ChunkMetadata chunkMetadata : chunkMetadataList) {
+ Map<String, List<IChunkMetadata>> seriesMetadataMap, long start, long end) {
+ for (List<IChunkMetadata> chunkMetadataList : seriesMetadataMap.values()) {
+ for (IChunkMetadata chunkMetadata : chunkMetadataList) {
LocateStatus location =
MetadataQuerierByFileImpl.checkLocateStatus(chunkMetadata, start, end);
if (location == LocateStatus.in) {
@@ -1254,7 +1253,7 @@ public class TsFileSequenceReader implements AutoCloseable {
return maxPlanIndex;
}
- public Iterator<Map<String, List<ChunkMetadata>>> getMeasurementChunkMetadataListMapIterator(
+ public Iterator<Map<String, List<IChunkMetadata>>> getMeasurementChunkMetadataListMapIterator(
String device) throws IOException {
readFileMetadata();
@@ -1263,7 +1262,7 @@ public class TsFileSequenceReader implements AutoCloseable {
getMetadataAndEndOffset(metadataIndexNode, device, true, true);
if (metadataIndexPair == null) {
- return new Iterator<Map<String, List<ChunkMetadata>>>() {
+ return new Iterator<Map<String, List<IChunkMetadata>>>() {
@Override
public boolean hasNext() {
@@ -1271,7 +1270,7 @@ public class TsFileSequenceReader implements AutoCloseable {
}
@Override
- public Map<String, List<ChunkMetadata>> next() {
+ public Map<String, List<IChunkMetadata>> next() {
throw new NoSuchElementException();
}
};
@@ -1281,7 +1280,7 @@ public class TsFileSequenceReader implements AutoCloseable {
ByteBuffer buffer = readData(metadataIndexPair.left.getOffset(), metadataIndexPair.right);
collectEachLeafMeasurementNodeOffsetRange(buffer, queue);
- return new Iterator<Map<String, List<ChunkMetadata>>>() {
+ return new Iterator<Map<String, List<IChunkMetadata>>>() {
@Override
public boolean hasNext() {
@@ -1289,12 +1288,12 @@ public class TsFileSequenceReader implements AutoCloseable {
}
@Override
- public Map<String, List<ChunkMetadata>> next() {
+ public Map<String, List<IChunkMetadata>> next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
Pair<Long, Long> startEndPair = queue.remove();
- Map<String, List<ChunkMetadata>> measurementChunkMetadataList = new HashMap<>();
+ Map<String, List<IChunkMetadata>> measurementChunkMetadataList = new HashMap<>();
try {
List<TimeseriesMetadata> timeseriesMetadataList = new ArrayList<>();
ByteBuffer nextBuffer = readData(startEndPair.left, startEndPair.right);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IChunkMetadataLoader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IChunkMetadataLoader.java
index f02f9e3..7268b12 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IChunkMetadataLoader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IChunkMetadataLoader.java
@@ -18,15 +18,14 @@
*/
package org.apache.iotdb.tsfile.read.controller;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
-import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
-
import java.io.IOException;
import java.util.List;
+import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.ITimeSeriesMetadata;
public interface IChunkMetadataLoader {
/** read all chunk metadata of one time series in one file. */
- List<ChunkMetadata> loadChunkMetadataList(TimeseriesMetadata timeseriesMetadata)
+ List<IChunkMetadata> loadChunkMetadataList(ITimeSeriesMetadata timeseriesMetadata)
throws IOException;
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IMetadataQuerier.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IMetadataQuerier.java
index 704aa11..5ce61bb 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IMetadataQuerier.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/IMetadataQuerier.java
@@ -18,22 +18,21 @@
*/
package org.apache.iotdb.tsfile.read.controller;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
import org.apache.iotdb.tsfile.exception.write.NoMeasurementException;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
import org.apache.iotdb.tsfile.file.metadata.TsFileMetadata;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.read.common.TimeRange;
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
public interface IMetadataQuerier {
- List<ChunkMetadata> getChunkMetaDataList(Path path) throws IOException;
+ List<IChunkMetadata> getChunkMetaDataList(Path path) throws IOException;
- Map<Path, List<ChunkMetadata>> getChunkMetaDataMap(List<Path> paths) throws IOException;
+ Map<Path, List<IChunkMetadata>> getChunkMetaDataMap(List<Path> paths) throws IOException;
TsFileMetadata getWholeFileMetadata();
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/MetadataQuerierByFileImpl.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/MetadataQuerierByFileImpl.java
index dbe7f7b..3204c2f 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/MetadataQuerierByFileImpl.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/controller/MetadataQuerierByFileImpl.java
@@ -18,16 +18,6 @@
*/
package org.apache.iotdb.tsfile.read.controller;
-import org.apache.iotdb.tsfile.common.cache.LRUCache;
-import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
-import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
-import org.apache.iotdb.tsfile.file.metadata.TsFileMetadata;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
-import org.apache.iotdb.tsfile.read.TsFileSequenceReader.LocateStatus;
-import org.apache.iotdb.tsfile.read.common.Path;
-import org.apache.iotdb.tsfile.read.common.TimeRange;
-
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -39,6 +29,15 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
+import org.apache.iotdb.tsfile.common.cache.LRUCache;
+import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
+import org.apache.iotdb.tsfile.file.metadata.TsFileMetadata;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
+import org.apache.iotdb.tsfile.read.TsFileSequenceReader.LocateStatus;
+import org.apache.iotdb.tsfile.read.common.Path;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
public class MetadataQuerierByFileImpl implements IMetadataQuerier {
@@ -47,7 +46,7 @@ public class MetadataQuerierByFileImpl implements IMetadataQuerier {
private TsFileMetadata fileMetaData;
- private LRUCache<Path, List<ChunkMetadata>> chunkMetaDataCache;
+ private LRUCache<Path, List<IChunkMetadata>> chunkMetaDataCache;
private TsFileSequenceReader tsFileReader;
@@ -56,22 +55,22 @@ public class MetadataQuerierByFileImpl implements IMetadataQuerier {
this.tsFileReader = tsFileReader;
this.fileMetaData = tsFileReader.readFileMetadata();
chunkMetaDataCache =
- new LRUCache<Path, List<ChunkMetadata>>(CACHED_ENTRY_NUMBER) {
+ new LRUCache<Path, List<IChunkMetadata>>(CACHED_ENTRY_NUMBER) {
@Override
- public List<ChunkMetadata> loadObjectByKey(Path key) throws IOException {
+ public List<IChunkMetadata> loadObjectByKey(Path key) throws IOException {
return loadChunkMetadata(key);
}
};
}
@Override
- public List<ChunkMetadata> getChunkMetaDataList(Path path) throws IOException {
+ public List<IChunkMetadata> getChunkMetaDataList(Path path) throws IOException {
return chunkMetaDataCache.get(path);
}
@Override
- public Map<Path, List<ChunkMetadata>> getChunkMetaDataMap(List<Path> paths) throws IOException {
- Map<Path, List<ChunkMetadata>> chunkMetaDatas = new HashMap<>();
+ public Map<Path, List<IChunkMetadata>> getChunkMetaDataMap(List<Path> paths) throws IOException {
+ Map<Path, List<IChunkMetadata>> chunkMetaDatas = new HashMap<>();
for (Path path : paths) {
if (!chunkMetaDatas.containsKey(path)) {
chunkMetaDatas.put(path, new ArrayList<>());
@@ -98,7 +97,7 @@ public class MetadataQuerierByFileImpl implements IMetadataQuerier {
deviceMeasurementsMap.get(path.getDevice()).add(path.getMeasurement());
}
- Map<Path, List<ChunkMetadata>> tempChunkMetaDatas = new HashMap<>();
+ Map<Path, List<IChunkMetadata>> tempChunkMetaDatas = new HashMap<>();
int count = 0;
boolean enough = false;
@@ -118,12 +117,12 @@ public class MetadataQuerierByFileImpl implements IMetadataQuerier {
List<TimeseriesMetadata> timeseriesMetaDataList =
tsFileReader.readTimeseriesMetadata(selectedDevice, selectedMeasurements);
- List<ChunkMetadata> chunkMetadataList = new ArrayList<>();
+ List<IChunkMetadata> chunkMetadataList = new ArrayList<>();
for (TimeseriesMetadata timeseriesMetadata : timeseriesMetaDataList) {
chunkMetadataList.addAll(tsFileReader.readChunkMetaDataList(timeseriesMetadata));
}
// d1
- for (ChunkMetadata chunkMetaData : chunkMetadataList) {
+ for (IChunkMetadata chunkMetaData : chunkMetadataList) {
String currentMeasurement = chunkMetaData.getMeasurementUid();
// s1
@@ -148,7 +147,7 @@ public class MetadataQuerierByFileImpl implements IMetadataQuerier {
}
}
- for (Map.Entry<Path, List<ChunkMetadata>> entry : tempChunkMetaDatas.entrySet()) {
+ for (Map.Entry<Path, List<IChunkMetadata>> entry : tempChunkMetaDatas.entrySet()) {
chunkMetaDataCache.put(entry.getKey(), entry.getValue());
}
}
@@ -162,7 +161,7 @@ public class MetadataQuerierByFileImpl implements IMetadataQuerier {
return tsFileReader.getChunkMetadataList(path).get(0).getDataType();
}
- private List<ChunkMetadata> loadChunkMetadata(Path path) throws IOException {
+ private List<IChunkMetadata> loadChunkMetadata(Path path) throws IOException {
return tsFileReader.getChunkMetadataList(path);
}
@@ -193,16 +192,16 @@ public class MetadataQuerierByFileImpl implements IMetadataQuerier {
Set<String> selectedMeasurements = deviceMeasurements.getValue();
// measurement -> ChunkMetadata list
- Map<String, List<ChunkMetadata>> seriesMetadatas =
+ Map<String, List<IChunkMetadata>> seriesMetadatas =
tsFileReader.readChunkMetadataInDevice(selectedDevice);
- for (Entry<String, List<ChunkMetadata>> seriesMetadata : seriesMetadatas.entrySet()) {
+ for (Entry<String, List<IChunkMetadata>> seriesMetadata : seriesMetadatas.entrySet()) {
if (!selectedMeasurements.contains(seriesMetadata.getKey())) {
continue;
}
- for (ChunkMetadata chunkMetadata : seriesMetadata.getValue()) {
+ for (IChunkMetadata chunkMetadata : seriesMetadata.getValue()) {
LocateStatus location =
checkLocateStatus(chunkMetadata, spacePartitionStartPos, spacePartitionEndPos);
if (location == LocateStatus.after) {
@@ -250,7 +249,7 @@ public class MetadataQuerierByFileImpl implements IMetadataQuerier {
* @return LocateStatus
*/
public static LocateStatus checkLocateStatus(
- ChunkMetadata chunkMetaData, long spacePartitionStartPos, long spacePartitionEndPos) {
+ IChunkMetadata chunkMetaData, long spacePartitionStartPos, long spacePartitionEndPos) {
long startOffsetOfChunk = chunkMetaData.getOffsetOfChunkHeader();
if (spacePartitionStartPos <= startOffsetOfChunk && startOffsetOfChunk < spacePartitionEndPos) {
return LocateStatus.in;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/read/TsFileSequenceReaderForV2.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/read/TsFileSequenceReaderForV2.java
index 9247a72..cf10567 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/read/TsFileSequenceReaderForV2.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/v2/read/TsFileSequenceReaderForV2.java
@@ -18,11 +18,24 @@
*/
package org.apache.iotdb.tsfile.v2.read;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.stream.Collectors;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.file.header.ChunkGroupHeader;
import org.apache.iotdb.tsfile.file.header.ChunkHeader;
import org.apache.iotdb.tsfile.file.header.PageHeader;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetadata;
+import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
import org.apache.iotdb.tsfile.file.metadata.MetadataIndexEntry;
import org.apache.iotdb.tsfile.file.metadata.MetadataIndexNode;
import org.apache.iotdb.tsfile.file.metadata.TimeseriesMetadata;
@@ -43,19 +56,6 @@ import org.apache.iotdb.tsfile.v2.file.metadata.MetadataIndexNodeV2;
import org.apache.iotdb.tsfile.v2.file.metadata.TimeseriesMetadataV2;
import org.apache.iotdb.tsfile.v2.file.metadata.TsFileMetadataV2;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.stream.Collectors;
-
public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements AutoCloseable {
private List<Pair<Long, Long>> versionInfo;
@@ -182,7 +182,7 @@ public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements A
buffer = readData(metadataIndexPair.left.getOffset(), metadataIndexPair.right);
while (buffer.hasRemaining()) {
TimeseriesMetadata timeseriesMetadata = TimeseriesMetadataV2.deserializeFrom(buffer);
- ArrayList<ChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetadata);
+ ArrayList<IChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetadata);
timeseriesMetadata.setChunkMetadataList(chunkMetadataList);
timeseriesMetadataList.add(timeseriesMetadata);
}
@@ -222,7 +222,7 @@ public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements A
while (buffer.hasRemaining()) {
TimeseriesMetadata timeseriesMetadata;
timeseriesMetadata = TimeseriesMetadataV2.deserializeFrom(buffer);
- ArrayList<ChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetadata);
+ ArrayList<IChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetadata);
timeseriesMetadata.setChunkMetadataList(chunkMetadataList);
if (allSensors.contains(timeseriesMetadata.getMeasurementId())) {
timeseriesMetadataList.add(timeseriesMetadata);
@@ -271,7 +271,7 @@ public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements A
measurementMetadataIndexPair.left.getOffset(), measurementMetadataIndexPair.right);
while (buffer.hasRemaining()) {
TimeseriesMetadata timeseriesMetadata = TimeseriesMetadataV2.deserializeFrom(buffer);
- ArrayList<ChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetadata);
+ ArrayList<IChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetadata);
timeseriesMetadata.setChunkMetadataList(chunkMetadataList);
timeseriesMetadataList.add(timeseriesMetadata);
}
@@ -338,7 +338,7 @@ public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements A
* @throws IOException io error
*/
@Override
- public Map<String, List<ChunkMetadata>> readChunkMetadataInDevice(String device)
+ public Map<String, List<IChunkMetadata>> readChunkMetadataInDevice(String device)
throws IOException {
if (tsFileMetaData == null) {
readFileMetadata();
@@ -355,7 +355,7 @@ public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements A
}
// read buffer of all ChunkMetadatas of this device
ByteBuffer buffer = readData(start, size);
- Map<String, List<ChunkMetadata>> seriesMetadata = new HashMap<>();
+ Map<String, List<IChunkMetadata>> seriesMetadata = new HashMap<>();
while (buffer.hasRemaining()) {
ChunkMetadata chunkMetadata = ChunkMetadataV2.deserializeFrom(buffer);
seriesMetadata
@@ -363,7 +363,7 @@ public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements A
.add(chunkMetadata);
}
// set version in ChunkMetadata
- for (Entry<String, List<ChunkMetadata>> entry : seriesMetadata.entrySet()) {
+ for (Entry<String, List<IChunkMetadata>> entry : seriesMetadata.entrySet()) {
applyVersion(entry.getValue());
}
return seriesMetadata;
@@ -410,7 +410,7 @@ public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements A
List<TimeseriesMetadata> timeseriesMetadataList = new ArrayList<>();
while (buffer.hasRemaining()) {
TimeseriesMetadata timeseriesMetadata = TimeseriesMetadataV2.deserializeFrom(buffer);
- ArrayList<ChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetadata);
+ ArrayList<IChunkMetadata> chunkMetadataList = readChunkMetaDataList(timeseriesMetadata);
timeseriesMetadata.setChunkMetadataList(chunkMetadataList);
timeseriesMetadataList.add(timeseriesMetadata);
}
@@ -584,10 +584,10 @@ public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements A
*
* @return List of ChunkMetaData
*/
- public ArrayList<ChunkMetadata> readChunkMetaDataList(TimeseriesMetadata timeseriesMetaData)
+ public ArrayList<IChunkMetadata> readChunkMetaDataList(TimeseriesMetadata timeseriesMetaData)
throws IOException {
readFileMetadata();
- ArrayList<ChunkMetadata> chunkMetadataList = new ArrayList<>();
+ ArrayList<IChunkMetadata> chunkMetadataList = new ArrayList<>();
long startOffsetOfChunkMetadataList = timeseriesMetaData.getOffsetOfChunkMetaDataList();
int dataSizeOfChunkMetadataList = timeseriesMetaData.getDataSizeOfChunkMetaDataList();
@@ -602,12 +602,12 @@ public class TsFileSequenceReaderForV2 extends TsFileSequenceReader implements A
return chunkMetadataList;
}
- private void applyVersion(List<ChunkMetadata> chunkMetadataList) {
+ private void applyVersion(List<IChunkMetadata> chunkMetadataList) {
if (versionInfo == null || versionInfo.isEmpty()) {
return;
}
int versionIndex = 0;
- for (ChunkMetadata chunkMetadata : chunkMetadataList) {
+ for (IChunkMetadata chunkMetadata : chunkMetadataList) {
while (chunkMetadata.getOffsetOfChunkHeader() >= versionInfo.get(versionIndex).left) {
versionIndex++;