You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2012/08/31 04:02:37 UTC

git commit: add more new files

Updated Branches:
  refs/heads/javelin 28982486e -> 83e2b7ad6


add more new files


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

Branch: refs/heads/javelin
Commit: 83e2b7ad63e34194bd4a8670a273e74a30e54503
Parents: 2898248
Author: Edison Su <su...@gmail.com>
Authored: Thu Aug 30 19:00:27 2012 -0700
Committer: Edison Su <su...@gmail.com>
Committed: Thu Aug 30 19:02:25 2012 -0700

----------------------------------------------------------------------
 .../DataObjectBackupStorageOperationState.java     |   58 +++
 .../platform/subsystem/api/storage/DataStore.java  |   12 +
 .../subsystem/api/storage/SnapshotProfile.java     |   26 ++
 .../subsystem/api/storage/TemplateProfile.java     |   26 ++
 .../subsystem/api/storage/VolumeProfile.java       |   26 ++
 .../subsystem/api/storage/VolumeStrategy.java      |   11 +-
 .../storage/StorageOrchestratorImpl.java           |  182 +++++++--
 .../apache/cloudstack/storage/VolumeBackupRef.java |   66 +++
 .../apache/cloudstack/storage/db/VolumeHostVO.java |  328 +++++++++++++++
 .../storage/manager/BackupStorageManager.java      |   39 ++
 .../storage/manager/BackupStorageManagerImpl.java  |   23 +
 .../cloudstack/storage/manager/ImageManager.java   |   34 ++
 .../storage/manager/ImageManagerImpl.java          |   23 +
 .../storage/manager/SecondaryStorageManager.java   |   23 +
 .../manager/SecondaryStorageManagerImpl.java       |   23 +
 .../storage/strategy/DefaultVolumeStrategy.java    |   35 +-
 16 files changed, 888 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/DataObjectBackupStorageOperationState.java
