bug 11162: merge fix from 2.2.10 premium

This commit is contained in:
Kelven Yang 2011-08-25 15:37:19 -07:00
parent 97a7dddf7d
commit 9ace681547
10 changed files with 105 additions and 74 deletions

View File

@ -181,7 +181,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
workerVMName = UUID.randomUUID().toString().replaceAll("-", "");
//attach a volume to dummay wrapper VM for taking snapshot and exporting the VM for backup
if (!hyperHost.createBlankVm(workerVMName, 1, 512, 0, false, 4, VirtualMachineGuestOsIdentifier._otherGuest.toString(), morDs, false)) {
if (!hyperHost.createBlankVm(workerVMName, 1, 512, 0, false, 4, 0, VirtualMachineGuestOsIdentifier._otherGuest.toString(), morDs, false)) {
String msg = "Unable to create worker VM to execute BackupSnapshotCommand";
s_logger.error(msg);
throw new Exception(msg);

View File

@ -238,8 +238,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
protected String _privateNetworkVSwitchName;
protected String _publicNetworkVSwitchName;
protected String _guestNetworkVSwitchName;
protected float _cpuOverprovisioningFactor = 1;
protected boolean _reserveCpu = false;
protected float _memOverprovisioningFactor = 1;
protected boolean _reserveMem = false;
protected ManagedObjectReference _morHyperHost;
protected VmwareContext _serviceContext;
@ -1099,7 +1103,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
assert (vmSpec.getSpeed() != null) && (rootDiskDataStoreDetails != null);
if (!hyperHost.createBlankVm(vmName, vmSpec.getCpus(), vmSpec.getSpeed().intValue(),
getReserveCpuMHz(vmSpec.getSpeed().intValue()), vmSpec.getLimitCpuUse(), ramMb,
getReserveCpuMHz(vmSpec.getSpeed().intValue()), vmSpec.getLimitCpuUse(), ramMb, getReserveMemMB(ramMb),
translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).toString(), rootDiskDataStoreDetails.first(), false)) {
throw new Exception("Failed to create VM. vmName: " + vmName);
}
@ -1131,7 +1135,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec();
int ramMb = (int) (vmSpec.getMinRam() / (1024 * 1024));
VmwareHelper.setBasicVmConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getSpeed().intValue(),
getReserveCpuMHz(vmSpec.getSpeed().intValue()), ramMb,
getReserveCpuMHz(vmSpec.getSpeed().intValue()), ramMb, getReserveMemMB(ramMb),
translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).toString(), vmSpec.getLimitCpuUse());
VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[totalChangeDevices];
@ -1321,6 +1325,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
return 0;
}
private int getReserveMemMB(int memMB) {
if(this._reserveMem) {
return (int)(memMB / this._memOverprovisioningFactor);
}
return 0;
}
private NicTO[] sortNicsByDeviceId(NicTO[] nics) {
@ -3658,7 +3670,15 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
value = (String) params.get("vmware.reserve.cpu");
if(value != null && value.equalsIgnoreCase("true"))
_reserveCpu = true;
_reserveCpu = true;
value = (String) params.get("mem.overprovisioning.factor");
if(value != null)
_memOverprovisioningFactor = Float.parseFloat(value);
value = (String) params.get("vmware.reserve.mem");
if(value != null && value.equalsIgnoreCase("true"))
_reserveMem = true;
String[] tokens = _guid.split("@");
_vCenterAddress = tokens[1];

119
deps/.classpath vendored
View File

@ -1,60 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="XenServerJava"/>
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry exported="true" kind="lib" path="cloud-axis.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-backport-util-concurrent-3.0.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-bcprov-jdk16-1.45.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-cglib.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-codec-1.4.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-collections-3.2.1.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-dbcp-1.2.2.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-discovery.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-httpclient-3.1.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-logging-1.1.1.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-pool-1.4.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-ehcache.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-email.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-gson.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-httpcore-4.0.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-jsch-0.1.42.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-jstl-1.2.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-libvirt-0.4.5.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-log4j.jar" sourcepath="/home/dev/thirdparty/apache-log4j-1.2.16/src/main/java"/>
<classpathentry exported="true" kind="lib" path="cloud-mysql-connector-java-5.1.7-bin.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-servlet-api.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-trilead-ssh2-build213.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-ws-commons-util-1.0.2.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-wsdl4j.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-xenserver-5.6.100-1.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-xmlrpc-client-3.1.3.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-xmlrpc-common-3.1.3.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-xstream-1.3.1.jar"/>
<classpathentry exported="true" kind="lib" path="jetty-6.1.26.jar"/>
<classpathentry exported="true" kind="lib" path="jetty-util-6.1.26.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-log4j-extras.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-iControl.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-manageontap.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-apputils.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-credstore.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-activation.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-jaxen-core.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-jaxen-jdom.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-jaxrpc.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-jdom.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-mailapi.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-saxpath.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-smtp.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-wbem.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-xalan.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-xerces.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-xml-apis.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-vim.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-vim25.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-charva.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-jnetpcap.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-junit.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-selenium-java-client-driver.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-selenium-server.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="XenServerJava"/>
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry exported="true" kind="lib" path="cloud-axis.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-backport-util-concurrent-3.0.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-bcprov-jdk16-1.45.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-cglib.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-codec-1.4.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-collections-3.2.1.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-dbcp-1.2.2.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-discovery.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-httpclient-3.1.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-logging-1.1.1.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-commons-pool-1.4.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-ehcache.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-email.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-gson.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-httpcore-4.0.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-jsch-0.1.42.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-jstl-1.2.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-libvirt-0.4.5.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-log4j.jar" sourcepath="/home/dev/thirdparty/apache-log4j-1.2.16/src/main/java"/>
<classpathentry exported="true" kind="lib" path="cloud-mysql-connector-java-5.1.7-bin.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-servlet-api.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-trilead-ssh2-build213.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-ws-commons-util-1.0.2.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-wsdl4j.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-xenserver-5.6.100-1.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-xmlrpc-client-3.1.3.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-xmlrpc-common-3.1.3.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-xstream-1.3.1.jar"/>
<classpathentry exported="true" kind="lib" path="jetty-6.1.26.jar"/>
<classpathentry exported="true" kind="lib" path="jetty-util-6.1.26.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-log4j-extras.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-iControl.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-manageontap.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-apputils.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-credstore.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-activation.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-jaxen-core.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-jaxen-jdom.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-jaxrpc.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-jdom.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-mailapi.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-saxpath.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-smtp.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-wbem.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-xalan.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-xerces.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-lib-xml-apis.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-vim.jar"/>
<classpathentry exported="true" kind="lib" path="vmware-vim25.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-jnetpcap.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-junit.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-selenium-java-client-driver.jar"/>
<classpathentry exported="true" kind="lib" path="cloud-selenium-server.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -124,6 +124,9 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
String _cpuOverprovisioningFactor = "1";
String _reserveCpu = "false";
String _memOverprovisioningFactor = "1";
String _reserveMem = "false";
Map<String, String> _storageMounts = new HashMap<String, String>();
Random _rand = new Random(System.currentTimeMillis());
@ -234,10 +237,17 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
_cpuOverprovisioningFactor = configDao.getValue(Config.CPUOverprovisioningFactor.key());
if(_cpuOverprovisioningFactor == null || _cpuOverprovisioningFactor.isEmpty())
_cpuOverprovisioningFactor = "1";
_memOverprovisioningFactor = configDao.getValue(Config.MemOverprovisioningFactor.key());
if(_memOverprovisioningFactor == null || _memOverprovisioningFactor.isEmpty())
_memOverprovisioningFactor = "1";
_reserveCpu = configDao.getValue(Config.VmwareReserveCpu.key());
if(_reserveCpu == null || _reserveCpu.isEmpty())
_reserveCpu = "false";
_reserveMem = configDao.getValue(Config.VmwareReserveMem.key());
if(_reserveMem == null || _reserveMem.isEmpty())
_reserveMem = "false";
s_logger.info("Additional VNC port allocation range is settled at " + _additionalPortRangeStart + " to " + (_additionalPortRangeStart + _additionalPortRangeSize));
@ -461,6 +471,8 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
params.put("management.portgroup.name", _managemetPortGroupName);
params.put("cpu.overprovisioning.factor", _cpuOverprovisioningFactor);
params.put("vmware.reserve.cpu", _reserveCpu);
params.put("mem.overprovisioning.factor", _memOverprovisioningFactor);
params.put("vmware.reserve.mem", _reserveMem);
}
@Override

