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

spricoder pushed a commit to branch feature/memory_auto
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/feature/memory_auto by this 
push:
     new cc5d5428c71 Change higher and lower and add check
cc5d5428c71 is described below

commit cc5d5428c71ff3acc1baf0ca83346fd9b28081ad
Author: spricoder <[email protected]>
AuthorDate: Sat Feb 22 15:07:46 2025 +0800

    Change higher and lower and add check
---
 .../apache/iotdb/commons/memory/MemoryManager.java | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/memory/MemoryManager.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/memory/MemoryManager.java
index 7b7587a76c2..92302cf47a6 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/memory/MemoryManager.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/memory/MemoryManager.java
@@ -546,6 +546,20 @@ public class MemoryManager {
     return shrinkSize;
   }
 
+  public boolean isAvailableToExpand() {
+    for (MemoryManager memoryManager : children.values()) {
+      if (memoryManager.isAvailableToExpand()) {
+        return true;
+      }
+    }
+    for (IMemoryBlock memoryBlock : allocatedMemoryBlocks.values()) {
+      if (memoryBlock.getMemoryBlockType() != MemoryBlockType.STATIC) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   /** Whether is available to shrink */
   public boolean isAvailableToShrink() {
     return allocateTotalMemorySizeInBytes - totalMemorySizeInBytes
@@ -567,7 +581,9 @@ public class MemoryManager {
           higherMemoryManager = child;
           lowerMemoryManager = child;
         } else {
-          if (child.getUsedMemorySizeInBytes() > 
higherMemoryManager.getUsedMemorySizeInBytes()) {
+          if (higherMemoryManager.isAvailableToExpand()
+              && child.getUsedMemorySizeInBytes()
+                  > higherMemoryManager.getUsedMemorySizeInBytes()) {
             higherMemoryManager = child;
           }
           if (lowerMemoryManager.isAvailableToShrink()
@@ -578,8 +594,8 @@ public class MemoryManager {
       }
       if (higherMemoryManager != null && 
!higherMemoryManager.equals(lowerMemoryManager)) {
         // transfer
-        long transferSize = higherMemoryManager.shrink();
-        lowerMemoryManager.expandTotalMemorySizeInBytes(transferSize);
+        long transferSize = lowerMemoryManager.shrink();
+        higherMemoryManager.expandTotalMemorySizeInBytes(transferSize);
         LOGGER.info(
             "Transfer Memory Size {} from {} to {}",
             transferSize,

Reply via email to