You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2013/06/08 05:26:39 UTC
[2/3] git commit: updated refs/heads/vmsync to ebbd400
Fixed the start
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5e6d2cf5
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5e6d2cf5
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5e6d2cf5
Branch: refs/heads/vmsync
Commit: 5e6d2cf559d988a59997f9341fee8ef39f0a08b5
Parents: 90df846
Author: Alex Huang <al...@gmail.com>
Authored: Fri Jun 7 07:53:36 2013 -0700
Committer: Alex Huang <al...@gmail.com>
Committed: Fri Jun 7 10:11:57 2013 -0700
----------------------------------------------------------------------
api/src/com/cloud/deploy/DataCenterDeployment.java | 54 +++-
api/src/com/cloud/deploy/DeploymentPlan.java | 25 +-
api/src/com/cloud/deploy/DeploymentPlanner.java | 25 ++
.../framework/jobs/impl/AsyncJobMonitor.java | 3 +-
.../hypervisor/vmware/VmwareServerDiscoverer.java | 4 +-
.../vmware/manager/VmwareManagerImpl.java | 2 +-
.../vmware/manager/VmwareStorageManagerImpl.java | 2 +-
.../hypervisor/vmware/resource/VmwareResource.java | 10 +-
.../cloud/network/resource/F5BigIpResource.java | 4 +-
pom.xml | 2 +-
.../com/cloud/async/AsyncJobExecutionContext.java | 10 +-
.../com/cloud/vm/VirtualMachineManagerImpl.java | 258 +++++++--------
server/src/com/cloud/vm/VmWorkJobDispatcher.java | 2 +-
.../cloud/async/MockVirtualMachineManagerImpl.java | 15 -
.../com/cloud/utils/db/GenericSearchBuilder.java | 90 +++++-
utils/src/com/cloud/utils/db/SearchCriteria.java | 6 +
.../src/com/cloud/hypervisor/vmware/mo/BaseMO.java | 2 +-
.../com/cloud/hypervisor/vmware/mo/ClusterMO.java | 40 ++--
.../cloud/hypervisor/vmware/mo/DatacenterMO.java | 6 +-
.../vmware/mo/HostDatastoreBrowserMO.java | 6 +-
.../vmware/mo/HostDatastoreSystemMO.java | 2 +-
.../src/com/cloud/hypervisor/vmware/mo/HostMO.java | 28 +-
.../hypervisor/vmware/mo/HypervisorHostHelper.java | 8 +-
.../hypervisor/vmware/mo/VirtualMachineMO.java | 26 +-
.../cloud/hypervisor/vmware/util/VmwareHelper.java | 2 +-
25 files changed, 388 insertions(+), 244 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/api/src/com/cloud/deploy/DataCenterDeployment.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/deploy/DataCenterDeployment.java b/api/src/com/cloud/deploy/DataCenterDeployment.java
index 92bb9b9..d709ce7 100644
--- a/api/src/com/cloud/deploy/DataCenterDeployment.java
+++ b/api/src/com/cloud/deploy/DataCenterDeployment.java
@@ -27,11 +27,15 @@ public class DataCenterDeployment implements DeploymentPlan {
Long _hostId;
Long _physicalNetworkId;
ExcludeList _avoids = null;
- boolean _recreateDisks;
ReservationContext _context;
- public DataCenterDeployment() {
- _dcId = 0;
+ @SuppressWarnings("unused")
+ private DataCenterDeployment() { // Hide this constructor
+ }
+
+ public DataCenterDeployment(DeploymentPlan that) {
+ this(that.getDataCenterId(), that.getPodId(), that.getClusterId(), that.getHostId(), that.getPoolId(), that.getPhysicalNetworkId(), that.getReservationContext());
+ _avoids = new ExcludeList(that.getAvoids());
}
public DataCenterDeployment(long dataCenterId) {
@@ -77,6 +81,22 @@ public class DataCenterDeployment implements DeploymentPlan {
return _poolId;
}
+ public void setPoolId(Long poolId) {
+ _poolId = poolId;
+ }
+
+ public void setClusterId(Long clusterId) {
+ _clusterId = clusterId;
+ }
+
+ public void setHostId(Long hostId) {
+ _hostId = hostId;
+ }
+
+ public void setPodId(Long podId) {
+ _podId = podId;
+ }
+
@Override
public ExcludeList getAvoids() {
return _avoids;
@@ -97,4 +117,32 @@ public class DataCenterDeployment implements DeploymentPlan {
return _context;
}
+ @Override
+ public String toString() {
+ StringBuilder str = new StringBuilder("DeploymentPlan[");
+ if (_hostId != null) {
+ str.append("Host=").append(_hostId);
+ } else if (_clusterId != null) {
+ str.append("Cluster=").append(_clusterId);
+ } else if (_podId != null) {
+ str.append("Pod=").append(_podId);
+ } else {
+ str.append("Zone=").append(_dcId);
+ }
+
+ if (_poolId != null) {
+ str.append(", Storage=").append(_poolId);
+ }
+
+ if (_physicalNetworkId != null) {
+ str.append(", Physical Network = ").append(_physicalNetworkId);
+ }
+
+ if (_avoids != null) {
+ str.append(_avoids.toString());
+ }
+
+ return str.append("]").toString();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/api/src/com/cloud/deploy/DeploymentPlan.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/deploy/DeploymentPlan.java b/api/src/com/cloud/deploy/DeploymentPlan.java
index 456d5b8..4f619a8 100644
--- a/api/src/com/cloud/deploy/DeploymentPlan.java
+++ b/api/src/com/cloud/deploy/DeploymentPlan.java
@@ -20,47 +20,44 @@ import com.cloud.deploy.DeploymentPlanner.ExcludeList;
import com.cloud.vm.ReservationContext;
/**
+ * DeploymentPlan gives explicit direction on where to deploy a virtual machine.
+ *
*/
public interface DeploymentPlan {
- // TODO: This interface is not fully developed. It really
- // number of parameters to be specified.
-
/**
* @return data center the VM should deploy in.
*/
- public long getDataCenterId();
+ long getDataCenterId();
/**
* @return pod the Vm should deploy in; null if no preference.
*/
- public Long getPodId();
+ Long getPodId();
/**
* @return cluster the VM should deploy in; null if no preference.
*/
- public Long getClusterId();
+ Long getClusterId();
/**
* @return host the VM should deploy in; null if no preference.
*/
- public Long getHostId();
+ Long getHostId();
/**
* @return pool the VM should be created in; null if no preference.
*/
- public Long getPoolId();
+ Long getPoolId();
/**
- * @param avoids
- * Set the ExcludeList to avoid for deployment
+ * @param avoids Set the ExcludeList to avoid for deployment
*/
- public void setAvoids(ExcludeList avoids);
+ void setAvoids(ExcludeList avoids);
/**
- * @return
- * the ExcludeList to avoid for deployment
+ * @return the ExcludeList to avoid for deployment
*/
- public ExcludeList getAvoids();
+ ExcludeList getAvoids();
Long getPhysicalNetworkId();
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/api/src/com/cloud/deploy/DeploymentPlanner.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/deploy/DeploymentPlanner.java b/api/src/com/cloud/deploy/DeploymentPlanner.java
index 741a804..39edc1b 100644
--- a/api/src/com/cloud/deploy/DeploymentPlanner.java
+++ b/api/src/com/cloud/deploy/DeploymentPlanner.java
@@ -103,6 +103,10 @@ public interface DeploymentPlanner extends Adapter {
public ExcludeList() {
}
+ public ExcludeList(ExcludeList that) {
+ this(that.getDataCentersToAvoid(), that.getPodsToAvoid(), that.getClustersToAvoid(), that.getHostsToAvoid(), that.getPoolsToAvoid());
+ }
+
public ExcludeList(Set<Long> _dcIds, Set<Long> _podIds, Set<Long> _clusterIds, Set<Long> _hostIds, Set<Long> _poolIds) {
if (_dcIds != null) {
this._dcIds = new HashSet<Long>(_dcIds);
@@ -312,5 +316,26 @@ public interface DeploymentPlanner extends Adapter {
public Set<Long> getPoolsToAvoid() {
return _poolIds;
}
+
+ @Override
+ public String toString() {
+ StringBuilder str = new StringBuilder("Avoiding[");
+ if (_dcIds != null) {
+ str.append("Zones={").append(_dcIds.toString()).append("}");
+ }
+ if (_podIds != null) {
+ str.append("; Pods={").append(_podIds.toString()).append("}");
+ }
+ if (_clusterIds != null) {
+ str.append("; Clusters={").append(_clusterIds.toString()).append("}");
+ }
+ if (_hostIds != null) {
+ str.append("; Hosts={").append(_hostIds.toString()).append("}");
+ }
+ if (_poolIds != null) {
+ str.append("; DataStore={").append(_poolIds.toString()).append("}");
+ }
+ return str.append("]").toString();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobMonitor.java
----------------------------------------------------------------------
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobMonitor.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobMonitor.java
index 7a11195..29a4049 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobMonitor.java
+++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobMonitor.java
@@ -28,7 +28,6 @@ import org.apache.log4j.Logger;
import org.apache.cloudstack.framework.jobs.AsyncJob;
import org.apache.cloudstack.framework.jobs.AsyncJobConstants;
-import org.apache.cloudstack.framework.jobs.AsyncJob.Topics;
import org.apache.cloudstack.framework.messagebus.MessageBus;
import org.apache.cloudstack.framework.messagebus.MessageDispatcher;
import org.apache.cloudstack.framework.messagebus.MessageHandler;
@@ -114,7 +113,7 @@ public class AsyncJobMonitor extends ManagerBase {
long threadId = Thread.currentThread().getId();
boolean fromPoolThread = Thread.currentThread().getName().contains(AsyncJobConstants.JOB_POOL_THREAD_PREFIX);
- ActiveTaskRecord record = new ActiveTaskRecord(threadId, jobId, fromPoolThread);
+ ActiveTaskRecord record = new ActiveTaskRecord(jobId, threadId, fromPoolThread);
_activeTasks.put(jobId, record);
if(fromPoolThread)
_activePoolThreads++;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
index 2f82b53..07e40ba 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java
@@ -345,7 +345,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements
details.put("url", hostMo.getHostName());
details.put("username", username);
details.put("password", password);
- String guid = morHost.getType() + ":" + morHost.getValue()
+ String guid = morHost.getType() + ":" + morHost.getPresetParams()
+ "@" + url.getHost();
details.put("guid", guid);
@@ -414,7 +414,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements
"ClusterComputeResource"))
return false;
- if (!morParent.getValue().equals(morCluster.getValue()))
+ if (!morParent.getPresetParams().equals(morCluster.getPresetParams()))
return false;
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
index 1585070..d35ddcd 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java
@@ -374,7 +374,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
returnedHostList.add(mor);
return returnedHostList;
} else {
- s_logger.error("Unsupport host type " + mor.getType() + ":" + mor.getValue() + " from inventory path: " + hostInventoryPath);
+ s_logger.error("Unsupport host type " + mor.getType() + ":" + mor.getPresetParams() + " from inventory path: " + hostInventoryPath);
return null;
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
index 52d781c..0ff27e1 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java
@@ -245,7 +245,7 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager {
try {
VmwareHypervisorHost hyperHost = hostService.getHyperHost(context, cmd);
- String templateUuidName = UUID.nameUUIDFromBytes((templateName + "@" + cmd.getPoolUuid() + "-" + hyperHost.getMor().getValue()).getBytes()).toString();
+ String templateUuidName = UUID.nameUUIDFromBytes((templateName + "@" + cmd.getPoolUuid() + "-" + hyperHost.getMor().getPresetParams()).getBytes()).toString();
// truncate template name to 32 chars to ensure they work well with vSphere API's.
templateUuidName = templateUuidName.replace("-", "");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/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 c763640..3ecf49b 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
@@ -515,14 +515,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
synchronized (this) {
try {
- JmxUtil.registerMBean("VMware " + _morHyperHost.getValue(), "Command " + cmdSequence + "-" + cmd.getClass().getSimpleName(), mbean);
+ JmxUtil.registerMBean("VMware " + _morHyperHost.getPresetParams(), "Command " + cmdSequence + "-" + cmd.getClass().getSimpleName(), mbean);
_cmdMBeans.add(mbean);
if (_cmdMBeans.size() >= MAX_CMD_MBEAN) {
PropertyMapDynamicBean mbeanToRemove = _cmdMBeans.get(0);
_cmdMBeans.remove(0);
- JmxUtil.unregisterMBean("VMware " + _morHyperHost.getValue(), "Command " + mbeanToRemove.getProp("Sequence") + "-" + mbeanToRemove.getProp("Name"));
+ JmxUtil.unregisterMBean("VMware " + _morHyperHost.getPresetParams(), "Command " + mbeanToRemove.getProp("Sequence") + "-" + mbeanToRemove.getProp("Name"));
}
} catch (Exception e) {
if(s_logger.isTraceEnabled())
@@ -4583,7 +4583,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
DatastoreSummary dsSummary = dsMo.getSummary();
String address = hostMo.getHostName();
- StoragePoolInfo pInfo = new StoragePoolInfo(poolUuid, address, dsMo.getMor().getValue(), "", StoragePoolType.LVM, dsSummary.getCapacity(), dsSummary.getFreeSpace());
+ StoragePoolInfo pInfo = new StoragePoolInfo(poolUuid, address, dsMo.getMor().getPresetParams(), "", StoragePoolType.LVM, dsSummary.getCapacity(), dsSummary.getFreeSpace());
StartupStorageCommand cmd = new StartupStorageCommand();
cmd.setName(poolUuid);
cmd.setPoolInfo(pInfo);
@@ -5088,11 +5088,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
int endMs = infos.get(infos.size()-1).getTimestamp().getSecond() * 1000 + infos.get(infos.size()-1).getTimestamp().getMillisecond();
int beginMs = infos.get(0).getTimestamp().getSecond() * 1000 + infos.get(0).getTimestamp().getMillisecond();
sampleDuration = (endMs - beginMs) /1000;
- List<PerfMetricSeries> vals = ((PerfEntityMetric)values.get(i)).getValue();
+ List<PerfMetricSeries> vals = ((PerfEntityMetric)values.get(i)).getPresetParams();
for(int vi = 0; ((vals!= null) && (vi < vals.size())); ++vi){
if(vals.get(vi) instanceof PerfMetricIntSeries) {
PerfMetricIntSeries val = (PerfMetricIntSeries)vals.get(vi);
- List<Long> perfValues = val.getValue();
+ List<Long> perfValues = val.getPresetParams();
if (vals.get(vi).getId().getCounterId() == rxPerfCounterInfo.getKey()) {
networkReadKBs = sampleDuration * perfValues.get(3); //get the average RX rate multiplied by sampled duration
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java
index 1733712..51e2733 100644
--- a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java
+++ b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java
@@ -985,8 +985,8 @@ public class F5BigIpResource implements ServerResource {
continue;
}
- long high = stat.getValue().getHigh();
- long low = stat.getValue().getLow();
+ long high = stat.getPresetParams().getHigh();
+ long low = stat.getPresetParams().getLow();
long full = getFullUsage(high, low);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 67d9576..97265b5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,7 @@
<cs.jasypt.version>1.9.0</cs.jasypt.version>
<cs.trilead.version>build213-svnkit-1.3-patch</cs.trilead.version>
<cs.ehcache.version>1.5.0</cs.ehcache.version>
- <cs.gson.version>1.7.1</cs.gson.version>
+ <cs.gson.version>2.2.4</cs.gson.version>
<cs.guava.version>14.0-rc1</cs.guava.version>
<cs.xapi.version>5.6.100-1-SNAPSHOT</cs.xapi.version>
<cs.httpclient.version>3.1</cs.httpclient.version>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/server/src/com/cloud/async/AsyncJobExecutionContext.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/async/AsyncJobExecutionContext.java b/server/src/com/cloud/async/AsyncJobExecutionContext.java
index 82013e0..0e05a98 100644
--- a/server/src/com/cloud/async/AsyncJobExecutionContext.java
+++ b/server/src/com/cloud/async/AsyncJobExecutionContext.java
@@ -18,6 +18,8 @@ package com.cloud.async;
import javax.inject.Inject;
+import org.apache.log4j.Logger;
+
import org.apache.cloudstack.framework.jobs.AsyncJob;
import org.apache.cloudstack.framework.jobs.AsyncJobConstants;
import org.apache.cloudstack.framework.jobs.AsyncJobManager;
@@ -81,12 +83,16 @@ public class AsyncJobExecutionContext {
_jobMgr.updateAsyncJobAttachment(_job.getId(), instanceType, instanceId);
}
- public void logJobJournal(AsyncJob.JournalType journalType, String
- journalText, String journalObjJson) {
+ public void logJobJournal(AsyncJob.JournalType journalType, String journalText, String journalObjJson) {
assert(_job != null);
_jobMgr.logJobJournal(_job.getId(), journalType, journalText, journalObjJson);
}
+ public void log(Logger logger, String journalText) {
+ _jobMgr.logJobJournal(_job.getId(), AsyncJob.JournalType.SUCCESS, journalText, null);
+ logger.debug(journalText);
+ }
+
public void joinJob(long joinJobId) {
assert(_job != null);
_jobMgr.joinJob(_job.getId(), joinJobId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index e3db24c..ec9c3dd 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -39,7 +39,6 @@ import org.apache.cloudstack.context.CallContext;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
-import org.apache.cloudstack.framework.jobs.AsyncJob;
import org.apache.cloudstack.framework.jobs.AsyncJobConstants;
import org.apache.cloudstack.framework.jobs.AsyncJobManager;
import org.apache.cloudstack.framework.messagebus.MessageBus;
@@ -85,6 +84,7 @@ import com.cloud.cluster.ClusterManager;
import com.cloud.configuration.Config;
import com.cloud.configuration.ConfigurationManager;
import com.cloud.configuration.dao.ConfigurationDao;
+import com.cloud.dao.EntityManager;
import com.cloud.dc.ClusterDetailsDao;
import com.cloud.dc.ClusterDetailsVO;
import com.cloud.dc.DataCenter;
@@ -167,6 +167,8 @@ import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GlobalLock;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.exception.ExecutionException;
@@ -187,6 +189,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
private static final Logger s_logger = Logger.getLogger(VirtualMachineManagerImpl.class);
@Inject
+ protected EntityManager _entityMgr;
+
+ @Inject
protected StorageManager _storageMgr;
@Inject
DataStoreManager dataStoreMgr;
@@ -328,6 +333,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
protected int _lockStateRetry;
protected boolean _forceStop;
+ SearchBuilder<VolumeVO> RootVolumeSearch;
+
@Override
public void registerGuru(VirtualMachine.Type type, VirtualMachineGuru guru) {
synchronized (_vmGurus) {
@@ -529,6 +536,13 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_nodeId = _clusterMgr.getManagementNodeId();
_agentMgr.registerForHostEvents(this, true, true, true);
+
+ RootVolumeSearch = _entityMgr.createSearchBuilder(VolumeVO.class);
+ VolumeVO rvsEntity = RootVolumeSearch.entity();
+ RootVolumeSearch.and(rvsEntity.getVolumeType(), SearchCriteria.Op.EQ).values(Volume.Type.ROOT)
+ .and(rvsEntity.getInstanceId(), SearchCriteria.Op.EQ, "instance")
+ .and(rvsEntity.getDeviceId(), SearchCriteria.Op.EQ).values(0)
+ .done();
return true;
}
@@ -808,175 +822,151 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
return;
}
- public void processVmStartWork(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planToDeploy)
+ private Pair<DeploymentPlan, DeployDestination> findDestination(VirtualMachineProfileImpl profile, DeploymentPlan planRequested, boolean reuseVolume,
+ ReservationContext reservation, AsyncJobExecutionContext job) throws InsufficientCapacityException, ResourceUnavailableException {
+ VirtualMachine vm = profile.getVirtualMachine();
+
+ DataCenterDeployment plan = null;
+ if (planRequested != null) {
+ plan = new DataCenterDeployment(planRequested);
+ } else {
+ plan = new DataCenterDeployment(vm.getDataCenterId(), vm.getPodIdToDeployIn(), null, null, null, null, reservation);
+ }
+
+ job.log(s_logger, "Starting " + vm + " with requested " + plan);
+
+ boolean planChangedByVolume = false;
+ List<VolumeVO> vols = _entityMgr.search(VolumeVO.class, RootVolumeSearch.create("instance", vm.getId()));
+
+ if (vols.size() > 0 && reuseVolume) {
+ // edit plan if this vm's ROOT volume is in READY state already
+
+ VolumeVO vol = vols.get(0);
+ // make sure if the templateId is unchanged. If it is changed,
+ // let planner reassign pool for the volume even if it ready.
+ Long volTemplateId = vol.getTemplateId();
+ if (vol.isRecreatable() && volTemplateId != null &&
+ vm.getTemplateId() != -1 && volTemplateId.longValue() != vm.getTemplateId()) {
+ job.log(s_logger, "Recreating" + vol + " of " + vm + " because its template has changed.");
+ } else {
+ StoragePool pool = (StoragePool)dataStoreMgr.getPrimaryDataStore(vol.getPoolId());
+ Long rootVolPodId = pool.getPodId();
+ Long rootVolClusterId = pool.getClusterId();
+ Long clusterIdSpecified = plan.getClusterId();
+ if (clusterIdSpecified != null && rootVolClusterId != null &&
+ clusterIdSpecified.longValue() != rootVolClusterId.longValue()) {
+ job.log(s_logger, "Unable to satisfy the deployment plan because it is requesting cluster " + clusterIdSpecified + " but the root volume is in cluster " + rootVolClusterId);
+ throw new ResourceUnavailableException("Unable to satisfy the deployment plan because it is requesting cluster " + clusterIdSpecified
+ + " but the root volume is in cluster " + rootVolClusterId, Cluster.class, clusterIdSpecified);
+ }
+ plan.setPoolId(vol.getPoolId());
+ plan.setClusterId(rootVolClusterId);
+ plan.setPodId(rootVolPodId);
+ planChangedByVolume = true;
+ job.log(s_logger, "Deployment plan has been adjusted to " + plan);
+ }
+ }
+
+ DeployDestination dest = null;
+ try {
+ dest = _dpMgr.planDeployment(profile, plan, plan.getAvoids());
+ } catch (AffinityConflictException e2) {
+ throw new CloudRuntimeException("Unable to create deployment, affinity rules associted to the VM conflict", e2);
+ }
+
+ if (dest == null && planChangedByVolume) {
+ job.log(s_logger, "Unable to find a deploy destination using the adjusted deployment plan. Replanning with ");
+ return findDestination(profile, planRequested, false, reservation, job);
+ }
+
+ if (dest == null) {
+ throw new InsufficientServerCapacityException("Unable to create a deployment for " + vm,
+ DataCenter.class, plan.getDataCenterId(), areAffinityGroupsAssociated(profile));
+ }
+
+ plan.getAvoids().addHost(dest.getHost().getId());
+ job.log(s_logger, "Final deploy destination: " + dest);
+ return new Pair<DeploymentPlan, DeployDestination>(plan, dest);
+ }
+
+ /**
+ * orchestrateStart orchestrates the vm start process. Note that this
+ * method is not in the interface.
+ *
+ * @param vmUuid uuid for the vm
+ * @param params additional parameters passed
+ * @param planRequested deployment requested
+ * @throws InsufficientCapacityException when there's not enough infrastructure capacity to ensure successful start of a vm.
+ * @throws ConcurrentOperationException when there are multiple operations on the vm.
+ * @throws ResourceUnavailableException when the resource being used to start the vm is not available.
+ */
+ public void orchestrateStart(String vmUuid, Map<VirtualMachineProfile.Param, Object> params, DeploymentPlan planRequested)
throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
CallContext context = CallContext.current();
User caller = context.getCallingUser();
Account account = context.getCallingAccount();
+ AsyncJobExecutionContext job = AsyncJobExecutionContext.getCurrentExecutionContext();
VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
+ if (vm == null) {
+ throw new ConcurrentOperationException("Unable to find vm by " + vmUuid);
+ }
+
VirtualMachineGuru vmGuru = getVmGuru(vm);
Ternary<VMInstanceVO, ReservationContext, VmWorkJobVO> start = changeToStartState(vmGuru, vm, caller, account);
assert(start != null);
- ReservationContext ctx = start.second();
+ ReservationContext reservation = start.second();
VmWorkJobVO work = start.third();
VMInstanceVO startedVm = null;
ServiceOfferingVO offering = _offeringDao.findById(vm.getServiceOfferingId());
VMTemplateVO template = _templateDao.findById(vm.getTemplateId());
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Trying to deploy VM, vm has dcId: " + vm.getDataCenterId() + " and podId: " + vm.getPodIdToDeployIn());
- }
- DataCenterDeployment plan = new DataCenterDeployment(vm.getDataCenterId(), vm.getPodIdToDeployIn(), null, null, null, null, ctx);
- if(planToDeploy != null && planToDeploy.getDataCenterId() != 0) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("advanceStart: DeploymentPlan is provided, using dcId:" + planToDeploy.getDataCenterId() + ", podId: " + planToDeploy.getPodId() + ", clusterId: "
- + planToDeploy.getClusterId() + ", hostId: " + planToDeploy.getHostId() + ", poolId: " + planToDeploy.getPoolId());
- }
- plan = new DataCenterDeployment(planToDeploy.getDataCenterId(), planToDeploy.getPodId(), planToDeploy.getClusterId(), planToDeploy.getHostId(), planToDeploy.getPoolId(), planToDeploy.getPhysicalNetworkId(), ctx);
- }
-
HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType());
boolean canRetry = true;
try {
- ExcludeList avoids = null;
- if (planToDeploy != null) {
- avoids = planToDeploy.getAvoids();
- }
- if (avoids == null) {
- avoids = new ExcludeList();
- }
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Deploy avoids pods: " + avoids.getPodsToAvoid() + ", clusters: " + avoids.getClustersToAvoid() + ", hosts: " + avoids.getHostsToAvoid());
- }
- boolean planChangedByVolume = false;
boolean reuseVolume = true;
- DataCenterDeployment originalPlan = plan;
+ DeploymentPlan plan = planRequested;
int retry = _retry;
while (retry-- != 0) { // It's != so that it can match -1.
- if(reuseVolume){
- // edit plan if this vm's ROOT volume is in READY state already
- List<VolumeVO> vols = _volsDao.findReadyRootVolumesByInstance(vm.getId());
- for (VolumeVO vol : vols) {
- // make sure if the templateId is unchanged. If it is changed,
- // let planner
- // reassign pool for the volume even if it ready.
- Long volTemplateId = vol.getTemplateId();
- if (volTemplateId != null && volTemplateId.longValue() != template.getId()) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(vol + " of " + vm + " is READY, but template ids don't match, let the planner reassign a new pool");
- }
- continue;
- }
-
- StoragePool pool = (StoragePool)dataStoreMgr.getPrimaryDataStore(vol.getPoolId());
- if (!pool.isInMaintenance()) {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Root volume is ready, need to place VM in volume's cluster");
- }
- long rootVolDcId = pool.getDataCenterId();
- Long rootVolPodId = pool.getPodId();
- Long rootVolClusterId = pool.getClusterId();
- if (planToDeploy != null && planToDeploy.getDataCenterId() != 0) {
- Long clusterIdSpecified = planToDeploy.getClusterId();
- if (clusterIdSpecified != null && rootVolClusterId != null) {
- if (rootVolClusterId.longValue() != clusterIdSpecified.longValue()) {
- // cannot satisfy the plan passed in to the
- // planner
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("Cannot satisfy the deployment plan passed in since the ready Root volume is in different cluster. volume's cluster: " + rootVolClusterId
- + ", cluster specified: " + clusterIdSpecified);
- }
- throw new ResourceUnavailableException("Root volume is ready in different cluster, Deployment plan provided cannot be satisfied, unable to create a deployment for "
- + vm, Cluster.class, clusterIdSpecified);
- }
- }
- plan = new DataCenterDeployment(planToDeploy.getDataCenterId(), planToDeploy.getPodId(), planToDeploy.getClusterId(), planToDeploy.getHostId(), vol.getPoolId(), null, ctx);
- }else{
- plan = new DataCenterDeployment(rootVolDcId, rootVolPodId, rootVolClusterId, null, vol.getPoolId(), null, ctx);
- if (s_logger.isDebugEnabled()) {
- s_logger.debug(vol + " is READY, changing deployment plan to use this pool's dcId: " + rootVolDcId + " , podId: " + rootVolPodId + " , and clusterId: " + rootVolClusterId);
- }
- planChangedByVolume = true;
- }
- }
- }
- }
-
VirtualMachineProfileImpl vmProfile = new VirtualMachineProfileImpl(vm, template, offering, account, params);
- DeployDestination dest = null;
- try {
- dest = _dpMgr.planDeployment(vmProfile, plan, avoids);
- } catch (AffinityConflictException e2) {
- s_logger.warn("Unable to create deployment, affinity rules associted to the VM conflict", e2);
- throw new CloudRuntimeException(
- "Unable to create deployment, affinity rules associted to the VM conflict");
-
- }
- if (dest == null) {
- if (planChangedByVolume) {
- plan = originalPlan;
- planChangedByVolume = false;
- //do not enter volume reuse for next retry, since we want to look for resorces outside the volume's cluster
- reuseVolume = false;
- continue;
- }
- throw new InsufficientServerCapacityException("Unable to create a deployment for " + vmProfile,
- DataCenter.class, plan.getDataCenterId(), areAffinityGroupsAssociated(vmProfile));
- }
-
- if (dest != null) {
- avoids.addHost(dest.getHost().getId());
- AsyncJobExecutionContext.getCurrentExecutionContext().logJobJournal(
- AsyncJob.JournalType.SUCCESS, "Deployment found, dest host: " + dest.getHost().getId(), null);
- break;
- }
+ Pair<DeploymentPlan, DeployDestination> result = findDestination(vmProfile, plan, reuseVolume, reservation, job);
+ plan = result.first();
+ DeployDestination dest = result.second();
long destHostId = dest.getHost().getId();
vm.setPodId(dest.getPod().getId());
Long cluster_id = dest.getCluster().getId();
- ClusterDetailsVO cluster_detail_cpu = _clusterDetailsDao.findDetail(cluster_id,"cpuOvercommitRatio");
- ClusterDetailsVO cluster_detail_ram = _clusterDetailsDao.findDetail(cluster_id,"memoryOvercommitRatio");
+ ClusterDetailsVO cluster_detail_cpu = _clusterDetailsDao.findDetail(cluster_id, "cpuOvercommitRatio");
+ ClusterDetailsVO cluster_detail_ram = _clusterDetailsDao.findDetail(cluster_id, "memoryOvercommitRatio");
vmProfile.setCpuOvercommitRatio(Float.parseFloat(cluster_detail_cpu.getValue()));
vmProfile.setMemoryOvercommitRatio(Float.parseFloat(cluster_detail_ram.getValue()));
- try {
- if (!changeState(vm, Event.OperationRetry, destHostId, work, Step.Prepare)) {
- throw new ConcurrentOperationException("Unable to update the state of the Virtual Machine");
- }
- } catch (NoTransitionException e1) {
- throw new ConcurrentOperationException(e1.getMessage());
+ if (!changeState(vm, Event.OperationRetry, destHostId, work, Step.Prepare)) {
+ throw new ConcurrentOperationException("Unable to update the state of the Virtual Machine");
}
try {
- if (s_logger.isDebugEnabled()) {
- s_logger.debug("VM is being created in podId: " + vm.getPodIdToDeployIn());
- }
- _networkMgr.prepare(vmProfile, dest, ctx);
- if (vm.getHypervisorType() != HypervisorType.BareMetal) {
- volumeMgr.prepare(vmProfile, dest);
- }
- //since StorageMgr succeeded in volume creation, reuse Volume for further tries until current cluster has capacity
- if(!reuseVolume){
- reuseVolume = true;
- }
+ _networkMgr.prepare(vmProfile, dest, reservation);
+ volumeMgr.prepare(vmProfile, dest);
+
+ reuseVolume = true;
Commands cmds = null;
- vmGuru.finalizeVirtualMachineProfile(vmProfile, dest, ctx);
+ vmGuru.finalizeVirtualMachineProfile(vmProfile, dest, reservation);
VirtualMachineTO vmTO = hvGuru.implement(vmProfile);
cmds = new Commands(OnError.Stop);
cmds.addCommand(new StartCommand(vmTO, dest.getHost()));
- vmGuru.finalizeDeployment(cmds, vmProfile, dest, ctx);
+ vmGuru.finalizeDeployment(cmds, vmProfile, dest, reservation);
work.setStep(VmWorkJobVO.Step.Starting);
_workJobDao.update(work.getId(), work);
@@ -996,7 +986,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
destHostId = finalHost.getId();
}
- if (vmGuru.finalizeStart(vmProfile, destHostId, cmds, ctx)) {
+ if (vmGuru.finalizeStart(vmProfile, destHostId, cmds, reservation)) {
if (!changeState(vm, Event.OperationSucceeded, destHostId, work, Step.Done)) {
throw new ConcurrentOperationException("Unable to transition to a new state.");
}
@@ -1031,7 +1021,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
throw new AgentUnavailableException("Unable to start " + vm.getHostName(), destHostId, e);
} catch (ResourceUnavailableException e) {
s_logger.info("Unable to contact resource.", e);
- if (!avoids.add(e)) {
+ if (!plan.getAvoids().add(e)) {
if (e.getScope() == Volume.class || e.getScope() == Nic.class) {
throw e;
} else {
@@ -1041,7 +1031,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
} catch (InsufficientCapacityException e) {
s_logger.info("Insufficient capacity ", e);
- if (!avoids.add(e)) {
+ if (!plan.getAvoids().add(e)) {
if (e.getScope() == Volume.class || e.getScope() == Nic.class) {
throw e;
} else {
@@ -1050,7 +1040,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
} catch (Exception e) {
s_logger.error("Failed to start instance " + vm, e);
- throw new AgentUnavailableException("Unable to start instance due to " + e.getMessage(), destHostId, e);
+ throw new CloudRuntimeException("Unable to start instance due to " + e.getMessage(), e);
} finally {
if (startedVm == null && canRetry) {
VmWorkJobVO.Step prevStep = work.getStep();
@@ -1064,14 +1054,14 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
}
}
+ } catch (NoTransitionException e1) {
+ throw new CloudRuntimeException(e1.getMessage());
} finally {
if (startedVm == null) {
- if (canRetry) {
- try {
- changeState(vm, Event.OperationFailed, null, work, Step.Done);
- } catch (NoTransitionException e) {
- throw new ConcurrentOperationException(e.getMessage());
- }
+ try {
+ changeState(vm, Event.OperationFailed, null, work, Step.Done);
+ } catch (NoTransitionException e) {
+ throw new ConcurrentOperationException(e.getMessage());
}
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/server/src/com/cloud/vm/VmWorkJobDispatcher.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VmWorkJobDispatcher.java b/server/src/com/cloud/vm/VmWorkJobDispatcher.java
index 04d9204..fa33ecd 100644
--- a/server/src/com/cloud/vm/VmWorkJobDispatcher.java
+++ b/server/src/com/cloud/vm/VmWorkJobDispatcher.java
@@ -69,7 +69,7 @@ public class VmWorkJobDispatcher extends AdapterBase implements AsyncJobDispatch
if (cmd.equals(Start)) {
VmWorkStart start = (VmWorkStart)work;
- _vmMgr.processVmStartWork(vm.getUuid(), start.getParams(), start.getPlan());
+ _vmMgr.orchestrateStart(vm.getUuid(), start.getParams(), start.getPlan());
} else if (cmd.equals(Stop)) {
VmWorkStop stop = (VmWorkStop)work;
_vmMgr.processVmStopWork(vm.getUuid(), stop.isForceStop());
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/server/test/com/cloud/async/MockVirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/async/MockVirtualMachineManagerImpl.java b/server/test/com/cloud/async/MockVirtualMachineManagerImpl.java
index bc25b11..e164d05 100644
--- a/server/test/com/cloud/async/MockVirtualMachineManagerImpl.java
+++ b/server/test/com/cloud/async/MockVirtualMachineManagerImpl.java
@@ -353,21 +353,6 @@ public class MockVirtualMachineManagerImpl implements VirtualMachineManager {
return false;
}
- public VirtualMachine processVmStartWork(String vmUuid,
- Map<Param, Object> params, User caller, Account account,
- DeploymentPlan planToDeploy) throws InsufficientCapacityException,
- ConcurrentOperationException, ResourceUnavailableException {
- // TODO Auto-generated method stub
- return null;
- }
-
- public boolean processVmStopWork(String vmUuid, boolean forced, User user,
- Account account) throws AgentUnavailableException,
- OperationTimedoutException, ConcurrentOperationException {
- // TODO Auto-generated method stub
- return false;
- }
-
@Override
public NicTO toNicTO(NicProfile nic, HypervisorType hypervisorType) {
// TODO Auto-generated method stub
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/utils/src/com/cloud/utils/db/GenericSearchBuilder.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/GenericSearchBuilder.java b/utils/src/com/cloud/utils/db/GenericSearchBuilder.java
index 337d444..4bae344 100755
--- a/utils/src/com/cloud/utils/db/GenericSearchBuilder.java
+++ b/utils/src/com/cloud/utils/db/GenericSearchBuilder.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Transient;
@@ -199,6 +200,16 @@ public class GenericSearchBuilder<T, K> implements MethodInterceptor {
return this;
}
+ public GenericSearchBuilder<T, K> and(Object useless, Op op, String name) {
+ constructCondition(name, " AND ", _specifiedAttrs.get(0), op);
+ return this;
+ }
+
+ public Preset and(Object useless, Op op) {
+ Condition condition = constructCondition(UUID.randomUUID().toString(), " AND ", _specifiedAttrs.get(0), op);
+ return new Preset(this, condition);
+ }
+
public GenericSearchBuilder<T, K> and() {
constructCondition(null, " AND ", null, null);
return this;
@@ -217,19 +228,53 @@ public class GenericSearchBuilder<T, K> implements MethodInterceptor {
return and(name, useless, op);
}
+ public GenericSearchBuilder<T, K> where(Object useless, Op op, String name) {
+ return and(name, useless, op);
+ }
+
+ public Preset where(Object useless, Op op) {
+ return and(useless, op);
+ }
+
public GenericSearchBuilder<T, K> left(String name, Object useless, Op op) {
constructCondition(name, " ( ", _specifiedAttrs.get(0), op);
return this;
}
+ public GenericSearchBuilder<T, K> left(Object useless, Op op, String name) {
+ constructCondition(name, " ( ", _specifiedAttrs.get(0), op);
+ return this;
+ }
+
+ public Preset left(Object useless, Op op) {
+ Condition condition = constructCondition(UUID.randomUUID().toString(), " ( ", _specifiedAttrs.get(0), op);
+ return new Preset(this, condition);
+ }
+
+ public GenericSearchBuilder<T, K> op(Object useless, Op op, String name) {
+ return left(useless, op, name);
+ }
+
+ public Preset op(Object useless, Op op) {
+ return left(useless, op);
+ }
+
public GenericSearchBuilder<T, K> op(String name, Object useless, Op op) {
return left(name, useless, op);
}
+ public GenericSearchBuilder<T, K> openParen(Object useless, Op op, String name) {
+ return left(name, useless, op);
+ }
+
public GenericSearchBuilder<T, K> openParen(String name, Object useless, Op op) {
return left(name, useless, op);
}
+ public Preset openParen(Object useless, Op op) {
+ return left(useless, op);
+ }
+
public GroupBy<T, K> groupBy(Object... useless) {
assert _groupBy == null : "Can't do more than one group bys";
_groupBy = new GroupBy<T, K>(this);
@@ -254,6 +299,16 @@ public class GenericSearchBuilder<T, K> implements MethodInterceptor {
return this;
}
+ public GenericSearchBuilder<T, K> or(Object useless, Op op, String name) {
+ constructCondition(name, " OR ", _specifiedAttrs.get(0), op);
+ return this;
+ }
+
+ public Preset or(Object useless, Op op) {
+ Condition condition = constructCondition(UUID.randomUUID().toString(), " OR ", _specifiedAttrs.get(0), op);
+ return new Preset(this, condition);
+ }
+
public GenericSearchBuilder<T, K> join(String name, GenericSearchBuilder<?, ?> builder, Object useless, Object useless2, JoinBuilder.JoinType joinType) {
assert _entity != null : "SearchBuilder cannot be modified once it has been setup";
assert _specifiedAttrs.size() == 1 : "You didn't select the attribute.";
@@ -272,7 +327,7 @@ public class GenericSearchBuilder<T, K> implements MethodInterceptor {
return this;
}
- protected void constructCondition(String conditionName, String cond, Attribute attr, Op op) {
+ protected Condition constructCondition(String conditionName, String cond, Attribute attr, Op op) {
assert _entity != null : "SearchBuilder cannot be modified once it has been setup";
assert op == null || _specifiedAttrs.size() == 1 : "You didn't select the attribute.";
assert op != Op.SC : "Call join";
@@ -280,6 +335,7 @@ public class GenericSearchBuilder<T, K> implements MethodInterceptor {
Condition condition = new Condition(conditionName, cond, attr, op);
_conditions.add(condition);
_specifiedAttrs.clear();
+ return condition;
}
/**
@@ -360,6 +416,7 @@ public class GenericSearchBuilder<T, K> implements MethodInterceptor {
protected final String cond;
protected final Op op;
protected final Attribute attr;
+ protected Object[] presets;
protected Condition(String name) {
this(name, null, null, null);
@@ -370,8 +427,21 @@ public class GenericSearchBuilder<T, K> implements MethodInterceptor {
this.attr = attr;
this.cond = cond;
this.op = op;
+ this.presets = null;
}
+ public boolean isPreset() {
+ return presets != null;
+ }
+
+ public void setPresets(Object... presets) {
+ this.presets = presets;
+ }
+
+ public Object[] getPresets() {
+ return presets;
+ }
+
public void toSql(StringBuilder sql, Object[] params, int count) {
if (count > 0) {
sql.append(cond);
@@ -445,4 +515,22 @@ public class GenericSearchBuilder<T, K> implements MethodInterceptor {
this.field = field;
}
}
+
+ public class Preset {
+ GenericSearchBuilder<T, K> builder;
+ Condition condition;
+
+ protected Preset(GenericSearchBuilder<T, K> builder, Condition condition) {
+ this.builder = builder;
+ this.condition = condition;
+ }
+
+ public GenericSearchBuilder<T, K> values(Object... params) {
+ if (condition.op.getParams() > 0 && condition.op.params != params.length) {
+ throw new CloudRuntimeException("The # of parameters set " + params.length + " does not match # of parameters required by " + condition.op);
+ }
+ condition.setPresets(params);
+ return builder;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/utils/src/com/cloud/utils/db/SearchCriteria.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/SearchCriteria.java b/utils/src/com/cloud/utils/db/SearchCriteria.java
index 85f7708..22bccd3 100755
--- a/utils/src/com/cloud/utils/db/SearchCriteria.java
+++ b/utils/src/com/cloud/utils/db/SearchCriteria.java
@@ -295,6 +295,9 @@ public class SearchCriteria<K> {
StringBuilder sql = new StringBuilder();
int i = 0;
for (Condition condition : _conditions) {
+ if (condition.isPreset()) {
+ _params.put(condition.name, condition.presets);
+ }
Object[] params = _params.get(condition.name);
if ((condition.op == null || condition.op.params == 0) || (params != null)) {
condition.toSql(sql, params, i++);
@@ -302,6 +305,9 @@ public class SearchCriteria<K> {
}
for (Condition condition : _additionals) {
+ if (condition.isPreset()) {
+ _params.put(condition.name, condition.presets);
+ }
Object[] params = _params.get(condition.name);
if ((condition.op.params == 0) || (params != null)) {
condition.toSql(sql, params, i++);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/vmware-base/src/com/cloud/hypervisor/vmware/mo/BaseMO.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/BaseMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/BaseMO.java
index 0ac93e4..c039d80 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/BaseMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/BaseMO.java
@@ -129,7 +129,7 @@ public class BaseMO {
CustomFieldStringValue cfValue = (CustomFieldStringValue)_context.getVimClient().getDynamicProperty(getMor(),
String.format("value[%d]", key));
if(cfValue != null)
- return cfValue.getValue();
+ return cfValue.getPresetParams();
return null;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/vmware-base/src/com/cloud/hypervisor/vmware/mo/ClusterMO.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/ClusterMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/ClusterMO.java
index d112c34..58afc93 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/ClusterMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/ClusterMO.java
@@ -120,7 +120,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
@Override
public ObjectContent[] getVmPropertiesOnHyperHost(String[] propertyPaths) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - retrieveProperties() for VM properties. target MOR: " + _mor.getValue() + ", properties: " + new Gson().toJson(propertyPaths));
+ s_logger.trace("vCenter API trace - retrieveProperties() for VM properties. target MOR: " + _mor.getPresetParams() + ", properties: " + new Gson().toJson(propertyPaths));
PropertySpec pSpec = new PropertySpec();
pSpec.setType("VirtualMachine");
@@ -158,7 +158,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
@Override
public ObjectContent[] getDatastorePropertiesOnHyperHost(String[] propertyPaths) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - retrieveProperties() on Datastore properties. target MOR: " + _mor.getValue() + ", properties: " + new Gson().toJson(propertyPaths));
+ s_logger.trace("vCenter API trace - retrieveProperties() on Datastore properties. target MOR: " + _mor.getPresetParams() + ", properties: " + new Gson().toJson(propertyPaths));
PropertySpec pSpec = new PropertySpec();
pSpec.setType("Datastore");
@@ -190,7 +190,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
private ObjectContent[] getHostPropertiesOnCluster(String[] propertyPaths) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - retrieveProperties() on Host properties. target MOR: " + _mor.getValue() + ", properties: " + new Gson().toJson(propertyPaths));
+ s_logger.trace("vCenter API trace - retrieveProperties() on Host properties. target MOR: " + _mor.getPresetParams() + ", properties: " + new Gson().toJson(propertyPaths));
PropertySpec pSpec = new PropertySpec();
pSpec.setType("HostSystem");
@@ -224,7 +224,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
@Override
public boolean createVm(VirtualMachineConfigSpec vmSpec) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - createVM_Task(). target MOR: " + _mor.getValue() + ", VirtualMachineConfigSpec: " + new Gson().toJson(vmSpec));
+ s_logger.trace("vCenter API trace - createVM_Task(). target MOR: " + _mor.getPresetParams() + ", VirtualMachineConfigSpec: " + new Gson().toJson(vmSpec));
assert(vmSpec != null);
DatacenterMO dcMo = new DatacenterMO(_context, getHyperHostDatacenter());
@@ -252,14 +252,14 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
@Override
public void importVmFromOVF(String ovfFilePath, String vmName, DatastoreMO dsMo, String diskOption) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - importVmFromOVF(). target MOR: " + _mor.getValue() + ", ovfFilePath: " + ovfFilePath + ", vmName: " + vmName
- + ", datastore: " + dsMo.getMor().getValue() + ", diskOption: " + diskOption);
+ s_logger.trace("vCenter API trace - importVmFromOVF(). target MOR: " + _mor.getPresetParams() + ", ovfFilePath: " + ovfFilePath + ", vmName: " + vmName
+ + ", datastore: " + dsMo.getMor().getPresetParams() + ", diskOption: " + diskOption);
ManagedObjectReference morRp = getHyperHostOwnerResourcePool();
assert(morRp != null);
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - importVmFromOVF(). resource pool: " + morRp.getValue());
+ s_logger.trace("vCenter API trace - importVmFromOVF(). resource pool: " + morRp.getPresetParams());
HypervisorHostHelper.importVmFromOVF(this, ovfFilePath, vmName, dsMo, diskOption, morRp, null);
@@ -272,9 +272,9 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
String guestOsIdentifier, ManagedObjectReference morDs, boolean snapshotDirToParent) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - createBlankVm(). target MOR: " + _mor.getValue() + ", vmName: " + vmName + ", cpuCount: " + cpuCount
+ s_logger.trace("vCenter API trace - createBlankVm(). target MOR: " + _mor.getPresetParams() + ", vmName: " + vmName + ", cpuCount: " + cpuCount
+ ", cpuSpeedMhz: " + cpuSpeedMHz + ", cpuReservedMHz: " + cpuReservedMHz + ", limitCpu: " + limitCpuUse + ", memoryMB: " + memoryMB
- + ", guestOS: " + guestOsIdentifier + ", datastore: " + morDs.getValue() + ", snapshotDirToParent: " + snapshotDirToParent);
+ + ", guestOS: " + guestOsIdentifier + ", datastore: " + morDs.getPresetParams() + ", snapshotDirToParent: " + snapshotDirToParent);
boolean result = HypervisorHostHelper.createBlankVm(this, vmName, cpuCount, cpuSpeedMHz, cpuReservedMHz, limitCpuUse,
memoryMB, memoryReserveMB, guestOsIdentifier, morDs, snapshotDirToParent);
@@ -290,7 +290,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
int poolHostPort, String poolPath, String poolUuid) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - mountDatastore(). target MOR: " + _mor.getValue() + ", vmfs: " + vmfsDatastore + ", poolHost: " + poolHostAddress
+ s_logger.trace("vCenter API trace - mountDatastore(). target MOR: " + _mor.getPresetParams() + ", vmfs: " + vmfsDatastore + ", poolHost: " + poolHostAddress
+ ", poolHostPort: " + poolHostPort + ", poolPath: " + poolPath + ", poolUuid: " + poolUuid);
ManagedObjectReference morDs = null;
@@ -304,7 +304,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
morDsFirst = morDs;
// assume datastore is in scope of datacenter
- assert(morDsFirst.getValue().equals(morDs.getValue()));
+ assert(morDsFirst.getPresetParams().equals(morDs.getPresetParams()));
}
}
@@ -326,7 +326,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
@Override
public void unmountDatastore(String poolUuid) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - unmountDatastore(). target MOR: " + _mor.getValue() + ", poolUuid: " + poolUuid);
+ s_logger.trace("vCenter API trace - unmountDatastore(). target MOR: " + _mor.getPresetParams() + ", poolUuid: " + poolUuid);
List<ManagedObjectReference> hosts = (List<ManagedObjectReference>)_context.getVimClient().getDynamicProperty(_mor, "host");
if(hosts != null && hosts.size() > 0) {
@@ -344,7 +344,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
public ManagedObjectReference findDatastore(String poolUuid) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - findDatastore(). target MOR: " + _mor.getValue() + ", poolUuid: " + poolUuid);
+ s_logger.trace("vCenter API trace - findDatastore(). target MOR: " + _mor.getPresetParams() + ", poolUuid: " + poolUuid);
CustomFieldsManagerMO cfmMo = new CustomFieldsManagerMO(_context,
_context.getServiceContent().getCustomFieldsManager());
@@ -361,7 +361,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
DynamicProperty prop = oc.getPropSet().get(1);
if(prop != null && prop.getVal() != null) {
if(prop.getVal() instanceof CustomFieldStringValue) {
- String val = ((CustomFieldStringValue)prop.getVal()).getValue();
+ String val = ((CustomFieldStringValue)prop.getVal()).getPresetParams();
if(val.equalsIgnoreCase(poolUuid)) {
if(s_logger.isTraceEnabled())
@@ -382,7 +382,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
@Override
public ManagedObjectReference findDatastoreByExportPath(String exportPath) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - findDatastoreByExportPath(). target MOR: " + _mor.getValue() + ", exportPath: " + exportPath);
+ s_logger.trace("vCenter API trace - findDatastoreByExportPath(). target MOR: " + _mor.getPresetParams() + ", exportPath: " + exportPath);
ObjectContent[] ocs = getDatastorePropertiesOnHyperHost(new String[] {"info"});
if(ocs != null && ocs.length > 0) {
@@ -415,7 +415,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
@Override
public ManagedObjectReference findMigrationTarget(VirtualMachineMO vmMo) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - findMigrationTarget(). target MOR: " + _mor.getValue() + ", vm: " + vmMo.getName());
+ s_logger.trace("vCenter API trace - findMigrationTarget(). target MOR: " + _mor.getPresetParams() + ", vm: " + vmMo.getName());
List<ClusterHostRecommendation> candidates = recommendHostsForVm(vmMo);
if(candidates != null && candidates.size() > 0) {
@@ -464,7 +464,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
@Override
public VmwareHypervisorHostResourceSummary getHyperHostResourceSummary() throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - getHyperHostResourceSummary(). target MOR: " + _mor.getValue());
+ s_logger.trace("vCenter API trace - getHyperHostResourceSummary(). target MOR: " + _mor.getPresetParams());
VmwareHypervisorHostResourceSummary summary = new VmwareHypervisorHostResourceSummary();
@@ -496,7 +496,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
public VmwareHypervisorHostNetworkSummary getHyperHostNetworkSummary(String esxServiceConsolePort) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - getHyperHostNetworkSummary(). target MOR: " + _mor.getValue() + ", mgmtPortgroup: " + esxServiceConsolePort);
+ s_logger.trace("vCenter API trace - getHyperHostNetworkSummary(). target MOR: " + _mor.getPresetParams() + ", mgmtPortgroup: " + esxServiceConsolePort);
List<ManagedObjectReference> hosts = (List<ManagedObjectReference>)_context.getVimClient().getDynamicProperty(_mor, "host");
if(hosts != null && hosts.size() > 0) {
@@ -515,7 +515,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
@Override
public ComputeResourceSummary getHyperHostHardwareSummary() throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - getHyperHostHardwareSummary(). target MOR: " + _mor.getValue());
+ s_logger.trace("vCenter API trace - getHyperHostHardwareSummary(). target MOR: " + _mor.getPresetParams());
ClusterComputeResourceSummary hardwareSummary = (ClusterComputeResourceSummary)
_context.getVimClient().getDynamicProperty(_mor, "summary");
@@ -562,7 +562,7 @@ public class ClusterMO extends BaseMO implements VmwareHypervisorHost {
name = (String)objProp.getVal();
} else {
OptionValue optValue = (OptionValue)objProp.getVal();
- value = (String)optValue.getValue();
+ value = (String)optValue.getPresetParams();
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
index 0a3e20b..0f7bb3a 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
@@ -117,7 +117,7 @@ public class DatacenterMO extends BaseMO {
break; // break out inner loop
}
} else if(prop.getVal() instanceof CustomFieldStringValue) {
- String val = ((CustomFieldStringValue)prop.getVal()).getValue();
+ String val = ((CustomFieldStringValue)prop.getVal()).getPresetParams();
if(val.equals(vmLabel)) {
list.add(new VirtualMachineMO(_context, oc.getObj()));
break; // break out inner loop
@@ -451,7 +451,7 @@ public class DatacenterMO extends BaseMO {
dvSwitchMor = (ManagedObjectReference) prop.getVal();
}
}
- if ((dvPortGroupKey != null) && dvPortGroupKey.equals(dvPortGroupMor.getValue())) {
+ if ((dvPortGroupKey != null) && dvPortGroupKey.equals(dvPortGroupMor.getPresetParams())) {
return dvSwitchMor;
}
}
@@ -474,7 +474,7 @@ public class DatacenterMO extends BaseMO {
ManagedObjectReference dvsMor = getDvSwitchMor(networkInfo.first());
String dvSwitchUuid = getDvSwitchUuid(dvsMor);
dvPortConnection.setSwitchUuid(dvSwitchUuid);
- dvPortConnection.setPortgroupKey(networkInfo.first().getValue());
+ dvPortConnection.setPortgroupKey(networkInfo.first().getPresetParams());
dvPortBacking.setPort(dvPortConnection);
System.out.println("Plugging NIC device into network " + networkInfo.second() + " backed by dvSwitch: "
+ dvSwitchUuid);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java
index 59e754c..a9d2205 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreBrowserMO.java
@@ -37,7 +37,7 @@ public class HostDatastoreBrowserMO extends BaseMO {
public void DeleteFile(String datastoreFullPath) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - deleteFile(). target mor: " + _mor.getValue() + ", file datastore path: " + datastoreFullPath);
+ s_logger.trace("vCenter API trace - deleteFile(). target mor: " + _mor.getPresetParams() + ", file datastore path: " + datastoreFullPath);
_context.getService().deleteFile(_mor, datastoreFullPath);
@@ -47,7 +47,7 @@ public class HostDatastoreBrowserMO extends BaseMO {
public HostDatastoreBrowserSearchResults searchDatastore(String datastorePath, HostDatastoreBrowserSearchSpec searchSpec) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - searchDatastore(). target mor: " + _mor.getValue() + ", file datastore path: " + datastorePath);
+ s_logger.trace("vCenter API trace - searchDatastore(). target mor: " + _mor.getPresetParams() + ", file datastore path: " + datastorePath);
try {
ManagedObjectReference morTask = _context.getService().searchDatastoreTask(_mor, datastorePath, searchSpec);
@@ -78,7 +78,7 @@ public class HostDatastoreBrowserMO extends BaseMO {
public HostDatastoreBrowserSearchResults searchDatastoreSubFolders(String datastorePath, HostDatastoreBrowserSearchSpec searchSpec) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - searchDatastoreSubFolders(). target mor: " + _mor.getValue() + ", file datastore path: " + datastorePath);
+ s_logger.trace("vCenter API trace - searchDatastoreSubFolders(). target mor: " + _mor.getPresetParams() + ", file datastore path: " + datastorePath);
try {
ManagedObjectReference morTask = _context.getService().searchDatastoreSubFoldersTask(_mor, datastorePath, searchSpec);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java
index 3dcd724..898e82b 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostDatastoreSystemMO.java
@@ -63,7 +63,7 @@ public class HostDatastoreSystemMO extends BaseMO {
DynamicProperty prop = oc.getPropSet().get(1);
if(prop != null && prop.getVal() != null) {
if(prop.getVal() instanceof CustomFieldStringValue) {
- String val = ((CustomFieldStringValue)prop.getVal()).getValue();
+ String val = ((CustomFieldStringValue)prop.getVal()).getPresetParams();
if(val.equalsIgnoreCase(name))
return oc.getObj();
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
index a866fdc..a228fc3 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HostMO.java
@@ -544,7 +544,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
name = (String)objProp.getVal();
} else {
OptionValue optValue = (OptionValue)objProp.getVal();
- value = (String)optValue.getValue();
+ value = (String)optValue.getPresetParams();
}
}
@@ -561,7 +561,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
@Override
public ObjectContent[] getVmPropertiesOnHyperHost(String[] propertyPaths) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - retrieveProperties() for VM properties. target MOR: " + _mor.getValue() + ", properties: " + new Gson().toJson(propertyPaths));
+ s_logger.trace("vCenter API trace - retrieveProperties() for VM properties. target MOR: " + _mor.getPresetParams() + ", properties: " + new Gson().toJson(propertyPaths));
PropertySpec pSpec = new PropertySpec();
pSpec.setType("VirtualMachine");
@@ -594,7 +594,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
@Override
public ObjectContent[] getDatastorePropertiesOnHyperHost(String[] propertyPaths) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - retrieveProperties() on Datastore properties. target MOR: " + _mor.getValue() + ", properties: " + new Gson().toJson(propertyPaths));
+ s_logger.trace("vCenter API trace - retrieveProperties() on Datastore properties. target MOR: " + _mor.getPresetParams() + ", properties: " + new Gson().toJson(propertyPaths));
PropertySpec pSpec = new PropertySpec();
pSpec.setType("Datastore");
@@ -628,7 +628,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
List<Pair<ManagedObjectReference, String>> mounts = new ArrayList<Pair<ManagedObjectReference, String>>();
ObjectContent[] ocs = getDatastorePropertiesOnHyperHost(new String[] {
- String.format("host[\"%s\"].mountInfo.path", _mor.getValue()) });
+ String.format("host[\"%s\"].mountInfo.path", _mor.getPresetParams()) });
if(ocs != null) {
for(ObjectContent oc : ocs) {
Pair<ManagedObjectReference, String> mount = new Pair<ManagedObjectReference, String>(
@@ -659,7 +659,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
public void importVmFromOVF(String ovfFilePath, String vmName, String datastoreName, String diskOption) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - importVmFromOVF(). target MOR: " + _mor.getValue() + ", ovfFilePath: " + ovfFilePath + ", vmName: " + vmName
+ s_logger.trace("vCenter API trace - importVmFromOVF(). target MOR: " + _mor.getPresetParams() + ", ovfFilePath: " + ovfFilePath + ", vmName: " + vmName
+ ",datastoreName: " + datastoreName + ", diskOption: " + diskOption);
DatastoreMO dsMo = getHostDatastoreMO(datastoreName);
@@ -686,9 +686,9 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
String guestOsIdentifier, ManagedObjectReference morDs, boolean snapshotDirToParent) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - createBlankVm(). target MOR: " + _mor.getValue() + ", vmName: " + vmName + ", cpuCount: " + cpuCount
+ s_logger.trace("vCenter API trace - createBlankVm(). target MOR: " + _mor.getPresetParams() + ", vmName: " + vmName + ", cpuCount: " + cpuCount
+ ", cpuSpeedMhz: " + cpuSpeedMHz + ", cpuReservedMHz: " + cpuReservedMHz + ", limitCpu: " + limitCpuUse + ", memoryMB: " + memoryMB
- + ", guestOS: " + guestOsIdentifier + ", datastore: " + morDs.getValue() + ", snapshotDirToParent: " + snapshotDirToParent);
+ + ", guestOS: " + guestOsIdentifier + ", datastore: " + morDs.getPresetParams() + ", snapshotDirToParent: " + snapshotDirToParent);
boolean result = HypervisorHostHelper.createBlankVm(this, vmName, cpuCount, cpuSpeedMHz, cpuReservedMHz, limitCpuUse,
memoryMB, memoryReserveMB, guestOsIdentifier, morDs, snapshotDirToParent);
@@ -736,7 +736,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
int poolHostPort, String poolPath, String poolUuid) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - mountDatastore(). target MOR: " + _mor.getValue() + ", vmfs: " + vmfsDatastore + ", poolHost: " + poolHostAddress
+ s_logger.trace("vCenter API trace - mountDatastore(). target MOR: " + _mor.getPresetParams() + ", vmfs: " + vmfsDatastore + ", poolHost: " + poolHostAddress
+ ", poolHostPort: " + poolHostPort + ", poolPath: " + poolPath + ", poolUuid: " + poolUuid);
HostDatastoreSystemMO hostDatastoreSystemMo = getHostDatastoreSystemMO();
@@ -751,7 +751,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
poolUuid);
} catch (AlreadyExistsFaultMsg e) {
s_logger.info("Creation of NFS datastore on vCenter failed since datastore already exists." +
- " Details: vCenter API trace - mountDatastore(). target MOR: " + _mor.getValue() + ", vmfs: " +
+ " Details: vCenter API trace - mountDatastore(). target MOR: " + _mor.getPresetParams() + ", vmfs: " +
vmfsDatastore + ", poolHost: " + poolHostAddress + ", poolHostPort: " + poolHostPort +
", poolPath: " + poolPath + ", poolUuid: " + poolUuid);
// Retrieve the morDatastore and return it.
@@ -759,7 +759,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
poolHostPort, poolPath, poolUuid, hostDatastoreSystemMo));
} catch (Exception e) {
s_logger.info("Creation of NFS datastore on vCenter failed. " +
- " Details: vCenter API trace - mountDatastore(). target MOR: " + _mor.getValue() + ", vmfs: " +
+ " Details: vCenter API trace - mountDatastore(). target MOR: " + _mor.getPresetParams() + ", vmfs: " +
vmfsDatastore + ", poolHost: " + poolHostAddress + ", poolHostPort: " + poolHostPort +
", poolPath: " + poolPath + ", poolUuid: " + poolUuid + ". Exception mesg: " + e.getMessage());
throw new Exception("Creation of NFS datastore on vCenter failed.");
@@ -800,7 +800,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
public void unmountDatastore(String poolUuid) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - unmountDatastore(). target MOR: " + _mor.getValue() + ", poolUuid: " + poolUuid);
+ s_logger.trace("vCenter API trace - unmountDatastore(). target MOR: " + _mor.getPresetParams() + ", poolUuid: " + poolUuid);
HostDatastoreSystemMO hostDatastoreSystemMo = getHostDatastoreSystemMO();
if(!hostDatastoreSystemMo.deleteDatastore(poolUuid)) {
@@ -836,7 +836,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
@Override
public VmwareHypervisorHostResourceSummary getHyperHostResourceSummary() throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - getHyperHostResourceSummary(). target MOR: " + _mor.getValue());
+ s_logger.trace("vCenter API trace - getHyperHostResourceSummary(). target MOR: " + _mor.getPresetParams());
VmwareHypervisorHostResourceSummary summary = new VmwareHypervisorHostResourceSummary();
@@ -854,7 +854,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
@Override
public VmwareHypervisorHostNetworkSummary getHyperHostNetworkSummary(String managementPortGroup) throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - getHyperHostNetworkSummary(). target MOR: " + _mor.getValue() + ", mgmtPortgroup: " + managementPortGroup);
+ s_logger.trace("vCenter API trace - getHyperHostNetworkSummary(). target MOR: " + _mor.getPresetParams() + ", mgmtPortgroup: " + managementPortGroup);
VmwareHypervisorHostNetworkSummary summary = new VmwareHypervisorHostNetworkSummary();
@@ -906,7 +906,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
@Override
public ComputeResourceSummary getHyperHostHardwareSummary() throws Exception {
if(s_logger.isTraceEnabled())
- s_logger.trace("vCenter API trace - getHyperHostHardwareSummary(). target MOR: " + _mor.getValue());
+ s_logger.trace("vCenter API trace - getHyperHostHardwareSummary(). target MOR: " + _mor.getPresetParams());
//
// This is to adopt the model when using Cluster as a big host while ComputeResourceSummary is used
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
index 20f8478..7cabc8a 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
@@ -746,9 +746,9 @@ public class HypervisorHostHelper {
averageBandwidth.setValue((long) networkRateMbps.intValue() * 1024L * 1024L);
// We chose 50% higher allocation than average bandwidth.
// TODO(sateesh): Also let user specify the peak coefficient
- peakBandwidth.setValue((long) (averageBandwidth.getValue() * 1.5));
+ peakBandwidth.setValue((long) (averageBandwidth.getPresetParams() * 1.5));
// TODO(sateesh): Also let user specify the burst coefficient
- burstSize.setValue((long) (5 * averageBandwidth.getValue() / 8));
+ burstSize.setValue((long) (5 * averageBandwidth.getPresetParams() / 8));
shapingPolicy.setEnabled(isEnabled);
shapingPolicy.setAverageBandwidth(averageBandwidth);
@@ -892,14 +892,14 @@ public class HypervisorHostHelper {
ManagedObjectReference morParent = hostMo.getParentMor();
if(morParent != null && morParent.getType().equals("ClusterComputeResource")) {
// to be conservative, lock cluster
- GlobalLock lock = GlobalLock.getInternLock("ClusterLock." + morParent.getValue());
+ GlobalLock lock = GlobalLock.getInternLock("ClusterLock." + morParent.getPresetParams());
try {
if(lock.lock(DEFAULT_LOCK_TIMEOUT_SECONDS)) {
try {
List<ManagedObjectReference> hosts = (List<ManagedObjectReference>)hostMo.getContext().getVimClient().getDynamicProperty(morParent, "host");
if(hosts != null) {
for(ManagedObjectReference otherHost: hosts) {
- if(!otherHost.getValue().equals(hostMo.getMor().getValue())) {
+ if(!otherHost.getPresetParams().equals(hostMo.getMor().getPresetParams())) {
HostMO otherHostMo = new HostMO(hostMo.getContext(), otherHost);
try {
if(s_logger.isDebugEnabled())