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 6389622d3c92eebb0746f4bb802e9bb1d72110cb Author: JackieTien97 <[email protected]> AuthorDate: Thu Mar 11 16:50:16 2021 +0800 finish reader work(without UT) --- .../iotdb/tsfile/encoding/decoder/Decoder.java | 4 + .../iotdb/tsfile/file/metadata/IChunkMetadata.java | 40 ++++ .../tsfile/file/metadata/ITimeSeriesMetadata.java | 39 +++ .../tsfile/file/metadata/VectorChunkMetadata.java | 58 +++++ .../file/metadata/VectorTimeSeriesMetadata.java | 61 +++++ .../tsfile/file/metadata/enums/TSDataType.java | 2 +- .../file/metadata/statistics/Statistics.java | 2 +- .../file/metadata/statistics/TimeStatistics.java | 2 +- .../apache/iotdb/tsfile/read/common/BatchData.java | 59 +++++ .../tsfile/read/reader/chunk/ChunkReader.java | 6 +- .../read/reader/chunk/VectorChunkReader.java | 262 +++++++++++++++++++++ .../tsfile/read/reader/page/TimePageReader.java | 93 ++++++++ .../tsfile/read/reader/page/ValuePageReader.java | 160 +++++++++++++ .../tsfile/read/reader/page/VectorChunkReader.java | 21 ++ .../tsfile/read/reader/page/VectorPageReader.java | 116 +++++++++ .../apache/iotdb/tsfile/utils/TsPrimitiveType.java | 4 +- .../iotdb/tsfile/write/chunk/TimeChunkWriter.java | 4 +- .../tsfile/write/chunk/VectorChunkWriterImpl.java | 2 +- .../tsfile/write/writer/TimeChunkWriterTest.java | 4 +- .../tsfile/write/writer/TimePageWriterTest.java | 2 +- .../write/writer/VectorChunkWriterImplTest.java | 4 +- .../write/writer/VectorMeasurementSchemaStub.java | 2 +- 22 files changed, 930 insertions(+), 17 deletions(-) diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/Decoder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/Decoder.java index fc70f03..d5ac0cb 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/Decoder.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/Decoder.java @@ -56,6 +56,7 @@ public abstract class Decoder { case INT32: return new IntRleDecoder(); case INT64: + case VECTOR: return new LongRleDecoder(); case FLOAT: case DOUBLE: @@ -68,6 +69,7 @@ public abstract class Decoder { case INT32: return new DeltaBinaryDecoder.IntDeltaDecoder(); case INT64: + case VECTOR: return new DeltaBinaryDecoder.LongDeltaDecoder(); case FLOAT: case DOUBLE: @@ -89,6 +91,7 @@ public abstract class Decoder { case INT32: return new RegularDataDecoder.IntRegularDecoder(); case INT64: + case VECTOR: return new RegularDataDecoder.LongRegularDecoder(); default: throw new TsFileDecodingException(String.format(ERROR_MSG, encoding, dataType)); @@ -102,6 +105,7 @@ public abstract class Decoder { case INT32: return new IntGorillaDecoder(); case INT64: + case VECTOR: return new LongGorillaDecoder(); default: throw new TsFileDecodingException(String.format(ERROR_MSG, encoding, dataType)); 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 new file mode 100644 index 0000000..b1259a6 --- /dev/null +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.tsfile.file.metadata; + +import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; + +public interface IChunkMetadata { + + Statistics getStatistics(); + + boolean isModified(); + + void setModified(boolean modified); + + boolean isSeq(); + + void setSeq(boolean seq); + + long getVersion(); + + void setVersion(long version); + + long getOffsetOfChunkHeader(); +} 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 new file mode 100644 index 0000000..4029965 --- /dev/null +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.tsfile.file.metadata; + +import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; + +import java.io.IOException; +import java.util.List; + +public interface ITimeSeriesMetadata { + + Statistics getStatistics(); + + boolean isModified(); + + void setModified(boolean modified); + + boolean isSeq(); + + void setSeq(boolean seq); + + List<IChunkMetadata> loadChunkMetadataList() throws IOException; +} 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 new file mode 100644 index 0000000..d512495 --- /dev/null +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorChunkMetadata.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.tsfile.file.metadata; + +import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; + +public class VectorChunkMetadata implements IChunkMetadata { + + @Override + public Statistics getStatistics() { + return null; + } + + @Override + public boolean isModified() { + return false; + } + + @Override + public void setModified(boolean modified) {} + + @Override + public boolean isSeq() { + return false; + } + + @Override + public void setSeq(boolean seq) {} + + @Override + public long getVersion() { + return 0; + } + + @Override + public void setVersion(long version) {} + + @Override + public long getOffsetOfChunkHeader() { + return 0; + } +} 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 new file mode 100644 index 0000000..49a44aa --- /dev/null +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorTimeSeriesMetadata.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.tsfile.file.metadata; + +import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; + +import java.io.IOException; +import java.util.List; + +public class VectorTimeSeriesMetadata implements ITimeSeriesMetadata { + + private TimeseriesMetadata timeseriesMetadata; + private List<TimeseriesMetadata> valueTimeseriesMetadataList; + + @Override + public Statistics getStatistics() { + return timeseriesMetadata.getStatistics(); + } + + @Override + public boolean isModified() { + return timeseriesMetadata.isModified(); + } + + @Override + public void setModified(boolean modified) { + timeseriesMetadata.setModified(modified); + } + + @Override + public boolean isSeq() { + return timeseriesMetadata.isSeq(); + } + + @Override + public void setSeq(boolean seq) { + timeseriesMetadata.setSeq(seq); + } + + @Override + public List<IChunkMetadata> loadChunkMetadataList() throws IOException { + List<ChunkMetadata> timeChunkMetadata = timeseriesMetadata.loadChunkMetadataList(); + return null; + } +} diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java index a2b7eef..2612e03 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java @@ -44,7 +44,7 @@ public enum TSDataType { TEXT((byte) 5), /** Vector */ - Vector((byte) 6); + VECTOR((byte) 6); private final byte type; diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java index 1c1ba7f..759a751 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/Statistics.java @@ -77,7 +77,7 @@ public abstract class Statistics<T> { return new DoubleStatistics(); case FLOAT: return new FloatStatistics(); - case Vector: + case VECTOR: return new TimeStatistics(); default: throw new UnknownColumnTypeException(type.toString()); diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java index 74bd701..e812166 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/statistics/TimeStatistics.java @@ -32,7 +32,7 @@ public class TimeStatistics extends Statistics { @Override public TSDataType getType() { - return TSDataType.Vector; + return TSDataType.VECTOR; } @Override diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java index c2a7d3b..a2c2ce7 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java @@ -31,6 +31,7 @@ import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsDouble; import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsFloat; import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsInt; import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsLong; +import org.apache.iotdb.tsfile.utils.TsPrimitiveType.TsVector; import java.util.ArrayList; import java.util.List; @@ -77,6 +78,7 @@ public class BatchData { protected List<float[]> floatRet; protected List<double[]> doubleRet; protected List<Binary[]> binaryRet; + protected List<TsPrimitiveType[][]> vectorRet; public BatchData() { dataType = null; @@ -134,6 +136,8 @@ public class BatchData { return getBoolean(); case TEXT: return getBinary(); + case VECTOR: + return getVector(); default: return null; } @@ -153,6 +157,8 @@ public class BatchData { return new TsBoolean(getBoolean()); case TEXT: return new TsBinary(getBinary()); + case VECTOR: + return new TsVector(getVector()); default: return null; } @@ -203,6 +209,9 @@ public class BatchData { binaryRet = new ArrayList<>(); binaryRet.add(new Binary[capacity]); break; + case VECTOR: + vectorRet = new ArrayList<>(); + vectorRet.add(new TsPrimitiveType[capacity][]); default: throw new UnSupportedDataTypeException(String.valueOf(dataType)); } @@ -417,6 +426,41 @@ public class BatchData { count++; } + /** + * put vector data. + * + * @param t timestamp + * @param v vector data. + */ + public void putVector(long t, TsPrimitiveType[] v) { + if (writeCurArrayIndex == capacity) { + if (capacity >= CAPACITY_THRESHOLD) { + timeRet.add(new long[capacity]); + vectorRet.add(new TsPrimitiveType[capacity][]); + writeCurListIndex++; + writeCurArrayIndex = 0; + } else { + int newCapacity = capacity << 1; + + long[] newTimeData = new long[newCapacity]; + TsPrimitiveType[][] newValueData = new TsPrimitiveType[newCapacity][]; + + System.arraycopy(timeRet.get(0), 0, newTimeData, 0, capacity); + System.arraycopy(vectorRet.get(0), 0, newValueData, 0, capacity); + + timeRet.set(0, newTimeData); + vectorRet.set(0, newValueData); + + capacity = newCapacity; + } + } + timeRet.get(writeCurListIndex)[writeCurArrayIndex] = t; + vectorRet.get(writeCurListIndex)[writeCurArrayIndex] = v; + + writeCurArrayIndex++; + count++; + } + public boolean getBoolean() { return this.booleanRet.get(readCurListIndex)[readCurArrayIndex]; } @@ -465,6 +509,14 @@ public class BatchData { this.binaryRet.get(readCurListIndex)[readCurArrayIndex] = v; } + public TsPrimitiveType[] getVector() { + return this.vectorRet.get(readCurListIndex)[readCurArrayIndex]; + } + + public void setVector(TsPrimitiveType[] v) { + this.vectorRet.get(readCurListIndex)[readCurArrayIndex] = v; + } + public void setTime(long v) { this.timeRet.get(readCurListIndex)[readCurArrayIndex] = v; } @@ -495,6 +547,9 @@ public class BatchData { case TEXT: putBinary(t, (Binary) v); break; + case VECTOR: + putVector(t, (TsPrimitiveType[]) v); + break; default: throw new UnSupportedDataTypeException(String.valueOf(dataType)); } @@ -532,6 +587,10 @@ public class BatchData { return booleanRet.get(idx / capacity)[idx % capacity]; } + public TsPrimitiveType[] getVectorByIndex(int idx) { + return vectorRet.get(idx / capacity)[idx % capacity]; + } + public TimeValuePair getLastPairBeforeOrEqualTimestamp(long queryTime) { TimeValuePair resultPair = new TimeValuePair(Long.MIN_VALUE, null); resetBatchData(); diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java index 2a4e1f7..8b67dd4 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/ChunkReader.java @@ -118,11 +118,11 @@ public class ChunkReader implements IChunkReader { return pageReaderList.remove(0).getAllSatisfiedPageData(); } - private void skipBytesInStreamByLength(long length) { - chunkDataBuffer.position(chunkDataBuffer.position() + (int) length); + private void skipBytesInStreamByLength(int length) { + chunkDataBuffer.position(chunkDataBuffer.position() + length); } - public boolean pageSatisfied(PageHeader pageHeader) { + protected boolean pageSatisfied(PageHeader pageHeader) { if (deleteIntervalList != null) { for (TimeRange range : deleteIntervalList) { if (range.contains(pageHeader.getStartTime(), pageHeader.getEndTime())) { diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/VectorChunkReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/VectorChunkReader.java new file mode 100644 index 0000000..33b256a --- /dev/null +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/VectorChunkReader.java @@ -0,0 +1,262 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.tsfile.read.reader.chunk; + +import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; +import org.apache.iotdb.tsfile.compress.IUnCompressor; +import org.apache.iotdb.tsfile.encoding.decoder.Decoder; +import org.apache.iotdb.tsfile.file.MetaMarker; +import org.apache.iotdb.tsfile.file.header.ChunkHeader; +import org.apache.iotdb.tsfile.file.header.PageHeader; +import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; +import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding; +import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; +import org.apache.iotdb.tsfile.read.common.BatchData; +import org.apache.iotdb.tsfile.read.common.Chunk; +import org.apache.iotdb.tsfile.read.common.TimeRange; +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.page.VectorPageReader; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +public class VectorChunkReader implements IChunkReader { + + private final ChunkHeader timeChunkHeader; + private final List<ChunkHeader> valueChunkHeaderList = new ArrayList<>(); + private final ByteBuffer timeChunkDataBuffer; + private final List<ByteBuffer> valueChunkDataBufferList = new ArrayList<>(); + private final IUnCompressor unCompressor; + private final Decoder timeDecoder = + Decoder.getDecoderByType( + TSEncoding.valueOf(TSFileDescriptor.getInstance().getConfig().getTimeEncoder()), + TSDataType.INT64); + + protected Filter filter; + + private final List<IPageReader> pageReaderList = new LinkedList<>(); + + /** A list of deleted intervals. */ + private final List<List<TimeRange>> valueDeleteIntervalList; + + /** + * constructor of ChunkReader. + * + * @param filter filter + */ + public VectorChunkReader(Chunk timeChunk, List<Chunk> valueChunkList, Filter filter) + throws IOException { + this.filter = filter; + this.timeChunkDataBuffer = timeChunk.getData(); + this.valueDeleteIntervalList = new ArrayList<>(); + this.timeChunkHeader = timeChunk.getHeader(); + this.unCompressor = IUnCompressor.getUnCompressor(timeChunkHeader.getCompressionType()); + List<Statistics> valueChunkStatisticsList = new ArrayList<>(); + valueChunkList.forEach( + chunk -> { + this.valueChunkHeaderList.add(chunk.getHeader()); + this.valueChunkDataBufferList.add(chunk.getData()); + valueChunkStatisticsList.add(chunk.getChunkStatistic()); + valueDeleteIntervalList.add(chunk.getDeleteIntervalList()); + }); + initAllPageReaders(timeChunk.getChunkStatistic(), valueChunkStatisticsList); + } + + private void initAllPageReaders( + Statistics timeChunkStatistics, List<Statistics> valueChunkStatisticsList) + throws IOException { + // construct next satisfied page header + while (timeChunkDataBuffer.remaining() > 0) { + // deserialize a PageHeader from chunkDataBuffer + PageHeader timePageHeader; + List<PageHeader> valuePageHeaderList = new ArrayList<>(); + if (timeChunkHeader.getChunkType() == MetaMarker.ONLY_ONE_PAGE_CHUNK_HEADER) { + timePageHeader = PageHeader.deserializeFrom(timeChunkDataBuffer, timeChunkStatistics); + for (int i = 0; i < valueChunkDataBufferList.size(); i++) { + valuePageHeaderList.add( + PageHeader.deserializeFrom( + valueChunkDataBufferList.get(i), valueChunkStatisticsList.get(i))); + } + } else { + timePageHeader = + PageHeader.deserializeFrom(timeChunkDataBuffer, timeChunkHeader.getDataType()); + for (int i = 0; i < valueChunkDataBufferList.size(); i++) { + valuePageHeaderList.add( + PageHeader.deserializeFrom( + valueChunkDataBufferList.get(i), valueChunkHeaderList.get(i).getDataType())); + } + } + // if the current page satisfies + if (pageSatisfied(timePageHeader)) { + pageReaderList.add(constructPageReaderForNextPage(timePageHeader, valuePageHeaderList)); + } else { + skipBytesInStreamByLength(timePageHeader, valuePageHeaderList); + } + } + } + + private boolean pageSatisfied(PageHeader pageHeader) { + return filter == null || filter.satisfy(pageHeader.getStatistics()); + } + + /** used for value page filter */ + private boolean pageSatisfied(PageHeader pageHeader, List<TimeRange> valueDeleteInterval) { + if (valueDeleteInterval != null) { + for (TimeRange range : valueDeleteInterval) { + if (range.contains(pageHeader.getStartTime(), pageHeader.getEndTime())) { + return false; + } + if (range.overlaps(new TimeRange(pageHeader.getStartTime(), pageHeader.getEndTime()))) { + pageHeader.setModified(true); + } + } + } + return filter == null || filter.satisfy(pageHeader.getStatistics()); + } + + private VectorPageReader constructPageReaderForNextPage( + PageHeader timePageHeader, List<PageHeader> valuePageHeader) throws IOException { + PageInfo timePageInfo = new PageInfo(); + getPageInfo(timePageHeader, timeChunkDataBuffer, timeChunkHeader, timePageInfo); + PageInfo valuePageInfo = new PageInfo(); + List<PageHeader> valuePageHeaderList = new ArrayList<>(); + List<ByteBuffer> valuePageDataList = new ArrayList<>(); + List<TSDataType> valueDataTypeList = new ArrayList<>(); + List<Decoder> valueDecoderList = new ArrayList<>(); + for (int i = 0; i < valuePageHeader.size(); i++) { + if (pageSatisfied(valuePageHeader.get(i), valueDeleteIntervalList.get(i))) { + getPageInfo( + valuePageHeader.get(i), + valueChunkDataBufferList.get(i), + valueChunkHeaderList.get(i), + valuePageInfo); + valuePageHeaderList.add(valuePageInfo.pageHeader); + valuePageDataList.add(valuePageInfo.pageData); + valueDataTypeList.add(valuePageInfo.dataType); + valueDecoderList.add(valuePageInfo.decoder); + } else { + valueChunkDataBufferList + .get(i) + .position( + valueChunkDataBufferList.get(i).position() + + valuePageHeader.get(i).getCompressedSize()); + valuePageHeaderList.add(valuePageHeader.get(i)); + valuePageDataList.add(null); + valueDataTypeList.add(null); + valueDecoderList.add(null); + } + } + VectorPageReader vectorPageReader = + new VectorPageReader( + timePageHeader, + timePageInfo.pageData, + timeDecoder, + valuePageHeaderList, + valuePageDataList, + valueDataTypeList, + valueDecoderList, + filter); + vectorPageReader.setDeleteIntervalList(valueDeleteIntervalList); + return vectorPageReader; + } + + private void getPageInfo( + PageHeader pageHeader, ByteBuffer chunkBuffer, ChunkHeader chunkHeader, PageInfo pageInfo) + throws IOException { + pageInfo.pageHeader = pageHeader; + pageInfo.dataType = chunkHeader.getDataType(); + int compressedPageBodyLength = pageHeader.getCompressedSize(); + byte[] compressedPageBody = new byte[compressedPageBodyLength]; + + // doesn't has a complete page body + if (compressedPageBodyLength > chunkBuffer.remaining()) { + throw new IOException( + "do not has a complete page body. Expected:" + + compressedPageBodyLength + + ". Actual:" + + chunkBuffer.remaining()); + } + + chunkBuffer.get(compressedPageBody); + pageInfo.decoder = + Decoder.getDecoderByType(chunkHeader.getEncodingType(), chunkHeader.getDataType()); + byte[] uncompressedPageData = new byte[pageHeader.getUncompressedSize()]; + try { + unCompressor.uncompress( + compressedPageBody, 0, compressedPageBodyLength, uncompressedPageData, 0); + } catch (Exception e) { + throw new IOException( + "Uncompress error! uncompress size: " + + pageHeader.getUncompressedSize() + + "compressed size: " + + pageHeader.getCompressedSize() + + "page header: " + + pageHeader + + e.getMessage()); + } + pageInfo.pageData = ByteBuffer.wrap(uncompressedPageData); + } + + private static class PageInfo { + + PageHeader pageHeader; + ByteBuffer pageData; + TSDataType dataType; + Decoder decoder; + } + + private void skipBytesInStreamByLength( + PageHeader timePageHeader, List<PageHeader> valuePageHeader) { + timeChunkDataBuffer.position( + timeChunkDataBuffer.position() + timePageHeader.getCompressedSize()); + for (int i = 0; i < valuePageHeader.size(); i++) { + valueChunkDataBufferList + .get(i) + .position( + valueChunkDataBufferList.get(i).position() + + valuePageHeader.get(i).getCompressedSize()); + } + } + + @Override + public boolean hasNextSatisfiedPage() { + return !pageReaderList.isEmpty(); + } + + @Override + public BatchData nextPageData() throws IOException { + if (pageReaderList.isEmpty()) { + throw new IOException("No more page"); + } + return pageReaderList.remove(0).getAllSatisfiedPageData(); + } + + @Override + public void close() throws IOException {} + + @Override + public List<IPageReader> loadPageReaderList() { + return pageReaderList; + } +} diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java new file mode 100644 index 0000000..6bb7e74 --- /dev/null +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.tsfile.read.reader.page; + +import org.apache.iotdb.tsfile.encoding.decoder.Decoder; +import org.apache.iotdb.tsfile.file.header.PageHeader; +import org.apache.iotdb.tsfile.file.metadata.statistics.TimeStatistics; +import org.apache.iotdb.tsfile.read.common.TimeRange; + +import com.sun.tools.javac.util.List; + +import java.io.IOException; +import java.nio.ByteBuffer; + +public class TimePageReader { + + private final PageHeader pageHeader; + + /** decoder for time column */ + protected Decoder timeDecoder; + + /** time column in memory */ + protected ByteBuffer timeBuffer; + + /** A list of deleted intervals. */ + private List<TimeRange> deleteIntervalList; + + private int deleteCursor = 0; + + public TimePageReader(ByteBuffer pageData, Decoder timeDecoder) { + this(null, pageData, timeDecoder); + } + + public TimePageReader(PageHeader pageHeader, ByteBuffer pageData, Decoder timeDecoder) { + this.timeDecoder = timeDecoder; + this.pageHeader = pageHeader; + this.timeBuffer = pageData; + } + + public long[] nexTimeBatch() throws IOException { + long[] timeBatch = new long[(int) pageHeader.getStatistics().getCount()]; + int index = 0; + while (timeDecoder.hasNext(timeBuffer)) { + timeBatch[index++] = timeDecoder.readLong(timeBuffer); + } + return timeBatch; + } + + public TimeStatistics getStatistics() { + return (TimeStatistics) pageHeader.getStatistics(); + } + + public void setDeleteIntervalList(List<TimeRange> list) { + this.deleteIntervalList = list; + } + + public List<TimeRange> getDeleteIntervalList() { + return deleteIntervalList; + } + + public boolean isModified() { + return pageHeader.isModified(); + } + + protected boolean isDeleted(long timestamp) { + while (deleteIntervalList != null && deleteCursor < deleteIntervalList.size()) { + if (deleteIntervalList.get(deleteCursor).contains(timestamp)) { + return true; + } else if (deleteIntervalList.get(deleteCursor).getMax() < timestamp) { + deleteCursor++; + } else { + return false; + } + } + return false; + } +} diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java new file mode 100644 index 0000000..f972159 --- /dev/null +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.tsfile.read.reader.page; + +import org.apache.iotdb.tsfile.encoding.decoder.Decoder; +import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException; +import org.apache.iotdb.tsfile.file.header.PageHeader; +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.utils.Binary; +import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; +import org.apache.iotdb.tsfile.utils.TsPrimitiveType; + +import java.nio.ByteBuffer; +import java.util.List; + +public class ValuePageReader { + + private static final int MASK = 0x80; + + private final PageHeader pageHeader; + + private final TSDataType dataType; + + /** decoder for value column */ + private final Decoder valueDecoder; + + private byte[] bitmap; + + private int size; + + /** value column in memory */ + protected ByteBuffer valueBuffer; + + /** A list of deleted intervals. */ + private List<TimeRange> deleteIntervalList; + + private int deleteCursor = 0; + + public ValuePageReader(ByteBuffer pageData, TSDataType dataType, Decoder valueDecoder) { + this(null, pageData, dataType, valueDecoder); + } + + public ValuePageReader( + PageHeader pageHeader, ByteBuffer pageData, TSDataType dataType, Decoder valueDecoder) { + this.dataType = dataType; + this.valueDecoder = valueDecoder; + this.pageHeader = pageHeader; + if (pageData != null) { + splitDataToBitmapAndValue(pageData); + } + this.valueBuffer = pageData; + } + + private void splitDataToBitmapAndValue(ByteBuffer pageData) { + this.size = ReadWriteIOUtils.readInt(pageData); + this.bitmap = new byte[(size + 7) / 8]; + pageData.get(bitmap); + this.valueBuffer = pageData.slice(); + } + + public TsPrimitiveType[] nextValueBatch(long[] timeBatch) { + TsPrimitiveType[] valueBatch = new TsPrimitiveType[size]; + if (valueBuffer == null) { + return valueBatch; + } + for (int i = 0; i < size; i++) { + if ((bitmap[i / 8] & (MASK >>> (i % 8))) == 0) { + continue; + } + switch (dataType) { + case BOOLEAN: + boolean aBoolean = valueDecoder.readBoolean(valueBuffer); + if (!isDeleted(timeBatch[i])) { + valueBatch[i] = new TsPrimitiveType.TsBoolean(aBoolean); + } + break; + case INT32: + int anInt = valueDecoder.readInt(valueBuffer); + if (!isDeleted(timeBatch[i])) { + valueBatch[i] = new TsPrimitiveType.TsInt(anInt); + } + break; + case INT64: + long aLong = valueDecoder.readLong(valueBuffer); + if (!isDeleted(timeBatch[i])) { + valueBatch[i] = new TsPrimitiveType.TsLong(aLong); + } + break; + case FLOAT: + float aFloat = valueDecoder.readFloat(valueBuffer); + if (!isDeleted(timeBatch[i])) { + valueBatch[i] = new TsPrimitiveType.TsFloat(aFloat); + } + break; + case DOUBLE: + double aDouble = valueDecoder.readDouble(valueBuffer); + if (!isDeleted(timeBatch[i])) { + valueBatch[i] = new TsPrimitiveType.TsDouble(aDouble); + } + break; + case TEXT: + Binary aBinary = valueDecoder.readBinary(valueBuffer); + if (!isDeleted(timeBatch[i])) { + valueBatch[i] = new TsPrimitiveType.TsBinary(aBinary); + } + break; + default: + throw new UnSupportedDataTypeException(String.valueOf(dataType)); + } + } + return valueBatch; + } + + public Statistics getStatistics() { + return pageHeader.getStatistics(); + } + + public void setDeleteIntervalList(List<TimeRange> list) { + this.deleteIntervalList = list; + } + + public List<TimeRange> getDeleteIntervalList() { + return deleteIntervalList; + } + + public boolean isModified() { + return pageHeader.isModified(); + } + + protected boolean isDeleted(long timestamp) { + while (deleteIntervalList != null && deleteCursor < deleteIntervalList.size()) { + if (deleteIntervalList.get(deleteCursor).contains(timestamp)) { + return true; + } else if (deleteIntervalList.get(deleteCursor).getMax() < timestamp) { + deleteCursor++; + } else { + return false; + } + } + return false; + } +} diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorChunkReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorChunkReader.java new file mode 100644 index 0000000..b4665fc --- /dev/null +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorChunkReader.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.tsfile.read.reader.page; + +public class VectorChunkReader {} diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorPageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorPageReader.java new file mode 100644 index 0000000..b2059af --- /dev/null +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorPageReader.java @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.tsfile.read.reader.page; + +import org.apache.iotdb.tsfile.encoding.decoder.Decoder; +import org.apache.iotdb.tsfile.file.header.PageHeader; +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.BatchData; +import org.apache.iotdb.tsfile.read.common.BatchDataFactory; +import org.apache.iotdb.tsfile.read.common.TimeRange; +import org.apache.iotdb.tsfile.read.filter.basic.Filter; +import org.apache.iotdb.tsfile.read.reader.IPageReader; +import org.apache.iotdb.tsfile.utils.TsPrimitiveType; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +public class VectorPageReader implements IPageReader { + + private final TimePageReader timePageReader; + private final List<ValuePageReader> valuePageReaderList; + private final int valueCount; + private Filter filter; + private boolean isModified; + + public VectorPageReader( + PageHeader timePageHeader, + ByteBuffer timePageData, + Decoder timeDecoder, + List<PageHeader> valuePageHeaderList, + List<ByteBuffer> valuePageDataList, + List<TSDataType> valueDataTypeList, + List<Decoder> valueDecoderList, + Filter filter) { + timePageReader = new TimePageReader(timePageHeader, timePageData, timeDecoder); + isModified = timePageReader.isModified(); + valuePageReaderList = new ArrayList<>(valuePageHeaderList.size()); + for (int i = 0; i < valuePageHeaderList.size(); i++) { + ValuePageReader valuePageReader = + new ValuePageReader( + valuePageHeaderList.get(i), + valuePageDataList.get(i), + valueDataTypeList.get(i), + valueDecoderList.get(i)); + valuePageReaderList.add(valuePageReader); + isModified = isModified && valuePageReader.isModified(); + } + this.filter = filter; + this.valueCount = valuePageReaderList.size(); + } + + @Override + public BatchData getAllSatisfiedPageData(boolean ascending) throws IOException { + long[] timeBatch = timePageReader.nexTimeBatch(); + List<TsPrimitiveType[]> valueBatchList = new ArrayList<>(valueCount); + for (ValuePageReader valuePageReader : valuePageReaderList) { + valueBatchList.add(valuePageReader.nextValueBatch(timeBatch)); + } + BatchData pageData = BatchDataFactory.createBatchData(TSDataType.VECTOR, ascending, false); + boolean isNull; + for (int i = 0; i < timeBatch.length; i++) { + isNull = true; + TsPrimitiveType[] v = new TsPrimitiveType[valueCount]; + for (int j = 0; j < v.length; j++) { + v[j] = valueBatchList.get(j)[i]; + if (v[j] != null) { + isNull = false; + } + } + if (!isNull && (filter == null || filter.satisfy(timeBatch[i], v))) { + pageData.putVector(timeBatch[i], v); + } + } + return pageData; + } + + public void setDeleteIntervalList(List<List<TimeRange>> list) { + for (int i = 0; i < valueCount; i++) { + valuePageReaderList.get(i).setDeleteIntervalList(list.get(i)); + } + } + + @Override + public Statistics getStatistics() { + return timePageReader.getStatistics(); + } + + @Override + public void setFilter(Filter filter) { + this.filter = filter; + } + + @Override + public boolean isModified() { + return isModified; + } +} diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java index 6c00f43..b4efd18 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java @@ -45,7 +45,7 @@ public abstract class TsPrimitiveType implements Serializable { return new TsPrimitiveType.TsDouble((double) v); case TEXT: return new TsPrimitiveType.TsBinary((Binary) v); - case Vector: + case VECTOR: return new TsPrimitiveType.TsVector((TsPrimitiveType[]) v); default: throw new UnSupportedDataTypeException("Unsupported data type:" + dataType); @@ -519,7 +519,7 @@ public abstract class TsPrimitiveType implements Serializable { @Override public TSDataType getDataType() { - return TSDataType.Vector; + return TSDataType.VECTOR; } } } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/TimeChunkWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/TimeChunkWriter.java index df9ded9..522eff5 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/TimeChunkWriter.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/TimeChunkWriter.java @@ -205,7 +205,7 @@ public class TimeChunkWriter { } public TSDataType getDataType() { - return TSDataType.Vector; + return TSDataType.VECTOR; } /** @@ -223,7 +223,7 @@ public class TimeChunkWriter { writer.startFlushChunk( measurementId, compressionType, - TSDataType.Vector, + TSDataType.VECTOR, encodingType, statistics, pageBuffer.size(), diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java index af71ecd..8f1e907 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java @@ -197,6 +197,6 @@ public class VectorChunkWriterImpl implements IChunkWriter { @Override public TSDataType getDataType() { - return TSDataType.Vector; + return TSDataType.VECTOR; } } diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimeChunkWriterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimeChunkWriterTest.java index 9968815..bdca8d5 100644 --- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimeChunkWriterTest.java +++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimeChunkWriterTest.java @@ -63,7 +63,7 @@ public class TimeChunkWriterTest { (byte) (0x80 | MetaMarker.ONLY_ONE_PAGE_CHUNK_HEADER), ReadWriteIOUtils.readByte(buffer)); assertEquals("c1", ReadWriteIOUtils.readVarIntString(buffer)); assertEquals(82, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer)); - assertEquals(TSDataType.Vector.serialize(), ReadWriteIOUtils.readByte(buffer)); + assertEquals(TSDataType.VECTOR.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(CompressionType.UNCOMPRESSED.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(TSEncoding.PLAIN.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(82, buffer.remaining()); @@ -99,7 +99,7 @@ public class TimeChunkWriterTest { assertEquals((byte) (0x80 | MetaMarker.CHUNK_HEADER), ReadWriteIOUtils.readByte(buffer)); assertEquals("c1", ReadWriteIOUtils.readVarIntString(buffer)); assertEquals(198, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer)); - assertEquals(TSDataType.Vector.serialize(), ReadWriteIOUtils.readByte(buffer)); + assertEquals(TSDataType.VECTOR.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(CompressionType.UNCOMPRESSED.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(TSEncoding.PLAIN.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(198, buffer.remaining()); diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimePageWriterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimePageWriterTest.java index 2ec6294..cab975c 100644 --- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimePageWriterTest.java +++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TimePageWriterTest.java @@ -119,7 +119,7 @@ public class TimePageWriterTest { // compressedSize assertEquals(24, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer)); TimeStatistics testStatistics = - (TimeStatistics) TimeStatistics.deserialize(buffer, TSDataType.Vector); + (TimeStatistics) TimeStatistics.deserialize(buffer, TSDataType.VECTOR); assertEquals(1L, testStatistics.getStartTime()); assertEquals(3L, testStatistics.getEndTime()); assertEquals(3, testStatistics.getCount()); diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorChunkWriterImplTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorChunkWriterImplTest.java index 93e18bb..3ca81b1 100644 --- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorChunkWriterImplTest.java +++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorChunkWriterImplTest.java @@ -65,7 +65,7 @@ public class VectorChunkWriterImplTest { (byte) (0x80 | MetaMarker.ONLY_ONE_PAGE_CHUNK_HEADER), ReadWriteIOUtils.readByte(buffer)); assertEquals("s1.time", ReadWriteIOUtils.readVarIntString(buffer)); assertEquals(164, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer)); - assertEquals(TSDataType.Vector.serialize(), ReadWriteIOUtils.readByte(buffer)); + assertEquals(TSDataType.VECTOR.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(CompressionType.UNCOMPRESSED.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(TSEncoding.PLAIN.serialize(), ReadWriteIOUtils.readByte(buffer)); buffer.position(buffer.position() + 164); @@ -138,7 +138,7 @@ public class VectorChunkWriterImplTest { assertEquals((byte) (0x80 | MetaMarker.CHUNK_HEADER), ReadWriteIOUtils.readByte(buffer)); assertEquals("s1.time", ReadWriteIOUtils.readVarIntString(buffer)); assertEquals(362, ReadWriteForEncodingUtils.readUnsignedVarInt(buffer)); - assertEquals(TSDataType.Vector.serialize(), ReadWriteIOUtils.readByte(buffer)); + assertEquals(TSDataType.VECTOR.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(CompressionType.UNCOMPRESSED.serialize(), ReadWriteIOUtils.readByte(buffer)); assertEquals(TSEncoding.PLAIN.serialize(), ReadWriteIOUtils.readByte(buffer)); buffer.position(buffer.position() + 362); diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java index 795a0a6..40335f5 100644 --- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java +++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorMeasurementSchemaStub.java @@ -42,7 +42,7 @@ public class VectorMeasurementSchemaStub implements IMeasurementSchema { @Override public TSDataType getType() { - return TSDataType.Vector; + return TSDataType.VECTOR; } @Override
