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

jackietien 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 61622d9804c Fixed the bug of device attribute update
61622d9804c is described below

commit 61622d9804c4ae865f0c4430278a7980d9722abb
Author: Caideyipi <[email protected]>
AuthorDate: Mon Aug 19 20:05:29 2024 +0800

    Fixed the bug of device attribute update
---
 .../attribute/DeviceAttributeStore.java            | 34 +++++++++++++++-------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/attribute/DeviceAttributeStore.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/attribute/DeviceAttributeStore.java
index 38290b8aa4b..0fe770078ad 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/attribute/DeviceAttributeStore.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/attribute/DeviceAttributeStore.java
@@ -140,28 +140,36 @@ public class DeviceAttributeStore implements 
IDeviceAttributeStore {
   }
 
   @Override
-  public void alterAttribute(int pointer, List<String> nameList, Object[] 
valueList) {
+  public void alterAttribute(
+      final int pointer, final List<String> nameList, final Object[] 
valueList) {
     // todo implement storage for device of diverse data types
     long memUsageDelta = 0L;
     long originMemUsage;
     long updatedMemUsage;
-    Map<String, String> attributeMap = deviceAttributeList.get(pointer);
+    final Map<String, String> attributeMap = deviceAttributeList.get(pointer);
     String value;
     for (int i = 0; i < nameList.size(); i++) {
-      String key = nameList.get(i);
+      final String key = nameList.get(i);
       value = valueList[i] == null ? null : valueList[i].toString();
-      if (value != null) {
-        originMemUsage =
-            attributeMap.containsKey(key)
-                ? 0
-                : MemUsageUtil.computeKVMemUsageInMap(key, 
attributeMap.get(key));
 
+      originMemUsage =
+          attributeMap.containsKey(key)
+              ? MemUsageUtil.computeKVMemUsageInMap(key, attributeMap.get(key))
+              : 0;
+      if (value != null) {
         attributeMap.put(key, value);
         updatedMemUsage = MemUsageUtil.computeKVMemUsageInMap(key, value);
         memUsageDelta += (updatedMemUsage - originMemUsage);
+      } else {
+        attributeMap.remove(key);
+        memUsageDelta -= originMemUsage;
       }
     }
-    requestMemory(memUsageDelta);
+    if (memUsageDelta > 0) {
+      requestMemory(memUsageDelta);
+    } else if (memUsageDelta < 0) {
+      releaseMemory(-memUsageDelta);
+    }
   }
 
   @Override
@@ -183,9 +191,15 @@ public class DeviceAttributeStore implements 
IDeviceAttributeStore {
     }
   }
 
-  private void requestMemory(long size) {
+  private void requestMemory(final long size) {
     if (regionStatistics != null) {
       regionStatistics.requestMemory(size);
     }
   }
+
+  private void releaseMemory(final long size) {
+    if (regionStatistics != null) {
+      regionStatistics.releaseMemory(size);
+    }
+  }
 }

Reply via email to