This is an automated email from the ASF dual-hosted git repository.

caogaofei pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/tsfile.git


The following commit(s) were added to refs/heads/develop by this push:
     new 3929106a Correct the retained size calculation for BinaryColumn and 
BinaryColumnBuilder
3929106a is described below

commit 3929106a53d15d46fce16d50825a913e8f860969
Author: Jackie Tien <[email protected]>
AuthorDate: Thu Jan 9 17:36:29 2025 +0800

    Correct the retained size calculation for BinaryColumn and 
BinaryColumnBuilder
---
 .../main/java/org/apache/tsfile/utils/RamUsageEstimator.java | 12 ++++++++++++
 .../java/org/apache/tsfile/file/header/ChunkGroupHeader.java |  2 --
 .../org/apache/tsfile/read/common/block/TsBlockBuilder.java  |  4 ----
 .../apache/tsfile/read/common/block/column/BinaryColumn.java |  6 ++----
 .../tsfile/read/common/block/column/BinaryColumnBuilder.java |  5 +----
 .../apache/tsfile/read/common/block/column/TimeColumn.java   |  3 +--
 .../apache/tsfile/read/common/block/column/TsBlockSerde.java |  1 -
 7 files changed, 16 insertions(+), 17 deletions(-)

diff --git 
a/java/common/src/main/java/org/apache/tsfile/utils/RamUsageEstimator.java 
b/java/common/src/main/java/org/apache/tsfile/utils/RamUsageEstimator.java
index 3a35d226..d357a42e 100644
--- a/java/common/src/main/java/org/apache/tsfile/utils/RamUsageEstimator.java
+++ b/java/common/src/main/java/org/apache/tsfile/utils/RamUsageEstimator.java
@@ -271,6 +271,18 @@ public final class RamUsageEstimator {
         : alignObjectSize(NUM_BYTES_ARRAY_HEADER + (long) Double.BYTES * 
arr.length);
   }
 
+  public static long sizeOf(Accountable[] arr) {
+    if (arr == null) {
+      return 0;
+    } else {
+      long size = shallowSizeOf(arr);
+      for (Accountable obj : arr) {
+        size += obj != null ? obj.ramBytesUsed() : 0;
+      }
+      return size;
+    }
+  }
+
   /** Returns the size in bytes of the String[] object. */
   public static long sizeOf(String[] arr) {
     long size = shallowSizeOf(arr);
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/header/ChunkGroupHeader.java 
b/java/tsfile/src/main/java/org/apache/tsfile/file/header/ChunkGroupHeader.java
index b46f0e0c..ba3371e9 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/header/ChunkGroupHeader.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/header/ChunkGroupHeader.java
@@ -53,7 +53,6 @@ public class ChunkGroupHeader {
   }
 
   private int getSerializedSize(IDeviceID deviceID) {
-    // TODO: add an interface in IDeviceID
     int length = deviceID.serializedSize();
     return Byte.BYTES + ReadWriteForEncodingUtils.varIntSize(length) + length;
   }
@@ -73,7 +72,6 @@ public class ChunkGroupHeader {
       }
     }
 
-    // TODO: add an interface in IDeviceID
     final IDeviceID deviceID = deserializeDeviceID(inputStream, versionNumber);
     return new ChunkGroupHeader(deviceID);
   }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlockBuilder.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlockBuilder.java
