1616// under the License.
1717package org .apache .cloudstack .backup ;
1818
19+ import java .io .IOException ;
1920import java .net .URISyntaxException ;
2021import java .security .KeyManagementException ;
2122import java .security .NoSuchAlgorithmException ;
3940
4041import org .apache .commons .collections .CollectionUtils ;
4142import org .apache .commons .lang3 .StringUtils ;
42-
43+ import org . apache . http . ParseException ;
4344import org .joda .time .DateTime ;
4445
4546import com .cloud .utils .Pair ;
@@ -60,7 +61,7 @@ public class BackrollBackupProvider extends AdapterBase implements BackupProvide
6061
6162 public ConfigKey <String > BackrollAppNameConfigKey = new ConfigKey <>("Advanced" , String .class ,
6263 "backup.plugin.backroll.config.appname" ,
63- "backroll_api " ,
64+ "backroll-api " ,
6465 "App Name for backroll plugin." , true , ConfigKey .Scope .Zone );
6566
6667 public ConfigKey <String > BackrollPasswordConfigKey = new ConfigKey <>("Advanced" , String .class ,
@@ -89,9 +90,14 @@ public String getDescription() {
8990 public List <BackupOffering > listBackupOfferings (Long zoneId ) {
9091 logger .debug ("Listing backup policies on backroll B&R Plugin" );
9192 BackrollClient client = getClient (zoneId );
92- String urlToRequest = client .getBackupOfferingUrl ();
93- if (!StringUtils .isEmpty (urlToRequest )){
94- return client .getBackupOfferings (urlToRequest );
93+ try {
94+ String urlToRequest = client .getBackupOfferingUrl ();
95+ if (!StringUtils .isEmpty (urlToRequest )){
96+ return client .getBackupOfferings (urlToRequest );
97+
98+ }
99+ } catch (KeyManagementException | ParseException | NoSuchAlgorithmException | IOException e ) {
100+ throw new CloudRuntimeException ("Failed to load backup offerings" );
95101 }
96102 return new ArrayList <BackupOffering >();
97103 }
@@ -112,7 +118,12 @@ public boolean assignVMToBackupOffering(VirtualMachine vm, BackupOffering backup
112118 @ Override
113119 public boolean restoreVMFromBackup (VirtualMachine vm , Backup backup ) {
114120 logger .debug ("Restoring vm {} from backup {} on the backroll Backup Provider" , vm .getUuid (), backup .getUuid ());
115- boolean isSuccess = getClient (vm .getDataCenterId ()).restoreVMFromBackup (vm .getUuid (), getBackupName (backup ));
121+ boolean isSuccess ;
122+ try {
123+ isSuccess = getClient (vm .getDataCenterId ()).restoreVMFromBackup (vm .getUuid (), getBackupName (backup ));
124+ } catch (KeyManagementException | ParseException | NoSuchAlgorithmException | IOException e ) {
125+ throw new CloudRuntimeException ("Failed to restore VM from Backrup" );
126+ }
116127 return isSuccess ;
117128 }
118129
@@ -132,7 +143,12 @@ public Map<VirtualMachine, Backup.Metric> getBackupMetrics(Long zoneId, List<Vir
132143 continue ;
133144 }
134145
135- Metric metric = getClient (zoneId ).getVirtualMachineMetrics (vm .getUuid ());
146+ Metric metric ;
147+ try {
148+ metric = getClient (zoneId ).getVirtualMachineMetrics (vm .getUuid ());
149+ } catch (KeyManagementException | NoSuchAlgorithmException | IOException e ) {
150+ throw new CloudRuntimeException ("Failed to retrieve backup metrics" );
151+ }
136152 logger .debug ("Metrics for VM [uuid: {}, name: {}] is [backup size: {}, data size: {}]." , vm .getUuid (),
137153 vm .getInstanceName (), metric .getBackupSize (), metric .getDataSize ());
138154 metrics .put (vm , metric );
@@ -151,14 +167,18 @@ public boolean removeVMFromBackupOffering(VirtualMachine vm) {
151167 for (Backup backup : backupsInCs ) {
152168 logger .debug ("Trying to remove backup with id {}" , backup .getId ());
153169
154- if (getClient (backup .getZoneId ()).deleteBackup (vm .getUuid (), getBackupName (backup ))) {
155- logger .info ("Backup {} deleted in Backroll for virtual machine {}" , backup .getId (), vm .getName ());
156- if (!backupDao .remove (backup .getId ())){
157- isAnyProblemWhileRemovingBackups = true ;
170+ try {
171+ if (getClient (backup .getZoneId ()).deleteBackup (vm .getUuid (), getBackupName (backup ))) {
172+ logger .info ("Backup {} deleted in Backroll for virtual machine {}" , backup .getId (), vm .getName ());
173+ if (!backupDao .remove (backup .getId ())){
174+ isAnyProblemWhileRemovingBackups = true ;
175+ }
176+ logger .info ("Backup {} deleted in CS for virtual machine {}" , backup .getId (), vm .getName ());
177+ } else {
178+ isAnyProblemWhileRemovingBackups = false ;
158179 }
159- logger .info ("Backup {} deleted in CS for virtual machine {}" , backup .getId (), vm .getName ());
160- } else {
161- isAnyProblemWhileRemovingBackups = false ;
180+ } catch (KeyManagementException | NoSuchAlgorithmException | IOException e ) {
181+ throw new CloudRuntimeException ("Failed to remove VM from backup offering" );
162182 }
163183 }
164184
@@ -178,7 +198,12 @@ public boolean takeBackup(VirtualMachine vm) {
178198 logger .info ("Starting backup for VM ID {} on backroll provider" , vm .getUuid ());
179199 final BackrollClient client = getClient (vm .getDataCenterId ());
180200
181- String idBackupTask = client .startBackupJob (vm .getUuid ());
201+ String idBackupTask ;
202+ try {
203+ idBackupTask = client .startBackupJob (vm .getUuid ());
204+ } catch (KeyManagementException | NoSuchAlgorithmException | IOException e ) {
205+ throw new CloudRuntimeException ("Failed to take backup" );
206+ }
182207 if (!StringUtils .isEmpty (idBackupTask )) {
183208 BackupVO backup = new BackupVO ();
184209 backup .setVmId (vm .getId ());
@@ -206,7 +231,13 @@ public void syncBackups(VirtualMachine vm, Backup.Metric metric) {
206231
207232 for (Backup backup : backupsInDb ) {
208233 if (backup .getStatus ().equals (Backup .Status .BackingUp )) {
209- BackrollTaskStatus response = client .checkBackupTaskStatus (backup .getExternalId ());
234+ BackrollTaskStatus response ;
235+ try {
236+ response = client .checkBackupTaskStatus (backup .getExternalId ());
237+ } catch (KeyManagementException | ParseException | NoSuchAlgorithmException | IOException e ) {
238+ throw new CloudRuntimeException ("Failed to sync backups" );
239+ }
240+
210241 if (response != null ) {
211242 logger .debug ("backroll backup id: {}" , backup .getExternalId ());
212243 logger .debug ("backroll backup status: {}" , response .getState ());
@@ -231,7 +262,13 @@ public void syncBackups(VirtualMachine vm, Backup.Metric metric) {
231262 backupToUpdate .setStatus (Backup .Status .BackedUp );
232263 backupToUpdate .setExternalId (backup .getExternalId () + "," + response .getInfo ());
233264
234- BackrollBackupMetrics backupMetrics = client .getBackupMetrics (vm .getUuid () , response .getInfo ());
265+ BackrollBackupMetrics backupMetrics = null ;
266+ try {
267+ backupMetrics = client .getBackupMetrics (vm .getUuid () , response .getInfo ());
268+ } catch (KeyManagementException | NoSuchAlgorithmException | IOException e ) {
269+ throw new CloudRuntimeException ("Failed to get backup metrics" );
270+ }
271+
235272 if (backupMetrics != null ) {
236273 backupToUpdate .setSize (backupMetrics .getDeduplicated ()); // real size
237274 backupToUpdate .setProtectedSize (backupMetrics .getSize ()); // total size
@@ -247,7 +284,13 @@ public void syncBackups(VirtualMachine vm, Backup.Metric metric) {
247284 }
248285 } else if (backup .getStatus ().equals (Backup .Status .BackedUp ) && backup .getSize ().equals (0L )) {
249286 String backupId = backup .getExternalId ().contains ("," ) ? backup .getExternalId ().split ("," )[1 ] : backup .getExternalId ();
250- BackrollBackupMetrics backupMetrics = client .getBackupMetrics (vm .getUuid () , backupId );
287+ BackrollBackupMetrics backupMetrics ;
288+ try {
289+ backupMetrics = client .getBackupMetrics (vm .getUuid () , backupId );
290+ } catch (KeyManagementException | NoSuchAlgorithmException | IOException e ) {
291+ throw new CloudRuntimeException ("Failed to get backup metrics" );
292+ }
293+
251294 if (backupMetrics != null ) {
252295 BackupVO backupToUpdate = ((BackupVO ) backup );
253296 backupToUpdate .setSize (backupMetrics .getDeduplicated ()); // real size
@@ -338,9 +381,13 @@ public boolean deleteBackup(Backup backup, boolean forced) {
338381 if (backup .getStatus ().equals (Backup .Status .Removed ) || backup .getStatus ().equals (Backup .Status .Failed )){
339382 return deleteBackupInDb (backup );
340383 } else {
341- if (getClient (backup .getZoneId ()).deleteBackup (vm .getUuid (), getBackupName (backup ))) {
342- logger .debug ("Backup deletion for backup {} complete on backroll side." , backup .getUuid ());
343- return deleteBackupInDb (backup );
384+ try {
385+ if (getClient (backup .getZoneId ()).deleteBackup (vm .getUuid (), getBackupName (backup ))) {
386+ logger .debug ("Backup deletion for backup {} complete on backroll side." , backup .getUuid ());
387+ return deleteBackupInDb (backup );
388+ }
389+ } catch (KeyManagementException | NoSuchAlgorithmException | IOException e ) {
390+ throw new CloudRuntimeException ("Failed to delete backup" );
344391 }
345392 }
346393 }
0 commit comments