3434import org .apache .cloudstack .backup .Backup .RestorePoint ;
3535import org .apache .cloudstack .backup .backroll .BackrollClient ;
3636import org .apache .cloudstack .backup .backroll .model .BackrollBackupMetrics ;
37- import org .apache .cloudstack .backup .backroll .model .BackrollTaskStatus ;
38- import org .apache .cloudstack .backup .backroll .model .BackrollVmBackup ;
3937import org .apache .cloudstack .backup .backroll .utils .BackrollApiException ;
4038import org .apache .cloudstack .backup .backroll .utils .BackrollHttpClientProvider ;
4139import org .apache .cloudstack .backup .dao .BackupDao ;
@@ -155,9 +153,6 @@ public boolean restoreVMFromBackup(VirtualMachine vm, Backup backup) {
155153
156154 @ Override
157155 public Map <VirtualMachine , Backup .Metric > getBackupMetrics (Long zoneId , List <VirtualMachine > vms ) {
158- Long vmBackupSize =0L ;
159- Long vmBackupProtectedSize =0L ;
160-
161156 final Map <VirtualMachine , Backup .Metric > metrics = new HashMap <>();
162157 if (CollectionUtils .isEmpty (vms )) {
163158 logger .warn ("Unable to get VM Backup Metrics because the list of VMs is empty." );
@@ -175,13 +170,7 @@ public Map<VirtualMachine, Backup.Metric> getBackupMetrics(Long zoneId, List<Vir
175170
176171 Metric metric ;
177172 try {
178- final List <BackrollVmBackup > backups = client .getAllBackupsfromVirtualMachine (vm .getUuid ());
179- for (BackrollVmBackup backup : backups ) {
180- BackrollBackupMetrics backupMetric = client .getBackupMetrics (vm .getUuid (), backup .getId ());
181- vmBackupProtectedSize += backupMetric .getDeduplicated ();
182- vmBackupSize += backupMetric .getSize ();
183- }
184- metric = new Metric (vmBackupSize , vmBackupProtectedSize );
173+ metric = client .getVirtualMachineMetrics (vm .getUuid ());
185174 } catch (BackrollApiException | IOException e ) {
186175 throw new CloudRuntimeException ("Failed to retrieve backup metrics" );
187176 }
@@ -235,136 +224,6 @@ public Pair<Boolean, Backup> takeBackup(VirtualMachine vm) {
235224 return new Pair <Boolean ,Backup >(false , null );
236225 }
237226
238-
239- public void syncBackups (VirtualMachine vm , Backup .Metric metric ) {
240- logger .info ("Starting sync backup for VM ID " + vm .getUuid () + " on backroll provider" );
241-
242- final BackrollClient client = getClient (vm .getDataCenterId ());
243- List <Backup > backupsInDb = backupDao .listByVmId (vm .getDataCenterId (), vm .getId ());
244-
245- for (Backup backup : backupsInDb ) {
246- if (backup .getStatus ().equals (Backup .Status .BackingUp )) {
247- BackrollTaskStatus response ;
248- try {
249- response = client .checkBackupTaskStatus (backup .getExternalId ());
250- } catch (ParseException | BackrollApiException | IOException e ) {
251- logger .error (e );
252- throw new CloudRuntimeException ("Failed to sync backups" );
253- }
254-
255- if (response != null ) {
256- logger .debug ("backroll backup id: {}" , backup .getExternalId ());
257- logger .debug ("backroll backup status: {}" , response .getState ());
258-
259- BackupVO backupToUpdate = ((BackupVO ) backup );
260-
261- if (response .getState ().equals ("PENDING" )) {
262- backupToUpdate .setStatus (Backup .Status .BackingUp );
263- } else if (response .getState ().equals ("FAILURE" )) {
264- backupToUpdate .setStatus (Backup .Status .Failed );
265- } else if (response .getState ().equals ("SUCCESS" )) {
266- backupToUpdate .setStatus (Backup .Status .BackedUp );
267- backupToUpdate .setExternalId (backup .getExternalId () + "," + response .getInfo ());
268-
269- BackrollBackupMetrics backupMetrics = null ;
270- try {
271- backupMetrics = client .getBackupMetrics (vm .getUuid () , response .getInfo ());
272- if (backupMetrics != null ) {
273- backupToUpdate .setSize (backupMetrics .getDeduplicated ()); // real size
274- backupToUpdate .setProtectedSize (backupMetrics .getSize ()); // total size
275- }
276- } catch (BackrollApiException | IOException e ) {
277- logger .error (e );
278- throw new CloudRuntimeException ("Failed to get backup metrics" );
279- }
280- } else {
281- backupToUpdate .setStatus (Backup .Status .BackingUp );
282- }
283-
284- if (backupDao .persist (backupToUpdate ) != null ) {
285- logger .info ("Backroll mise à jour enregistrée" );
286- }
287- }
288- } else if (backup .getStatus ().equals (Backup .Status .BackedUp ) && backup .getSize ().equals (0L )) {
289- String backupId = backup .getExternalId ().contains ("," ) ? backup .getExternalId ().split ("," )[1 ] : backup .getExternalId ();
290- BackrollBackupMetrics backupMetrics ;
291- try {
292- backupMetrics = client .getBackupMetrics (vm .getUuid () , backupId );
293- } catch (BackrollApiException | IOException e ) {
294- logger .error (e );
295- throw new CloudRuntimeException ("Failed to get backup metrics" );
296- }
297-
298- if (backupMetrics != null ) {
299- BackupVO backupToUpdate = ((BackupVO ) backup );
300- backupToUpdate .setSize (backupMetrics .getDeduplicated ()); // real size
301- backupToUpdate .setProtectedSize (backupMetrics .getSize ()); // total size
302- backupDao .persist (backupToUpdate );
303- }
304- }
305- }
306-
307- // Backups synchronisation between Backroll ad CS Db
308- List <BackrollVmBackup > backupsFromBackroll ;
309- try {
310- backupsFromBackroll = client .getAllBackupsfromVirtualMachine (vm .getUuid ());
311-
312- backupsInDb = backupDao .listByVmId (null , vm .getId ());
313-
314- // insert new backroll backup in CS
315- for (BackrollVmBackup backupInBackroll : backupsFromBackroll ) {
316- Backup backupToFind = backupsInDb .stream ()
317- .filter (backupInDb -> backupInDb .getExternalId ().contains (backupInBackroll .getName ()))
318- .findAny ()
319- .orElse (null );
320-
321- if (backupToFind == null ) {
322- BackupVO backupToInsert = new BackupVO ();
323- backupToInsert .setVmId (vm .getId ());
324- backupToInsert .setExternalId (backupInBackroll .getId () + "," + backupInBackroll .getName ());
325- backupToInsert .setType ("INCREMENTAL" );
326- backupToInsert .setDate (backupInBackroll .getDate ());
327- backupToInsert .setSize (0L );
328- backupToInsert .setProtectedSize (0L );
329- backupToInsert .setStatus (Backup .Status .BackedUp );
330- backupToInsert .setBackupOfferingId (vm .getBackupOfferingId ());
331- backupToInsert .setAccountId (vm .getAccountId ());
332- backupToInsert .setDomainId (vm .getDomainId ());
333- backupToInsert .setZoneId (vm .getDataCenterId ());
334- backupDao .persist (backupToInsert );
335- }
336- if (backupToFind != null && backupToFind .getStatus () == Backup .Status .Removed ) {
337- BackupVO backupToUpdate = ((BackupVO ) backupToFind );
338- backupToUpdate .setStatus (Backup .Status .BackedUp );
339- if (backupDao .persist (backupToUpdate ) != null ) {
340- logger .info ("Backroll update saved" );
341- backupDao .remove (backupToFind .getId ());
342- }
343- }
344- }
345-
346- // delete deleted backroll backup in CS
347- backupsInDb = backupDao .listByVmId (null , vm .getId ());
348- for (Backup backup : backupsInDb ) {
349- String backupName = backup .getExternalId ().contains ("," ) ? backup .getExternalId ().split ("," )[1 ] : backup .getExternalId ();
350- BackrollVmBackup backupToFind = backupsFromBackroll .stream ()
351- .filter (backupInBackroll -> backupInBackroll .getName ().contains (backupName ))
352- .findAny ()
353- .orElse (null );
354-
355- if (backupToFind == null ) {
356- BackupVO backupToUpdate = ((BackupVO ) backup );
357- backupToUpdate .setStatus (Backup .Status .Removed );
358- if (backupDao .persist (backupToUpdate ) != null ) {
359- logger .debug ("Backroll delete saved (sync)" );
360- }
361- }
362- }
363- } catch (BackrollApiException | IOException e ) {
364- logger .error (e );
365- }
366- }
367-
368227 @ Override
369228 public String getConfigComponentName () {
370229 return BackupService .class .getSimpleName ();
@@ -381,24 +240,24 @@ public ConfigKey<?>[] getConfigKeys() {
381240
382241 @ Override
383242 public boolean deleteBackup (Backup backup , boolean forced ) {
384- logger .info ("backroll delete backup id: {}" , backup .getExternalId ());
243+ logger .info ("BACKROLL: delete backup id: {}" , backup .getExternalId ());
385244 if (backup .getStatus ().equals (Backup .Status .BackingUp )) {
386245 throw new CloudRuntimeException ("You can't delete a backup while it still BackingUp" );
387246 } else {
388- logger .debug ("backroll - try delete backup" );
247+ logger .debug ("BACKROLL: try delete backup" );
389248
390249 if (backup .getStatus ().equals (Backup .Status .Removed ) || backup .getStatus ().equals (Backup .Status .Failed )){
391250 return deleteBackupInDb (backup );
392251 } else {
393252 VMInstanceVO vm = vmInstanceDao .findByIdIncludingRemoved (backup .getVmId ());
394253 try {
395254 if (getClient (backup .getZoneId ()).deleteBackup (vm .getUuid (), getBackupName (backup ))) {
396- logger .debug ("Backup deletion for backup {} complete on backroll side." , backup .getUuid ());
255+ logger .debug ("BACKROLL: Backup deletion for backup {} complete on backroll side." , backup .getUuid ());
397256 return deleteBackupInDb (backup );
398257 }
399258 } catch (BackrollApiException | IOException e ) {
400259 logger .error (e );
401- throw new CloudRuntimeException ("Failed to delete backup" );
260+ throw new CloudRuntimeException ("BACKROLL: Failed to delete backup" );
402261 }
403262 }
404263 }
@@ -409,7 +268,7 @@ private boolean deleteBackupInDb(Backup backup) {
409268 BackupVO backupToUpdate = ((BackupVO ) backup );
410269 backupToUpdate .setStatus (Backup .Status .Removed );
411270 if (backupDao .persist (backupToUpdate ) != null ) {
412- logger .debug ("Backroll backup {} deleted in database." , backup .getUuid ());
271+ logger .debug ("BACKROLL: Backroll backup {} deleted in database." , backup .getUuid ());
413272 VMInstanceVO vm = vmInstanceDao .findByIdIncludingRemoved (backup .getVmId ());
414273 return true ;
415274 }
@@ -421,7 +280,7 @@ protected BackrollClient getClient(final Long zoneId) {
421280 try {
422281 if (backrollClient == null ) {
423282 logger .debug ("backroll client null - instantiation of new one " );
424- BackrollHttpClientProvider provider = BackrollHttpClientProvider .createProvider (new BackrollHttpClientProvider (), BackrollUrlConfigKey .valueIn (zoneId ), BackrollAppNameConfigKey .valueIn (zoneId ), BackrollPasswordConfigKey .valueIn (zoneId ), true , 300 , 600 );
283+ BackrollHttpClientProvider provider = BackrollHttpClientProvider .createProvider (BackrollUrlConfigKey .valueIn (zoneId ), BackrollAppNameConfigKey .valueIn (zoneId ), BackrollPasswordConfigKey .valueIn (zoneId ), true , 300 , 600 );
425284 backrollClient = new BackrollClient (provider );
426285 }
427286 return backrollClient ;
@@ -451,7 +310,7 @@ public List<RestorePoint> listRestorePoints(VirtualMachine vm) {
451310 return client .listRestorePoints (vm .getUuid ());
452311 } catch (BackrollApiException | IOException e ) {
453312 logger .error (e );
454- throw new CloudRuntimeException ("Failed to delete backup " );
313+ throw new CloudRuntimeException ("Error while listing restore points " );
455314 }
456315 }
457316
0 commit comments