View File

@ -255,7 +255,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
}
@Override
public boolean createBlankVm(String vmName, int cpuCount, int cpuSpeedMHz, int cpuReservedMHz, boolean limitCpuUse, int memoryMB,
public boolean createBlankVm(String vmName, int cpuCount, int cpuSpeedMHz, int cpuReservedMHz, boolean limitCpuUse, int memoryMB, int memoryReserveMB,
String guestOsIdentifier, ManagedObjectReference morDs, boolean snapshotDirToParent) throws Exception {
if(s_logger.isTraceEnabled())
@ -264,7 +264,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
+ ", guestOS: " + guestOsIdentifier + ", datastore: " + morDs.get_value() + ", snapshotDirToParent: " + snapshotDirToParent);
boolean result = HypervisorHostHelper.createBlankVm(this, vmName, cpuCount, cpuSpeedMHz, cpuReservedMHz, limitCpuUse,
memoryMB, guestOsIdentifier, morDs, snapshotDirToParent);
memoryMB, memoryReserveMB, guestOsIdentifier, morDs, snapshotDirToParent);
if(s_logger.isTraceEnabled())
s_logger.trace("vCenter API trace - createBlankVm() done");

View File

@ -664,7 +664,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
}
@Override
public boolean createBlankVm(String vmName, int cpuCount, int cpuSpeedMHz, int cpuReservedMHz, boolean limitCpuUse, int memoryMB,
public boolean createBlankVm(String vmName, int cpuCount, int cpuSpeedMHz, int cpuReservedMHz, boolean limitCpuUse, int memoryMB, int memoryReserveMB,
String guestOsIdentifier, ManagedObjectReference morDs, boolean snapshotDirToParent) throws Exception {
if(s_logger.isTraceEnabled())
@ -673,7 +673,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
+ ", guestOS: " + guestOsIdentifier + ", datastore: " + morDs.get_value() + ", snapshotDirToParent: " + snapshotDirToParent);
boolean result = HypervisorHostHelper.createBlankVm(this, vmName, cpuCount, cpuSpeedMHz, cpuReservedMHz, limitCpuUse,
memoryMB, guestOsIdentifier, morDs, snapshotDirToParent);
memoryMB, memoryReserveMB, guestOsIdentifier, morDs, snapshotDirToParent);
if(s_logger.isTraceEnabled())
s_logger.trace("vCenter API trace - createBlankVm() done");

