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