bug CS-15200: Introducing state transition when volume is getting copied from 
secondary storage and it is put into Creating state
Reviewed-by: Kishan


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

Branch: refs/heads/vpc
Commit: 3c68f1f8e842002a839a76003a86ddfe482d3f5d
Parents: 6fd6d79
Author: Nitin Mehta <[email protected]>
Authored: Fri Aug 3 17:18:13 2012 +0530
Committer: Nitin Mehta <[email protected]>
Committed: Fri Aug 3 17:18:13 2012 +0530

----------------------------------------------------------------------
 api/src/com/cloud/storage/Volume.java              |    7 ++++---
 .../src/com/cloud/storage/StorageManagerImpl.java  |    3 ++-
 2 files changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3c68f1f8/api/src/com/cloud/storage/Volume.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/Volume.java 
b/api/src/com/cloud/storage/Volume.java
index bd7e421..6e8e48e 100755
--- a/api/src/com/cloud/storage/Volume.java
+++ b/api/src/com/cloud/storage/Volume.java
@@ -36,7 +36,7 @@ public interface Volume extends ControlledEntity, BasedOn, 
StateObject<Volume.St
         Snapshotting("There is a snapshot created on this volume, not backed 
up to secondary storage yet"),
         Expunging("The volume is being expunging"),
         Destroy("The volume is destroyed, and can't be recovered."),        
-        UploadOp ("The volume upload operation is in progress");            
+        UploadOp ("The volume upload operation is in progress or in short the 
volume is on secondary storage");            
 
         String _description;
 
@@ -61,9 +61,10 @@ public interface Volume extends ControlledEntity, BasedOn, 
StateObject<Volume.St
             s_fsm.addTransition(Creating, Event.OperationSucceeded, Ready);
             s_fsm.addTransition(Creating, Event.DestroyRequested, Destroy);
             s_fsm.addTransition(Creating, Event.CreateRequested, Creating);    
        
-            s_fsm.addTransition(Allocated, Event.UploadRequested, UploadOp);   
      
+            s_fsm.addTransition(Allocated, Event.UploadRequested, UploadOp);
+            s_fsm.addTransition(UploadOp, Event.CopyRequested, Creating);// 
CopyRequested for volume from sec to primary storage            
             s_fsm.addTransition(Creating, Event.CopySucceeded, Ready);
-            s_fsm.addTransition(UploadOp, Event.CopySucceeded, Ready);
+            s_fsm.addTransition(Creating, Event.CopyFailed, UploadOp);// 
Copying volume from sec to primary failed.  
             s_fsm.addTransition(UploadOp, Event.DestroyRequested, Destroy);
             s_fsm.addTransition(Ready, Event.DestroyRequested, Destroy);
             s_fsm.addTransition(Destroy, Event.ExpungingRequested, Expunging);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3c68f1f8/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java 
b/server/src/com/cloud/storage/StorageManagerImpl.java
index a2ea98d..c7dda00 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -740,7 +740,8 @@ public class StorageManagerImpl implements StorageManager, 
Manager, ClusterManag
        // Find a suitable storage to create volume on 
        StoragePoolVO destPool = findStoragePool(dskCh, dc, pod, clusterId, vm, 
avoidPools);
        
-       // Copy the volume from secondary storage to the destination storage 
pool               
+       // Copy the volume from secondary storage to the destination storage 
pool
+       stateTransitTo(volume, Event.CopyRequested);
        VolumeHostVO volumeHostVO = 
_volumeHostDao.findByVolumeId(volume.getId());
        HostVO secStorage = _hostDao.findById(volumeHostVO.getHostId());
        String secondaryStorageURL = secStorage.getStorageUrl();

Reply via email to