From 8a00e25de9123794ab96baf0af799678e336d934 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Mon, 15 Jul 2024 17:03:59 +0530 Subject: [PATCH] Fix list backups after backup vm is expunged (#9392) --- .../cloudstack/api/command/user/backup/ListBackupsCmd.java | 3 +++ api/src/main/java/org/apache/cloudstack/backup/Backup.java | 1 + .../main/java/org/apache/cloudstack/backup/BackupVO.java | 1 + .../org/apache/cloudstack/backup/dao/BackupDaoImpl.java | 6 +++++- 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/backup/ListBackupsCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/backup/ListBackupsCmd.java index 8597d97278c..57a1de2f105 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/backup/ListBackupsCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/backup/ListBackupsCmd.java @@ -36,6 +36,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.backup.Backup; import org.apache.cloudstack.backup.BackupManager; import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; @@ -49,6 +50,7 @@ import com.cloud.utils.Pair; responseObject = BackupResponse.class, since = "4.14.0", authorized = {RoleType.Admin, RoleType.ResourceAdmin, RoleType.DomainAdmin, RoleType.User}) public class ListBackupsCmd extends BaseListProjectAndAccountResourcesCmd { + private static final Logger s_logger = Logger.getLogger(ListBackupsCmd.class); @Inject private BackupManager backupManager; @@ -116,6 +118,7 @@ public class ListBackupsCmd extends BaseListProjectAndAccountResourcesCmd { Pair, Integer> result = backupManager.listBackups(this); setupResponseBackupList(result.first(), result.second()); } catch (Exception e) { + s_logger.debug("Exception while listing backups", e); throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } diff --git a/api/src/main/java/org/apache/cloudstack/backup/Backup.java b/api/src/main/java/org/apache/cloudstack/backup/Backup.java index 75c7ab4cca5..0a5c8634927 100644 --- a/api/src/main/java/org/apache/cloudstack/backup/Backup.java +++ b/api/src/main/java/org/apache/cloudstack/backup/Backup.java @@ -132,6 +132,7 @@ public interface Backup extends ControlledEntity, InternalIdentity, Identity { } long getVmId(); + long getBackupOfferingId(); String getExternalId(); String getType(); String getDate(); diff --git a/engine/schema/src/main/java/org/apache/cloudstack/backup/BackupVO.java b/engine/schema/src/main/java/org/apache/cloudstack/backup/BackupVO.java index 2ecbfd56460..76127da26e2 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/backup/BackupVO.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/backup/BackupVO.java @@ -155,6 +155,7 @@ public class BackupVO implements Backup { this.status = status; } + @Override public long getBackupOfferingId() { return backupOfferingId; } diff --git a/engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java index fefbb68ae77..8628fe8e01b 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java @@ -145,7 +145,11 @@ public class BackupDaoImpl extends GenericDaoBase implements Bac AccountVO account = accountDao.findByIdIncludingRemoved(vm.getAccountId()); DomainVO domain = domainDao.findByIdIncludingRemoved(vm.getDomainId()); DataCenterVO zone = dataCenterDao.findByIdIncludingRemoved(vm.getDataCenterId()); - BackupOffering offering = backupOfferingDao.findByIdIncludingRemoved(vm.getBackupOfferingId()); + Long offeringId = vm.getBackupOfferingId(); + if (offeringId == null) { + offeringId = backup.getBackupOfferingId(); + } + BackupOffering offering = backupOfferingDao.findByIdIncludingRemoved(offeringId); BackupResponse response = new BackupResponse(); response.setId(backup.getUuid());