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;
   }

Reply via email to