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:38 UTC

[1/3] Fixed the start

Updated Branches:
  refs/heads/vmsync 90df846ad -> ebbd4008a


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
index 660d963..9031966 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
@@ -729,7 +729,7 @@ public class VirtualMachineMO extends BaseMO {
 	    			else if(prop.getName().startsWith("value[")) {
 		    			CustomFieldStringValue val = (CustomFieldStringValue)prop.getVal();
 		    			if(val != null)
-		    				gcTagValue = val.getValue();
+		    				gcTagValue = val.getPresetParams();
 	    			}
 	    		}
 
@@ -852,7 +852,7 @@ public class VirtualMachineMO extends BaseMO {
 		if(values != null) {
 			for(OptionValue option : values) {
 				if(option.getKey().equals("RemoteDisplay.vnc.port")) {
-					String value = (String)option.getValue();
+					String value = (String)option.getPresetParams();
 					if(value != null) {
                         return new Pair<String, Integer>(summary.getHostIp(), Integer.parseInt(value));
                     }
@@ -872,9 +872,9 @@ public class VirtualMachineMO extends BaseMO {
 		String rdmDeviceName, int sizeInMb, ManagedObjectReference morDs, int controllerKey) throws Exception {
 
 		if(s_logger.isTraceEnabled())
-			s_logger.trace("vCenter API trace - createDisk(). target MOR: " + _mor.getValue() + ", vmdkDatastorePath: " + vmdkDatastorePath
+			s_logger.trace("vCenter API trace - createDisk(). target MOR: " + _mor.getPresetParams() + ", vmdkDatastorePath: " + vmdkDatastorePath
 				+ ", sizeInMb: " + sizeInMb + ", diskType: " + diskType + ", diskMode: " + diskMode + ", rdmDeviceName: " + rdmDeviceName
-				+ ", datastore: " + morDs.getValue() + ", controllerKey: " + controllerKey);
+				+ ", datastore: " + morDs.getPresetParams() + ", controllerKey: " + controllerKey);
 
 		assert(vmdkDatastorePath != null);
 		assert(morDs != null);
@@ -958,8 +958,8 @@ public class VirtualMachineMO extends BaseMO {
 	public void attachDisk(String[] vmdkDatastorePathChain, ManagedObjectReference morDs) throws Exception {
 
 		if(s_logger.isTraceEnabled())
-			s_logger.trace("vCenter API trace - attachDisk(). target MOR: " + _mor.getValue() + ", vmdkDatastorePath: "
-				+ new Gson().toJson(vmdkDatastorePathChain) + ", datastore: " + morDs.getValue());
+			s_logger.trace("vCenter API trace - attachDisk(). target MOR: " + _mor.getPresetParams() + ", vmdkDatastorePath: "
+				+ new Gson().toJson(vmdkDatastorePathChain) + ", datastore: " + morDs.getPresetParams());
 
 		VirtualDevice newDisk = VmwareHelper.prepareDiskDevice(this, getScsiDeviceControllerKey(),
 			vmdkDatastorePathChain, morDs, -1, 1);
@@ -991,7 +991,7 @@ public class VirtualMachineMO extends BaseMO {
 	public void attachDisk(Pair<String, ManagedObjectReference>[] vmdkDatastorePathChain, int controllerKey) throws Exception {
 
 		if(s_logger.isTraceEnabled())
-			s_logger.trace("vCenter API trace - attachDisk(). target MOR: " + _mor.getValue() + ", vmdkDatastorePath: "
+			s_logger.trace("vCenter API trace - attachDisk(). target MOR: " + _mor.getPresetParams() + ", vmdkDatastorePath: "
 				+ new Gson().toJson(vmdkDatastorePathChain));
 
 		VirtualDevice newDisk = VmwareHelper.prepareDiskDevice(this, controllerKey,
@@ -1025,7 +1025,7 @@ public class VirtualMachineMO extends BaseMO {
 	public List<Pair<String, ManagedObjectReference>> detachDisk(String vmdkDatastorePath, boolean deleteBackingFile) throws Exception {
 
 		if(s_logger.isTraceEnabled())
-			s_logger.trace("vCenter API trace - detachDisk(). target MOR: " + _mor.getValue() + ", vmdkDatastorePath: "
+			s_logger.trace("vCenter API trace - detachDisk(). target MOR: " + _mor.getPresetParams() + ", vmdkDatastorePath: "
 				+ vmdkDatastorePath + ", deleteBacking: " + deleteBackingFile);
 
 		// Note: if VM has been taken snapshot, original backing file will be renamed, therefore, when we try to find the matching
@@ -1091,7 +1091,7 @@ public class VirtualMachineMO extends BaseMO {
 
 	public void detachAllDisks() throws Exception {
 		if(s_logger.isTraceEnabled())
-			s_logger.trace("vCenter API trace - detachAllDisk(). target MOR: " + _mor.getValue());
+			s_logger.trace("vCenter API trace - detachAllDisk(). target MOR: " + _mor.getPresetParams());
 
 		VirtualDisk[] disks = getAllDiskDevice();
 		if(disks.length > 0) {
@@ -1126,8 +1126,8 @@ public class VirtualMachineMO extends BaseMO {
 		boolean connect, boolean connectAtBoot) throws Exception {
 
 		if(s_logger.isTraceEnabled())
-			s_logger.trace("vCenter API trace - detachIso(). target MOR: " + _mor.getValue() + ", isoDatastorePath: "
-				+ isoDatastorePath + ", datastore: " + morDs.getValue() + ", connect: " + connect + ", connectAtBoot: " + connectAtBoot);
+			s_logger.trace("vCenter API trace - detachIso(). target MOR: " + _mor.getPresetParams() + ", isoDatastorePath: "
+				+ isoDatastorePath + ", datastore: " + morDs.getPresetParams() + ", connect: " + connect + ", connectAtBoot: " + connectAtBoot);
 
 		assert(isoDatastorePath != null);
 		assert(morDs != null);
@@ -1185,7 +1185,7 @@ public class VirtualMachineMO extends BaseMO {
 
 	public void detachIso(String isoDatastorePath) throws Exception {
 		if(s_logger.isTraceEnabled())
-			s_logger.trace("vCenter API trace - detachIso(). target MOR: " + _mor.getValue() + ", isoDatastorePath: "
+			s_logger.trace("vCenter API trace - detachIso(). target MOR: " + _mor.getPresetParams() + ", isoDatastorePath: "
 				+ isoDatastorePath);
 
 		VirtualDevice device = getIsoDevice();
@@ -1226,7 +1226,7 @@ public class VirtualMachineMO extends BaseMO {
 	public Pair<VmdkFileDescriptor, byte[]> getVmdkFileInfo(String vmdkDatastorePath) throws Exception {
 
 		if(s_logger.isTraceEnabled())
-			s_logger.trace("vCenter API trace - getVmdkFileInfo(). target MOR: " + _mor.getValue() + ", vmdkDatastorePath: "
+			s_logger.trace("vCenter API trace - getVmdkFileInfo(). target MOR: " + _mor.getPresetParams() + ", vmdkDatastorePath: "
 				+ vmdkDatastorePath);
 
 		Pair<DatacenterMO, String> dcPair = getOwnerDatacenter();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5e6d2cf5/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java
index 4a6a135..a2fc1f3 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java
@@ -145,7 +145,7 @@ public class VmwareHelper {
         final VirtualDeviceConnectInfo connectInfo = new VirtualDeviceConnectInfo();
 
         dvPortConnection.setSwitchUuid(dvSwitchUuid);
-        dvPortConnection.setPortgroupKey(morNetwork.getValue());
+        dvPortConnection.setPortgroupKey(morNetwork.getPresetParams());
         dvPortBacking.setPort(dvPortConnection);
         nic.setBacking(dvPortBacking);
         nic.setKey(30);


[2/3] git commit: updated refs/heads/vmsync to ebbd400

Posted by ah...@apache.org.
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())


[3/3] git commit: updated refs/heads/vmsync to ebbd400

Posted by ah...@apache.org.
zone creation complete once more


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/ebbd4008
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/ebbd4008
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/ebbd4008

Branch: refs/heads/vmsync
Commit: ebbd4008ad779fb0f296d1f6c1c8d31a821023eb
Parents: 5e6d2cf
Author: Alex Huang <al...@gmail.com>
Authored: Fri Jun 7 18:15:55 2013 -0700
Committer: Alex Huang <al...@gmail.com>
Committed: Fri Jun 7 18:15:55 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/agent/api/to/NetworkTO.java      |    4 +-
 api/src/com/cloud/agent/api/to/NicTO.java          |   10 +-
 api/src/com/cloud/deploy/DataCenterDeployment.java |    1 +
 .../cloudstack/api/response/AsyncJobResponse.java  |    8 --
 .../cloudstack/api/response/SystemVmResponse.java  |    8 +--
 .../org/apache/cloudstack/context/CallContext.java |   59 ++++++++-------
 core/src/com/cloud/agent/api/StopAnswer.java       |    7 --
 .../org/apache/cloudstack/vm/jobs/VmWorkJobVO.java |    7 +-
 .../apache/cloudstack/framework/jobs/AsyncJob.java |    2 +
 .../cloudstack/framework/jobs/impl/AsyncJobVO.java |   18 ++++-
 .../hypervisor/kvm/resource/OvsVifDriver.java      |    2 +-
 .../xen/resource/CitrixResourceBase.java           |    4 +-
 .../cloud/network/resource/MidoNetVifDriver.java   |    2 +-
 .../src/com/cloud/api/ApiAsyncJobDispatcher.java   |    2 +-
 server/src/com/cloud/api/ApiServer.java            |    2 +-
 server/src/com/cloud/api/ApiServlet.java           |    4 +-
 .../com/cloud/hypervisor/HypervisorGuruBase.java   |    2 +-
 .../src/com/cloud/network/NetworkManagerImpl.java  |    2 +-
 .../router/VirtualNetworkApplianceManagerImpl.java |    2 +-
 .../com/cloud/vm/VirtualMachineManagerImpl.java    |   12 ++-
 server/src/com/cloud/vm/VmWorkJobDispatcher.java   |    2 +-
 server/test/com/cloud/vm/VmWorkTest.java           |   31 ++++----
 .../com/cloud/vm/VmWorkTestApiJobDispatcher.java   |    2 +-
 server/test/com/cloud/vm/dao/VmDaoTest.java        |   15 ++--
 setup/db/db/schema-410to420.sql                    |    2 +
 utils/src/com/cloud/utils/db/GenericDaoBase.java   |   11 ++-
 26 files changed, 117 insertions(+), 104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/api/src/com/cloud/agent/api/to/NetworkTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/NetworkTO.java b/api/src/com/cloud/agent/api/to/NetworkTO.java
index 3edd4c0..4790c91 100644
--- a/api/src/com/cloud/agent/api/to/NetworkTO.java
+++ b/api/src/com/cloud/agent/api/to/NetworkTO.java
@@ -42,11 +42,11 @@ public class NetworkTO {
     public NetworkTO() {
     }
 
-    public String getUuid() {
+    public String getNicUuid() {
         return uuid;
     }
 
-    public void setUuid(String uuid) {
+    public void setNicUuid(String uuid) {
         this.uuid = uuid;
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/api/src/com/cloud/agent/api/to/NicTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/NicTO.java b/api/src/com/cloud/agent/api/to/NicTO.java
index ccebe11..29f04ae 100644
--- a/api/src/com/cloud/agent/api/to/NicTO.java
+++ b/api/src/com/cloud/agent/api/to/NicTO.java
@@ -23,7 +23,7 @@ public class NicTO extends NetworkTO {
     Integer networkRateMbps;
     Integer networkRateMulticastMbps;
     boolean defaultNic;
-    String uuid;
+    String nicUuid;
     List <String> nicSecIps;
 
     public NicTO() {
@@ -59,13 +59,13 @@ public class NicTO extends NetworkTO {
     }
 
     @Override
-    public String getUuid() {
-        return uuid;
+    public String getNicUuid() {
+        return nicUuid;
     }
 
     @Override
-    public void setUuid(String uuid) {
-        this.uuid = uuid;
+    public void setNicUuid(String uuid) {
+        this.nicUuid = uuid;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/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 d709ce7..b17bae1 100644
--- a/api/src/com/cloud/deploy/DataCenterDeployment.java
+++ b/api/src/com/cloud/deploy/DataCenterDeployment.java
@@ -54,6 +54,7 @@ public class DataCenterDeployment implements DeploymentPlan {
         _poolId = poolId;
         _physicalNetworkId = physicalNetworkId;
         _context = context;
+        _avoids = new ExcludeList();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java
index dadcf6c..622c7c0 100644
--- a/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/AsyncJobResponse.java
@@ -40,9 +40,6 @@ public class AsyncJobResponse extends BaseResponse {
     @SerializedName("cmd") @Param(description="the async command executed")
     private String cmd;
 
-    @SerializedName("jobstatus") @Param(description="the current job status-should be 0 for PENDING")
-    private Integer jobStatus;
-
     @SerializedName("jobprocstatus") @Param(description="the progress information of the PENDING job")
     private Integer jobProcStatus;
 
@@ -76,11 +73,6 @@ public class AsyncJobResponse extends BaseResponse {
         this.cmd = cmd;
     }
 
-    @Override
-    public void setJobStatus(Integer jobStatus) {
-        this.jobStatus = jobStatus;
-    }
-
     public void setJobProcStatus(Integer jobProcStatus) {
         this.jobProcStatus = jobProcStatus;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java
index aff5534..3f1d955 100644
--- a/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/SystemVmResponse.java
@@ -35,12 +35,6 @@ public class SystemVmResponse extends BaseResponse {
     @SerializedName("systemvmtype") @Param(description="the system VM type")
     private String systemVmType;
 
-    @SerializedName("jobid") @Param(description="the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.")
-    private String jobId;
-
-    @SerializedName("jobstatus") @Param(description="the job status associated with the system VM.  This is only displayed if the router listed is part of a currently running asynchronous job.")
-    private Integer jobStatus;
-
     @SerializedName("zoneid") @Param(description="the Zone ID for the system VM")
     private String zoneId;
 
@@ -119,7 +113,7 @@ public class SystemVmResponse extends BaseResponse {
 
     @Override
     public String getObjectId() {
-        return this.getId();
+        return getId();
     }
 
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/api/src/org/apache/cloudstack/context/CallContext.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/context/CallContext.java b/api/src/org/apache/cloudstack/context/CallContext.java
index c804c87..6610896 100644
--- a/api/src/org/apache/cloudstack/context/CallContext.java
+++ b/api/src/org/apache/cloudstack/context/CallContext.java
@@ -18,6 +18,7 @@ package org.apache.cloudstack.context;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 import org.apache.log4j.Logger;
 import org.apache.log4j.NDC;
@@ -26,6 +27,7 @@ import com.cloud.dao.EntityManager;
 import com.cloud.exception.CloudAuthenticationException;
 import com.cloud.user.Account;
 import com.cloud.user.User;
+import com.cloud.utils.UuidUtils;
 import com.cloud.utils.exception.CloudRuntimeException;
 
 /**
@@ -37,7 +39,7 @@ public class CallContext {
     private static final Logger s_logger = Logger.getLogger(CallContext.class);
     private static ThreadLocal<CallContext> s_currentContext = new ThreadLocal<CallContext>();
 
-    private String sessionId;
+    private String contextId;
     private Account account;
     private long startEventId = 0;
     private String eventDetails;
@@ -53,10 +55,10 @@ public class CallContext {
     public CallContext() {
     }
 
-    protected CallContext(User user, Account account, String sessionId) {
+    protected CallContext(User user, Account account, String contextId) {
         this.user = user;
         this.account = account;
-        this.sessionId = sessionId;
+        this.contextId = contextId;
     }
     
     public void putContextParameter(String key, Object value) {
@@ -75,8 +77,8 @@ public class CallContext {
         return user;
     }
 
-    public String getSessionId() {
-        return sessionId;
+    public String getContextId() {
+        return contextId;
     }
 
     public Account getCallingAccount() {
@@ -87,17 +89,18 @@ public class CallContext {
         return s_currentContext.get();
     }
 
-    public static CallContext register(User callingUser, Account callingAccount, String sessionId) {
+    public static CallContext register(User callingUser, Account callingAccount, String contextId) {
         assert s_currentContext.get() == null : "There's a context already so what does this new register context mean? " + s_currentContext.get().toString();
         if (s_currentContext.get() != null) { // FIXME: This should be removed soon.  I added this check only to surface all the places that have this problem.
             throw new CloudRuntimeException("There's a context already so what does this new register context mean? " + s_currentContext.get().toString());
         }
-        CallContext callingContext = new CallContext(callingUser, callingAccount, sessionId);
-        s_currentContext.set(callingContext);
-        if (sessionId != null) {
-            NDC.push("job-" + sessionId);
+        if (contextId == null) {
+            contextId = UUID.randomUUID().toString();
         }
-        s_logger.debug("Setting calling context: " + s_currentContext.get());
+        CallContext callingContext = new CallContext(callingUser, callingAccount, contextId);
+        s_currentContext.set(callingContext);
+        NDC.push("ctx-" + UuidUtils.first(contextId));
+        s_logger.debug("Setting calling context: " + callingContext);
         return callingContext;
     }
 
@@ -111,7 +114,7 @@ public class CallContext {
         return context;
     }
 
-    public static CallContext register(String callingUserUuid, String callingAccountUuid, String sessionId) {
+    public static CallContext register(String callingUserUuid, String callingAccountUuid, String contextId) {
         Account account = s_entityMgr.findByUuid(Account.class, callingAccountUuid);
         if (account == null) {
             throw new CloudAuthenticationException("The account is no longer current.").add(Account.class, callingAccountUuid);
@@ -121,10 +124,10 @@ public class CallContext {
         if (user == null) {
             throw new CloudAuthenticationException("The user is no longer current.").add(User.class, callingUserUuid);
         }
-        return register(user, account, sessionId);
+        return register(user, account, contextId);
     }
 
-    public static CallContext register(long callingUserId, long callingAccountId, String sessionId) throws CloudAuthenticationException {
+    public static CallContext register(long callingUserId, long callingAccountId, String contextId) throws CloudAuthenticationException {
         Account account = s_entityMgr.findById(Account.class, callingAccountId);
         if (account == null) {
             throw new CloudAuthenticationException("The account is no longer current.").add(Account.class, Long.toString(callingAccountId));
@@ -133,15 +136,15 @@ public class CallContext {
         if (user == null) {
             throw new CloudAuthenticationException("The user is no longer current.").add(User.class, Long.toString(callingUserId));
         }
-        return register(user, account, sessionId);
+        return register(user, account, contextId);
     }
 
-    public static CallContext register(long callingUserId, Account callingAccount, String sessionId, boolean apiServer) {
+    public static CallContext register(long callingUserId, Account callingAccount, String contextId, boolean apiServer) {
         User user = s_entityMgr.findById(User.class, callingUserId);
         if (user == null) {
             throw new CloudAuthenticationException("The user is no longer current.").add(User.class, Long.toString(callingUserId));
         }
-        return register(user, callingAccount, sessionId);
+        return register(user, callingAccount, contextId);
     }
 
     public static CallContext unregister() {
@@ -152,17 +155,15 @@ public class CallContext {
         }
         s_currentContext.remove();
         s_logger.debug("Context removed " + context);
-        String sessionId = context.getSessionId();
-        if (sessionId != null) {
-            String sessionIdOnStack = null;
-            String sessionIdPushedToNDC = "job-" + sessionId;
-            while ((sessionIdOnStack = NDC.pop()) != null) {
-                if (sessionIdPushedToNDC.equals(sessionIdOnStack)) {
-                    break;
-                }
-                if (s_logger.isTraceEnabled()) {
-                    s_logger.trace("Popping from NDC: " + sessionId);
-                }
+        String contextId = context.getContextId();
+        String sessionIdOnStack = null;
+        String sessionIdPushedToNDC = "ctx-" + UuidUtils.first(contextId);
+        while ((sessionIdOnStack = NDC.pop()) != null) {
+            if (sessionIdPushedToNDC.equals(sessionIdOnStack)) {
+                break;
+            }
+            if (s_logger.isTraceEnabled()) {
+                s_logger.trace("Popping from NDC: " + contextId);
             }
         }
         return context;
@@ -200,7 +201,7 @@ public class CallContext {
     public String toString() {
         return new StringBuffer("CallContext[acct=").append(account.getId())
                 .append("; user=").append(user.getId())
-                .append("; session=").append(sessionId)
+                .append("; session=").append(contextId)
                 .append("]").toString();
     }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/core/src/com/cloud/agent/api/StopAnswer.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/StopAnswer.java b/core/src/com/cloud/agent/api/StopAnswer.java
index 1111fed..034534a 100755
--- a/core/src/com/cloud/agent/api/StopAnswer.java
+++ b/core/src/com/cloud/agent/api/StopAnswer.java
@@ -17,8 +17,6 @@
 package com.cloud.agent.api;
 
 public class StopAnswer extends RebootAnswer {
-    Integer vncPort;
-
     protected StopAnswer() {
     }
 
@@ -37,9 +35,4 @@ public class StopAnswer extends RebootAnswer {
         super(cmd, e);
     }
 
-    @Override
-    public Integer getVncPort() {
-        return vncPort;
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/engine/schema/src/org/apache/cloudstack/vm/jobs/VmWorkJobVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/org/apache/cloudstack/vm/jobs/VmWorkJobVO.java b/engine/schema/src/org/apache/cloudstack/vm/jobs/VmWorkJobVO.java
index f4dd395..ca52263 100644
--- a/engine/schema/src/org/apache/cloudstack/vm/jobs/VmWorkJobVO.java
+++ b/engine/schema/src/org/apache/cloudstack/vm/jobs/VmWorkJobVO.java
@@ -27,7 +27,6 @@ import javax.persistence.Table;
 import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
 
 import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachine.Type;
 
 
 @Entity
@@ -56,7 +55,11 @@ public class VmWorkJobVO extends AsyncJobVO {
     @Column(name="vm_instance_id")
     long vmInstanceId;
 
-    public VmWorkJobVO() {
+    protected VmWorkJobVO() {
+    }
+
+    public VmWorkJobVO(String related) {
+        setRelated(related);
     }
     
     public Step getStep() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java
----------------------------------------------------------------------
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java
index 14d6479..8f52073 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java
+++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/AsyncJob.java
@@ -101,4 +101,6 @@ public interface AsyncJob extends Job {
     SyncQueueItem getSyncSource();
 
     void setSyncSource(SyncQueueItem item);
+
+    String getRelated();
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java
----------------------------------------------------------------------
diff --git a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java
index bb7d872..13b0d12 100644
--- a/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java
+++ b/framework/jobs/src/org/apache/cloudstack/framework/jobs/impl/AsyncJobVO.java
@@ -71,6 +71,9 @@ public class AsyncJobVO implements AsyncJob, Job {
 	@Column(name="job_cmd_ver")
     private int cmdVersion;
 	
+    @Column(name = "related")
+    private String related;
+
     @Column(name="job_cmd_info", length=65535)
     private String cmdInfo;
   
@@ -123,14 +126,16 @@ public class AsyncJobVO implements AsyncJob, Job {
 
     public AsyncJobVO() {
         uuid = UUID.randomUUID().toString();
+        related = UUID.randomUUID().toString();
     }
 
-    public AsyncJobVO(String uuid, long userId, long accountId, String cmd, String cmdInfo, Long instanceId, String instanceType) {
+    public AsyncJobVO(String related, long userId, long accountId, String cmd, String cmdInfo, Long instanceId, String instanceType) {
 		this.userId = userId;
 		this.accountId = accountId;
 		this.cmd = cmd;
 		this.cmdInfo = cmdInfo;
-        this.uuid = uuid;
+        uuid = UUID.randomUUID().toString();
+        this.related = related;
 	    this.instanceId = instanceId;
 	    this.instanceType = instanceType;
     }
@@ -149,6 +154,15 @@ public class AsyncJobVO implements AsyncJob, Job {
         return UuidUtils.first(uuid);
     }
 
+    public void setRelated(String related) {
+        this.related = related;
+    }
+
+    @Override
+    public String getRelated() {
+        return related;
+    }
+
 	@Override
 	public String getType() {
 		return type;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java
index eac3248..3f153a0 100644
--- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java
+++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/OvsVifDriver.java
@@ -93,7 +93,7 @@ public class OvsVifDriver extends VifDriverBase {
                 }
             } else if (nic.getBroadcastType() == Networks.BroadcastDomainType.Lswitch) {
                 s_logger.debug("nic " + nic + " needs to be connected to LogicalSwitch " + logicalSwitchUuid);
-                intf.setVirtualPortInterfaceId(nic.getUuid());
+                intf.setVirtualPortInterfaceId(nic.getNicUuid());
                 String brName = (trafficLabel != null && !trafficLabel.isEmpty()) ? _pifs.get(trafficLabel) : _pifs.get("private");
                 intf.defBridgeNet(brName, null, nic.getMac(), getGuestNicModel(guestOsType));
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index 8f6eb8d..03d86d7 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -1055,7 +1055,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
     }
 
     protected VIF createVif(Connection conn, String vmName, VM vm, NicTO nic) throws XmlRpcException, XenAPIException {
-        assert(nic.getUuid() != null) : "Nic should have a uuid value";
+        assert(nic.getNicUuid() != null) : "Nic should have a uuid value";
 
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Creating VIF for " + vmName + " on nic " + nic);
@@ -1067,7 +1067,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
 
         // Nicira needs these IDs to find the NIC 
         vifr.otherConfig = new HashMap<String, String>();
-        vifr.otherConfig.put("nicira-iface-id", nic.getUuid());
+        vifr.otherConfig.put("nicira-iface-id", nic.getNicUuid());
         vifr.otherConfig.put("nicira-vm-id", vm.getUuid(conn)); 
 
         vifr.network = getNetwork(conn, nic);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java b/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java
index 3c7c23d..96f2549 100644
--- a/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java
+++ b/plugins/network-elements/midonet/src/com/cloud/network/resource/MidoNetVifDriver.java
@@ -145,7 +145,7 @@ public class MidoNetVifDriver extends VifDriverBase {
                 if (b.getName().equals(netName)) {
                     for (BridgePort p : b.getPorts()) {
                         UUID pvif = p.getVifId();
-                        if (pvif != null && p.getVifId().toString().equals(nic.getUuid())){
+                        if (pvif != null && p.getVifId().toString().equals(nic.getNicUuid())){
                             getMyHost(api).addHostInterfacePort()
                                     .interfaceName(tapName)
                                     .portId(p.getId())

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/server/src/com/cloud/api/ApiAsyncJobDispatcher.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiAsyncJobDispatcher.java b/server/src/com/cloud/api/ApiAsyncJobDispatcher.java
index 081bcc1..c442559 100644
--- a/server/src/com/cloud/api/ApiAsyncJobDispatcher.java
+++ b/server/src/com/cloud/api/ApiAsyncJobDispatcher.java
@@ -87,7 +87,7 @@ public class ApiAsyncJobDispatcher extends AdapterBase implements AsyncJobDispat
                 accountObject = _accountDao.findById(Long.parseLong(acctIdStr));
             }
 
-            CallContext.register(userId, accountObject, "job-" + job.getShortUuid(), false);
+            CallContext.register(userId, accountObject, job.getRelated(), false);
             try {
                 // dispatch could ultimately queue the job
                 _dispatcher.dispatch(cmdObj, params, true);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/server/src/com/cloud/api/ApiServer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java
index 2863803..11e873f 100755
--- a/server/src/com/cloud/api/ApiServer.java
+++ b/server/src/com/cloud/api/ApiServer.java
@@ -520,7 +520,7 @@ public class ApiServer extends ManagerBase implements HttpRequestHandler, ApiSer
             params.put("ctxStartEventId", String.valueOf(startEventId));
 
             Long instanceId = (objectId == null) ? asyncCmd.getInstanceId() : objectId;
-            AsyncJobVO job = new AsyncJobVO(ctx.getSessionId(), callerUserId, caller.getId(), cmdObj.getClass().getName(),
+            AsyncJobVO job = new AsyncJobVO(ctx.getContextId(), callerUserId, caller.getId(), cmdObj.getClass().getName(),
                     ApiGsonHelper.getBuilder().create().toJson(params), instanceId,
                     asyncCmd.getInstanceType() != null ? asyncCmd.getInstanceType().toString() : null);
             job.setDispatcher(_asyncDispatcher.getName());

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/server/src/com/cloud/api/ApiServlet.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java
index 0ac002d..7afb797 100755
--- a/server/src/com/cloud/api/ApiServlet.java
+++ b/server/src/com/cloud/api/ApiServlet.java
@@ -266,7 +266,7 @@ public class ApiServlet extends HttpServlet {
                         writeResponse(resp, serializedResponse, HttpServletResponse.SC_BAD_REQUEST, responseType);
                         return;
                     }
-                    CallContext.register(userId, ((Account)accountObj).getId(), session.getId());
+                    CallContext.register(userId, ((Account)accountObj).getId(), null);
                 } else {
                     // Invalidate the session to ensure we won't allow a request across management server
                     // restarts if the userId was serialized to the stored session
@@ -332,7 +332,7 @@ public class ApiServlet extends HttpServlet {
 	                s_logger.debug("===END=== " + StringUtils.cleanString(reqStr));
 	            }
 	            // cleanup user context to prevent from being peeked in other request context ???
-	            CallContext.unregister(); 
+	            CallContext.unregister();
             } catch(Throwable e) {
             	s_logger.error("Really unexpected exception", e);
             }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/server/src/com/cloud/hypervisor/HypervisorGuruBase.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java
index e18c164..80575da 100644
--- a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java
+++ b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java
@@ -73,7 +73,7 @@ public abstract class HypervisorGuruBase extends AdapterBase implements Hypervis
         
         // Workaround to make sure the TO has the UUID we need for Niciri integration
         NicVO nicVO = _nicDao.findById(profile.getId());
-        to.setUuid(nicVO.getUuid());
+        to.setNicUuid(nicVO.getUuid());
         //check whether the this nic has secondary ip addresses set
         //set nic secondary ip address in NicTO which are used for security group
         // configuration. Use full when vm stop/start

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index 69a39a3..4ce8c6d 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -1771,7 +1771,7 @@ public class NetworkManagerImpl extends ManagerBase implements NetworkManager, L
         Integer networkRate = _networkModel.getNetworkRate(config.getId(), null);
         to.setNetworkRateMbps(networkRate);
 
-        to.setUuid(config.getUuid());
+        to.setNicUuid(config.getUuid());
 
         return to;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index ac61da9..df1687b 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1282,7 +1282,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
         @Override
         public void run() {
             try {
-                CallContext.register(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM, null);
+                CallContext.registerOnceOnly();
                 while (true) {
                     try {
                         Long networkId = _vrUpdateQueue.take();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/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 ec9c3dd..1774e1b 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -351,7 +351,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
 
     @Override
     public VirtualMachineGuru getVmGuru(VirtualMachine vm) {
-        return _vmGurus.values().iterator().next();
+        return _vmGurus.get(vm.getType());
     }
 
     @Override
@@ -540,6 +540,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         RootVolumeSearch = _entityMgr.createSearchBuilder(VolumeVO.class);
         VolumeVO rvsEntity = RootVolumeSearch.entity();
         RootVolumeSearch.and(rvsEntity.getVolumeType(), SearchCriteria.Op.EQ).values(Volume.Type.ROOT)
+                .and(rvsEntity.getState(), SearchCriteria.Op.EQ).values(Volume.State.Ready)
                 .and(rvsEntity.getInstanceId(), SearchCriteria.Op.EQ, "instance")
                 .and(rvsEntity.getDeviceId(), SearchCriteria.Op.EQ).values(0)
                 .done();
@@ -761,7 +762,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         		assert(pendingWorkJobs.size() == 1);
         		workJob = pendingWorkJobs.get(0);
         	} else {
-        		workJob = new VmWorkJobVO();
+                workJob = new VmWorkJobVO(context.getContextId());
         	
                 workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
                 workJob.setCmd(VmWorkJobDispatcher.Start);
@@ -848,6 +849,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
             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.");
+                plan.setPoolId(null);
             } else {
                 StoragePool pool = (StoragePool)dataStoreMgr.getPrimaryDataStore(vol.getPoolId());
                 Long rootVolPodId = pool.getPodId();
@@ -1176,6 +1178,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
     @Override
     public void advanceStop(final String vmUuid, boolean forced, User user, Account account) throws ResourceUnavailableException,
             OperationTimedoutException, ConcurrentOperationException {
+        CallContext context = CallContext.current();
         final VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
     	VmWorkJobVO workJob = null;
     	Transaction txn = Transaction.currentTxn();
@@ -1191,7 +1194,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         		assert(pendingWorkJobs.size() == 1);
         		workJob = pendingWorkJobs.get(0);
         	} else {
-        		workJob = new VmWorkJobVO();
+                workJob = new VmWorkJobVO(context.getContextId());
         	
                 workJob.setDispatcher(VmWorkJobDispatcher.VM_WORK_JOB_DISPATCHER);
                 workJob.setCmd(VmWorkJobDispatcher.Stop);
@@ -1953,6 +1956,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
     public VirtualMachine migrateWithStorage(String vmUuid, long srcHostId, long destHostId,
             Map<VolumeVO, StoragePoolVO> volumeToPool) throws ResourceUnavailableException, ConcurrentOperationException,
             ManagementServerException, VirtualMachineMigrationException {
+        CallContext context = CallContext.current();
 
         VMInstanceVO vm = _vmDao.findByUuid(vmUuid);
         HostVO srcHost = _hostDao.findById(srcHostId);
@@ -1989,7 +1993,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
         HypervisorGuru hvGuru = _hvGuruMgr.getGuru(vm.getHypervisorType());
         VirtualMachineTO to = hvGuru.implement(profile);
 
-        VmWorkJobVO work = new VmWorkJobVO();
+        VmWorkJobVO work = new VmWorkJobVO(context.getContextId());
 //        VmWorkJobVO work = new VmWorkJobVO(UUID.randomUUID().toString(), _nodeId, State.Migrating, vm.getType(), vm.getId());
 //        work.setStep(Step.Prepare);
 //        work.setResourceType(ItWorkVO.ResourceType.Host);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/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 fa33ecd..dcb91d2 100644
--- a/server/src/com/cloud/vm/VmWorkJobDispatcher.java
+++ b/server/src/com/cloud/vm/VmWorkJobDispatcher.java
@@ -59,7 +59,7 @@ public class VmWorkJobDispatcher extends AdapterBase implements AsyncJobDispatch
             work = (VmWork)ApiSerializerHelper.fromSerializedString(job.getCmdInfo());
         	assert(work != null);
         	
-            CallContext context = CallContext.register(work.getUserId(), work.getAccountId(), "job-" + job.getShortUuid());
+            CallContext.register(work.getUserId(), work.getAccountId(), job.getRelated());
 
             VMInstanceVO vm = _instanceDao.findById(work.getVmId());
             if (vm == null) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/server/test/com/cloud/vm/VmWorkTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/VmWorkTest.java b/server/test/com/cloud/vm/VmWorkTest.java
index d236cc3..4a6ccb8 100644
--- a/server/test/com/cloud/vm/VmWorkTest.java
+++ b/server/test/com/cloud/vm/VmWorkTest.java
@@ -20,9 +20,12 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 import javax.inject.Inject;
 
+import junit.framework.TestCase;
+
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -32,7 +35,14 @@ import org.mockito.Mockito;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
-import junit.framework.TestCase;
+import com.google.gson.Gson;
+
+import org.apache.cloudstack.framework.jobs.AsyncJobManager;
+import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
+import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper;
+import org.apache.cloudstack.vm.jobs.VmWorkJobDao;
+import org.apache.cloudstack.vm.jobs.VmWorkJobVO;
+import org.apache.cloudstack.vm.jobs.VmWorkJobVO.Step;
 
 import com.cloud.api.ApiSerializerHelper;
 import com.cloud.cluster.ClusterManager;
@@ -45,14 +55,6 @@ import com.cloud.utils.LogUtils;
 import com.cloud.utils.Predicate;
 import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.db.Transaction;
-import com.google.gson.Gson;
-
-import org.apache.cloudstack.framework.jobs.AsyncJobManager;
-import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
-import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper;
-import org.apache.cloudstack.vm.jobs.VmWorkJobDao;
-import org.apache.cloudstack.vm.jobs.VmWorkJobVO;
-import org.apache.cloudstack.vm.jobs.VmWorkJobVO.Step;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations="classpath:/VmWorkTestContext.xml")
@@ -90,10 +92,11 @@ public class VmWorkTest extends TestCase {
 		}
  	}
 	
-    @After                                                   
-    public void tearDown() {                                 
-    	Transaction.currentTxn().close();                    
-    }                                                        
+    @Override
+    @After
+    public void tearDown() {
+    	Transaction.currentTxn().close();
+    }
 	
 	@Test
 	public void testDeployPlanSerialization() {
@@ -122,7 +125,7 @@ public class VmWorkTest extends TestCase {
 	}
 	
 	public void testVmWorkDispatcher() {
-		VmWorkJobVO workJob = new VmWorkJobVO();
+        VmWorkJobVO workJob = new VmWorkJobVO(UUID.randomUUID().toString());
 		workJob.setDispatcher("VmWorkJobDispatcher");
 		workJob.setCmd("doVmWorkStart");
 		workJob.setAccountId(1L);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java b/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java
index 064fab7..4e7d90c 100644
--- a/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java
+++ b/server/test/com/cloud/vm/VmWorkTestApiJobDispatcher.java
@@ -54,7 +54,7 @@ public class VmWorkTestApiJobDispatcher extends AdapterBase implements AsyncJobD
 			}
 		}
 		
-		VmWorkJobVO workJob = new VmWorkJobVO();
+        VmWorkJobVO workJob = new VmWorkJobVO(job.getRelated());
     	
 		workJob.setDispatcher("TestWorkJobDispatcher");
         workJob.setCmd(VmWorkJobDispatcher.Start);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/server/test/com/cloud/vm/dao/VmDaoTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/dao/VmDaoTest.java b/server/test/com/cloud/vm/dao/VmDaoTest.java
index d981916..72c04b1 100644
--- a/server/test/com/cloud/vm/dao/VmDaoTest.java
+++ b/server/test/com/cloud/vm/dao/VmDaoTest.java
@@ -19,9 +19,13 @@ package com.cloud.vm.dao;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.List;
+import java.util.UUID;
 
 import javax.inject.Inject;
 
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -38,9 +42,6 @@ import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations="classpath:/vmdaoTestContext.xml")
 public class VmDaoTest extends TestCase {
@@ -76,11 +77,11 @@ public class VmDaoTest extends TestCase {
 	
 	@Test
 	public void testPowerStateUpdate() {
-		UserVmVO userVmInstance = new UserVmVO(1L, "Dummy", "DummyInstance", 
+		UserVmVO userVmInstance = new UserVmVO(1L, "Dummy", "DummyInstance",
 				1L, HypervisorType.Any, 1L, true, false, 1L, 1L, 1L, null, null, null);
 		userVmDao.persist(userVmInstance);
 		
-		userVmInstance = new UserVmVO(2L, "Dummy2", "DummyInstance2", 
+		userVmInstance = new UserVmVO(2L, "Dummy2", "DummyInstance2",
 				1L, HypervisorType.Any, 1L, true, false, 1L, 1L, 1L, null, null, null);
 		userVmDao.persist(userVmInstance);
 		
@@ -147,7 +148,7 @@ public class VmDaoTest extends TestCase {
 	
 	@Test
 	public void testVmWork() {
-		VmWorkJobVO workJob = new VmWorkJobVO();
+        VmWorkJobVO workJob = new VmWorkJobVO(UUID.randomUUID().toString());
 		workJob.setAccountId(1);
 		workJob.setUserId(1L);
 		workJob.setCmd("StartVM");
@@ -158,7 +159,7 @@ public class VmDaoTest extends TestCase {
 		
 		workJobDao.persist(workJob);
 
-		VmWorkJobVO workJob2 = new VmWorkJobVO();
+        VmWorkJobVO workJob2 = new VmWorkJobVO(UUID.randomUUID().toString());
 		workJob2.setAccountId(1);
 		workJob2.setUserId(1L);
 		workJob2.setCmd("StopVM");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
index 6517cc4..0cf7356 100644
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -83,6 +83,8 @@ CREATE TABLE `cloud`.`image_data_store` (
   PRIMARY KEY(`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
+ALTER TABLE `cloud`.`async_job` ADD COLUMN `related` CHAR(40) NOT NULL;
+
 ALTER TABLE `cloud`.`vm_template` ADD COLUMN `image_data_store_id` bigint unsigned;
 
 ALTER TABLE `cloud`.`service_offering` ADD COLUMN `is_volatile` tinyint(1) unsigned NOT NULL DEFAULT 0  COMMENT 'true if the vm needs to be volatile, i.e., on every reboot of vm from API root disk is discarded and creates a new root disk';

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ebbd4008/utils/src/com/cloud/utils/db/GenericDaoBase.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/GenericDaoBase.java b/utils/src/com/cloud/utils/db/GenericDaoBase.java
index f0fc700..9e91ef6 100755
--- a/utils/src/com/cloud/utils/db/GenericDaoBase.java
+++ b/utils/src/com/cloud/utils/db/GenericDaoBase.java
@@ -68,7 +68,6 @@ import com.cloud.utils.DateUtil;
 import com.cloud.utils.NumbersUtil;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
-import com.cloud.utils.component.ComponentContext;
 import com.cloud.utils.component.ComponentLifecycle;
 import com.cloud.utils.component.ComponentLifecycleBase;
 import com.cloud.utils.component.ComponentMethodInterceptable;
@@ -130,8 +129,8 @@ public abstract class GenericDaoBase<T, ID extends Serializable> extends Compone
     protected Field[] _embeddedFields;
 
     // This is private on purpose.  Everyone should use createPartialSelectSql()
-    private Pair<StringBuilder, Attribute[]> _partialSelectSql;
-    private Pair<StringBuilder, Attribute[]> _partialQueryCacheSelectSql;
+    private final Pair<StringBuilder, Attribute[]> _partialSelectSql;
+    private final Pair<StringBuilder, Attribute[]> _partialQueryCacheSelectSql;
     protected StringBuilder _discriminatorClause;
     protected Map<String, Object> _discriminatorValues;
     protected String _selectByIdSql;
@@ -178,6 +177,7 @@ public abstract class GenericDaoBase<T, ID extends Serializable> extends Compone
         return builder;
     }
 
+    @Override
     public Map<String, Attribute> getAllAttributes() {
         return _allAttributes;
     }
@@ -351,7 +351,7 @@ public abstract class GenericDaoBase<T, ID extends Serializable> extends Compone
     }
 
     @Override
-    public List<T> searchIncludingRemoved(SearchCriteria<T> sc, final Filter filter, final Boolean lock, 
+    public List<T> searchIncludingRemoved(SearchCriteria<T> sc, final Filter filter, final Boolean lock,
             final boolean cache, final boolean enable_query_cache) {
         String clause = sc != null ? sc.getWhereClause() : null;
         if (clause != null && clause.length() == 0) {
@@ -420,6 +420,9 @@ public abstract class GenericDaoBase<T, ID extends Serializable> extends Compone
 
     @Override @SuppressWarnings("unchecked")
     public <M> List<M> customSearchIncludingRemoved(SearchCriteria<M> sc, final Filter filter) {
+        if (sc.isSelectAll()) {
+            return (List<M>)searchIncludingRemoved((SearchCriteria<T>)sc, filter, null, false);
+        }
         String clause = sc != null ? sc.getWhereClause() : null;
         if (clause != null && clause.length() == 0) {
             clause = null;