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;
}
+
+
}