Skip to content

Commit 2f0f260

Browse files
committed
small fix on cleanup
1 parent 0b84f3a commit 2f0f260

File tree

3 files changed

+17
-8
lines changed

3 files changed

+17
-8
lines changed

core/src/main/java/org/apache/cloudstack/backup/CleanupKbossBackupErrorAnswer.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,19 @@
2727

2828
public class CleanupKbossBackupErrorAnswer extends Answer {
2929
List<VolumeObjectTO> volumeObjectTos;
30+
boolean vmRunning;
3031

31-
public CleanupKbossBackupErrorAnswer(Command cmd, List<VolumeObjectTO> volumeObjectTos) {
32+
public CleanupKbossBackupErrorAnswer(Command cmd, List<VolumeObjectTO> volumeObjectTos, boolean vmRunning) {
3233
super(cmd, CollectionUtils.isNotEmpty(volumeObjectTos), null);
3334
this.volumeObjectTos = volumeObjectTos;
35+
this.vmRunning = vmRunning;
3436
}
3537

3638
public List<VolumeObjectTO> getVolumeObjectTos() {
3739
return volumeObjectTos;
3840
}
41+
42+
public boolean isVmRunning() {
43+
return vmRunning;
44+
}
3945
}

plugins/backup/kboss/src/main/java/org/apache/cloudstack/backup/KbossBackupProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ public Pair<Boolean, Long> orchestrateTakeBackup(Backup backup, boolean quiesceV
378378
Long hostId = vmSnapshotHelper.pickRunningHost(vmId);
379379
HostVO hostVO = hostDao.findById(hostId);
380380

381-
if (hostVO.getStatus() == Status.Down || hostVO.getStatus() == Status.Disconnected) {
381+
if (hostVO.getStatus() != Status.Up || hostVO.getResourceState() != ResourceState.Enabled) {
382382
backupVO.setStatus(Backup.Status.Failed);
383383
backupDao.update(backupVO.getId(), backupVO);
384384

@@ -927,6 +927,7 @@ public boolean finishBackupChain(VirtualMachine virtualMachine) {
927927
}
928928
}
929929

930+
runningVM = cleanAnswer.isVmRunning();
930931
userVmVO.setState(runningVM ? VirtualMachine.State.Running : VirtualMachine.State.Stopped);
931932
userVmDao.update(userVmVO.getId(), userVmVO);
932933
userVmDetailsDao.removeDetail(userVmVO.getId(), ApiConstants.LAST_KNOWN_STATE);

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtCleanupKbossVmBackupCommandWrapper.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager;
2727
import com.cloud.resource.CommandWrapper;
2828
import com.cloud.resource.ResourceWrapper;
29+
import com.cloud.utils.Pair;
2930
import org.apache.cloudstack.backup.CleanupKbossBackupErrorAnswer;
3031
import org.apache.cloudstack.backup.CleanupKbossBackupErrorCommand;
3132
import org.apache.cloudstack.storage.to.BackupDeltaTO;
@@ -57,23 +58,24 @@ public Answer execute(CleanupKbossBackupErrorCommand command, LibvirtComputingRe
5758
cleanupBackupDeltasOnSecondary(command, storagePoolManager, kbossTOS);
5859

5960
if (command.isRunningVM()) {
60-
return new CleanupKbossBackupErrorAnswer(command, cleanupRunningVm(command, serverResource));
61+
Pair<List<VolumeObjectTO>, Boolean> volumeTosAndIsVmRunning = cleanupRunningVm(command, serverResource);
62+
return new CleanupKbossBackupErrorAnswer(command, volumeTosAndIsVmRunning.first(), volumeTosAndIsVmRunning.second());
6163
}
6264

63-
return new CleanupKbossBackupErrorAnswer(command, mergeDeltasForStoppedVmIfNeeded(command, serverResource));
65+
return new CleanupKbossBackupErrorAnswer(command, mergeDeltasForStoppedVmIfNeeded(command, serverResource), false);
6466
}
6567

66-
private List<VolumeObjectTO> cleanupRunningVm(CleanupKbossBackupErrorCommand command, LibvirtComputingResource serverResource) {
68+
private Pair<List<VolumeObjectTO>, Boolean> cleanupRunningVm(CleanupKbossBackupErrorCommand command, LibvirtComputingResource serverResource) {
6769
Domain dm = null;
6870
try {
6971
dm = serverResource.getDomain(serverResource.getLibvirtUtilitiesHelper().getConnection(), command.getVmName());
70-
return mergeDeltasForRunningVmIfNeeded(command, serverResource, dm);
72+
return new Pair<>(mergeDeltasForRunningVmIfNeeded(command, serverResource, dm), true);
7173
} catch (LibvirtException e) {
7274
if (e.getError().getCode() == Error.ErrorNumber.VIR_ERR_NO_DOMAIN && IsVmReallyStopped(command, serverResource)) {
73-
return mergeDeltasForStoppedVmIfNeeded(command, serverResource);
75+
return new Pair<>(mergeDeltasForStoppedVmIfNeeded(command, serverResource), false);
7476
}
7577
logger.error("Error while trying to get VM [{}]. Aborting the process.", command.getVmName(), e);
76-
return List.of();
78+
return new Pair<>(List.of(), false);
7779
} finally {
7880
if (dm != null) {
7981
try {

0 commit comments

Comments
 (0)