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

haonan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 1cfc2577a28 Add UT for PrimitiveArrayManager adaption for UNKNOWN data 
type (#10014)
1cfc2577a28 is described below

commit 1cfc2577a284118e6551a157cb1b8b5e6d1529e0
Author: Chen YZ <[email protected]>
AuthorDate: Thu Jun 1 12:32:00 2023 +0800

    Add UT for PrimitiveArrayManager adaption for UNKNOWN data type (#10014)
---
 .../iotdb/db/rescon/PrimitiveArrayManager.java     |  4 +-
 .../datastructure/PrimitiveArrayManagerTest.java   | 75 +++++++++++++++++++---
 2 files changed, 67 insertions(+), 12 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/rescon/PrimitiveArrayManager.java 
b/server/src/main/java/org/apache/iotdb/db/rescon/PrimitiveArrayManager.java
index d93ca19d9d2..dfa491328fa 100644
--- a/server/src/main/java/org/apache/iotdb/db/rescon/PrimitiveArrayManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/rescon/PrimitiveArrayManager.java
@@ -121,8 +121,8 @@ public class PrimitiveArrayManager {
    * @return an array
    */
   public static Object allocate(TSDataType dataType) {
-    if (dataType.equals(TSDataType.VECTOR)) {
-      throw new UnSupportedDataTypeException(TSDataType.VECTOR.name());
+    if (dataType.equals(TSDataType.VECTOR) || 
dataType.equals(TSDataType.UNKNOWN)) {
+      throw new UnSupportedDataTypeException(dataType.name());
     }
 
     if (TOTAL_ALLOCATION_REQUEST_COUNT.get() > limitUpdateThreshold) {
diff --git 
a/server/src/test/java/org/apache/iotdb/db/utils/datastructure/PrimitiveArrayManagerTest.java
 
b/server/src/test/java/org/apache/iotdb/db/utils/datastructure/PrimitiveArrayManagerTest.java
index 9fa7c57a57b..2cf05bf61f7 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/utils/datastructure/PrimitiveArrayManagerTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/utils/datastructure/PrimitiveArrayManagerTest.java
@@ -22,29 +22,84 @@ package org.apache.iotdb.db.utils.datastructure;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.utils.Binary;
 
 import org.junit.Assert;
 import org.junit.Test;
 
+import static org.apache.iotdb.db.rescon.PrimitiveArrayManager.ARRAY_SIZE;
+
 public class PrimitiveArrayManagerTest {
   private IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
 
   @Test
   public void testGetArrayRowCount() {
 
-    Assert.assertEquals(
-        1224827,
-        PrimitiveArrayManager.getArrayRowCount(1224826 * 
config.getPrimitiveArraySize() + 1));
+    Assert.assertEquals(1224827, 
PrimitiveArrayManager.getArrayRowCount(1224826 * ARRAY_SIZE + 1));
+
+    Assert.assertEquals(1224826, 
PrimitiveArrayManager.getArrayRowCount(1224826 * ARRAY_SIZE));
+
+    Assert.assertEquals(1, PrimitiveArrayManager.getArrayRowCount(ARRAY_SIZE));
 
-    Assert.assertEquals(
-        1224826, PrimitiveArrayManager.getArrayRowCount(1224826 * 
config.getPrimitiveArraySize()));
+    Assert.assertEquals(1, PrimitiveArrayManager.getArrayRowCount(ARRAY_SIZE - 
1));
 
-    Assert.assertEquals(1, 
PrimitiveArrayManager.getArrayRowCount(config.getPrimitiveArraySize()));
+    Assert.assertEquals(2, PrimitiveArrayManager.getArrayRowCount(ARRAY_SIZE + 
1));
+  }
+
+  @Test
+  public void testUpdateLimits() {
+    double AMPLIFICATION_FACTOR = 1.5;
 
-    Assert.assertEquals(
-        1, 
PrimitiveArrayManager.getArrayRowCount(config.getPrimitiveArraySize() - 1));
+    /** threshold total size of arrays for all data types */
+    double POOLED_ARRAYS_MEMORY_THRESHOLD =
+        config.getAllocateMemoryForStorageEngine()
+            * config.getBufferedArraysMemoryProportion()
+            / AMPLIFICATION_FACTOR;
+    // LIMITS should be updated if (TOTAL_ALLOCATION_REQUEST_COUNT.get() > 
limitUpdateThreshold)
+    int totalDataTypeSize = 0;
+    for (TSDataType dataType : TSDataType.values()) {
+      // VECTOR and UNKNOWN are ignored
+      if (dataType.equals(TSDataType.VECTOR) || 
dataType.equals(TSDataType.UNKNOWN)) {
+        continue;
+      }
+      totalDataTypeSize += dataType.getDataTypeSize();
+    }
 
-    Assert.assertEquals(
-        2, 
PrimitiveArrayManager.getArrayRowCount(config.getPrimitiveArraySize() + 1));
+    double limit = POOLED_ARRAYS_MEMORY_THRESHOLD / ARRAY_SIZE / 
totalDataTypeSize;
+    for (int i = 0; i < limit + 1; i++) {
+      for (TSDataType type : TSDataType.values()) {
+        if (type.equals(TSDataType.VECTOR) || type.equals(TSDataType.UNKNOWN)) 
{
+          continue;
+        }
+        Object o = PrimitiveArrayManager.allocate(type);
+        switch (type) {
+          case BOOLEAN:
+            Assert.assertTrue(o instanceof boolean[]);
+            Assert.assertEquals(ARRAY_SIZE, ((boolean[]) o).length);
+            break;
+          case INT32:
+            Assert.assertTrue(o instanceof int[]);
+            Assert.assertEquals(ARRAY_SIZE, ((int[]) o).length);
+            break;
+          case INT64:
+            Assert.assertTrue(o instanceof long[]);
+            Assert.assertEquals(ARRAY_SIZE, ((long[]) o).length);
+            break;
+          case FLOAT:
+            Assert.assertTrue(o instanceof float[]);
+            Assert.assertEquals(ARRAY_SIZE, ((float[]) o).length);
+            break;
+          case DOUBLE:
+            Assert.assertTrue(o instanceof double[]);
+            Assert.assertEquals(ARRAY_SIZE, ((double[]) o).length);
+            break;
+          case TEXT:
+            Assert.assertTrue(o instanceof Binary[]);
+            Assert.assertEquals(ARRAY_SIZE, ((Binary[]) o).length);
+            break;
+        }
+      }
+    }
   }
 }

Reply via email to