diff --git a/server/src/com/cloud/storage/download/DownloadListener.java b/server/src/com/cloud/storage/download/DownloadListener.java index 970a70fda84..7ac5dd3dd80 100755 --- a/server/src/com/cloud/storage/download/DownloadListener.java +++ b/server/src/com/cloud/storage/download/DownloadListener.java @@ -338,14 +338,6 @@ public class DownloadListener implements Listener { updateBuilder.setPhysicalSize(answer.getTemplatePhySicalSize()); volumeHostDao.update(getVolumeHostId(), updateBuilder); - if (answer.getDownloadStatus() == Status.DOWNLOADED){ - try { - _storageMgr.stateTransitTo(volume, Event.UploadSucceeded); - } catch (NoTransitionException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } /*if (answer.getCheckSum() != null) { VMTemplateVO templateDaoBuilder = _vmTemplateDao.createForUpdate(); templateDaoBuilder.setChecksum(answer.getCheckSum()); diff --git a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java index 30ed9df64a0..927a6e5f014 100755 --- a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java +++ b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java @@ -65,6 +65,7 @@ import com.cloud.storage.StorageManager; import com.cloud.storage.SwiftVO; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc; +import com.cloud.storage.Volume; import com.cloud.storage.VolumeHostVO; import com.cloud.storage.VolumeVO; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; @@ -85,6 +86,7 @@ import com.cloud.storage.swift.SwiftManager; import com.cloud.storage.template.TemplateConstants; import com.cloud.storage.template.TemplateInfo; import com.cloud.user.Account; +import com.cloud.user.ResourceLimitService; import com.cloud.utils.component.Inject; import com.cloud.utils.db.DB; import com.cloud.utils.db.JoinBuilder; @@ -98,7 +100,6 @@ import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.UserVmManager; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.SecondaryStorageVmDao; - import edu.emory.mathcs.backport.java.util.Collections; @@ -160,6 +161,8 @@ public class DownloadMonitorImpl implements DownloadMonitor { private ResourceManager _resourceMgr; @Inject private SwiftDao _swiftDao; + @Inject + protected ResourceLimitService _resourceLimitMgr; private String _name; private Boolean _sslCopy = new Boolean(false); @@ -539,6 +542,15 @@ public class DownloadMonitorImpl implements DownloadMonitor { txn.start(); if (dnldStatus == Status.DOWNLOADED) { + + // Do the volume state transition + try { + _storageMgr.stateTransitTo(volume, Event.UploadSucceeded); + } catch (NoTransitionException e) { + e.printStackTrace(); + } + + //Create usage event long size = -1; if(volumeHost!=null){ size = volumeHost.getPhysicalSize(); @@ -551,6 +563,15 @@ public class DownloadMonitorImpl implements DownloadMonitor { UsageEventVO usageEvent = new UsageEventVO(eventType, volume.getAccountId(), host.getDataCenterId(), volume.getId(), volume.getName(), null, 0l , size); _usageEventDao.persist(usageEvent); } + }else if (dnldStatus == Status.DOWNLOAD_ERROR){ + //Transistion the volume state + try { + _storageMgr.stateTransitTo(volume, Volume.Event.OperationFailed); + } catch (NoTransitionException e) { + throw new CloudRuntimeException("Unable to update the failure on a volume: " + volume, e); + } + //Decrement the volume count + _resourceLimitMgr.decrementResourceCount(volume.getAccountId(), com.cloud.configuration.Resource.ResourceType.volume); } txn.commit(); }