----------------------------------------------------------------------
diff --git a/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/DataObjectBackupStorageOperationState.java b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/DataObjectBackupStorageOperationState.java
new file mode 100644
index 0000000..a565036
--- /dev/null
+++ b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/DataObjectBackupStorageOperationState.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.platform.subsystem.api.storage;
+
+import com.cloud.utils.fsm.StateMachine;
+
+public enum DataObjectBackupStorageOperationState {
+	Copying,
+	Deleting,
+	Ready,
+	NonOperational;
+	
+	public enum Event {
+		Initial("Init state machine"),
+		CopyingRequested("Copy operation is requested"),
+		DeleteRequested("Delete operation is requested"),
+		OperationSuccess("Operation successed"),
+		OperationFailed("Operation failed");
+
+		private final String _msg;
+		
+		private Event(String msg) {
+			_msg = msg;
+		}
+	}
+	
+	   public DataObjectBackupStorageOperationState getNextState(Event a) {
+	        return s_fsm.getNextState(this, a);
+	    }
+	
+	protected static final StateMachine<DataObjectBackupStorageOperationState, Event> s_fsm = new StateMachine<DataObjectBackupStorageOperationState, Event>();
+	static {
+        s_fsm.addTransition(null, Event.Initial, DataObjectBackupStorageOperationState.Ready);
+        s_fsm.addTransition(DataObjectBackupStorageOperationState.Ready, Event.CopyingRequested, DataObjectBackupStorageOperationState.Copying);
+        s_fsm.addTransition(DataObjectBackupStorageOperationState.Copying, Event.CopyingRequested, DataObjectBackupStorageOperationState.Copying);
+        s_fsm.addTransition(DataObjectBackupStorageOperationState.Copying, Event.OperationFailed, DataObjectBackupStorageOperationState.Ready);
+        s_fsm.addTransition(DataObjectBackupStorageOperationState.Copying, Event.OperationSuccess, DataObjectBackupStorageOperationState.Ready);
+        s_fsm.addTransition(DataObjectBackupStorageOperationState.Ready, Event.DeleteRequested, DataObjectBackupStorageOperationState.Deleting);
+        s_fsm.addTransition(DataObjectBackupStorageOperationState.Deleting, Event.OperationFailed, DataObjectBackupStorageOperationState.Ready);
+        s_fsm.addTransition(DataObjectBackupStorageOperationState.Deleting, Event.OperationSuccess, DataObjectBackupStorageOperationState.NonOperational);
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/DataStore.java
----------------------------------------------------------------------
diff --git a/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/DataStore.java b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/DataStore.java
index 1e9d893..b8d4e95 100644
--- a/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/DataStore.java
+++ b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/DataStore.java
@@ -18,6 +18,10 @@
  */
 package org.apache.cloudstack.platform.subsystem.api.storage;
 
+import com.cloud.storage.Snapshot;
+import com.cloud.storage.Volume;
+import com.cloud.template.VirtualMachineTemplate;
+
 public interface DataStore {
 	public class DataStoreRef {
 		
@@ -53,4 +57,12 @@ public interface DataStore {
 	SnapshotStrategy getSnapshotStrategy();
 	BackupStrategy getBackupStrategy();
 	DataStoreLifeCycle getLifeCycle();
+	
+	VolumeProfile prepareVolume(Volume volume, DataStore destStore);
+	SnapshotProfile prepareSnapshot(Snapshot snapshot, DataStore destStore);
+	TemplateProfile prepareTemplate(VirtualMachineTemplate template, DataStore destStore);
+	boolean contains(Volume volume);
+	boolean contains(Snapshot snapshot);
+	boolean contains(VirtualMachineTemplate template);
+	TemplateProfile get(VirtualMachineTemplate template);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/SnapshotProfile.java
----------------------------------------------------------------------
diff --git a/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/SnapshotProfile.java b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/SnapshotProfile.java
new file mode 100644
index 0000000..bf07cec
--- /dev/null
+++ b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/SnapshotProfile.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.platform.subsystem.api.storage;
+
+public class SnapshotProfile {
+	private String _uri;
+	public String getURI() {
+		return _uri;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/TemplateProfile.java
----------------------------------------------------------------------
diff --git a/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/TemplateProfile.java b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/TemplateProfile.java
new file mode 100644
index 0000000..fec5de7
--- /dev/null
+++ b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/TemplateProfile.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.platform.subsystem.api.storage;
+
+public class TemplateProfile {
+	private String _uri;
+	public String getURI() {
+		return _uri;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/VolumeProfile.java
----------------------------------------------------------------------
diff --git a/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/VolumeProfile.java b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/VolumeProfile.java
new file mode 100644
index 0000000..8af9bc5
--- /dev/null
+++ b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/VolumeProfile.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.platform.subsystem.api.storage;
+
+public class VolumeProfile {
+	private String _uri;
+	public String getURI() {
+		return _uri;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/VolumeStrategy.java
----------------------------------------------------------------------
diff --git a/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/VolumeStrategy.java b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/VolumeStrategy.java
index f1eeb33..deea0d4 100644
--- a/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/VolumeStrategy.java
+++ b/platform/api/src/org/apache/cloudstack/platform/subsystem/api/storage/VolumeStrategy.java
@@ -1,13 +1,16 @@
 package org.apache.cloudstack.platform.subsystem.api.storage;
 
+
 import com.cloud.storage.Volume;
 
 public interface VolumeStrategy {
 	Volume createVolume(Volume vol);
-	Volume createVolume(Volume vol, DataStore store);
-	Volume copyVolume(Volume srcVol, Volume destVol);
-	Volume createVolumeFromSnapshot(Volume vol, Snapshot snapshot);
-	Volume createVolumeFromTemplate(Volume vol, Template template);
+	Volume createDataVolume(Volume vol, DataStore store);
+	Volume copyVolumeFromBackup(VolumeProfile srcVol, Volume destVol, DataStore destStore);
+	Volume createVolumeFromSnapshot(SnapshotProfile snapshot, Volume vol, DataStore destStore);
+	Volume createVolumeFromTemplate(TemplateProfile template, Volume vol, DataStore destStore);
 	Volume migrateVolume(Volume srcVol, DataStore srcStore, Volume destVol, DataStore destStore);
+	TemplateProfile createBaseVolume(TemplateProfile tp, DataStore destStore);
+	Volume createVolumeFromBaseTemplate(TemplateProfile tp, DataStore destStore);
 	boolean deleteVolume(Volume vol);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java b/platform/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
index 8bebf3e..9b5ceff 100644
--- a/platform/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
+++ b/platform/storage/src/org/apache/cloudstack/storage/StorageOrchestratorImpl.java
@@ -18,25 +18,35 @@
  */
 package org.apache.cloudstack.storage;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.cloudstack.platform.subsystem.api.storage.DataObjectBackupStorageOperationState;
 import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
 import org.apache.cloudstack.platform.subsystem.api.storage.StorageProvider;
+import org.apache.cloudstack.platform.subsystem.api.storage.TemplateProfile;
+import org.apache.cloudstack.platform.subsystem.api.storage.VolumeProfile;
 import org.apache.cloudstack.platform.subsystem.api.storage.VolumeStrategy;
+import org.apache.cloudstack.storage.db.VolumeHostVO;
+import org.apache.cloudstack.storage.manager.BackupStorageManager;
+import org.apache.cloudstack.storage.manager.ImageManager;
+import org.apache.cloudstack.storage.manager.SecondaryStorageManager;
 import org.apache.cloudstack.storage.volume.VolumeManager;
 import org.apache.log4j.Logger;
 
 import com.cloud.deploy.DeploymentPlan;
+import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.offering.DiskOffering;
 import com.cloud.storage.DiskOfferingVO;
 import com.cloud.storage.StoragePool;
 import com.cloud.storage.Volume;
-import com.cloud.storage.VolumeHostVO;
 import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.StoragePoolDao;
+import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.storage.dao.VolumeHostDao;
+import com.cloud.template.VirtualMachineTemplate;
 import com.cloud.utils.component.Inject;
 import com.cloud.utils.db.DB;
 import com.cloud.utils.db.Transaction;
@@ -63,21 +73,43 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
 	StorageProviderManager _storageProviderMgr;
 	@Inject
 	VolumeManager _volumeMgr;
+	@Inject
+	SecondaryStorageManager _secondaryStorageMgr;
+	@Inject
+	ImageManager _imageMgr;
+	@Inject
+	VMTemplateDao _templateDao;
 	
-	protected Volume copyVolumeFromBackupStorage(VolumeVO volume, DataStore destStore, String reservationId) {
-		StorageProvider sp = _storageProviderMgr.getBackupStorageProvider(volume.getDataCenterId());
+	@DB
+	protected Volume copyVolumeFromBackupStorage(VolumeVO volume, DataStore destStore, String reservationId) throws NoTransitionException {
+		DataStore ds = _secondaryStorageMgr.getBackupDataStore(volume);
+		if (!ds.contains(volume)) {
+			throw new CloudRuntimeException("volume: " + volume + "doesn't exist on backup storage");
+		}
 		
-		VolumeHostVO volumeHostVO = _volumeHostDao.findByVolumeId(volume.getId());
-		long poolId = volumeHostVO.getHostId();
-		DataStore srcStore = _storageProviderMgr.getDataStore(poolId);
+		VolumeProfile vp = ds.prepareVolume(volume, destStore);
+		
+		VolumeStrategy vs = destStore.getVolumeStrategy();
+
+		Transaction txn = Transaction.currentTxn();
+		volume.setReservationId(reservationId);
+		_volumeMgr.processEvent(volume, Volume.Event.CopyRequested);
+		VolumeVO destVolume = _volumeMgr.allocateDuplicateVolume(volume);
+		destVolume = _volumeMgr.processEvent(destVolume, Volume.Event.CreateRequested);
+		txn.commit();
 		
+		vs.copyVolumeFromBackup(vp, destVolume, destStore);
 		
+		txn.start();
+		volume = _volumeMgr.processEvent(volume, Volume.Event.OperationSucceeded);
+		destVolume = _volumeMgr.processEvent(destVolume, Volume.Event.OperationSucceeded);
+		txn.commit();
 		
+		return destVolume;
 	}
 	
+	@DB
 	protected Volume migrateVolume(VolumeVO volume, DataStore srcStore, DataStore destStore, String reservationId) throws NoTransitionException {
-		VolumeStrategy vs = srcStore.getVolumeStrategy();
-		
 		Transaction txn = Transaction.currentTxn();
 		txn.start();
 		volume.setReservationId(reservationId);
@@ -86,16 +118,74 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
 		destVolume = _volumeMgr.processEvent(destVolume, Volume.Event.CreateRequested);
 		txn.commit();
 		
+		VolumeStrategy vs = srcStore.getVolumeStrategy();
 		vs.migrateVolume(volume, srcStore, destVolume, destStore);
 		
 		txn.start();
 		volume = _volumeMgr.processEvent(volume, Volume.Event.OperationSucceeded);
 		destVolume = _volumeMgr.processEvent(destVolume, Volume.Event.OperationSucceeded);
 		txn.commit();
-		_volumeDao.remove(volume.getId());
+		
+		volume = _volumeMgr.processEvent(volume, Volume.Event.DestroyRequested);
+		
+		vs.deleteVolume(volume);
+		
+		_volumeMgr.processEvent(volume, Volume.Event.OperationSucceeded);
+		return destVolume;
+	}
+	
+	@DB
+	protected Volume recreateVolume(VolumeVO srcVolume, DataStore destStore, String reservationId) throws NoTransitionException {
+		Transaction txn = Transaction.currentTxn();
+		txn.start();
+		srcVolume.setReservationId(reservationId);
+		srcVolume = _volumeMgr.processEvent(srcVolume, Volume.Event.CopyRequested);
+		Volume destVolume = _volumeMgr.allocateDuplicateVolume(srcVolume);
+		destVolume = _volumeMgr.processEvent(destVolume, Volume.Event.CreateRequested);
+		txn.commit();
+		
+		DataStore srcStore = _storageProviderMgr.getDataStore(srcVolume.getPoolId());
+		VolumeStrategy vs = srcStore.getVolumeStrategy();
+		
+		vs.migrateVolume(srcVolume, srcStore, destVolume, destStore);
+		
+		txn.start();
+		srcVolume = _volumeMgr.processEvent(srcVolume, Volume.Event.OperationSucceeded);
+		destVolume = _volumeMgr.processEvent(destVolume, Volume.Event.OperationSucceeded);
+		txn.commit();
+		
+		srcVolume = _volumeMgr.processEvent(srcVolume, Volume.Event.DestroyRequested);
+		
+		vs.deleteVolume(srcVolume);
+		
+		_volumeMgr.processEvent(srcVolume, Volume.Event.OperationSucceeded);
+		
 		return destVolume;
 	}
 	
+	protected Volume createVolumeOnStorage(Volume volume, DataStore destStore, String reservationId) throws NoTransitionException {
+		VolumeStrategy vs = destStore.getVolumeStrategy();
+		volume.setReservationId(reservationId);
+		volume = _volumeMgr.processEvent(volume, Volume.Event.CreateRequested);
+		
+		if (volume.getTemplateId() != null) {
+			VirtualMachineTemplate template = _templateDao.findById(volume.getTemplateId());
+			DataStore ds = _secondaryStorageMgr.getBackupDataStore(template);
+			TemplateProfile tp = ds.prepareTemplate(template, destStore);
+			if (!destStore.contains(template)) {
+				tp  = vs.createBaseVolume(tp, destStore);
+			} else {
+				tp = destStore.get(template);
+			}
+			volume = vs.createVolumeFromBaseTemplate(tp, destStore);
+		} else {
+			volume = vs.createDataVolume(volume, destStore);
+		}
+		
+		volume = _volumeMgr.processEvent(volume, Volume.Event.OperationSucceeded);
+		return volume;
+	}
+	
 	@DB
 	protected void prepareVolumes(List<VolumeVO> vols, Long destPoolId, String reservationId) throws NoTransitionException {
 		DataStore destStore = null;
@@ -126,36 +216,35 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
 				if (s_logger.isDebugEnabled()) {
 					s_logger.debug("Mismatch in storage pool " + destStore.getId() + " assigned by deploymentPlanner and the one associated with volume " + volume);
 				}
-
-				if (Volume.Type.ROOT == volume.getVolumeType()) {
-					needToMigrateVolume = true;
+				
+				if (volume.isRecreatable()) {
+					needToRecreateVolume = true;
 				} else {
-					if (destStore.getCluterId() != srcStore.getCluterId()) {
-						needToMigrateVolume = true;
-					} else if (!srcStore.isSharedStorage() && srcStore.getId() != destStore.getId()) {
+					if (Volume.Type.ROOT == volume.getVolumeType()) {
 						needToMigrateVolume = true;
 					} else {
-						continue;
-					}
-				}	
+						if (destStore.getCluterId() != srcStore.getCluterId()) {
+							needToMigrateVolume = true;
+						} else if (!srcStore.isSharedStorage() && srcStore.getId() != destStore.getId()) {
+							needToMigrateVolume = true;
+						} else {
+							continue;
+						}
+					}	
+				}
 			} else {
 				continue;
 			}
 			
-			VolumeStrategy vs = srcStore.getVolumeStrategy();
+			
 			if (needToCreateVolume) {
-				volume.setReservationId(reservationId);
-				volume = _volumeMgr.processEvent(volume, Volume.Event.CreateRequested);
-				
-				vs.createVolume(volume, destStore);
-				
-				volume = _volumeMgr.processEvent(volume, Volume.Event.OperationSucceeded);
+				createVolumeOnStorage(volume, destStore, reservationId);
 			} else if (needToMigrateVolume) {
 				migrateVolume(volume, srcStore, destStore, reservationId);
 			} else if (needToCopyFromSec) {
-				_volumeMgr.processEvent(volume, Volume.Event.CopyRequested);
+				copyVolumeFromBackupStorage(volume, destStore, reservationId);
 			} else if (needToRecreateVolume) {
-				
+				recreateVolume(volume, destStore, reservationId);
 			}
 		}
 	}
@@ -168,8 +257,12 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Prepare " + vols.size() + " volumes for " + vm.getInstanceName());
         }
-
         
+        try {
+        	prepareVolumes(vols, plan.getPoolId(), reservationId);
+        } catch (NoTransitionException e) {
+        	s_logger.debug("Failed to prepare volume: " + e.toString());
+        }
     }
 
 
@@ -188,9 +281,36 @@ public class StorageOrchestratorImpl implements StorageOrchestrator {
 		
 	}
 
-	public void prepareAttachDiskToVM(long disk, long vm, String reservationId) {
-		// TODO Auto-generated method stub
+	public void prepareAttachDiskToVM(long diskId, long vmId, String reservationId) {
+		VirtualMachine vm = _vmDao.findById(vmId);
+		
+		if (vm == null || vm.getState() != VirtualMachine.State.Running) {
+			return;
+		}
+		
+		VolumeVO volume = _volumeDao.findById(diskId);
+		if (volume.getInstanceId() != null) {
+			if (volume.getInstanceId() != vmId) {
+				throw new InvalidParameterValueException("Volume " + volume + "already attached to " + volume.getInstanceId());
+			} else {
+				return;
+			}
+		}
 		
+		List<VolumeVO> vols = new ArrayList<VolumeVO>();
+		vols.add(volume);
+		
+		List<VolumeVO> rootDisks = _volumeDao.findByInstanceAndType(vmId, Volume.Type.ROOT);
+		VolumeVO rootDisk = rootDisks.get(0);
+		try {
+			prepareVolumes(vols, rootDisk.getPoolId(), reservationId);
+		} catch (NoTransitionException e) {
+			s_logger.debug("Failed to prepare volume: " + volume + ", due to" + e.toString());
+			throw new CloudRuntimeException(e.toString());
+		}
+		
+		volume = _volumeDao.findById(diskId);
+		volume.setInstanceId(vmId);
+		_volumeDao.update(volume.getId(), volume);
 	}
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/VolumeBackupRef.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/VolumeBackupRef.java b/platform/storage/src/org/apache/cloudstack/storage/VolumeBackupRef.java
new file mode 100644
index 0000000..64402d3
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/VolumeBackupRef.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage;
+
+import java.util.Date;
+
+import org.apache.cloudstack.platform.subsystem.api.storage.DataObjectBackupStorageOperationState;
+
+import com.cloud.storage.Storage;
+import com.cloud.storage.VMTemplateStorageResourceAssoc;
+import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
+
+public interface VolumeBackupRef {
+	public DataObjectBackupStorageOperationState getOperationState();
+	
+	public String getInstallPath();
+
+	public long getHostId();
+
+	public long getVolumeId();
+
+	public long getZoneId();
+
+	public int getDownloadPercent();
+
+	public  long getVolumeSize();
+
+	public  Storage.ImageFormat getFormat();
+
+	public  String getDownloadUrl();
+
+	public  boolean getDestroyed();
+
+	public  long getPhysicalSize();
+
+	public  long getSize();
+
+	public  String getLocalDownloadPath();
+
+	public  String getChecksum();
+
+	public  Status getDownloadState();
+
+	public  Date getLastUpdated();
+
+	public  Date getCreated();
+
+	public  long getId();
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/db/VolumeHostVO.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/db/VolumeHostVO.java b/platform/storage/src/org/apache/cloudstack/storage/db/VolumeHostVO.java
new file mode 100755
index 0000000..bb41864
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/db/VolumeHostVO.java
@@ -0,0 +1,328 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.storage.db;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.apache.cloudstack.platform.subsystem.api.storage.DataObjectBackupStorageOperationState;
+import org.apache.cloudstack.storage.VolumeBackupRef;
+
+//import com.cloud.storage.VMVolumeStorageResourceAssoc.Status;
+import com.cloud.storage.Storage;
+import com.cloud.storage.VMTemplateStorageResourceAssoc;
+import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
+import com.cloud.utils.db.GenericDaoBase;
+
+/**
+ * Join table for storage hosts and volumes
+ *
+ */
+@Entity
+@Table(name="volume_host_ref")
+public class VolumeHostVO implements VolumeBackupRef {
+	@Id
+	@GeneratedValue(strategy=GenerationType.IDENTITY)
+	Long id;
+	
+	@Column(name="host_id")
+	private long hostId;
+	
+	@Column(name="volume_id")
+	private long volumeId;
+	
+	@Column(name="zone_id")
+	private long zoneId;
+	
+	@Column(name=GenericDaoBase.CREATED_COLUMN)
+	private Date created = null;
+	
+	@Column(name="last_updated")
+	@Temporal(value=TemporalType.TIMESTAMP)
+	private Date lastUpdated = null;
+	
+	@Column (name="download_pct")
+	private int downloadPercent;
+	
+	@Column (name="size")
+	private long size;
+	
+	@Column (name="physical_size")
+	private long physicalSize;
+	
+	@Column (name="download_state")
+	@Enumerated(EnumType.STRING)
+	private Status downloadState;
+	
+	@Column (name="opt_state")
+	@Enumerated(EnumType.STRING)
+	private DataObjectBackupStorageOperationState optState;
+	
+    @Column(name="checksum")
+    private String checksum;
+	
+	@Column (name="local_path")
+	private String localDownloadPath;
+	
+	@Column (name="error_str")
+	private String errorString;
+	
+	@Column (name="job_id")
+	private String jobId;	
+	
+	@Column (name="install_path")
+    private String installPath;
+	
+	@Column (name="url")
+	private String downloadUrl;
+	
+	@Column(name="format")
+    private Storage.ImageFormat format;
+    
+    @Column(name="destroyed")
+    boolean destroyed = false;
+    
+	
+    public String getInstallPath() {
+		return installPath;
+	}
+
+	public long getHostId() {
+		return hostId;
+	}
+
+	public void setHostId(long hostId) {
+		this.hostId = hostId;
+	}
+
+	
+    public long getVolumeId() {
+		return volumeId;
+	}
+
+	
+    public void setVolumeId(long volumeId) {
+		this.volumeId = volumeId;
+	}
+
+	
+    public long getZoneId() {
+		return zoneId;
+	}
+
+	public void setZoneId(long zoneId) {
+		this.zoneId = zoneId;
+	}
+
+	public int getDownloadPercent() {
+		return downloadPercent;
+	}
+
+	
+    public void setDownloadPercent(int downloadPercent) {
+		this.downloadPercent = downloadPercent;
+	}
+
+	
+    public void setDownloadState(Status downloadState) {
+		this.downloadState = downloadState;
+	}
+
+	
+
+	public long getId() {
+		return id;
+	}
+
+	
+    
+	public Date getCreated() {
+		return created;
+	}
+
+	public Date getLastUpdated() {
+		return lastUpdated;
+	}
+	
+	
+    public void setLastUpdated(Date date) {
+	    lastUpdated = date;
+	}
+	
+	
+    public void setInstallPath(String installPath) {
+	    this.installPath = installPath;
+	}
+
+
+	public Status getDownloadState() {
+		return downloadState;
+	}
+
+	public String getChecksum() {
+		return checksum;
+	}
+
+	public void setChecksum(String checksum) {
+		this.checksum = checksum;
+	}
+
+	public VolumeHostVO(long hostId, long volumeId) {
+		super();
+		this.hostId = hostId;
+		this.volumeId = volumeId;
+	}
+
+	public VolumeHostVO(long hostId, long volumeId, long zoneId, Date lastUpdated,
+			int downloadPercent, Status downloadState,
+			String localDownloadPath, String errorString, String jobId,
+			String installPath, String downloadUrl, String checksum, ImageFormat format) {
+		//super();
+		this.hostId = hostId;
+		this.volumeId = volumeId;
+		this.zoneId = zoneId;
+		this.lastUpdated = lastUpdated;
+		this.downloadPercent = downloadPercent;
+		this.downloadState = downloadState;
+		this.localDownloadPath = localDownloadPath;
+		this.errorString = errorString;
+		this.jobId = jobId;
+		this.installPath = installPath;
+		this.setDownloadUrl(downloadUrl);
+		this.checksum = checksum;
+		this.format = format;
+	}
+
+	protected VolumeHostVO() {
+		
+	}
+
+	
+    public void setLocalDownloadPath(String localPath) {
+		this.localDownloadPath = localPath;
+	}
+
+	public String getLocalDownloadPath() {
+		return localDownloadPath;
+	}
+
+	
+    public void setErrorString(String errorString) {
+		this.errorString = errorString;
+	}
+
+	
+    public String getErrorString() {
+		return errorString;
+	}
+
+	
+    public void setJobId(String jobId) {
+		this.jobId = jobId;
+	}
+
+	
+    public String getJobId() {
+		return jobId;
+	}
+
+	
+	public boolean equals(Object obj) {
+		if (obj instanceof VolumeHostVO) {
+			VolumeBackupRef other = (VolumeBackupRef)obj;
+			return (this.volumeId==other.getVolumeId() && this.hostId==other.getHostId());		   
+		}
+		return false;
+	}
+
+	
+	public int hashCode() {
+		Long tid = new Long(volumeId);
+		Long hid = new Long(hostId);
+		return tid.hashCode()+hid.hashCode();
+	}
+
+    public void setSize(long size) {
+        this.size = size;
+    }
+
+
+	public long getSize() {
+        return size;
+    }
+	
+    
+    public void setPhysicalSize(long physicalSize) {
+        this.physicalSize = physicalSize;
+    }
+
+
+	public long getPhysicalSize() {
+        return physicalSize;
+    }
+
+    public void setDestroyed(boolean destroyed) {
+    	this.destroyed = destroyed;
+    }
+
+
+	public boolean getDestroyed() {
+    	return destroyed;
+    }
+
+	public void setDownloadUrl(String downloadUrl) {
+		this.downloadUrl = downloadUrl;
+	}
+
+
+	public String getDownloadUrl() {
+		return downloadUrl;
+	}	
+	
+	public Storage.ImageFormat getFormat() {
+		return format;
+	}
+
+	public void setFormat(Storage.ImageFormat format) {
+		this.format = format;
+	}
+	
+    public String toString() {
+	    return new StringBuilder("VolumeHost[").append(id).append("-").append(volumeId).append("-").append(hostId).append(installPath).append("]").toString();
+	}
+
+	public DataObjectBackupStorageOperationState getOperationState() {
+		return optState;
+	}
+
+	public long getVolumeSize() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/manager/BackupStorageManager.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/manager/BackupStorageManager.java b/platform/storage/src/org/apache/cloudstack/storage/manager/BackupStorageManager.java
new file mode 100644
index 0000000..f8388c9
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/manager/BackupStorageManager.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.manager;
+
+import org.apache.cloudstack.platform.subsystem.api.storage.DataObjectBackupStorageOperationState;
+import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
+
+import com.cloud.storage.Snapshot;
+import com.cloud.storage.Volume;
+import com.cloud.template.VirtualMachineTemplate;
+import com.cloud.utils.fsm.NoTransitionException;
+
+public interface BackupStorageManager {
+	boolean contains(Volume vol);
+	boolean contains(Snapshot snapshot);
+	boolean contains(VirtualMachineTemplate template);
+	
+	DataStore getBackupDataStore(Volume vol);
+	DataStore getBackupDataStore(Snapshot snapshot);
+	DataStore getBackupDataStore(VirtualMachineTemplate template);
+	
+	boolean updateOperationState(Volume vol, DataObjectBackupStorageOperationState.Event event) throws NoTransitionException;
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/manager/BackupStorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/manager/BackupStorageManagerImpl.java b/platform/storage/src/org/apache/cloudstack/storage/manager/BackupStorageManagerImpl.java
new file mode 100644
index 0000000..72253fc
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/manager/BackupStorageManagerImpl.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.manager;
+
+public class BackupStorageManagerImpl implements BackupStorageManager {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/manager/ImageManager.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/manager/ImageManager.java b/platform/storage/src/org/apache/cloudstack/storage/manager/ImageManager.java
new file mode 100644
index 0000000..81fe391
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/manager/ImageManager.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.manager;
+
+import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.platform.subsystem.api.storage.SnapshotProfile;
+import org.apache.cloudstack.platform.subsystem.api.storage.TemplateProfile;
+import org.apache.cloudstack.platform.subsystem.api.storage.VolumeProfile;
+
+import com.cloud.storage.Snapshot;
+import com.cloud.storage.Volume;
+import com.cloud.template.VirtualMachineTemplate;
+
+public interface ImageManager {
+	VolumeProfile prepareVolume(Volume volume, DataStore destStore);
+	SnapshotProfile prepareSnapshot(Snapshot snapshot, DataStore destStore);
+	TemplateProfile prepareTemplate(VirtualMachineTemplate template, DataStore destStore);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/manager/ImageManagerImpl.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/manager/ImageManagerImpl.java b/platform/storage/src/org/apache/cloudstack/storage/manager/ImageManagerImpl.java
new file mode 100644
index 0000000..ade59f0
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/manager/ImageManagerImpl.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.manager;
+
+public class ImageManagerImpl implements ImageManager {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/manager/SecondaryStorageManager.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/manager/SecondaryStorageManager.java b/platform/storage/src/org/apache/cloudstack/storage/manager/SecondaryStorageManager.java
new file mode 100644
index 0000000..8fa1a95
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/manager/SecondaryStorageManager.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.manager;
+
+public interface SecondaryStorageManager {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/manager/SecondaryStorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/manager/SecondaryStorageManagerImpl.java b/platform/storage/src/org/apache/cloudstack/storage/manager/SecondaryStorageManagerImpl.java
new file mode 100644
index 0000000..8694290
--- /dev/null
+++ b/platform/storage/src/org/apache/cloudstack/storage/manager/SecondaryStorageManagerImpl.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cloudstack.storage.manager;
+
+public class SecondaryStorageManagerImpl implements SecondaryStorageManager {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/83e2b7ad/platform/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java
----------------------------------------------------------------------
diff --git a/platform/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java b/platform/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java
index bbbbade..9e11b44 100644
--- a/platform/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java
+++ b/platform/storage/src/org/apache/cloudstack/storage/strategy/DefaultVolumeStrategy.java
@@ -1,11 +1,13 @@
 package org.apache.cloudstack.storage.strategy;
 
 import org.apache.cloudstack.platform.subsystem.api.storage.DataStore;
-import org.apache.cloudstack.platform.subsystem.api.storage.Snapshot;
-import org.apache.cloudstack.platform.subsystem.api.storage.Template;
-import org.apache.cloudstack.platform.subsystem.api.storage.Volume;
+import org.apache.cloudstack.platform.subsystem.api.storage.SnapshotProfile;
+import org.apache.cloudstack.platform.subsystem.api.storage.TemplateProfile;
+import org.apache.cloudstack.platform.subsystem.api.storage.VolumeProfile;
 import org.apache.cloudstack.platform.subsystem.api.storage.VolumeStrategy;
 
+import com.cloud.storage.Volume;
+
 public class DefaultVolumeStrategy implements VolumeStrategy {
 	protected DataStore _ds;
 	public DefaultVolumeStrategy(DataStore ds) {
@@ -16,30 +18,39 @@ public class DefaultVolumeStrategy implements VolumeStrategy {
 		// TODO Auto-generated method stub
 		return null;
 	}
-
-	public Volume copyVolume(Volume srcVol, Volume destVol) {
+	public Volume createDataVolume(Volume vol, DataStore store) {
 		// TODO Auto-generated method stub
 		return null;
 	}
-
-	public Volume createVolumeFromSnapshot(Volume vol, Snapshot snapshot) {
+	public Volume copyVolumeFromBackup(VolumeProfile srcVol, Volume destVol, DataStore destStore) {
 		// TODO Auto-generated method stub
 		return null;
 	}
-
-	public Volume createVolumeFromTemplate(Volume vol, Template template) {
+	public Volume createVolumeFromSnapshot(SnapshotProfile snapshot, Volume vol, DataStore destStore) {
 		// TODO Auto-generated method stub
 		return null;
 	}
-
-	public Volume migrateVolume(Volume srcVol, Volume destVol) {
+	public Volume createVolumeFromTemplate(TemplateProfile template, Volume vol, DataStore destStore) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	public Volume migrateVolume(Volume srcVol, DataStore srcStore, Volume destVol, DataStore destStore) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	public TemplateProfile createBaseVolume(TemplateProfile tp, DataStore destStore) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	public Volume createVolumeFromBaseTemplate(TemplateProfile tp, DataStore destStore) {
 		// TODO Auto-generated method stub
 		return null;
 	}
-
 	public boolean deleteVolume(Volume vol) {
 		// TODO Auto-generated method stub
 		return false;
 	}
 
+
+
 }