You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pr...@apache.org on 2013/12/06 22:20:17 UTC
[1/4] git commit: updated refs/heads/4.3 to d3520a5
Updated Branches:
refs/heads/4.3 a2c0abe98 -> d3520a5d1
CLOUDSTACK-5140: A stopped vm cant start after disable threshold has been reached on the storage pool
Changes:
- Do not do the stoarge capacity check for a VM having READY Volumes that are already present on the storagepool.
Conflicts:
server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
Conflicts:
server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5c984eae
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5c984eae
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5c984eae
Branch: refs/heads/4.3
Commit: 5c984eaef8385c5022127fbad43b74f6bc147050
Parents: a2c0abe
Author: Prachi Damle <pr...@cloud.com>
Authored: Fri Dec 6 12:45:33 2013 -0800
Committer: Prachi Damle <pr...@cloud.com>
Committed: Fri Dec 6 13:18:34 2013 -0800
----------------------------------------------------------------------
.../cloud/deploy/DeploymentPlanningManagerImpl.java | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5c984eae/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index 6e441a9..5d5258b 100644
--- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
+++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java
@@ -308,7 +308,7 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
List<Host> suitableHosts = new ArrayList<Host>();
suitableHosts.add(host);
Pair<Host, Map<Volume, StoragePool>> potentialResources = findPotentialDeploymentResources(
- suitableHosts, suitableVolumeStoragePools, avoids, getPlannerUsage(planner,vmProfile, plan ,avoids));
+ suitableHosts, suitableVolumeStoragePools, avoids, getPlannerUsage(planner,vmProfile, plan ,avoids), readyAndReusedVolumes);
if (potentialResources != null) {
Pod pod = _podDao.findById(host.getPodId());
Cluster cluster = _clusterDao.findById(host.getClusterId());
@@ -369,7 +369,7 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
List<Host> suitableHosts = new ArrayList<Host>();
suitableHosts.add(host);
Pair<Host, Map<Volume, StoragePool>> potentialResources = findPotentialDeploymentResources(
- suitableHosts, suitableVolumeStoragePools, avoids, getPlannerUsage(planner,vmProfile, plan ,avoids));
+ suitableHosts, suitableVolumeStoragePools, avoids, getPlannerUsage(planner,vmProfile, plan ,avoids), readyAndReusedVolumes);
if (potentialResources != null) {
Pod pod = _podDao.findById(host.getPodId());
Cluster cluster = _clusterDao.findById(host.getClusterId());
@@ -886,7 +886,7 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
// choose the potential host and pool for the VM
if (!suitableVolumeStoragePools.isEmpty()) {
Pair<Host, Map<Volume, StoragePool>> potentialResources = findPotentialDeploymentResources(
- suitableHosts, suitableVolumeStoragePools, avoid, resourceUsageRequired);
+ suitableHosts, suitableVolumeStoragePools, avoid, resourceUsageRequired, readyAndReusedVolumes);
if (potentialResources != null) {
Pod pod = _podDao.findById(clusterVO.getPodId());
@@ -1014,11 +1014,16 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
}
protected Pair<Host, Map<Volume, StoragePool>> findPotentialDeploymentResources(List<Host> suitableHosts,
Map<Volume, List<StoragePool>> suitableVolumeStoragePools, ExcludeList avoid,
- DeploymentPlanner.PlannerResourceUsage resourceUsageRequired) {
+ DeploymentPlanner.PlannerResourceUsage resourceUsageRequired, List<Volume> readyAndReusedVolumes) {
s_logger.debug("Trying to find a potenial host and associated storage pools from the suitable host/pool lists for this VM");
boolean hostCanAccessPool = false;
boolean haveEnoughSpace = false;
+
+ if (readyAndReusedVolumes == null) {
+ readyAndReusedVolumes = new ArrayList<Volume>();
+ }
+
Map<Volume, StoragePool> storage = new HashMap<Volume, StoragePool>();
TreeSet<Volume> volumesOrderBySizeDesc = new TreeSet<Volume>(new Comparator<Volume>() {
@Override
@@ -1042,7 +1047,7 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy
for (StoragePool potentialSPool : volumePoolList) {
if (hostCanAccessSPool(potentialHost, potentialSPool)) {
hostCanAccessPool = true;
- if (multipleVolume) {
+ if (multipleVolume && !readyAndReusedVolumes.contains(vol)) {
List<Volume> requestVolumes = null;
if (volumeAllocationMap.containsKey(potentialSPool))
requestVolumes = volumeAllocationMap.get(potentialSPool);
[4/4] git commit: updated refs/heads/4.3 to d3520a5
Posted by pr...@apache.org.
CLOUDSTACK-5399: Add option to createVolume API to specify a VM, to place the volume appropriately and attach immediately
Fixing merge problem
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/d3520a5d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/d3520a5d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/d3520a5d
Branch: refs/heads/4.3
Commit: d3520a5d18c3c1f3179562bdaeef2274afeff055
Parents: 13d2caa
Author: Prachi Damle <pr...@cloud.com>
Authored: Fri Dec 6 12:56:51 2013 -0800
Committer: Prachi Damle <pr...@cloud.com>
Committed: Fri Dec 6 13:18:43 2013 -0800
----------------------------------------------------------------------
.../cloudstack/api/command/user/volume/CreateVolumeCmd.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d3520a5d/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
index 97db648..5dd14ac 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
@@ -30,9 +30,8 @@ import org.apache.cloudstack.api.response.UserVmResponse;
import org.apache.cloudstack.api.response.VolumeResponse;
import org.apache.cloudstack.api.response.ZoneResponse;
import org.apache.cloudstack.context.CallContext;
-
import org.apache.log4j.Logger;
-
+import org.apache.cloudstack.api.BaseAsyncCreateCmd;
import com.cloud.event.EventTypes;
import com.cloud.exception.ResourceAllocationException;
import com.cloud.storage.Snapshot;
[2/4] git commit: updated refs/heads/4.3 to d3520a5
Posted by pr...@apache.org.
CLOUDSTACK-5399: Add option to createVolume API to specify a VM, to place the volume appropriately and attach immediately
Changes:
- Added 'virtualmachineid' parameter to the createVolume API to specify a VM for the volume. The Vm should be in 'Running' or 'Stopped' state.
- This parameter is used only when createVolume API is called using snapshotid parameter
- When this parameter is set, the volume is created from the snapshot in the pod/cluster of the VM. Also the volume is then attached to the VM in the same request
- If attach Volume fails but create has succeeded, the API errors out but the Volume created remains available. User may attach the same volume later
- When Vm is provided, but if no storage pool is available in the VM's pod/cluster then the volume is not created and API fails.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3a6adb3c
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3a6adb3c
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3a6adb3c
Branch: refs/heads/4.3
Commit: 3a6adb3c581c0b34f9b675de41fcf6a54a7c1452
Parents: 5c984ea
Author: Prachi Damle <pr...@cloud.com>
Authored: Fri Dec 6 01:04:26 2013 -0800
Committer: Prachi Damle <pr...@cloud.com>
Committed: Fri Dec 6 13:18:37 2013 -0800
----------------------------------------------------------------------
.../command/user/volume/CreateVolumeCmd.java | 9 ++-
.../service/VolumeOrchestrationService.java | 3 +-
.../orchestration/VolumeOrchestrator.java | 58 ++++++++++++++++++--
.../com/cloud/storage/VolumeApiServiceImpl.java | 57 +++++++++++++++++--
4 files changed, 115 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a6adb3c/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
index e5c7a51..97db648 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java
@@ -20,13 +20,13 @@ import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiCommandJobType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseAsyncCreateCmd;
import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.ServerApiException;
import org.apache.cloudstack.api.response.DiskOfferingResponse;
import org.apache.cloudstack.api.response.DomainResponse;
import org.apache.cloudstack.api.response.ProjectResponse;
import org.apache.cloudstack.api.response.SnapshotResponse;
+import org.apache.cloudstack.api.response.UserVmResponse;
import org.apache.cloudstack.api.response.VolumeResponse;
import org.apache.cloudstack.api.response.ZoneResponse;
import org.apache.cloudstack.context.CallContext;
@@ -86,6 +86,9 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd {
@Parameter(name=ApiConstants.DISPLAY_VOLUME, type=CommandType.BOOLEAN, description="an optional field, whether to display the volume to the end user or not.")
private Boolean displayVolume;
+ @Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID, type = CommandType.UUID, entityType = UserVmResponse.class, description = "the ID of the virtual machine; to be used with snapshot Id, VM to which the volume gets attached after creation")
+ private Long virtualMachineId;
+
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -135,6 +138,10 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd {
return displayVolume;
}
+ public Long getVirtualMachineId() {
+ return virtualMachineId;
+ }
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a6adb3c/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java b/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
index a773ac4..1bba479 100644
--- a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
+++ b/engine/api/src/org/apache/cloudstack/engine/orchestration/service/VolumeOrchestrationService.java
@@ -39,6 +39,7 @@ import com.cloud.storage.Volume;
import com.cloud.storage.Volume.Type;
import com.cloud.template.VirtualMachineTemplate;
import com.cloud.user.Account;
+import com.cloud.uservm.UserVm;
import com.cloud.utils.fsm.NoTransitionException;
import com.cloud.vm.DiskProfile;
import com.cloud.vm.VirtualMachine;
@@ -62,7 +63,7 @@ public interface VolumeOrchestrationService {
String getVmNameOnVolume(Volume volume);
- VolumeInfo createVolumeFromSnapshot(Volume volume, Snapshot snapshot) throws StorageUnavailableException;
+ VolumeInfo createVolumeFromSnapshot(Volume volume, Snapshot snapshot, UserVm vm) throws StorageUnavailableException;
Volume migrateVolume(Volume volume, StoragePool destPool) throws StorageUnavailableException;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a6adb3c/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
index 0f9e1e4..41a3f29 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/VolumeOrchestrator.java
@@ -265,7 +265,8 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
@DB
@Override
- public VolumeInfo createVolumeFromSnapshot(Volume volume, Snapshot snapshot) throws StorageUnavailableException {
+ public VolumeInfo createVolumeFromSnapshot(Volume volume, Snapshot snapshot, UserVm vm)
+ throws StorageUnavailableException {
Account account = _entityMgr.findById(Account.class, volume.getAccountId());
final HashSet<StoragePool> poolsToAvoid = new HashSet<StoragePool>();
@@ -278,17 +279,62 @@ public class VolumeOrchestrator extends ManagerBase implements VolumeOrchestrati
DataCenter dc = _entityMgr.findById(DataCenter.class, volume.getDataCenterId());
DiskProfile dskCh = new DiskProfile(volume, diskOffering, snapshot.getHypervisorType());
- // Determine what pod to store the volume in
- while ((pod = findPod(null, null, dc, account.getId(), podsToAvoid)) != null) {
- podsToAvoid.add(pod.first().getId());
+ String msg = "There are no available storage pools to store the volume in";
+
+ if(vm != null){
+ Pod podofVM = _entityMgr.findById(Pod.class, vm.getPodIdToDeployIn());
+ if(podofVM != null){
+ pod = new Pair<Pod, Long>(podofVM, podofVM.getId());
+ }
+ }
+
+ if(vm != null && pod != null){
+ //if VM is running use the hostId to find the clusterID. If it is stopped, refer the cluster where the ROOT volume of the VM exists.
+ Long hostId = null;
+ Long clusterId = null;
+ if(vm.getState() == State.Running){
+ hostId = vm.getHostId();
+ if(hostId != null){
+ Host vmHost = _entityMgr.findById(Host.class, hostId);
+ clusterId = vmHost.getClusterId();
+ }
+ }else{
+ List<VolumeVO> rootVolumesOfVm = _volsDao.findByInstanceAndType(vm.getId(), Volume.Type.ROOT);
+ if (rootVolumesOfVm.size() != 1) {
+ throw new CloudRuntimeException("The VM " + vm.getHostName() + " has more than one ROOT volume and is in an invalid state. Please contact Cloud Support.");
+ } else {
+ VolumeVO rootVolumeOfVm = rootVolumesOfVm.get(0);
+ StoragePoolVO rootDiskPool = _storagePoolDao.findById(rootVolumeOfVm.getPoolId());
+ clusterId = (rootDiskPool == null ? null : rootDiskPool.getClusterId());
+ }
+ }
// Determine what storage pool to store the volume in
- while ((pool = findStoragePool(dskCh, dc, pod.first(), null, null, null, poolsToAvoid)) != null) {
+ while ((pool = findStoragePool(dskCh, dc, pod.first(), clusterId, hostId, vm, poolsToAvoid)) != null) {
break;
}
+
+ if (pool == null) {
+ //pool could not be found in the VM's pod/cluster.
+ if(s_logger.isDebugEnabled()){
+ s_logger.debug("Could not find any storage pool to create Volume in the pod/cluster of the provided VM "+vm.getUuid());
+ }
+ StringBuilder addDetails = new StringBuilder(msg);
+ addDetails.append(", Could not find any storage pool to create Volume in the pod/cluster of the VM ");
+ addDetails.append(vm.getUuid());
+ msg = addDetails.toString();
+ }
+ }else{
+ // Determine what pod to store the volume in
+ while ((pod = findPod(null, null, dc, account.getId(), podsToAvoid)) != null) {
+ podsToAvoid.add(pod.first().getId());
+ // Determine what storage pool to store the volume in
+ while ((pool = findStoragePool(dskCh, dc, pod.first(), null, null, null, poolsToAvoid)) != null) {
+ break;
+ }
+ }
}
if (pool == null) {
- String msg = "There are no available storage pools to store the volume in";
s_logger.info(msg);
throw new StorageUnavailableException(msg, -1);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3a6adb3c/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index 91131fe..6e01893 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -572,6 +572,26 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
// check snapshot permissions
_accountMgr.checkAccess(caller, null, true, snapshotCheck);
+
+ // one step operation - create volume in VM's cluster and attach it
+ // to the VM
+ Long vmId = cmd.getVirtualMachineId();
+ if (vmId != null) {
+ // Check that the virtual machine ID is valid and it's a user vm
+ UserVmVO vm = _userVmDao.findById(vmId);
+ if (vm == null || vm.getType() != VirtualMachine.Type.User) {
+ throw new InvalidParameterValueException("Please specify a valid User VM.");
+ }
+
+ // Check that the VM is in the correct state
+ if (vm.getState() != State.Running && vm.getState() != State.Stopped) {
+ throw new InvalidParameterValueException("Please specify a VM that is either running or stopped.");
+ }
+
+ // permission check
+ _accountMgr.checkAccess(caller, null, false, vm);
+ }
+
}
if (displayVolumeEnabled == null) {
@@ -677,10 +697,28 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
try {
if (cmd.getSnapshotId() != null) {
- volume = createVolumeFromSnapshot(volume, cmd.getSnapshotId());
+ volume = createVolumeFromSnapshot(volume, cmd.getSnapshotId(), cmd.getVirtualMachineId());
if (volume.getState() != Volume.State.Ready) {
created = false;
}
+
+ // if VM Id is provided, attach the volume to the VM
+ if (cmd.getVirtualMachineId() != null) {
+ try {
+ attachVolumeToVM(cmd.getVirtualMachineId(), volume.getId(), volume.getDeviceId());
+ } catch (Exception ex) {
+ StringBuilder message = new StringBuilder("Volume: ");
+ message.append(volume.getUuid());
+ message.append(" created successfully, but failed to attach the newly created volume to VM: ");
+ message.append(cmd.getVirtualMachineId());
+ message.append(" due to error: ");
+ message.append(ex.getMessage());
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug(message, ex);
+ }
+ throw new CloudRuntimeException(message.toString());
+ }
+ }
}
return volume;
} catch (Exception e) {
@@ -696,10 +734,16 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
}
}
- protected VolumeVO createVolumeFromSnapshot(VolumeVO volume, long snapshotId) throws StorageUnavailableException {
+ protected VolumeVO createVolumeFromSnapshot(VolumeVO volume, long snapshotId, Long vmId)
+ throws StorageUnavailableException {
VolumeInfo createdVolume = null;
SnapshotVO snapshot = _snapshotDao.findById(snapshotId);
- createdVolume = _volumeMgr.createVolumeFromSnapshot(volume, snapshot);
+
+ UserVmVO vm = null;
+ if (vmId != null) {
+ vm = _userVmDao.findById(vmId);
+ }
+ createdVolume = _volumeMgr.createVolumeFromSnapshot(volume, snapshot, vm);
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, createdVolume.getAccountId(), createdVolume.getDataCenterId(), createdVolume.getId(),
createdVolume.getName(), createdVolume.getDiskOfferingId(), null, createdVolume.getSize(), Volume.class.getName(), createdVolume.getUuid());
@@ -981,11 +1025,16 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
}
@Override
- @ActionEvent(eventType = EventTypes.EVENT_VOLUME_ATTACH, eventDescription = "attaching volume", async = true)
public Volume attachVolumeToVM(AttachVolumeCmd command) {
Long vmId = command.getVirtualMachineId();
Long volumeId = command.getId();
Long deviceId = command.getDeviceId();
+ return attachVolumeToVM(vmId, volumeId, deviceId);
+ }
+
+
+ @ActionEvent(eventType = EventTypes.EVENT_VOLUME_ATTACH, eventDescription = "attaching volume", async = true)
+ public Volume attachVolumeToVM(Long vmId, Long volumeId, Long deviceId) {
Account caller = CallContext.current().getCallingAccount();
// Check that the volume ID is valid
[3/4] git commit: updated refs/heads/4.3 to d3520a5
Posted by pr...@apache.org.
CLOUDSTACK-5401: VM migration during host maintenance fails if pool.storage.capacity.disablethreshold is lowered
Changes:
- During Vm migration while finding a new host within the cluster, we need to set the storagepool Id to the deployment plan too.
- This will indicate the planner that the volumes are ready and no need to find new pool
- This in turn will prevent the threshold check done during the pool allocation. This step is not needed since there is no need to allocate pools newly.
- Thus the migration wont fail because th threshold check fails.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/13d2caa6
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/13d2caa6
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/13d2caa6
Branch: refs/heads/4.3
Commit: 13d2caa6b5645e35e63a43bcd8062fb3aa57f46d
Parents: 3a6adb3
Author: Prachi Damle <pr...@cloud.com>
Authored: Fri Dec 6 11:12:38 2013 -0800
Committer: Prachi Damle <pr...@cloud.com>
Committed: Fri Dec 6 13:18:40 2013 -0800
----------------------------------------------------------------------
.../src/com/cloud/vm/VirtualMachineManagerImpl.java | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/13d2caa6/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
index f2a2102..164457a 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -2047,8 +2047,16 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
}
Host host = _hostDao.findById(hostId);
+ Long poolId = null;
+ List<VolumeVO> vols = _volsDao.findReadyRootVolumesByInstance(vm.getId());
+ for (VolumeVO rootVolumeOfVm : vols) {
+ StoragePoolVO rootDiskPool = _storagePoolDao.findById(rootVolumeOfVm.getPoolId());
+ if (rootDiskPool != null) {
+ poolId = rootDiskPool.getId();
+ }
+ }
- DataCenterDeployment plan = new DataCenterDeployment(host.getDataCenterId(), host.getPodId(), host.getClusterId(), null, null, null);
+ DataCenterDeployment plan = new DataCenterDeployment(host.getDataCenterId(), host.getPodId(), host.getClusterId(), null, poolId, null);
ExcludeList excludes = new ExcludeList();
excludes.addHost(hostId);