index 918551d9..028bffc9 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlockBuilder.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlockBuilder.java
@@ -104,8 +104,6 @@ public class TsBlockBuilder {
     valueColumnBuilders = new ColumnBuilder[types.size()];
 
     for (int i = 0; i < valueColumnBuilders.length; i++) {
-      // TODO use Type interface to encapsulate createColumnBuilder to each 
concrete type class
-      // instead of switch-case
       switch (types.get(i)) {
         case BOOLEAN:
           valueColumnBuilders[i] =
@@ -176,8 +174,6 @@ public class TsBlockBuilder {
     valueColumnBuilders = new ColumnBuilder[types.size()];
     int initialExpectedEntries = timeColumnBuilder.getPositionCount();
     for (int i = 0; i < valueColumnBuilders.length; i++) {
-      // TODO use Type interface to encapsulate createColumnBuilder to each 
concrete type class
-      // instead of switch-case
       switch (types.get(i)) {
         case BOOLEAN:
           valueColumnBuilders[i] =
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumn.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumn.java
index ec36fc4f..9b8a82cc 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumn.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumn.java
@@ -32,8 +32,8 @@ import java.util.Optional;
 import static 
org.apache.tsfile.read.common.block.column.ColumnUtil.checkArrayRange;
 import static 
org.apache.tsfile.read.common.block.column.ColumnUtil.checkReadablePosition;
 import static 
org.apache.tsfile.read.common.block.column.ColumnUtil.checkValidRegion;
+import static org.apache.tsfile.utils.RamUsageEstimator.sizeOf;
 import static org.apache.tsfile.utils.RamUsageEstimator.sizeOfBooleanArray;
-import static org.apache.tsfile.utils.RamUsageEstimator.sizeOfObjectArray;
 
 public class BinaryColumn implements Column {
 
@@ -75,9 +75,7 @@ public class BinaryColumn implements Column {
     }
     this.valueIsNull = valueIsNull;
 
-    // TODO we need to sum up all the Binary's retainedSize here
-    retainedSizeInBytes =
-        INSTANCE_SIZE + sizeOfBooleanArray(positionCount) + 
sizeOfObjectArray(positionCount);
+    retainedSizeInBytes = INSTANCE_SIZE + sizeOfBooleanArray(positionCount) + 
sizeOf(values);
   }
 
   @Override
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumnBuilder.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumnBuilder.java
index a82d82fc..d9c560dc 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumnBuilder.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/BinaryColumnBuilder.java
@@ -32,7 +32,6 @@ import java.util.Arrays;
 
 import static java.lang.Math.max;
 import static 
org.apache.tsfile.read.common.block.column.ColumnUtil.calculateBlockResetSize;
-import static org.apache.tsfile.utils.RamUsageEstimator.shallowSizeOf;
 import static org.apache.tsfile.utils.RamUsageEstimator.sizeOf;
 
 public class BinaryColumnBuilder implements ColumnBuilder {
@@ -129,7 +128,6 @@ public class BinaryColumnBuilder implements ColumnBuilder {
 
   @Override
   public long getRetainedSizeInBytes() {
-    // TODO we need to sum up all the Binary's retainedSize here
     long size = INSTANCE_SIZE + arraysRetainedSizeInBytes;
     if (columnBuilderStatus != null) {
       size += ColumnBuilderStatus.INSTANCE_SIZE;
@@ -139,7 +137,6 @@ public class BinaryColumnBuilder implements ColumnBuilder {
 
   @Override
   public ColumnBuilder newColumnBuilderLike(ColumnBuilderStatus 
columnBuilderStatus) {
-    // TODO we should take retain size into account here
     return new BinaryColumnBuilder(columnBuilderStatus, 
calculateBlockResetSize(positionCount));
   }
 
@@ -158,6 +155,6 @@ public class BinaryColumnBuilder implements ColumnBuilder {
   }
 
   private void updateArraysDataSize() {
-    arraysRetainedSizeInBytes = sizeOf(valueIsNull) + shallowSizeOf(values);
+    arraysRetainedSizeInBytes = sizeOf(valueIsNull) + sizeOf(values);
   }
 }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/TimeColumn.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/TimeColumn.java
index cce059d7..f3411c18 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/TimeColumn.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/TimeColumn.java
@@ -100,8 +100,7 @@ public class TimeColumn implements Column {
 
   @Override
   public boolean[] isNull() {
-    // todo
-    return null;
+    throw new UnsupportedOperationException("isNull is not supported for 
TimeColumn");
   }
 
   @Override
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/TsBlockSerde.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/TsBlockSerde.java
index e887a577..e7a503e6 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/TsBlockSerde.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/read/common/block/column/TsBlockSerde.java
@@ -67,7 +67,6 @@ public class TsBlockSerde {
     }
 
     // Time column.
-    // TODO: a TimeColumn will be deserialized as a LongColumn
     Column timeColumn =
         ColumnEncoderFactory.get(columnEncodings.get(0))
             .readColumn(byteBuffer, TSDataType.INT64, positionCount);

Reply via email to