You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2019/11/19 08:52:24 UTC
[incubator-iotdb] branch rel/0.9 updated: Fix a decoder bug (#571)
This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch rel/0.9
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/rel/0.9 by this push:
new e257beb Fix a decoder bug (#571)
e257beb is described below
commit e257beb5a783191068132017cac93046620afc23
Author: Haonan <hh...@outlook.com>
AuthorDate: Tue Nov 19 16:50:13 2019 +0800
Fix a decoder bug (#571)
* fix decoder bug
---
.../apache/iotdb/tsfile/encoding/decoder/Decoder.java | 11 ++++++++++-
.../iotdb/tsfile/encoding/decoder/PlainDecoder.java | 18 ++++++++++++++++++
.../iotdb/tsfile/read/reader/chunk/ChunkReader.java | 4 +---
.../iotdb/tsfile/read/reader/page/PageReader.java | 3 ---
4 files changed, 29 insertions(+), 7 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 02c9682..7c2c5be 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
@@ -31,6 +31,7 @@ import org.apache.iotdb.tsfile.utils.Binary;
public abstract class Decoder {
private TSEncoding type;
+ private static EndianType endian;
public Decoder(TSEncoding type) {
this.type = type;
@@ -43,6 +44,14 @@ public abstract class Decoder {
public TSEncoding getType() {
return type;
}
+
+ public void setEndianType(EndianType endian) {
+ Decoder.endian = endian;
+ }
+
+ public EndianType getEndianType() {
+ return endian;
+ }
/**
* get Decoder object by type.
@@ -54,7 +63,7 @@ public abstract class Decoder {
public static Decoder getDecoderByType(TSEncoding type, TSDataType dataType) {
// PLA and DFT encoding are not supported in current version
if (type == TSEncoding.PLAIN) {
- return new PlainDecoder(EndianType.BIG_ENDIAN);
+ return new PlainDecoder(endian);
} else if (type == TSEncoding.RLE) {
switch (dataType) {
case BOOLEAN:
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/PlainDecoder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/PlainDecoder.java
index c0b263d..8ecfea0 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/PlainDecoder.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/decoder/PlainDecoder.java
@@ -51,31 +51,49 @@ public class PlainDecoder extends Decoder {
@Override
public boolean readBoolean(ByteBuffer buffer) {
+ if (this.getEndianType() == EndianType.LITTLE_ENDIAN) {
+ buffer.order(ByteOrder.LITTLE_ENDIAN);
+ }
return buffer.get() != 0;
}
@Override
public short readShort(ByteBuffer buffer) {
+ if (this.getEndianType() == EndianType.LITTLE_ENDIAN) {
+ buffer.order(ByteOrder.LITTLE_ENDIAN);
+ }
return buffer.getShort();
}
@Override
public int readInt(ByteBuffer buffer) {
+ if (this.getEndianType() == EndianType.LITTLE_ENDIAN) {
+ buffer.order(ByteOrder.LITTLE_ENDIAN);
+ }
return buffer.getInt();
}
@Override
public long readLong(ByteBuffer buffer) {
+ if (this.getEndianType() == EndianType.LITTLE_ENDIAN) {
+ buffer.order(ByteOrder.LITTLE_ENDIAN);
+ }
return buffer.getLong();
}
@Override
public float readFloat(ByteBuffer buffer) {
+ if (this.getEndianType() == EndianType.LITTLE_ENDIAN) {
+ buffer.order(ByteOrder.LITTLE_ENDIAN);
+ }
return buffer.getFloat();
}
@Override
public double readDouble(ByteBuffer buffer) {
+ if (this.getEndianType() == EndianType.LITTLE_ENDIAN) {
+ buffer.order(ByteOrder.LITTLE_ENDIAN);
+ }
return buffer.getDouble();
}
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 2ac8350..eb00310 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
@@ -79,6 +79,7 @@ public abstract class ChunkReader {
this.unCompressor = IUnCompressor.getUnCompressor(chunkHeader.getCompressionType());
valueDecoder = Decoder
.getDecoderByType(chunkHeader.getEncodingType(), chunkHeader.getDataType());
+ valueDecoder.setEndianType(endianType);
data = new BatchData(chunkHeader.getDataType());
hasCachedPageHeader = false;
}
@@ -155,9 +156,6 @@ public abstract class ChunkReader {
chunkDataBuffer.get(compressedPageBody, 0, compressedPageBodyLength);
valueDecoder.reset();
ByteBuffer pageData = ByteBuffer.wrap(unCompressor.uncompress(compressedPageBody));
- if (endianType == EndianType.LITTLE_ENDIAN) {
- pageData.order(ByteOrder.LITTLE_ENDIAN);
- }
PageReader reader = new PageReader(pageData, chunkHeader.getDataType(),
valueDecoder, timeDecoder, filter);
reader.setDeletedAt(deletedAt);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
index f01dce4..7d113e9 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
@@ -79,9 +79,6 @@ public class PageReader {
timeBuffer.limit(timeBufferLength);
valueBuffer = pageData.slice();
- if (pageData.order() == ByteOrder.LITTLE_ENDIAN) {
- valueBuffer.order(ByteOrder.LITTLE_ENDIAN);
- }
valueBuffer.position(timeBufferLength);
}