Skip to content

Commit c65d3bd

Browse files
committed
bug CS-10789: Some more code to make the Uploav volume more robust.
1 parent 9097b53 commit c65d3bd

4 files changed

Lines changed: 23 additions & 9 deletions

File tree

api/src/com/cloud/storage/Volume.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public String getDescription() {
6262
s_fsm.addTransition(Allocated, Event.UploadRequested, Uploading);
6363
s_fsm.addTransition(Uploading, Event.UploadSucceeded, Uploaded);
6464
s_fsm.addTransition(Uploading, Event.OperationFailed, UploadError);
65+
s_fsm.addTransition(UploadError, Event.DestroyRequested, Destroy);
6566
s_fsm.addTransition(Uploaded, Event.UploadSucceeded, Uploaded);
6667
s_fsm.addTransition(Uploaded, Event.CopyRequested, Creating);
6768
s_fsm.addTransition(Uploaded, Event.DestroyRequested, Destroy);

server/src/com/cloud/server/ConfigurationServerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ public void persistDefaultValues() throws InternalErrorException {
198198
createdefaultDiskOffering(null, "Medium", "Medium Disk, 20 GB", 20, null, false, false);
199199
createdefaultDiskOffering(null, "Large", "Large Disk, 100 GB", 100, null, false, false);
200200
createdefaultDiskOffering(null, "Large", "Large Disk, 100 GB", 100, null, false, false);
201-
createdefaultDiskOffering(null, "Custom", "Custom Disk", 0, null, true, true);
201+
createdefaultDiskOffering(null, "Custom", "Custom Disk", 0, null, true, false);
202202

203203
// Save the mount parent to the configuration table
204204
String mountParent = getMountParent();

server/src/com/cloud/storage/StorageManagerImpl.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3374,13 +3374,18 @@ public void expungeVolume(VolumeVO vol, boolean force) {
33743374
//Find out if the volume is present on secondary storage
33753375
VolumeHostVO volumeHost = _volumeHostDao.findByVolumeId(vol.getId());
33763376
if(volumeHost != null){
3377-
HostVO ssHost = _hostDao.findById(volumeHost.getHostId());
3378-
DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(ssHost.getStorageUrl(), volumeHost.getInstallPath());
3379-
Answer answer = _agentMgr.sendToSecStorage(ssHost, dtCommand);
3380-
if (answer == null || !answer.getResult()) {
3381-
s_logger.debug("Failed to delete " + volumeHost + " due to " + ((answer == null) ? "answer is null" : answer.getDetails()));
3382-
return;
3383-
}
3377+
if (volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED){
3378+
HostVO ssHost = _hostDao.findById(volumeHost.getHostId());
3379+
DeleteVolumeCommand dtCommand = new DeleteVolumeCommand(ssHost.getStorageUrl(), volumeHost.getInstallPath());
3380+
Answer answer = _agentMgr.sendToSecStorage(ssHost, dtCommand);
3381+
if (answer == null || !answer.getResult()) {
3382+
s_logger.debug("Failed to delete " + volumeHost + " due to " + ((answer == null) ? "answer is null" : answer.getDetails()));
3383+
return;
3384+
}
3385+
}else if(volumeHost.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_IN_PROGRESS){
3386+
s_logger.debug("Volume: " + vol.getName() + " is currently being uploaded; cant' delete it.");
3387+
throw new CloudRuntimeException("Please specify a volume that is not currently being uploaded.");
3388+
}
33843389
_volumeHostDao.remove(volumeHost.getId());
33853390
_volumeDao.remove(vol.getId());
33863391
return;

server/src/com/cloud/storage/download/DownloadMonitorImpl.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -744,8 +744,16 @@ public void handleVolumeSync(HostVO ssHost) {
744744
volumeHost.setSize(volInfo.getSize());
745745
volumeHost.setPhysicalSize(volInfo.getPhysicalSize());
746746
volumeHost.setLastUpdated(new Date());
747+
if (volume.getState() == Volume.State.Uploading){
748+
try {
749+
_storageMgr.stateTransitTo(volume, Event.UploadSucceeded);
750+
} catch (NoTransitionException e) {
751+
e.printStackTrace();
752+
}
753+
}
754+
755+
_volumeHostDao.update(volumeHost.getId(), volumeHost);
747756
}
748-
_volumeHostDao.update(volumeHost.getId(), volumeHost);
749757
}
750758
}
751759

0 commit comments

Comments
 (0)