Skip to content

Commit db0ea04

Browse files
use list, and add snapshot info prior to take snapshot
1 parent bd1ca29 commit db0ea04

File tree

2 files changed

+7
-12
lines changed

2 files changed

+7
-12
lines changed

engine/storage/snapshot/src/main/java/org/apache/cloudstack/storage/vmsnapshot/StorageVMSnapshotStrategy.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
package org.apache.cloudstack.storage.vmsnapshot;
2020

2121
import java.util.ArrayList;
22-
import java.util.HashMap;
2322
import java.util.List;
2423
import java.util.Map;
2524
import java.util.concurrent.TimeUnit;
@@ -112,7 +111,7 @@ public VMSnapshot takeVMSnapshot(VMSnapshot vmSnapshot) {
112111
FreezeThawVMAnswer freezeAnswer = null;
113112
FreezeThawVMCommand thawCmd = null;
114113
FreezeThawVMAnswer thawAnswer = null;
115-
Map<Long, SnapshotInfo> volumeToSnapshotInfoMapForRollback = new HashMap<>();
114+
List<SnapshotInfo> snapshotInfoListForRollback = new ArrayList<>();
116115
long startFreeze = 0;
117116
try {
118117
vmSnapshotHelper.vmSnapshotStateTransitTo(vmSnapshotVO, VMSnapshot.Event.CreateRequested);
@@ -166,7 +165,7 @@ public VMSnapshot takeVMSnapshot(VMSnapshot vmSnapshot) {
166165
logger.info("The virtual machine is frozen");
167166
for (VolumeInfo vol : vinfos) {
168167
long startSnapshtot = System.nanoTime();
169-
SnapshotInfo snapInfo = createDiskSnapshot(vmSnapshot, volumeToSnapshotInfoMapForRollback, vol);
168+
SnapshotInfo snapInfo = createDiskSnapshot(vmSnapshot, snapshotInfoListForRollback, vol);
170169

171170
if (snapInfo == null) {
172171
thawAnswer = (FreezeThawVMAnswer) agentMgr.send(hostId, thawCmd);
@@ -223,7 +222,7 @@ public VMSnapshot takeVMSnapshot(VMSnapshot vmSnapshot) {
223222
}
224223
}
225224
if (!result) {
226-
for (SnapshotInfo snapshotInfo : volumeToSnapshotInfoMapForRollback.values()) {
225+
for (SnapshotInfo snapshotInfo : snapshotInfoListForRollback) {
227226
rollbackDiskSnapshot(snapshotInfo);
228227
}
229228
try {
@@ -441,7 +440,7 @@ protected void revertDiskSnapshot(VMSnapshot vmSnapshot) {
441440
}
442441
}
443442

444-
protected SnapshotInfo createDiskSnapshot(VMSnapshot vmSnapshot, Map<Long, SnapshotInfo> volumeToSnapshotInfoMapForRollback, VolumeInfo vol) {
443+
protected SnapshotInfo createDiskSnapshot(VMSnapshot vmSnapshot, List<SnapshotInfo> snapshotInfoListForRollback, VolumeInfo vol) {
445444
String snapshotName = vmSnapshot.getId() + "_" + vol.getUuid();
446445
SnapshotVO snapshot = new SnapshotVO(vol.getDataCenterId(), vol.getAccountId(), vol.getDomainId(), vol.getId(), vol.getDiskOfferingId(),
447446
snapshotName, (short) Snapshot.Type.GROUP.ordinal(), Snapshot.Type.GROUP.name(), vol.getSize(), vol.getMinIops(), vol.getMaxIops(), Hypervisor.HypervisorType.KVM, null);
@@ -455,16 +454,14 @@ protected SnapshotInfo createDiskSnapshot(VMSnapshot vmSnapshot, Map<Long, Snaps
455454
vol.addPayload(setPayload(vol, snapshot, quiescevm));
456455
SnapshotInfo snapshotInfo = snapshotDataFactory.getSnapshot(snapshot.getId(), vol.getDataStore());
457456
snapshotInfo.addPayload(vol.getpayload());
458-
volumeToSnapshotInfoMapForRollback.put(vol.getId(), snapshotInfo);
457+
snapshotInfoListForRollback.add(snapshotInfo);
459458
SnapshotStrategy snapshotStrategy = storageStrategyFactory.getSnapshotStrategy(snapshotInfo, SnapshotOperation.TAKE);
460459
if (snapshotStrategy == null) {
461460
throw new CloudRuntimeException("Could not find strategy for snapshot uuid:" + snapshotInfo.getUuid());
462461
}
463462
snapshotInfo = snapshotStrategy.takeSnapshot(snapshotInfo);
464463
if (snapshotInfo == null) {
465464
throw new CloudRuntimeException("Failed to create snapshot");
466-
} else {
467-
volumeToSnapshotInfoMapForRollback.put(vol.getId(), snapshotInfo);
468465
}
469466
vmSnapshotDetailsDao.persist(new VMSnapshotDetailsVO(vmSnapshot.getId(), STORAGE_SNAPSHOT, String.valueOf(snapshot.getId()), true));
470467
snapshotInfo.markBackedUp();

engine/storage/snapshot/src/test/java/org/apache/cloudstack/storage/vmsnapshot/VMSnapshotStrategyKVMTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@
2424
import java.io.IOException;
2525
import java.util.ArrayList;
2626
import java.util.Date;
27-
import java.util.HashMap;
2827
import java.util.List;
29-
import java.util.Map;
3028
import java.util.UUID;
3129

3230
import javax.inject.Inject;
@@ -155,7 +153,7 @@ public void setUp() throws Exception {
155153
@Test
156154
public void testCreateDiskSnapshotBasedOnStrategy() throws Exception {
157155
VMSnapshotVO vmSnapshot = Mockito.mock(VMSnapshotVO.class);
158-
Map<Long, SnapshotInfo> volumeToSnapshotInfoMapForRollback = new HashMap<>();
156+
List<SnapshotInfo> snapshotInfoListForRollback = new ArrayList<>();
159157
VolumeInfo vol = Mockito.mock(VolumeInfo.class);
160158
SnapshotInfo snapshotInfo = Mockito.mock(SnapshotInfo.class);
161159
SnapshotStrategy strategy = Mockito.mock(SnapshotStrategy.class);
@@ -179,7 +177,7 @@ public void testCreateDiskSnapshotBasedOnStrategy() throws Exception {
179177
VMSnapshotDetailsVO vmDetails = new VMSnapshotDetailsVO(vmSnapshot.getId(), volUuid, String.valueOf(snapshot.getId()), false);
180178
when(vmSnapshotDetailsDao.persist(any())).thenReturn(vmDetails);
181179

182-
info = vmStrategy.createDiskSnapshot(vmSnapshot, volumeToSnapshotInfoMapForRollback, vol);
180+
info = vmStrategy.createDiskSnapshot(vmSnapshot, snapshotInfoListForRollback, vol);
183181
assertNotNull(info);
184182
}
185183

0 commit comments

Comments
 (0)