View File

@ -398,7 +398,7 @@ public class HypervisorHostHelper {
}
public static boolean createBlankVm(VmwareHypervisorHost host, String vmName,
int cpuCount, int cpuSpeedMHz, int cpuReservedMHz, boolean limitCpuUse, int memoryMB, String guestOsIdentifier,
int cpuCount, int cpuSpeedMHz, int cpuReservedMHz, boolean limitCpuUse, int memoryMB, int memoryReserveMB, String guestOsIdentifier,
ManagedObjectReference morDs, boolean snapshotDirToParent) throws Exception {
if(s_logger.isInfoEnabled())
@ -407,7 +407,7 @@ public class HypervisorHostHelper {
// VM config basics
VirtualMachineConfigSpec vmConfig = new VirtualMachineConfigSpec();
vmConfig.setName(vmName);
VmwareHelper.setBasicVmConfig(vmConfig, cpuCount, cpuSpeedMHz, cpuReservedMHz, memoryMB, guestOsIdentifier, limitCpuUse);
VmwareHelper.setBasicVmConfig(vmConfig, cpuCount, cpuSpeedMHz, cpuReservedMHz, memoryMB, memoryReserveMB, guestOsIdentifier, limitCpuUse);
// Scsi controller
VirtualLsiLogicController scsiController = new VirtualLsiLogicController();

View File

@ -1377,7 +1377,7 @@ public class VirtualMachineMO extends BaseMO {
HostMO hostMo = getRunningHost();
VirtualMachineConfigInfo vmConfigInfo = getConfigInfo();
hostMo.createBlankVm(clonedVmName, 1, cpuSpeedMHz, 0, false, memoryMb, vmConfigInfo.getGuestId(), morDs, false);
hostMo.createBlankVm(clonedVmName, 1, cpuSpeedMHz, 0, false, memoryMb, 0, vmConfigInfo.getGuestId(), morDs, false);
VirtualMachineMO clonedVmMo = hostMo.findVmOnHyperHost(clonedVmName);
VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec();

View File

@ -33,7 +33,7 @@ public interface VmwareHypervisorHost {
VirtualMachineMO findVmOnPeerHyperHost(String name) throws Exception;
boolean createVm(VirtualMachineConfigSpec vmSpec) throws Exception;
boolean createBlankVm(String vmName, int cpuCount, int cpuSpeedMHz, int cpuReservedMHz, boolean limitCpuUse, int memoryMB,
boolean createBlankVm(String vmName, int cpuCount, int cpuSpeedMHz, int cpuReservedMHz, boolean limitCpuUse, int memoryMB, int memoryReserveMB,
String guestOsIdentifier, ManagedObjectReference morDs, boolean snapshotDirToParent) throws Exception;
void importVmFromOVF(String ovfFilePath, String vmName, DatastoreMO dsMo, String diskOption) throws Exception;

View File

@ -407,7 +407,7 @@ public class VmwareHelper {
}
public static void setBasicVmConfig(VirtualMachineConfigSpec vmConfig, int cpuCount, int cpuSpeedMHz, int cpuReservedMhz,
int memoryMB, String guestOsIdentifier, boolean limitCpuUse) {
int memoryMB, int memoryReserveMB, String guestOsIdentifier, boolean limitCpuUse) {
// VM config basics
vmConfig.setMemoryMB((long)memoryMB);
@ -425,7 +425,7 @@ public class VmwareHelper {
ResourceAllocationInfo memInfo = new ResourceAllocationInfo();
memInfo.setLimit((long)memoryMB);
memInfo.setReservation((long)memoryMB);
memInfo.setReservation((long)memoryReserveMB);
vmConfig.setMemoryAllocation(memInfo);
vmConfig.setGuestId(guestOsIdentifier);