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