This is an automated email from the ASF dual-hosted git repository. abh1sar pushed a commit to branch hide-fields-kboss in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 9f8b04dedd91a159fb1eb43b345e0ee86f474b93 Author: Abhisar Sinha <[email protected]> AuthorDate: Tue Jul 21 22:29:09 2026 +0530 Don't set compressionstatus and validation status in backupVO and backupsResponse for non-kboss providers. These columns are hidden in UI if they are not set. --- .../src/main/java/org/apache/cloudstack/backup/BackupVO.java | 9 ++++----- .../org/apache/cloudstack/backup/KbossBackupProvider.java | 3 ++- .../java/org/apache/cloudstack/backup/BackupManagerImpl.java | 12 ++++++++---- ui/src/views/AutogenView.vue | 10 ++++++++++ ui/src/views/compute/InstanceTab.vue | 4 +++- 5 files changed, 27 insertions(+), 11 deletions(-) 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 c2b091700ed..b4cad92d877 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 @@ -128,11 +128,10 @@ public class BackupVO implements Backup { public BackupVO() { this.uuid = UUID.randomUUID().toString(); - this.compressionStatus = CompressionStatus.Uncompressed; - this.validationStatus = ValidationStatus.NotValidated; } - public BackupVO(String name, long vmId, long backupOfferingId, long accountId, long domainId, long zoneId, long virtualSize, Status status, Long backupScheduleId) { + public BackupVO(String name, long vmId, long backupOfferingId, long accountId, long domainId, long zoneId, long virtualSize, + Status status, Long backupScheduleId, CompressionStatus compressionStatus, ValidationStatus validationStatus) { this.name = name; this.vmId = vmId; this.backupOfferingId = backupOfferingId; @@ -144,8 +143,8 @@ public class BackupVO implements Backup { this.setType("FULL"); this.uuid = UUID.randomUUID().toString(); this.backupScheduleId = backupScheduleId; - this.compressionStatus = CompressionStatus.Uncompressed; - this.validationStatus = ValidationStatus.NotValidated; + this.compressionStatus = compressionStatus; + this.validationStatus = validationStatus; } @Override diff --git a/plugins/backup/kboss/src/main/java/org/apache/cloudstack/backup/KbossBackupProvider.java b/plugins/backup/kboss/src/main/java/org/apache/cloudstack/backup/KbossBackupProvider.java index 60bfb7a0b58..0569c318935 100644 --- a/plugins/backup/kboss/src/main/java/org/apache/cloudstack/backup/KbossBackupProvider.java +++ b/plugins/backup/kboss/src/main/java/org/apache/cloudstack/backup/KbossBackupProvider.java @@ -1071,7 +1071,8 @@ public class KbossBackupProvider extends AdapterBase implements InternalBackupPr long vmId = vm.getId(); BackupVO backup = new BackupVO(String.format("%s-%s", vm.getHostName(), DateUtil.getDateInSystemTimeZone()), vmId, vm.getBackupOfferingId(), accountId, - vm.getDomainId(), vm.getDataCenterId(), 0, Backup.Status.Queued, backupScheduleId); + vm.getDomainId(), vm.getDataCenterId(), 0, Backup.Status.Queued, backupScheduleId, + Backup.CompressionStatus.Uncompressed, Backup.ValidationStatus.NotValidated); VmWorkJobVO workJob = new VmWorkJobVO(AsyncJobExecutionContext.getOriginJobId(), userId, accountId, VmWorkTakeBackup.class.getName(), vmId, VirtualMachine.Type.Instance, VmWorkJobVO.Step.Starting); diff --git a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java index 9be4c7ea083..58bad20e4f1 100644 --- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java @@ -2653,11 +2653,15 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager { response.setProtectedSize(backup.getProtectedSize()); response.setStatus(backup.getStatus()); response.setIntervalType("MANUAL"); - response.setCompressionStatus(backup.getCompressionStatus()); - if (backup.getUncompressedSize() != null && backup.getUncompressedSize() > 0) { - response.setUncompressedSize(backup.getUncompressedSize()); + if (backup.getCompressionStatus() != null) { + response.setCompressionStatus(backup.getCompressionStatus()); + if (backup.getUncompressedSize() != null && backup.getUncompressedSize() > 0) { + response.setUncompressedSize(backup.getUncompressedSize()); + } + } + if (backup.getValidationStatus() != null) { + response.setValidationStatus(backup.getValidationStatus()); } - response.setValidationStatus(backup.getValidationStatus()); if (backup.getBackupScheduleId() != null) { BackupScheduleVO scheduleVO = backupScheduleDao.findById(backup.getBackupScheduleId()); if (scheduleVO != null) { diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue index 284aee4ffa3..8b492d507a2 100644 --- a/ui/src/views/AutogenView.vue +++ b/ui/src/views/AutogenView.vue @@ -1267,6 +1267,16 @@ export default { }) } + if (this.apiName === 'listBackups') { + const kbossFields = ['compressionstatus', 'validationstatus'] + const hasKbossData = this.items.some(backup => kbossFields.some(field => backup[field])) + if (!hasKbossData) { + this.columns = this.columns.filter(col => !kbossFields.includes(col.dataIndex)) + this.allColumns = this.allColumns.filter(col => !kbossFields.includes(col.dataIndex)) + this.selectedColumns = this.selectedColumns.filter(key => !kbossFields.includes(key)) + } + } + for (let idx = 0; idx < this.items.length; idx++) { this.items[idx].key = idx for (const key in customRender) { diff --git a/ui/src/views/compute/InstanceTab.vue b/ui/src/views/compute/InstanceTab.vue index 85710db933e..d125995e3e1 100644 --- a/ui/src/views/compute/InstanceTab.vue +++ b/ui/src/views/compute/InstanceTab.vue @@ -74,7 +74,9 @@ apiName="listBackups" :resource="resource" :params="{virtualmachineid: dataResource.id}" - :columns="['name', 'status', 'compressionstatus', 'validationstatus', 'size', 'virtualsize', 'type', 'intervaltype', 'created']" + :columns="dataResource.backupprovider === 'kboss' + ? ['name', 'status', 'compressionstatus', 'validationstatus', 'size', 'virtualsize', 'type', 'intervaltype', 'created'] + : ['name', 'status', 'size', 'virtualsize', 'type', 'intervaltype', 'created']" :routerlinks="(record) => { return { name: '/backup/' + record.id } }" :showSearch="false"/> </a-tab-pane>
