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 44eaba7f313f..ea5300e78752 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 8e489f89eca0..1589f0151fe7 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 UserVmResponse newUserVmResponse(ResponseView view, String objectName, Us 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()); }