From c679fc078aa7cd544ffca3d9b180ae3510c1574a Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Fri, 8 Jul 2011 14:39:51 -0700 Subject: [PATCH] bug 10632: allow volume to be recreated when it is in recreating state --- .../src/com/cloud/storage/StorageManagerImpl.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index e476c68fb3b..c7f8471c7a2 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -31,6 +31,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; import java.util.UUID; import java.util.concurrent.Executors; @@ -112,8 +113,8 @@ import com.cloud.exception.StorageUnavailableException; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.Status; -import com.cloud.host.dao.HostDetailsDao; import com.cloud.host.dao.HostDao; +import com.cloud.host.dao.HostDetailsDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorGuruManager; import com.cloud.network.NetworkManager; @@ -183,8 +184,6 @@ import com.cloud.vm.dao.SecondaryStorageVmDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; -import java.util.Random; - @Local(value = { StorageManager.class, StorageService.class }) public class StorageManagerImpl implements StorageManager, StorageService, Manager, ClusterManagerListener { private static final Logger s_logger = Logger.getLogger(StorageManagerImpl.class); @@ -1683,7 +1682,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag if (diskOffering.getDiskSize() > 0) { size = diskOffering.getDiskSize(); - } + } if (!validateVolumeSizeRange(size)) {// convert size from mb to gb for validation throw new InvalidParameterValueException("Invalid size for custom volume creation: " + size + " ,max volume size is:" + _maxVolumeSizeInGb); @@ -1697,7 +1696,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag if (snapshotCheck.getStatus() != Snapshot.Status.BackedUp) { throw new InvalidParameterValueException("Snapshot id=" + snapshotId + " is not in " + Snapshot.Status.BackedUp + " state yet and can't be used for volume creation"); - } + } diskOfferingId = (cmd.getDiskOfferingId() != null) ? cmd.getDiskOfferingId() : snapshotCheck.getDiskOfferingId(); zoneId = snapshotCheck.getDataCenterId(); @@ -2627,7 +2626,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag } if (assignedPool != null) { Volume.State state = vol.getState(); - if (state == Volume.State.Allocated) { + if (state == Volume.State.Allocated && state == Volume.State.Creating) { recreateVols.add(vol); } else { if (vol.isRecreatable()) { @@ -2649,7 +2648,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag } if (s_logger.isDebugEnabled()) { s_logger.debug("No need to recreate the volume: "+vol+ ", since it already has a pool assigned: "+vol.getPoolId()+", adding disk to VM"); - } + } StoragePoolVO pool = _storagePoolDao.findById(vol.getPoolId()); vm.addDisk(new VolumeTO(vol, pool)); } @@ -2714,7 +2713,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag txn.start(); _volsDao.update(existingVolume, Volume.Event.Destroy); - Long templateIdToUse = null; + Long templateIdToUse = null; Long volTemplateId = existingVolume.getTemplateId(); long vmTemplateId = vm.getTemplateId(); if (volTemplateId != null && volTemplateId.longValue() != vmTemplateId) {