diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 81298a9c898..3411ad47afc 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -2791,15 +2791,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv grd.setMemBalloning(!_noMemBalloon); - long maxRam = ByteScaleUtils.bytesToKibibytes(vmTO.getMaxRam()); - long currRam = vmTO.getType() == VirtualMachine.Type.User ? getCurrentMemAccordingToMemBallooning(vmTO, maxRam) : maxRam; - - if (s_logger.isTraceEnabled()) { - s_logger.trace(String.format("memory values for VM %s are %d/%d",vmTO.getName(),maxRam, currRam)); - } + Long maxRam = ByteScaleUtils.bytesToKibibytes(vmTO.getMaxRam()); grd.setMemorySize(maxRam); - grd.setCurrentMem(currRam); + grd.setCurrentMem(getCurrentMemAccordingToMemBallooning(vmTO, maxRam)); int vcpus = vmTO.getCpus(); Integer maxVcpus = vmTO.getVcpuMaxLimit(); @@ -2811,12 +2806,17 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv } protected long getCurrentMemAccordingToMemBallooning(VirtualMachineTO vmTO, long maxRam) { + long retVal = maxRam; if (_noMemBalloon) { s_logger.warn(String.format("Setting VM's [%s] current memory as max memory [%s] due to memory ballooning is disabled. If you are using a custom service offering, verify if memory ballooning really should be disabled.", vmTO.toString(), maxRam)); - return maxRam; + } else if (vmTO != null && vmTO.getType() != VirtualMachine.Type.User) { + s_logger.warn(String.format("Setting System VM's [%s] current memory as max memory [%s].", vmTO.toString(), maxRam)); } else { - return ByteScaleUtils.bytesToKibibytes(vmTO.getMinRam()); + long minRam = ByteScaleUtils.bytesToKibibytes(vmTO.getMinRam()); + s_logger.debug(String.format("Setting VM's [%s] current memory as min memory [%s] due to memory ballooning is enabled.", vmTO.toString(), minRam)); + retVal = minRam; } + return retVal; } /** diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java index 3ea7dd69eed..aac44fc1419 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java @@ -282,7 +282,7 @@ public class LibvirtVMDef { @Override public String toString() { StringBuilder response = new StringBuilder(); - response.append(String.format("%s\n", this.memory)); + response.append(String.format("%s\n", this.currentMemory)); response.append(String.format("%s\n", this.currentMemory)); if (this.memory > this.currentMemory) { @@ -1238,7 +1238,7 @@ public class LibvirtVMDef { @Override public String toString() { StringBuilder memBalloonBuilder = new StringBuilder(); - memBalloonBuilder.append("\n"); + memBalloonBuilder.append("\n"); if (StringUtils.isNotBlank(memBalloonStatsPeriod)) { memBalloonBuilder.append("\n"); } diff --git a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java index 58682b2663c..cc658ff8455 100644 --- a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java +++ b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java @@ -760,7 +760,7 @@ public class LibvirtComputingResourceTest { private void verifyMemory(VirtualMachineTO to, Document domainDoc, String minRam) { assertXpath(domainDoc, "/domain/maxMemory/text()", String.valueOf( to.getMaxRam() / 1024 )); - assertXpath(domainDoc, "/domain/currentMemory/text()",minRam); + assertXpath(domainDoc, "/domain/memory/text()",minRam); assertXpath(domainDoc, "/domain/cpu/numa/cell/@memory", minRam); assertXpath(domainDoc, "/domain/currentMemory/text()", minRam); } @@ -5762,6 +5762,7 @@ public class LibvirtComputingResourceTest { public void validateGetCurrentMemAccordingToMemBallooningWithoutMemBalooning(){ VirtualMachineTO vmTo = Mockito.mock(VirtualMachineTO.class); + Mockito.when(vmTo.getType()).thenReturn(Type.User); LibvirtComputingResource libvirtComputingResource = new LibvirtComputingResource(); libvirtComputingResource._noMemBalloon = true; long maxMemory = 2048; @@ -5780,6 +5781,7 @@ public class LibvirtComputingResourceTest { long minMemory = ByteScaleUtils.mebibytesToBytes(64); VirtualMachineTO vmTo = Mockito.mock(VirtualMachineTO.class); + Mockito.when(vmTo.getType()).thenReturn(Type.User); Mockito.when(vmTo.getMinRam()).thenReturn(minMemory); long currentMemory = libvirtComputingResource.getCurrentMemAccordingToMemBallooning(vmTo, maxMemory); diff --git a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java index db7cea5e218..1acb86f1583 100644 --- a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java +++ b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java @@ -266,11 +266,11 @@ public class LibvirtVMDefTest extends TestCase { assertEquals(bus, disk.getBusType()); assertEquals(DiskDef.DeviceType.DISK, disk.getDeviceType()); - String resultingXml = disk.toString(); + String xmlDef = disk.toString(); String expectedXml = "\n\n" + "\n\n\n"; - assertEquals(expectedXml, resultingXml); + assertEquals(expectedXml, xmlDef); } @Test @@ -398,7 +398,7 @@ public class LibvirtVMDefTest extends TestCase { LibvirtVMDef.setGlobalQemuVersion(2006000L); LibvirtVMDef.setGlobalLibvirtVersion(9008L); - String resultingXml = disk.toString(); + String xmlDef = disk.toString(); String expectedXml = "\n\n" + "\n\n" + "\n"+bytesReadRate+"\n"+bytesWriteRate+"\n" + @@ -408,29 +408,29 @@ public class LibvirtVMDefTest extends TestCase { ""+bytesReadRateMaxLength+"\n"+bytesWriteRateMaxLength+"\n" + ""+iopsReadRateMaxLength+"\n"+iopsWriteRateMaxLength+"\n\n\n"; - assertEquals(expectedXml, resultingXml); + assertEquals(expectedXml, xmlDef); } @Test public void memBalloonDefTestNone() { - String expectedXml = "\n"; + String expectedXml = "\n"; MemBalloonDef memBalloonDef = new MemBalloonDef(); memBalloonDef.defNoneMemBalloon(); - String resultingXml = memBalloonDef.toString(); + String xmlDef = memBalloonDef.toString(); - assertEquals(expectedXml, resultingXml); + assertEquals(expectedXml, xmlDef); } @Test public void memBalloonDefTestVirtio() { - String expectedXml = "\n\n"; + String expectedXml = "\n\n"; MemBalloonDef memBalloonDef = new MemBalloonDef(); memBalloonDef.defVirtioMemBalloon("60"); - String resultingXml = memBalloonDef.toString(); + String xmlDef = memBalloonDef.toString(); - assertEquals(expectedXml, resultingXml); + assertEquals(expectedXml, xmlDef); } @Test