Skip to content

Commit 39ea6b7

Browse files
committed
Add dataSize, backupSize to Backup.RestorePoint for all providers
1 parent 918b8b8 commit 39ea6b7

File tree

18 files changed

+335
-372
lines changed

18 files changed

+335
-372
lines changed

api/src/main/java/com/cloud/event/EventTypes.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ public class EventTypes {
604604
public static final String EVENT_VM_BACKUP_IMPORT_OFFERING = "BACKUP.IMPORT.OFFERING";
605605
public static final String EVENT_VM_BACKUP_OFFERING_ASSIGN = "BACKUP.OFFERING.ASSIGN";
606606
public static final String EVENT_VM_BACKUP_OFFERING_REMOVE = "BACKUP.OFFERING.REMOVE";
607+
public static final String EVENT_VM_BACKUP_DELETE_LAST_POST_OFFERING_REMOVE = "BACKUP.DELETE.LAST.POST.OFFERING.REMOVE";
607608
public static final String EVENT_VM_BACKUP_CREATE = "BACKUP.CREATE";
608609
public static final String EVENT_VM_BACKUP_RESTORE = "BACKUP.RESTORE";
609610
public static final String EVENT_VM_BACKUP_RESTORE_TO_VM = "BACKUP.RESTORE.TO.VM";

api/src/main/java/org/apache/cloudstack/backup/Backup.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,21 @@ class RestorePoint {
8686
private String id;
8787
private Date created;
8888
private String type;
89+
private Long backupSize = 0L;
90+
private Long dataSize = 0L;
8991

9092
public RestorePoint(String id, Date created, String type) {
9193
this.id = id;
9294
this.created = created;
9395
this.type = type;
9496
}
9597

98+
public RestorePoint(String id, Date created, String type, Long backupSize, Long dataSize) {
99+
this(id, created, type);
100+
this.backupSize = backupSize;
101+
this.dataSize = dataSize;
102+
}
103+
96104
public String getId() {
97105
return id;
98106
}
@@ -116,6 +124,22 @@ public String getType() {
116124
public void setType(String type) {
117125
this.type = type;
118126
}
127+
128+
public Long getBackupSize() {
129+
return backupSize;
130+
}
131+
132+
public void setBackupSize(Long backupSize) {
133+
this.backupSize = backupSize;
134+
}
135+
136+
public Long getDataSize() {
137+
return dataSize;
138+
}
139+
140+
public void setDataSize(Long dataSize) {
141+
this.dataSize = dataSize;
142+
}
119143
}
120144

121145
class VolumeInfo {

api/src/main/java/org/apache/cloudstack/backup/BackupProvider.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.apache.cloudstack.backup;
1818

1919
import java.util.List;
20-
import java.util.Map;
2120

2221
import com.cloud.utils.Pair;
2322
import com.cloud.vm.VirtualMachine;
@@ -97,12 +96,10 @@ public interface BackupProvider {
9796
Pair<Boolean, String> restoreBackedUpVolume(Backup backup, String volumeUuid, String hostIp, String dataStoreUuid, Pair<String, VirtualMachine.State> vmNameAndState);
9897

9998
/**
100-
* Returns backup metrics for a list of VMs in a zone
99+
* Syncs backup metrics (backup size, protected size) from the plugin and stores it within the provider
101100
* @param zoneId the zone for which to return metrics
102-
* @param vms a list of machines to get measurements for
103-
* @return a map of machine -> backup metrics
104101
*/
105-
Map<VirtualMachine, Backup.Metric> getBackupMetrics(Long zoneId, List<VirtualMachine> vms);
102+
void syncBackupMetrics(Long zoneId);
106103

107104
/**
108105
* This method should TODO
@@ -112,11 +109,11 @@ public interface BackupProvider {
112109

113110
/**
114111
* This method should TODO
112+
*
115113
* @param restorePoint the restore point to create a backup for
116-
* @param vm The machine for which to create a backup
117-
* @param metric the metric object to update with the new backup data
114+
* @param vm The machine for which to create a backup
118115
*/
119-
Backup createNewBackupEntryForRestorePoint(Backup.RestorePoint restorePoint, VirtualMachine vm, Backup.Metric metric);
116+
Backup createNewBackupEntryForRestorePoint(Backup.RestorePoint restorePoint, VirtualMachine vm);
120117

121118
/**
122119
* Returns if the backup provider supports creating new instance from backup

engine/schema/src/main/java/com/cloud/usage/dao/UsageBackupDao.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import com.cloud.utils.db.GenericDao;
2525

2626
public interface UsageBackupDao extends GenericDao<UsageBackupVO, Long> {
27-
void updateMetrics(Long vmId, Long size, Long virtualSize);
28-
void removeUsage(Long accountId, Long vmId, Date eventDate);
27+
void updateMetrics(Long vmId, Long backupOfferingId, Long size, Long virtualSize);
28+
void removeUsage(Long accountId, Long vmId, Long backupOfferingId, Date eventDate);
2929
List<UsageBackupVO> getUsageRecords(Long accountId, Date startDate, Date endDate);
3030
}

engine/schema/src/main/java/com/cloud/usage/dao/UsageBackupDaoImpl.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,17 @@
3636

3737
@Component
3838
public class UsageBackupDaoImpl extends GenericDaoBase<UsageBackupVO, Long> implements UsageBackupDao {
39-
protected static final String UPDATE_DELETED = "UPDATE usage_backup SET removed = ? WHERE account_id = ? AND vm_id = ? and removed IS NULL";
39+
protected static final String UPDATE_DELETED = "UPDATE usage_backup SET removed = ? WHERE account_id = ? AND vm_id = ? and backup_offering_id = ? and removed IS NULL";
4040
protected static final String GET_USAGE_RECORDS_BY_ACCOUNT = "SELECT id, zone_id, account_id, domain_id, vm_id, backup_offering_id, size, protected_size, created, removed FROM usage_backup WHERE " +
4141
" account_id = ? AND ((removed IS NULL AND created <= ?) OR (created BETWEEN ? AND ?) OR (removed BETWEEN ? AND ?) " +
4242
" OR ((created <= ?) AND (removed >= ?)))";
4343

4444
@Override
45-
public void updateMetrics(final Long vmId, final Long size, final Long virtualSize) {
45+
public void updateMetrics(final Long vmId, Long backupOfferingId, final Long size, final Long virtualSize) {
4646
try (TransactionLegacy txn = TransactionLegacy.open(TransactionLegacy.USAGE_DB)) {
4747
SearchCriteria<UsageBackupVO> sc = this.createSearchCriteria();
4848
sc.addAnd("vmId", SearchCriteria.Op.EQ, vmId);
49+
sc.addAnd("backupOfferingId", SearchCriteria.Op.EQ, backupOfferingId);
4950
UsageBackupVO vo = findOneBy(sc);
5051
if (vo != null) {
5152
vo.setSize(size);
@@ -58,7 +59,7 @@ public void updateMetrics(final Long vmId, final Long size, final Long virtualSi
5859
}
5960

6061
@Override
61-
public void removeUsage(Long accountId, Long vmId, Date eventDate) {
62+
public void removeUsage(Long accountId, Long vmId, Long backupOfferingId, Date eventDate) {
6263
TransactionLegacy txn = TransactionLegacy.open(TransactionLegacy.USAGE_DB);
6364
try {
6465
txn.start();
@@ -67,6 +68,7 @@ public void removeUsage(Long accountId, Long vmId, Date eventDate) {
6768
pstmt.setString(1, DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), eventDate));
6869
pstmt.setLong(2, accountId);
6970
pstmt.setLong(3, vmId);
71+
pstmt.setLong(3, backupOfferingId);
7072
pstmt.executeUpdate();
7173
}
7274
} catch (SQLException e) {

engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ public interface VMInstanceDao extends GenericDao<VMInstanceVO, Long>, StateDao<
118118

119119
List<VMInstanceVO> listVmsMigratingFromHost(Long hostId);
120120

121-
List<VMInstanceVO> listByZoneWithBackups(Long zoneId, Long backupOfferingId);
121+
List<VMInstanceVO> listByZoneAndBackupOffering(Long zoneId, Long backupOfferingId);
122122

123123
public Long countActiveByHostId(long hostId);
124124

engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ public List<VMInstanceVO> listVmsMigratingFromHost(Long hostId) {
651651
}
652652

653653
@Override
654-
public List<VMInstanceVO> listByZoneWithBackups(Long zoneId, Long backupOfferingId) {
654+
public List<VMInstanceVO> listByZoneAndBackupOffering(Long zoneId, Long backupOfferingId) {
655655
SearchCriteria<VMInstanceVO> sc = BackupSearch.create();
656656
sc.setParameters("zone_id", zoneId);
657657
if (backupOfferingId != null) {

plugins/backup/dummy/src/main/java/org/apache/cloudstack/backup/DummyBackupProvider.java

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.util.Arrays;
2020
import java.util.Date;
21-
import java.util.HashMap;
2221
import java.util.List;
2322
import java.util.Map;
2423

@@ -28,7 +27,6 @@
2827
import com.cloud.storage.dao.VolumeDao;
2928

3029
import org.apache.cloudstack.backup.dao.BackupDao;
31-
import org.apache.commons.collections.CollectionUtils;
3230
import org.apache.logging.log4j.LogManager;
3331
import org.apache.logging.log4j.Logger;
3432

@@ -91,26 +89,7 @@ public Pair<Boolean, String> restoreBackedUpVolume(Backup backup, String volumeU
9189
throw new CloudRuntimeException("Dummy plugin does not support this feature");
9290
}
9391

94-
@Override
95-
public Map<VirtualMachine, Backup.Metric> getBackupMetrics(Long zoneId, List<VirtualMachine> vms) {
96-
final Map<VirtualMachine, Backup.Metric> metrics = new HashMap<>();
97-
if (CollectionUtils.isEmpty(vms)) {
98-
LOG.warn("Unable to get VM Backup Metrics because the list of VMs is empty.");
99-
return metrics;
100-
}
101-
102-
for (final VirtualMachine vm : vms) {
103-
Long vmBackupSize = 0L;
104-
Long vmBackupProtectedSize = 0L;
105-
for (final Backup backup: backupDao.listByVmId(null, vm.getId())) {
106-
vmBackupSize += backup.getSize();
107-
vmBackupProtectedSize += backup.getProtectedSize();
108-
}
109-
Backup.Metric vmBackupMetric = new Backup.Metric(vmBackupSize,vmBackupProtectedSize);
110-
LOG.debug("Metrics for VM {} is [backup size: {}, data size: {}].", vm, vmBackupMetric.getBackupSize(), vmBackupMetric.getDataSize());
111-
metrics.put(vm, vmBackupMetric);
112-
}
113-
return metrics;
92+
public void syncBackupMetrics(Long zoneId) {
11493
}
11594

11695
@Override
@@ -119,7 +98,7 @@ public List<Backup.RestorePoint> listRestorePoints(VirtualMachine vm) {
11998
}
12099

121100
@Override
122-
public Backup createNewBackupEntryForRestorePoint(Backup.RestorePoint restorePoint, VirtualMachine vm, Backup.Metric metric) {
101+
public Backup createNewBackupEntryForRestorePoint(Backup.RestorePoint restorePoint, VirtualMachine vm) {
123102
return null;
124103
}
125104

plugins/backup/nas/src/main/java/org/apache/cloudstack/backup/NASBackupProvider.java

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
import java.util.List;
5656
import java.util.Locale;
5757
import java.util.Map;
58-
import java.util.HashMap;
5958
import java.util.Objects;
6059
import java.util.Optional;
6160
import java.util.Random;
@@ -394,30 +393,7 @@ public boolean deleteBackup(Backup backup, boolean forced) {
394393
return false;
395394
}
396395

397-
@Override
398-
public Map<VirtualMachine, Backup.Metric> getBackupMetrics(Long zoneId, List<VirtualMachine> vms) {
399-
final Map<VirtualMachine, Backup.Metric> metrics = new HashMap<>();
400-
if (CollectionUtils.isEmpty(vms)) {
401-
LOG.warn("Unable to get VM Backup Metrics because the list of VMs is empty.");
402-
return metrics;
403-
}
404-
405-
for (final VirtualMachine vm : vms) {
406-
Long vmBackupSize = 0L;
407-
Long vmBackupProtectedSize = 0L;
408-
for (final Backup backup: backupDao.listByVmId(null, vm.getId())) {
409-
if (Objects.nonNull(backup.getSize())) {
410-
vmBackupSize += backup.getSize();
411-
}
412-
if (Objects.nonNull(backup.getProtectedSize())) {
413-
vmBackupProtectedSize += backup.getProtectedSize();
414-
}
415-
}
416-
Backup.Metric vmBackupMetric = new Backup.Metric(vmBackupSize,vmBackupProtectedSize);
417-
LOG.debug("Metrics for VM {} is [backup size: {}, data size: {}].", vm, vmBackupMetric.getBackupSize(), vmBackupMetric.getDataSize());
418-
metrics.put(vm, vmBackupMetric);
419-
}
420-
return metrics;
396+
public void syncBackupMetrics(Long zoneId) {
421397
}
422398

423399
@Override
@@ -426,7 +402,7 @@ public List<Backup.RestorePoint> listRestorePoints(VirtualMachine vm) {
426402
}
427403

428404
@Override
429-
public Backup createNewBackupEntryForRestorePoint(Backup.RestorePoint restorePoint, VirtualMachine vm, Backup.Metric metric) {
405+
public Backup createNewBackupEntryForRestorePoint(Backup.RestorePoint restorePoint, VirtualMachine vm) {
430406
return null;
431407
}
432408

plugins/backup/nas/src/test/java/org/apache/cloudstack/backup/NASBackupProviderTest.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import com.cloud.storage.dao.VolumeDao;
5252
import com.cloud.utils.Pair;
5353
import com.cloud.vm.VMInstanceVO;
54-
import com.cloud.vm.VirtualMachine;
5554
import com.cloud.vm.dao.VMInstanceDao;
5655

5756
@RunWith(MockitoJUnitRunner.class)
@@ -113,26 +112,6 @@ public void testDeleteBackup() throws OperationTimedoutException, AgentUnavailab
113112
Assert.assertTrue(result);
114113
}
115114

116-
@Test
117-
public void testGetBackupMetrics() {
118-
VMInstanceVO vm = mock(VMInstanceVO.class);
119-
Mockito.when(vm.getId()).thenReturn(1L);
120-
121-
Backup backup1 = mock(Backup.class);
122-
Mockito.when(backup1.getSize()).thenReturn(100L);
123-
Mockito.when(backup1.getProtectedSize()).thenReturn(50L);
124-
Backup backup2 = mock(Backup.class);
125-
Mockito.when(backup2.getSize()).thenReturn(200L);
126-
Mockito.when(backup2.getProtectedSize()).thenReturn(50L);
127-
128-
Mockito.when(backupDao.listByVmId(null, 1L)).thenReturn(List.of(backup1, backup2));
129-
130-
Map<VirtualMachine, Backup.Metric> result = nasBackupProvider.getBackupMetrics(1L, Collections.singletonList(vm));
131-
Assert.assertEquals(1, result.size());
132-
Assert.assertEquals(300L, result.get(vm).getBackupSize().longValue());
133-
Assert.assertEquals(100L, result.get(vm).getDataSize().longValue());
134-
}
135-
136115
@Test
137116
public void testSyncBackupStorageStats() throws AgentUnavailableException, OperationTimedoutException {
138117
BackupRepositoryVO backupRepository = new BackupRepositoryVO(1L, "nas", "test-repo",

0 commit comments

Comments
 (0)