Skip to content

Commit 3e90f8e

Browse files
committed
WIP
1 parent 6a690b7 commit 3e90f8e

File tree

3 files changed

+298
-125
lines changed

3 files changed

+298
-125
lines changed

plugins/backup/backroll/src/main/java/org/apache/cloudstack/backup/BackrollBackupProvider.java

Lines changed: 68 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// under the License.
1717
package org.apache.cloudstack.backup;
1818

19+
import java.io.IOException;
1920
import java.net.URISyntaxException;
2021
import java.security.KeyManagementException;
2122
import java.security.NoSuchAlgorithmException;
@@ -39,7 +40,7 @@
3940

4041
import org.apache.commons.collections.CollectionUtils;
4142
import org.apache.commons.lang3.StringUtils;
42-
43+
import org.apache.http.ParseException;
4344
import org.joda.time.DateTime;
4445

4546
import 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

Comments
 (0)