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