From 03ad702c1be3466b982099ec8764a045411cf3bf Mon Sep 17 00:00:00 2001 From: davidjumani Date: Tue, 30 Mar 2021 14:05:46 +0530 Subject: [PATCH] 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 --- .../org/apache/cloudstack/api/response/UserVmResponse.java | 2 +- .../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 44eaba7f313..ea5300e7875 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 8e489f89eca..1589f0151fe 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= totalMemory ? 0 : freeMemory; + userVmResponse.setMemoryKBs(totalMemory); + userVmResponse.setMemoryIntFreeKBs(correctedFreeMemory); userVmResponse.setMemoryTargetKBs((long)vmStats.getTargetMemoryKBs()); }