Skip to content

Commit 9ceb106

Browse files
committed
Fix communication between CS and Backroll
1 parent 3e90f8e commit 9ceb106

File tree

2 files changed

+42
-21
lines changed

2 files changed

+42
-21
lines changed

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,24 @@ public String getDescription() {
8989
@Override
9090
public List<BackupOffering> listBackupOfferings(Long zoneId) {
9191
logger.debug("Listing backup policies on backroll B&R Plugin");
92+
logger.info("Listing backup policies on backroll B&R Plugin");
9293
BackrollClient client = getClient(zoneId);
9394
try{
9495
String urlToRequest = client.getBackupOfferingUrl();
96+
logger.info("BackrollProvider: urlToRequest: " + urlToRequest);
9597
if (!StringUtils.isEmpty(urlToRequest)){
96-
return client.getBackupOfferings(urlToRequest);
97-
98+
List<BackupOffering> results = new ArrayList<BackupOffering>();
99+
// return client.getBackupOfferings(urlToRequest);
100+
results = client.getBackupOfferings(urlToRequest);
101+
if(results.size()>0) {
102+
logger.info("BackrollProvider: results > 0");
103+
} else {
104+
logger.info("BackrollProvider: results <= 0");
105+
}
106+
return results;
98107
}
99108
} catch (KeyManagementException | ParseException | NoSuchAlgorithmException | IOException e) {
109+
logger.info("BackrollProvider: catch erreur!!!!!!!!!!!!!!!!!!!!!!!!");
100110
throw new CloudRuntimeException("Failed to load backup offerings");
101111
}
102112
return new ArrayList<BackupOffering>();

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

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public String startBackupJob(final String jobId) throws KeyManagementException,
149149
try {
150150
CloseableHttpResponse response = post(String.format("/tasks/singlebackup/%s", jobId), null);
151151
String result = okBody(response);
152-
BackrollTaskRequestResponse requestResponse = parse(result);
152+
BackrollTaskRequestResponse requestResponse = new ObjectMapper().readValue(result, BackrollTaskRequestResponse.class);
153153
response.close();
154154
backupJob = requestResponse.location.replace("/api/v1/status/", "");
155155
} catch (final Exception e) {
@@ -167,10 +167,14 @@ public String getBackupOfferingUrl() throws KeyManagementException, NoSuchAlgori
167167
try {
168168
CloseableHttpResponse response = get("/backup_policies");
169169
String result = okBody(response);
170-
BackrollTaskRequestResponse requestResponse = parse(result);
170+
logger.info("BackrollClient:getBackupOfferingUrl:result: " + result);
171+
//BackrollTaskRequestResponse requestResponse = parse(result);
172+
BackrollTaskRequestResponse requestResponse = new ObjectMapper().readValue(result, BackrollTaskRequestResponse.class);
173+
logger.info("BackrollClient:getBackupOfferingUrl:Apres PArse: " + requestResponse.location);
171174
response.close();
172175
url = requestResponse.location.replace("/api/v1", "");
173176
} catch (final Exception e) {
177+
logger.info("Failed to list Backroll jobs due to: {}", e.getMessage());
174178
logger.error("Failed to list Backroll jobs due to: {}", e.getMessage());
175179
}
176180
return StringUtils.isEmpty(url) ? null : url;
@@ -183,7 +187,8 @@ public List<BackupOffering> getBackupOfferings(String idTask) throws KeyManageme
183187
final List<BackupOffering> policies = new ArrayList<>();
184188

185189
try {
186-
BackupPoliciesResponse backupPoliciesResponse = waitGet(idTask);
190+
String results = waitGet(idTask);
191+
BackupPoliciesResponse backupPoliciesResponse = new ObjectMapper().readValue(results, BackupPoliciesResponse.class);
187192

188193
for (final BackrollBackupPolicyResponse policy : backupPoliciesResponse.backupPolicies) {
189194
policies.add(new BackrollOffering(policy.name, policy.id));
@@ -214,10 +219,11 @@ public boolean restoreVMFromBackup(final String vmId, final String backupName) t
214219

215220
CloseableHttpResponse response = post(String.format("/tasks/restore/%s", vmId), jsonBody);
216221
String result = okBody(response);
217-
BackrollTaskRequestResponse requestResponse = parse(result);
222+
BackrollTaskRequestResponse requestResponse = new ObjectMapper().readValue(result, BackrollTaskRequestResponse.class);
218223
response.close();
219224
String urlToRequest = requestResponse.location.replace("/api/v1", "");
220-
TaskStateResponse taskResponse = waitGet(urlToRequest);
225+
result = waitGet(urlToRequest);
226+
TaskStateResponse taskResponse = new ObjectMapper().readValue(result, TaskStateResponse.class);
221227
logger.debug("RESTORE {}", taskResponse.state);
222228
isRestoreOk = taskResponse.state.equals(TaskState.SUCCESS);
223229
} catch (final NotOkBodyException e) {
@@ -241,10 +247,10 @@ public BackrollTaskStatus checkBackupTaskStatus(String taskId) throws KeyManagem
241247
String body = okBody(get("/status/" + taskId));
242248

243249
if (body.contains(TaskState.FAILURE) || body.contains(TaskState.PENDING)) {
244-
BackrollBackupStatusResponse backupStatusRequestResponse = parse(body);
250+
BackrollBackupStatusResponse backupStatusRequestResponse = new ObjectMapper().readValue(body, BackrollBackupStatusResponse.class);
245251
status.setState(backupStatusRequestResponse.state);
246252
} else {
247-
BackrollBackupStatusSuccessResponse backupStatusSuccessRequestResponse = parse(body);
253+
BackrollBackupStatusSuccessResponse backupStatusSuccessRequestResponse = new ObjectMapper().readValue(body, BackrollBackupStatusSuccessResponse.class);
248254
status.setState(backupStatusSuccessRequestResponse.state);
249255
status.setInfo(backupStatusSuccessRequestResponse.info);
250256
}
@@ -271,11 +277,12 @@ public boolean deleteBackup(final String vmId, final String backupName) throws K
271277

272278
CloseableHttpResponse response = delete(String.format("/virtualmachines/%s/backups/%s", vmId, backupName));
273279
String result = okBody(response);
274-
BackrollTaskRequestResponse requestResponse = parse(result);
280+
BackrollTaskRequestResponse requestResponse = new ObjectMapper().readValue(result, BackrollTaskRequestResponse.class);
275281
response.close();
276282
String urlToRequest = requestResponse.location.replace("/api/v1", "");
277283

278-
BackrollBackupsFromVMResponse backrollBackupsFromVMResponse = waitGet(urlToRequest);
284+
result = waitGet(urlToRequest);
285+
BackrollBackupsFromVMResponse backrollBackupsFromVMResponse = new ObjectMapper().readValue(result, BackrollBackupsFromVMResponse.class);
279286
logger.debug(backrollBackupsFromVMResponse.state);
280287
isBackupDeleted = backrollBackupsFromVMResponse.state.equals(TaskState.SUCCESS);
281288
} catch (final NotOkBodyException e) {
@@ -298,11 +305,12 @@ public Metric getVirtualMachineMetrics(final String vmId) throws KeyManagementEx
298305

299306
CloseableHttpResponse response = get(String.format("/virtualmachines/%s/repository", vmId));
300307
String result = okBody(response);
301-
BackrollTaskRequestResponse requestResponse = parse(result);
308+
BackrollTaskRequestResponse requestResponse = new ObjectMapper().readValue(result, BackrollTaskRequestResponse.class);
302309
response.close();
303310
String urlToRequest = requestResponse.location.replace("/api/v1", "");
304311

305-
BackrollVmMetricsResponse vmMetricsResponse = waitGet(urlToRequest);
312+
result = waitGet(urlToRequest);
313+
BackrollVmMetricsResponse vmMetricsResponse =new ObjectMapper().readValue(result, BackrollVmMetricsResponse.class);
306314

307315
if (vmMetricsResponse != null && vmMetricsResponse.state.equals(TaskState.SUCCESS)) {
308316
logger.debug("SUCCESS ok");
@@ -334,13 +342,14 @@ public BackrollBackupMetrics getBackupMetrics(String vmId, String backupId) thro
334342

335343
CloseableHttpResponse response = get(String.format("/virtualmachines/%s/backups/%s", vmId, backupId));
336344
String result = okBody(response);
337-
BackrollTaskRequestResponse requestResponse = parse(result);
345+
BackrollTaskRequestResponse requestResponse = new ObjectMapper().readValue(result, BackrollTaskRequestResponse.class);
338346
response.close();
339347
String urlToRequest = requestResponse.location.replace("/api/v1", "");
340348

341349
logger.debug(urlToRequest);
342350

343-
BackrollBackupMetricsResponse metricsResponse = waitGet(urlToRequest);
351+
result = waitGet(urlToRequest);
352+
BackrollBackupMetricsResponse metricsResponse = new ObjectMapper().readValue(result, BackrollBackupMetricsResponse.class);
344353
if (metricsResponse.info != null) {
345354
metrics = new BackrollBackupMetrics(Long.parseLong(metricsResponse.info.originalSize),
346355
Long.parseLong(metricsResponse.info.deduplicatedSize));
@@ -362,13 +371,14 @@ public List<BackrollVmBackup> getAllBackupsfromVirtualMachine(String vmId) {
362371

363372
CloseableHttpResponse response = get(String.format("/virtualmachines/%s/backups", vmId));
364373
String result = okBody(response);
365-
BackrollTaskRequestResponse requestResponse = parse(result);
374+
BackrollTaskRequestResponse requestResponse = new ObjectMapper().readValue(result, BackrollTaskRequestResponse.class);
366375
response.close();
367376
String urlToRequest = requestResponse.location.replace("/api/v1", "");
368377

369378
logger.debug(urlToRequest);
370379

371-
VirtualMachineBackupsResponse virtualMachineBackupsResponse = waitGet(urlToRequest);
380+
result = waitGet(urlToRequest);
381+
VirtualMachineBackupsResponse virtualMachineBackupsResponse = new ObjectMapper().readValue(result, VirtualMachineBackupsResponse.class);
372382

373383
if (virtualMachineBackupsResponse.state.equals(TaskState.SUCCESS)) {
374384
if (virtualMachineBackupsResponse.info.archives.size() > 0) {
@@ -473,7 +483,7 @@ private <T> T parse(final String json)
473483
});
474484
}
475485

476-
private <T> T waitGet(String url)
486+
private String waitGet(String url)
477487
throws IOException, InterruptedException, KeyManagementException, ParseException, NoSuchAlgorithmException {
478488
// int threshold = 30; // 5 minutes
479489
int maxAttempts = 12; // 2 minutes
@@ -482,7 +492,7 @@ private <T> T waitGet(String url)
482492
try {
483493
String body = okBody(get(url));
484494
if (!body.contains(TaskState.PENDING)) {
485-
return parse(body);
495+
return body;
486496
}
487497
} catch (final NotOkBodyException e) {
488498
throw new CloudRuntimeException("An error occured with Backroll");
@@ -627,12 +637,13 @@ private List<BackrollBackup> getBackrollBackups(final String vmId) throws KeyMan
627637

628638
CloseableHttpResponse response = get("/virtualmachines/" + vmId + "/backups");
629639
String result = okBody(response);
630-
BackrollTaskRequestResponse requestResponse = parse(result);
640+
BackrollTaskRequestResponse requestResponse = new ObjectMapper().readValue(result, BackrollTaskRequestResponse.class);
631641
response.close();
632642
String urlToRequest = requestResponse.location.replace("/api/v1", "");
633643

634644
logger.debug(urlToRequest);
635-
BackrollBackupsFromVMResponse backrollBackupsFromVMResponse = waitGet(urlToRequest);
645+
result = waitGet(urlToRequest);
646+
BackrollBackupsFromVMResponse backrollBackupsFromVMResponse = new ObjectMapper().readValue(result, BackrollBackupsFromVMResponse.class);
636647

637648
final List<BackrollBackup> backups = new ArrayList<>();
638649
for (final BackrollArchiveResponse archive : backrollBackupsFromVMResponse.archives.archives) {

0 commit comments

Comments
 (0)