This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch moveBitMaps in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 2252f706d961d6b513535892146c3420fe3aeec7 Author: HTHou <[email protected]> AuthorDate: Tue Apr 20 10:01:48 2021 +0800 [To Vector] Move BitMaps to the end of the ValueBuffer --- .../db/qp/physical/crud/InsertTabletPlan.java | 8 +++---- .../org/apache/iotdb/db/service/TSServiceImpl.java | 10 ++++---- .../apache/iotdb/db/utils/QueryDataSetUtils.java | 2 +- .../org/apache/iotdb/session/SessionUtils.java | 27 ++++++++++------------ 4 files changed, 21 insertions(+), 26 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java index 4e23ac1..1358429 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/InsertTabletPlan.java @@ -157,8 +157,8 @@ public class InsertTabletPlan extends InsertPlan { writeMeasurements(stream); writeDataTypes(stream); writeTimes(stream); - writeBitMaps(stream); writeValues(stream); + writeBitMaps(stream); } private void writeMeasurements(DataOutputStream stream) throws IOException { @@ -207,7 +207,6 @@ public class InsertTabletPlan extends InsertPlan { } private void writeBitMaps(DataOutputStream stream) throws IOException { - stream.writeBoolean(bitMaps != null); if (bitMaps != null) { for (BitMap bitMap : bitMaps) { if (bitMap == null) { @@ -243,8 +242,8 @@ public class InsertTabletPlan extends InsertPlan { writeMeasurements(buffer); writeDataTypes(buffer); writeTimes(buffer); - writeBitMaps(buffer); writeValues(buffer); + writeBitMaps(buffer); } private void writeMeasurements(ByteBuffer buffer) { @@ -292,7 +291,6 @@ public class InsertTabletPlan extends InsertPlan { } private void writeBitMaps(ByteBuffer buffer) { - buffer.put(BytesUtils.boolToByte(bitMaps != null)); if (bitMaps != null) { for (BitMap bitMap : bitMaps) { if (bitMap == null) { @@ -461,9 +459,9 @@ public class InsertTabletPlan extends InsertPlan { times = QueryDataSetUtils.readTimesFromBuffer(buffer, rows); updateTimesCache(); - bitMaps = QueryDataSetUtils.readBitMapsFromBuffer(buffer, dataTypeSize, rows); columns = QueryDataSetUtils.readValuesFromBuffer(buffer, dataTypes, dataTypeSize, rows); this.index = buffer.getLong(); + bitMaps = QueryDataSetUtils.readBitMapsFromBuffer(buffer, dataTypeSize, rows); } public void setDataTypes(List<Integer> dataTypes) { diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java index 4cd264a..19bc1a4 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java @@ -1633,11 +1633,11 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext { InsertTabletPlan insertTabletPlan = new InsertTabletPlan(new PartialPath(req.deviceId), req.measurements); insertTabletPlan.setTimes(QueryDataSetUtils.readTimesFromBuffer(req.timestamps, req.size)); - insertTabletPlan.setBitMaps( - QueryDataSetUtils.readBitMapsFromBuffer(req.values, req.types.size(), req.size)); insertTabletPlan.setColumns( QueryDataSetUtils.readValuesFromBuffer( req.values, req.types, req.types.size(), req.size)); + insertTabletPlan.setBitMaps( + QueryDataSetUtils.readBitMapsFromBuffer(req.values, req.types.size(), req.size)); insertTabletPlan.setRowCount(req.size); insertTabletPlan.setDataTypes(req.types); @@ -1677,15 +1677,15 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext { new InsertTabletPlan(new PartialPath(req.deviceIds.get(i)), req.measurementsList.get(i)); insertTabletPlan.setTimes( QueryDataSetUtils.readTimesFromBuffer(req.timestampsList.get(i), req.sizeList.get(i))); - insertTabletPlan.setBitMaps( - QueryDataSetUtils.readBitMapsFromBuffer( - req.valuesList.get(i), req.measurementsList.get(i).size(), req.sizeList.get(i))); insertTabletPlan.setColumns( QueryDataSetUtils.readValuesFromBuffer( req.valuesList.get(i), req.typesList.get(i), req.measurementsList.get(i).size(), req.sizeList.get(i))); + insertTabletPlan.setBitMaps( + QueryDataSetUtils.readBitMapsFromBuffer( + req.valuesList.get(i), req.measurementsList.get(i).size(), req.sizeList.get(i))); insertTabletPlan.setRowCount(req.sizeList.get(i)); insertTabletPlan.setDataTypes(req.typesList.get(i)); return insertTabletPlan; diff --git a/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java index 54ec810..4c32123 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java @@ -185,7 +185,7 @@ public class QueryDataSetUtils { } public static BitMap[] readBitMapsFromBuffer(ByteBuffer buffer, int columns, int size) { - if (!BytesUtils.byteToBool(buffer.get())) { + if (!buffer.hasRemaining()) { return null; } BitMap[] bitMaps = new BitMap[columns]; diff --git a/session/src/main/java/org/apache/iotdb/session/SessionUtils.java b/session/src/main/java/org/apache/iotdb/session/SessionUtils.java index 4fa5cbc..f028990 100644 --- a/session/src/main/java/org/apache/iotdb/session/SessionUtils.java +++ b/session/src/main/java/org/apache/iotdb/session/SessionUtils.java @@ -43,21 +43,6 @@ public class SessionUtils { @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning public static ByteBuffer getValueBuffer(Tablet tablet) { ByteBuffer valueBuffer = ByteBuffer.allocate(tablet.getTotalValueOccupation()); - boolean hasBitMaps = tablet.bitMaps != null; - valueBuffer.put(BytesUtils.boolToByte(hasBitMaps)); - if (hasBitMaps) { - for (BitMap bitMap : tablet.bitMaps) { - boolean columnHasNull = bitMap != null && !bitMap.isAllUnmarked(); - valueBuffer.put(BytesUtils.boolToByte(columnHasNull)); - - if (columnHasNull) { - byte[] bytes = bitMap.getByteArray(); - for (int j = 0; j < tablet.rowSize / Byte.SIZE + 1; j++) { - valueBuffer.put(bytes[j]); - } - } - } - } int indexOfValues = 0; for (int i = 0; i < tablet.getSchemas().size(); i++) { IMeasurementSchema schema = tablet.getSchemas().get(i); @@ -72,6 +57,18 @@ public class SessionUtils { } } } + if (tablet.bitMaps != null) { + for (BitMap bitMap : tablet.bitMaps) { + boolean columnHasNull = bitMap != null && !bitMap.isAllUnmarked(); + valueBuffer.put(BytesUtils.boolToByte(columnHasNull)); + if (columnHasNull) { + byte[] bytes = bitMap.getByteArray(); + for (int j = 0; j < tablet.rowSize / Byte.SIZE + 1; j++) { + valueBuffer.put(bytes[j]); + } + } + } + } valueBuffer.flip(); return valueBuffer; }
