Skip to content

Commit d7536bd

Browse files
author
SadiJr
committed
Merge branch 'change-snap-backup-limitation' into '4.20.0.0-scclouds'
Mudança na limitação de criação de _backups_ e _snapshots_ incrementais Closes #3297 and #3142 See merge request scclouds/scclouds!1363
2 parents f407dc7 + b8a3b8a commit d7536bd

3 files changed

Lines changed: 11 additions & 28 deletions

File tree

plugins/backup/knib/src/main/java/org/apache/cloudstack/backup/KnibBackupProvider.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -279,13 +279,6 @@ public boolean assignVMToBackupOffering(VirtualMachine vm, BackupOffering backup
279279
return false;
280280
}
281281

282-
for (VolumeVO volume : volumeDao.findByInstance(vm.getId())) {
283-
if (CollectionUtils.isNotEmpty(snapshotDataStoreDao.listReadyByVolumeIdAndCheckpointPathNotNull(volume.getId()))) {
284-
logger.error("KNIB is not compatible with incremental volume snapshots.");
285-
return false;
286-
}
287-
}
288-
289282
for (VMSnapshotVO vmSnapshotVO : vmSnapshotDao.findByVmAndByType(vm.getId(), VMSnapshot.Type.Disk)) {
290283
List<VMSnapshotDetailsVO> vmSnapshotDetails = vmSnapshotDetailsDao.listDetails(vmSnapshotVO.getId());
291284
if (!vmSnapshotDetails.stream().allMatch(vmSnapshotDetailsVO -> vmSnapshotDetailsVO.getName().equals(VolumeApiServiceImpl.KVM_FILE_BASED_STORAGE_SNAPSHOT))) {

plugins/backup/knib/src/test/java/org/apache/cloudstack/backup/KnibBackupProviderTest.java

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@ public void setup() {
168168
doReturn(vmId).when(virtualMachineMock).getId();
169169
doReturn(vmId).when(backupVoMock).getVmId();
170170
doReturn(vmId).when(nativeBackupJoinVoMock).getVmId();
171-
doReturn(volumeId).when(volumeVoMock).getId();
172171
}
173172

174173

@@ -180,21 +179,8 @@ public void assignVMToBackupOfferingTestNotKvm() {
180179
}
181180

182181
@Test
183-
public void assignVMToBackupOfferingTestKvmWithIncrementalSnapshot() {
182+
public void assignVMToBackupOfferingTestKvmWithUnsupportedDiskOnlyVmSnapshot() {
184183
doReturn(Hypervisor.HypervisorType.KVM).when(virtualMachineMock).getHypervisorType();
185-
doReturn(List.of(volumeVoMock)).when(volumeDaoMock).findByInstance(vmId);
186-
doReturn(List.of(snapshotDataStoreVoMock)).when(snapshotDataStoreDaoMock).listReadyByVolumeIdAndCheckpointPathNotNull(volumeId);
187-
188-
189-
boolean result = knibBackupProviderSpy.assignVMToBackupOffering(virtualMachineMock, backupOfferingMock);
190-
assertFalse(result);
191-
}
192-
193-
@Test
194-
public void assignVMToBackupOfferingTestKvmNoIncrementalSnapshotWithUnsupportedDiskOnlyVmSnapshot() {
195-
doReturn(Hypervisor.HypervisorType.KVM).when(virtualMachineMock).getHypervisorType();
196-
doReturn(List.of(volumeVoMock)).when(volumeDaoMock).findByInstance(vmId);
197-
doReturn(List.of()).when(snapshotDataStoreDaoMock).listReadyByVolumeIdAndCheckpointPathNotNull(volumeId);
198184
doReturn(List.of(vmSnapshotVoMock)).when(vmSnapshotDaoMock).findByVmAndByType(vmId, VMSnapshot.Type.Disk);
199185
long vmSnapId = 921;
200186
doReturn(vmSnapId).when(vmSnapshotVoMock).getId();
@@ -206,10 +192,8 @@ public void assignVMToBackupOfferingTestKvmNoIncrementalSnapshotWithUnsupportedD
206192
}
207193

208194
@Test
209-
public void assignVMToBackupOfferingTestKvmNoIncrementalSnapshotWithSupportedDiskOnlyVmSnapshotAndDiskAndMemoryVmSnapshot() {
195+
public void assignVMToBackupOfferingTestKvmWithSupportedDiskOnlyVmSnapshotAndDiskAndMemoryVmSnapshot() {
210196
doReturn(Hypervisor.HypervisorType.KVM).when(virtualMachineMock).getHypervisorType();
211-
doReturn(List.of(volumeVoMock)).when(volumeDaoMock).findByInstance(vmId);
212-
doReturn(List.of()).when(snapshotDataStoreDaoMock).listReadyByVolumeIdAndCheckpointPathNotNull(volumeId);
213197
doReturn(List.of(vmSnapshotVoMock)).when(vmSnapshotDaoMock).findByVmAndByType(vmId, VMSnapshot.Type.Disk);
214198
long vmSnapId = 921;
215199
doReturn(vmSnapId).when(vmSnapshotVoMock).getId();
@@ -223,10 +207,8 @@ public void assignVMToBackupOfferingTestKvmNoIncrementalSnapshotWithSupportedDis
223207

224208

225209
@Test
226-
public void assignVMToBackupOfferingTestKvmNoIncrementalSnapshotWithSupportedDiskOnlyVmSnapshotAndNoDiskAndMemoryVmSnapshot() {
210+
public void assignVMToBackupOfferingTestKvmWithSupportedDiskOnlyVmSnapshotAndNoDiskAndMemoryVmSnapshot() {
227211
doReturn(Hypervisor.HypervisorType.KVM).when(virtualMachineMock).getHypervisorType();
228-
doReturn(List.of(volumeVoMock)).when(volumeDaoMock).findByInstance(vmId);
229-
doReturn(List.of()).when(snapshotDataStoreDaoMock).listReadyByVolumeIdAndCheckpointPathNotNull(volumeId);
230212
doReturn(List.of(vmSnapshotVoMock)).when(vmSnapshotDaoMock).findByVmAndByType(vmId, VMSnapshot.Type.Disk);
231213
long vmSnapId = 921;
232214
doReturn(vmSnapId).when(vmSnapshotVoMock).getId();

server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import org.apache.cloudstack.api.response.GetUploadParamsResponse;
6060
import org.apache.cloudstack.backup.Backup;
6161
import org.apache.cloudstack.backup.BackupManager;
62+
import org.apache.cloudstack.backup.BackupManagerImpl;
6263
import org.apache.cloudstack.backup.NativeBackupService;
6364
import org.apache.cloudstack.backup.dao.BackupDao;
6465
import org.apache.cloudstack.context.CallContext;
@@ -359,6 +360,8 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
359360
@Inject
360361
private NativeBackupService nativeBackupService;
361362
@Inject
363+
private BackupManager backupManager;
364+
@Inject
362365
protected VMSnapshotDetailsDao vmSnapshotDetailsDao;
363366
@Inject
364367
private StatsCollector statsCollector;
@@ -3927,6 +3930,11 @@ public Snapshot allocSnapshot(Long volumeId, Long policyId, String snapshotName,
39273930
VirtualMachine attachedVm = volume.getAttachedVM();
39283931
if (attachedVm != null && HypervisorType.KVM.equals(attachedVm.getHypervisorType())) {
39293932
_userVmMgr.validateNoVmSnapshots(attachedVm);
3933+
if (SnapshotManager.kvmIncrementalSnapshot.valueIn(_hostDao.findClusterIdByVolumeInfo(volume)) &&
3934+
backupManager.getBackupProvider(attachedVm.getDataCenterId()).getName().equals(BackupManagerImpl.KNIB_BACKUP_PROVIDER) &&
3935+
CollectionUtils.isNotEmpty(backupDao.listByVmId(attachedVm.getDataCenterId(), attachedVm.getId())) ) {
3936+
throw new CloudRuntimeException(String.format("VM [%s] has KNIB backups, cannot take incremental snapshots of it.", attachedVm.getUuid()));
3937+
}
39303938
}
39313939

39323940
if (CollectionUtils.isNotEmpty(zoneIds)) {

0 commit comments

Comments
 (0)