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

rohit pushed a commit to branch 4.15
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.15 by this push:
     new 03ad702  server: Set free memory to zero if greater than total memory 
(#4571)
03ad702 is described below

commit 03ad702c1be3466b982099ec8764a045411cf3bf
Author: davidjumani <[email protected]>
AuthorDate: Tue Mar 30 14:05:46 2021 +0530

    server: Set free memory to zero if greater than total memory (#4571)
    
    Fixes https://github.com/apache/cloudstack/issues/4566
    
    Sets `memoryintfreekbs` to zero if it is greater than `memorykbs`. Caused 
by KVM returning the RSS memory of the process running the VM rather than the 
free memory inside the VM.
    
    Co-authored-by: dahn <[email protected]>
---
 .../java/org/apache/cloudstack/api/response/UserVmResponse.java    | 2 +-
 .../src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java   | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git 
a/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java 
b/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java
index 44eaba7..ea5300e 100644
--- a/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java
+++ b/api/src/main/java/org/apache/cloudstack/api/response/UserVmResponse.java
@@ -209,7 +209,7 @@ public class UserVmResponse extends 
BaseResponseWithTagInformation implements Co
     private Long memoryKBs;
 
     @SerializedName("memoryintfreekbs")
-    @Param(description = "the internal memory thats free in vm")
+    @Param(description = "the internal memory that's free in vm or zero if it 
can not be calculated")
     private Long memoryIntFreeKBs;
 
     @SerializedName("memorytargetkbs")
diff --git 
a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java 
b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
index 8e489f8..1589f01 100644
--- a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
+++ b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java
@@ -222,8 +222,11 @@ public class UserVmJoinDaoImpl extends 
GenericDaoBaseWithTagInformation<UserVmJo
                 
userVmResponse.setDiskKbsWrite((long)vmStats.getDiskWriteKBs());
                 userVmResponse.setDiskIORead((long)vmStats.getDiskReadIOs());
                 userVmResponse.setDiskIOWrite((long)vmStats.getDiskWriteIOs());
-                userVmResponse.setMemoryKBs((long)vmStats.getMemoryKBs());
-                
userVmResponse.setMemoryIntFreeKBs((long)vmStats.getIntFreeMemoryKBs());
+                long totalMemory = (long)vmStats.getMemoryKBs();
+                long freeMemory = (long)vmStats.getIntFreeMemoryKBs();
+                long correctedFreeMemory = freeMemory >= totalMemory ? 0 : 
freeMemory;
+                userVmResponse.setMemoryKBs(totalMemory);
+                userVmResponse.setMemoryIntFreeKBs(correctedFreeMemory);
                 
userVmResponse.setMemoryTargetKBs((long)vmStats.getTargetMemoryKBs());
 
             }

Reply via email to