Return-Path: X-Original-To: apmail-cloudstack-commits-archive@www.apache.org Delivered-To: apmail-cloudstack-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8EEE810C15 for ; Mon, 8 Jul 2013 15:51:44 +0000 (UTC) Received: (qmail 7306 invoked by uid 500); 8 Jul 2013 15:51:44 -0000 Delivered-To: apmail-cloudstack-commits-archive@cloudstack.apache.org Received: (qmail 7289 invoked by uid 500); 8 Jul 2013 15:51:44 -0000 Mailing-List: contact commits-help@cloudstack.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cloudstack.apache.org Delivered-To: mailing list commits@cloudstack.apache.org Received: (qmail 7277 invoked by uid 99); 8 Jul 2013 15:51:42 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Jul 2013 15:51:42 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 52160885913; Mon, 8 Jul 2013 15:51:42 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sateesh@apache.org To: commits@cloudstack.apache.org Message-Id: <058eec6313e6407e953644ae9e9910dd@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: git commit: updated refs/heads/4.2 to 8cab35a Date: Mon, 8 Jul 2013 15:51:42 +0000 (UTC) Updated Branches: refs/heads/4.2 916a009d5 -> 8cab35aa4 CLOUDSTACK-3304 [Vmware][Dynamic Scaling] - Enforce checks for maximum hotadd memory limit & memory increment size in CS Retrieve maximum hotadd memory limit & hotadd memory increment size from running VM's configuration to validate dynamic scale memory limit while scaling up a VM. Signed-off-by: Sateesh Chodapuneedi Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/8cab35aa Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/8cab35aa Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/8cab35aa Branch: refs/heads/4.2 Commit: 8cab35aa416c9579f449e28cab6247eab13a23f7 Parents: 916a009 Author: Sateesh Chodapuneedi Authored: Mon Jul 8 21:17:49 2013 +0530 Committer: Sateesh Chodapuneedi Committed: Mon Jul 8 21:19:46 2013 +0530 ---------------------------------------------------------------------- .../vmware/resource/VmwareResource.java | 163 +++++++++++-------- .../hypervisor/vmware/mo/VirtualMachineMO.java | 42 +++-- 2 files changed, 119 insertions(+), 86 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8cab35aa/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index f7d3d45..645c922 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -31,25 +31,77 @@ import java.util.Comparator; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Random; +import java.util.Set; import java.util.TimeZone; import java.util.UUID; -import java.util.HashSet; -import java.util.Set; -import java.util.Map.Entry; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.log4j.Logger; +import org.apache.log4j.NDC; + +import com.google.gson.Gson; +import com.vmware.vim25.AboutInfo; +import com.vmware.vim25.ClusterDasConfigInfo; +import com.vmware.vim25.ComputeResourceSummary; +import com.vmware.vim25.DatastoreSummary; +import com.vmware.vim25.DynamicProperty; +import com.vmware.vim25.GuestInfo; +import com.vmware.vim25.GuestOsDescriptor; +import com.vmware.vim25.HostCapability; +import com.vmware.vim25.HostFirewallInfo; +import com.vmware.vim25.HostFirewallRuleset; +import com.vmware.vim25.HostHostBusAdapter; +import com.vmware.vim25.HostInternetScsiHba; +import com.vmware.vim25.HostInternetScsiHbaAuthenticationProperties; +import com.vmware.vim25.HostInternetScsiHbaStaticTarget; +import com.vmware.vim25.HostInternetScsiTargetTransport; +import com.vmware.vim25.HostScsiDisk; +import com.vmware.vim25.HostScsiTopology; +import com.vmware.vim25.HostScsiTopologyInterface; +import com.vmware.vim25.HostScsiTopologyLun; +import com.vmware.vim25.HostScsiTopologyTarget; +import com.vmware.vim25.ManagedObjectReference; +import com.vmware.vim25.ObjectContent; +import com.vmware.vim25.OptionValue; +import com.vmware.vim25.PerfCounterInfo; +import com.vmware.vim25.PerfEntityMetric; +import com.vmware.vim25.PerfEntityMetricBase; +import com.vmware.vim25.PerfMetricId; +import com.vmware.vim25.PerfMetricIntSeries; +import com.vmware.vim25.PerfMetricSeries; +import com.vmware.vim25.PerfQuerySpec; +import com.vmware.vim25.PerfSampleInfo; +import com.vmware.vim25.RuntimeFaultFaultMsg; +import com.vmware.vim25.ToolsUnavailableFaultMsg; +import com.vmware.vim25.VimPortType; +import com.vmware.vim25.VirtualDevice; +import com.vmware.vim25.VirtualDeviceConfigSpec; +import com.vmware.vim25.VirtualDeviceConfigSpecOperation; +import com.vmware.vim25.VirtualDisk; +import com.vmware.vim25.VirtualEthernetCard; +import com.vmware.vim25.VirtualEthernetCardNetworkBackingInfo; +import com.vmware.vim25.VirtualLsiLogicController; +import com.vmware.vim25.VirtualMachineConfigSpec; +import com.vmware.vim25.VirtualMachineFileInfo; +import com.vmware.vim25.VirtualMachineGuestOsIdentifier; +import com.vmware.vim25.VirtualMachinePowerState; +import com.vmware.vim25.VirtualMachineRelocateSpec; +import com.vmware.vim25.VirtualMachineRelocateSpecDiskLocator; +import com.vmware.vim25.VirtualMachineRuntimeInfo; +import com.vmware.vim25.VirtualSCSISharing; + import org.apache.cloudstack.storage.command.DeleteCommand; import org.apache.cloudstack.storage.command.StorageSubSystemCommand; import org.apache.cloudstack.storage.to.PrimaryDataStoreTO; import org.apache.cloudstack.storage.to.TemplateObjectTO; import org.apache.cloudstack.storage.to.VolumeObjectTO; -import org.apache.log4j.Logger; -import org.apache.log4j.NDC; import com.cloud.agent.IAgentControl; import com.cloud.agent.api.Answer; @@ -82,9 +134,6 @@ import com.cloud.agent.api.CreateVolumeFromSnapshotCommand; import com.cloud.agent.api.DeleteStoragePoolCommand; import com.cloud.agent.api.DeleteVMSnapshotAnswer; import com.cloud.agent.api.DeleteVMSnapshotCommand; -import com.cloud.agent.api.MigrateWithStorageAnswer; -import com.cloud.agent.api.MigrateWithStorageCommand; -import com.cloud.agent.api.UnregisterVMCommand; import com.cloud.agent.api.GetDomRVersionAnswer; import com.cloud.agent.api.GetDomRVersionCmd; import com.cloud.agent.api.GetHostStatsAnswer; @@ -102,6 +151,8 @@ import com.cloud.agent.api.ManageSnapshotAnswer; import com.cloud.agent.api.ManageSnapshotCommand; import com.cloud.agent.api.MigrateAnswer; import com.cloud.agent.api.MigrateCommand; +import com.cloud.agent.api.MigrateWithStorageAnswer; +import com.cloud.agent.api.MigrateWithStorageCommand; import com.cloud.agent.api.ModifySshKeysCommand; import com.cloud.agent.api.ModifyStoragePoolAnswer; import com.cloud.agent.api.ModifyStoragePoolCommand; @@ -139,6 +190,7 @@ import com.cloud.agent.api.StopCommand; import com.cloud.agent.api.StoragePoolInfo; import com.cloud.agent.api.UnPlugNicAnswer; import com.cloud.agent.api.UnPlugNicCommand; +import com.cloud.agent.api.UnregisterVMCommand; import com.cloud.agent.api.UpgradeSnapshotCommand; import com.cloud.agent.api.ValidateSnapshotAnswer; import com.cloud.agent.api.ValidateSnapshotCommand; @@ -175,16 +227,16 @@ import com.cloud.agent.api.routing.VmDataCommand; import com.cloud.agent.api.routing.VpnUsersCfgCommand; import com.cloud.agent.api.storage.CopyVolumeAnswer; import com.cloud.agent.api.storage.CopyVolumeCommand; -import com.cloud.agent.api.storage.CreateVolumeOVACommand; +import com.cloud.agent.api.storage.CreateAnswer; +import com.cloud.agent.api.storage.CreateCommand; +import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.CreateVolumeOVAAnswer; +import com.cloud.agent.api.storage.CreateVolumeOVACommand; +import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.MigrateVolumeAnswer; import com.cloud.agent.api.storage.MigrateVolumeCommand; import com.cloud.agent.api.storage.PrepareOVAPackingAnswer; import com.cloud.agent.api.storage.PrepareOVAPackingCommand; -import com.cloud.agent.api.storage.CreateAnswer; -import com.cloud.agent.api.storage.CreateCommand; -import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; -import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; import com.cloud.agent.api.storage.ResizeVolumeAnswer; @@ -215,13 +267,13 @@ import com.cloud.hypervisor.vmware.mo.DatacenterMO; import com.cloud.hypervisor.vmware.mo.DatastoreMO; import com.cloud.hypervisor.vmware.mo.DiskControllerType; import com.cloud.hypervisor.vmware.mo.FeatureKeyConstants; +import com.cloud.hypervisor.vmware.mo.HostDatastoreSystemMO; import com.cloud.hypervisor.vmware.mo.HostFirewallSystemMO; import com.cloud.hypervisor.vmware.mo.HostMO; +import com.cloud.hypervisor.vmware.mo.HostStorageSystemMO; import com.cloud.hypervisor.vmware.mo.HypervisorHostHelper; import com.cloud.hypervisor.vmware.mo.NetworkDetails; import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType; -import com.cloud.hypervisor.vmware.mo.HostDatastoreSystemMO; -import com.cloud.hypervisor.vmware.mo.HostStorageSystemMO; import com.cloud.hypervisor.vmware.mo.VirtualMachineMO; import com.cloud.hypervisor.vmware.mo.VirtualSwitchType; import com.cloud.hypervisor.vmware.mo.VmwareHypervisorHost; @@ -267,57 +319,6 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineName; import com.cloud.vm.VmDetailConstants; -import com.google.gson.Gson; -import com.vmware.vim25.AboutInfo; -import com.vmware.vim25.ClusterDasConfigInfo; -import com.vmware.vim25.ComputeResourceSummary; -import com.vmware.vim25.DatastoreSummary; -import com.vmware.vim25.DynamicProperty; -import com.vmware.vim25.GuestInfo; -import com.vmware.vim25.GuestOsDescriptor; -import com.vmware.vim25.HostCapability; -import com.vmware.vim25.HostFirewallInfo; -import com.vmware.vim25.HostFirewallRuleset; -import com.vmware.vim25.HostHostBusAdapter; -import com.vmware.vim25.HostInternetScsiTargetTransport; -import com.vmware.vim25.HostScsiTopology; -import com.vmware.vim25.HostInternetScsiHba; -import com.vmware.vim25.HostInternetScsiHbaAuthenticationProperties; -import com.vmware.vim25.HostInternetScsiHbaStaticTarget; -import com.vmware.vim25.HostScsiDisk; -import com.vmware.vim25.HostScsiTopologyInterface; -import com.vmware.vim25.HostScsiTopologyLun; -import com.vmware.vim25.HostScsiTopologyTarget; -import com.vmware.vim25.ManagedObjectReference; -import com.vmware.vim25.ObjectContent; -import com.vmware.vim25.OptionValue; -import com.vmware.vim25.PerfCounterInfo; -import com.vmware.vim25.PerfEntityMetric; -import com.vmware.vim25.PerfEntityMetricBase; -import com.vmware.vim25.PerfMetricId; -import com.vmware.vim25.PerfMetricIntSeries; -import com.vmware.vim25.PerfMetricSeries; -import com.vmware.vim25.PerfQuerySpec; -import com.vmware.vim25.PerfSampleInfo; -import com.vmware.vim25.RuntimeFaultFaultMsg; -import com.vmware.vim25.ToolsUnavailableFaultMsg; -import com.vmware.vim25.VimPortType; -import com.vmware.vim25.VirtualDevice; -import com.vmware.vim25.VirtualDeviceConfigSpec; -import com.vmware.vim25.VirtualDeviceConfigSpecOperation; -import com.vmware.vim25.VirtualDisk; -import com.vmware.vim25.VirtualEthernetCard; -import com.vmware.vim25.VirtualEthernetCardNetworkBackingInfo; -import com.vmware.vim25.VirtualLsiLogicController; -import com.vmware.vim25.VirtualMachineConfigOption; -import com.vmware.vim25.VirtualMachineConfigSpec; -import com.vmware.vim25.VirtualMachineFileInfo; -import com.vmware.vim25.VirtualMachineGuestOsIdentifier; -import com.vmware.vim25.VirtualMachinePowerState; -import com.vmware.vim25.VirtualMachineRelocateSpec; -import com.vmware.vim25.VirtualMachineRelocateSpecDiskLocator; -import com.vmware.vim25.VirtualMachineRuntimeInfo; -import com.vmware.vim25.VirtualSCSISharing; public class VmwareResource implements StoragePoolResource, ServerResource, VmwareHostService { private static final Logger s_logger = Logger.getLogger(VmwareResource.class); @@ -2431,9 +2432,33 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(cmd.getVmName()); VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); int ramMb = (int) (vmSpec.getMinRam()/(1024 * 1024)); + long hotaddIncrementSizeInMb; + long hotaddMemoryLimitInMb; + long requestedMaxMemoryInMb = vmSpec.getMaxRam() / (1024 * 1024); + + // Check if VM is really running on hypervisor host + if (getVmState(vmMo) != State.Running) { + throw new CloudRuntimeException("Found that the VM " + vmMo.getVmName() + " is not running. Unable to scale-up this VM"); + } + + // Check max hot add limit + hotaddIncrementSizeInMb = vmMo.getHotAddMemoryIncrementSizeInMb(); + hotaddMemoryLimitInMb = vmMo.getHotAddMemoryLimitInMb(); + if (requestedMaxMemoryInMb > hotaddMemoryLimitInMb) { + throw new CloudRuntimeException("Memory of VM " + vmMo.getVmName() + " cannot be scaled to " + requestedMaxMemoryInMb + "MB." + + " Requested memory limit is beyond the hotadd memory limit for this VM at the moment is " + hotaddMemoryLimitInMb + "MB."); + } + + // Check increment is multiple of increment size + long reminder = requestedMaxMemoryInMb % hotaddIncrementSizeInMb; + if (reminder != 0) { + requestedMaxMemoryInMb = requestedMaxMemoryInMb + hotaddIncrementSizeInMb - reminder; + } + // Check if license supports the feature VmwareHelper.isFeatureLicensed(hyperHost, FeatureKeyConstants.HOTPLUG); - VmwareHelper.setVmScaleUpConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getMaxSpeed(), vmSpec.getMinSpeed(),(int) (vmSpec.getMaxRam()/(1024 * 1024)), ramMb, vmSpec.getLimitCpuUse()); + VmwareHelper + .setVmScaleUpConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getMaxSpeed(), vmSpec.getMinSpeed(), (int)requestedMaxMemoryInMb, ramMb, vmSpec.getLimitCpuUse()); if(!vmMo.configureVm(vmConfigSpec)) { throw new Exception("Unable to execute ScaleVmCommand"); @@ -3012,7 +3037,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa svlanId = getPvlanInfo(nicTo); } networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, vlanId, svlanId, - nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout, switchType, + nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout, switchType, _portsPerDvPortGroup, nicTo.getGateway(), configureVServiceInNexus, nicTo.getBroadcastType()); } @@ -4079,6 +4104,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa final HostStorageSystemMO hss = hostStorageSystem; threads.add(new Thread() { + @Override public void run() { try { hss.addInternetScsiStaticTargets(iScsiHbaDevice, lstTargets); @@ -4186,6 +4212,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa final String iScsiHbaDevice = hba.getDevice(); Thread thread = new Thread() { + @Override public void run() { try { hostStorageSystem.removeInternetScsiStaticTargets(iScsiHbaDevice, lstTargets); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/8cab35aa/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java ---------------------------------------------------------------------- diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java index 3e51047..de90109 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java @@ -32,13 +32,6 @@ import java.util.List; import org.apache.log4j.Logger; -import com.cloud.hypervisor.vmware.mo.SnapshotDescriptor.SnapshotInfo; -import com.cloud.hypervisor.vmware.util.VmwareContext; -import com.cloud.hypervisor.vmware.util.VmwareHelper; -import com.cloud.utils.ActionDelegate; -import com.cloud.utils.Pair; -import com.cloud.utils.Ternary; -import com.cloud.utils.script.Script; import com.google.gson.Gson; import com.vmware.vim25.ArrayOfManagedObjectReference; import com.vmware.vim25.CustomFieldStringValue; @@ -49,7 +42,6 @@ import com.vmware.vim25.GuestOsDescriptor; import com.vmware.vim25.HttpNfcLeaseDeviceUrl; import com.vmware.vim25.HttpNfcLeaseInfo; import com.vmware.vim25.HttpNfcLeaseState; -import com.vmware.vim25.InvalidStateFaultMsg; import com.vmware.vim25.ManagedObjectReference; import com.vmware.vim25.ObjectContent; import com.vmware.vim25.ObjectSpec; @@ -59,8 +51,6 @@ import com.vmware.vim25.OvfCreateDescriptorResult; import com.vmware.vim25.OvfFile; import com.vmware.vim25.PropertyFilterSpec; import com.vmware.vim25.PropertySpec; -import com.vmware.vim25.RuntimeFaultFaultMsg; -import com.vmware.vim25.SelectionSpec; import com.vmware.vim25.TraversalSpec; import com.vmware.vim25.VirtualCdrom; import com.vmware.vim25.VirtualCdromIsoBackingInfo; @@ -101,6 +91,14 @@ import com.vmware.vim25.VirtualPCIController; import com.vmware.vim25.VirtualSCSIController; import com.vmware.vim25.VirtualSCSISharing; +import com.cloud.hypervisor.vmware.mo.SnapshotDescriptor.SnapshotInfo; +import com.cloud.hypervisor.vmware.util.VmwareContext; +import com.cloud.hypervisor.vmware.util.VmwareHelper; +import com.cloud.utils.ActionDelegate; +import com.cloud.utils.Pair; +import com.cloud.utils.Ternary; +import com.cloud.utils.script.Script; + import edu.emory.mathcs.backport.java.util.Arrays; public class VirtualMachineMO extends BaseMO { @@ -210,7 +208,7 @@ public class VirtualMachineMO extends BaseMO { if(isVMwareToolsRunning()) { try { - String vmName = this.getName(); + String vmName = getName(); s_logger.info("Try gracefully shut down VM " + vmName); shutdown(); @@ -320,7 +318,7 @@ public class VirtualMachineMO extends BaseMO { } public boolean isTemplate() throws Exception { - VirtualMachineConfigInfo configInfo = this.getConfigInfo(); + VirtualMachineConfigInfo configInfo = getConfigInfo(); return configInfo.isTemplate(); } @@ -669,7 +667,8 @@ public class VirtualMachineMO extends BaseMO { _mor, "config.files"); } - public ManagedObjectReference getParentMor() throws Exception { + @Override + public ManagedObjectReference getParentMor() throws Exception { return (ManagedObjectReference)_context.getVimClient().getDynamicProperty( _mor, "parent"); } @@ -1660,7 +1659,7 @@ public class VirtualMachineMO extends BaseMO { DatacenterMO dcMo = getOwnerDatacenter().first(); if(disks != null) { for(VirtualDevice disk : disks) { - List> vmdkFiles = this.getDiskDatastorePathChain((VirtualDisk)disk, followDiskChain); + List> vmdkFiles = getDiskDatastorePathChain((VirtualDisk)disk, followDiskChain); for(Pair fileItem : vmdkFiles) { DatastoreMO srcDsMo = new DatastoreMO(_context, fileItem.second()); @@ -1696,7 +1695,7 @@ public class VirtualMachineMO extends BaseMO { DatacenterMO dcMo = getOwnerDatacenter().first(); if(disks != null) { for(VirtualDevice disk : disks) { - List> vmdkFiles = this.getDiskDatastorePathChain((VirtualDisk)disk, followDiskChain); + List> vmdkFiles = getDiskDatastorePathChain((VirtualDisk)disk, followDiskChain); for(Pair fileItem : vmdkFiles) { DatastoreMO srcDsMo = new DatastoreMO(_context, fileItem.second()); @@ -2110,8 +2109,8 @@ public class VirtualMachineMO extends BaseMO { public String getDvPortGroupName(VirtualEthernetCard nic) throws Exception { VirtualEthernetCardDistributedVirtualPortBackingInfo dvpBackingInfo = - (VirtualEthernetCardDistributedVirtualPortBackingInfo) ((VirtualEthernetCard) nic).getBacking(); - DistributedVirtualSwitchPortConnection dvsPort = (DistributedVirtualSwitchPortConnection) dvpBackingInfo.getPort(); + (VirtualEthernetCardDistributedVirtualPortBackingInfo) nic.getBacking(); + DistributedVirtualSwitchPortConnection dvsPort = dvpBackingInfo.getPort(); String dvPortGroupKey = dvsPort.getPortgroupKey(); ManagedObjectReference dvPortGroupMor = new ManagedObjectReference(); dvPortGroupMor.setValue(dvPortGroupKey); @@ -2183,5 +2182,12 @@ public class VirtualMachineMO extends BaseMO { } } } -} + public long getHotAddMemoryIncrementSizeInMb() throws Exception { + return (Long)_context.getVimClient().getDynamicProperty(_mor, "config.hotPlugMemoryIncrementSize"); + } + + public long getHotAddMemoryLimitInMb() throws Exception { + return (Long)_context.getVimClient().getDynamicProperty(_mor, "config.hotPlugMemoryLimit"); + } +}