From 289c8a09ea5bf681c34f97fc676e3ba4cc5cd720 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Tue, 24 Dec 2013 17:22:45 +0530 Subject: [PATCH] CLOUDSTACK-5508. Vmware - When there are multiple secondary stores, the newly added secondary store is not being selected for backing up snapshots. If the snapshot being backed up is a a delta snapshot, pick the image store where the parent snapshot is stored. Otheriwse pick a random image store. --- .../cloudstack/storage/snapshot/SnapshotServiceImpl.java | 7 ++++++- .../storage/snapshot/XenserverSnapshotStrategy.java | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java index 9b73bea5211..7df24329f5e 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/SnapshotServiceImpl.java @@ -219,7 +219,12 @@ public class SnapshotServiceImpl implements SnapshotService { // the same store as its parent since // we are taking delta snapshot private DataStore findSnapshotImageStore(SnapshotInfo snapshot) { - if (snapshot.getParent() == null) { + Boolean fullSnapshot = true; + Object payload = snapshot.getPayload(); + if (payload != null) { + fullSnapshot = (Boolean)payload; + } + if (fullSnapshot) { return dataStoreMgr.getImageStore(snapshot.getDataCenterId()); } else { SnapshotInfo parentSnapshot = snapshot.getParent(); diff --git a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java index ae48fe448bf..adb24bda90f 100644 --- a/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java +++ b/engine/storage/snapshot/src/org/apache/cloudstack/storage/snapshot/XenserverSnapshotStrategy.java @@ -40,6 +40,8 @@ import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.hypervisor.Hypervisor; +import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.storage.CreateSnapshotPayload; import com.cloud.storage.DataStoreRole; import com.cloud.storage.Snapshot; @@ -108,7 +110,8 @@ public class XenserverSnapshotStrategy extends SnapshotStrategyBase { boolean fullBackup = true; SnapshotDataStoreVO parentSnapshotOnBackupStore = snapshotStoreDao.findLatestSnapshotForVolume(snapshot.getVolumeId(), DataStoreRole.Image); - if (parentSnapshotOnBackupStore != null) { + HypervisorType hypervisorType = snapshot.getBaseVolume().getHypervisorType(); + if (parentSnapshotOnBackupStore != null && hypervisorType == Hypervisor.HypervisorType.XenServer) { // CS does incremental backup only for XenServer int _deltaSnapshotMax = NumbersUtil.parseInt(configDao.getValue("snapshot.delta.max"), SnapshotManager.DELTAMAX); int deltaSnap = _deltaSnapshotMax;