Skip to content

Commit 6a690b7

Browse files
committed
Revert "WIP error handling"
This reverts commit 01c2238.
1 parent e9cbe0e commit 6a690b7

File tree

2 files changed

+222
-226
lines changed

2 files changed

+222
-226
lines changed

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

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

19-
import java.io.IOException;
2019
import java.net.URISyntaxException;
2120
import java.security.KeyManagementException;
2221
import java.security.NoSuchAlgorithmException;
@@ -40,7 +39,7 @@
4039

4140
import org.apache.commons.collections.CollectionUtils;
4241
import org.apache.commons.lang3.StringUtils;
43-
import org.apache.http.client.ClientProtocolException;
42+
4443
import org.joda.time.DateTime;
4544

4645
import com.cloud.utils.Pair;
@@ -55,19 +54,19 @@ public class BackrollBackupProvider extends AdapterBase implements BackupProvide
5554
public static final String BACKUP_IDENTIFIER = "-CSBKP-";
5655

5756
public ConfigKey<String> BackrollUrlConfigKey = new ConfigKey<>("Advanced", String.class,
58-
"backup.plugin.backroll.config.url",
59-
"http://api.backup.demo.ccc:5050/api/v1",
60-
"Url for backroll plugin.", true, ConfigKey.Scope.Zone);
57+
"backup.plugin.backroll.config.url",
58+
"http://api.backup.demo.ccc:5050/api/v1",
59+
"Url for backroll plugin.", true, ConfigKey.Scope.Zone);
6160

6261
public ConfigKey<String> BackrollAppNameConfigKey = new ConfigKey<>("Advanced", String.class,
63-
"backup.plugin.backroll.config.appname",
64-
"backroll_api",
65-
"App Name for backroll plugin.", true, ConfigKey.Scope.Zone);
62+
"backup.plugin.backroll.config.appname",
63+
"backroll_api",
64+
"App Name for backroll plugin.", true, ConfigKey.Scope.Zone);
6665

6766
public ConfigKey<String> BackrollPasswordConfigKey = new ConfigKey<>("Advanced", String.class,
68-
"backup.plugin.backroll.config.password",
69-
"VviX8dALauSyYJMqVYJqf3UyZOpO3joS",
70-
"Password for backroll plugin.", true, ConfigKey.Scope.Zone);
67+
"backup.plugin.backroll.config.password",
68+
"VviX8dALauSyYJMqVYJqf3UyZOpO3joS",
69+
"Password for backroll plugin.", true, ConfigKey.Scope.Zone);
7170

7271
private BackrollClient backrollClient;
7372

@@ -89,12 +88,12 @@ public String getDescription() {
8988
@Override
9089
public List<BackupOffering> listBackupOfferings(Long zoneId) {
9190
logger.debug("Listing backup policies on backroll B&R Plugin");
92-
try {
93-
BackrollClient client = getClient(zoneId);
94-
return client.getBackupOfferings(client.getBackupOfferingUrl()); // TODO Embed URL in method ?
95-
} catch (Exception e) {
96-
throw new CloudRuntimeException(String.format("Failed to list backup offerings for zone %s.", zoneId), e);
91+
BackrollClient client = getClient(zoneId);
92+
String urlToRequest = client.getBackupOfferingUrl();
93+
if (!StringUtils.isEmpty(urlToRequest)){
94+
return client.getBackupOfferings(urlToRequest);
9795
}
96+
return new ArrayList<BackupOffering>();
9897
}
9998

10099
@Override
@@ -105,22 +104,16 @@ public boolean isValidProviderOffering(Long zoneId, String uuid) {
105104

106105
@Override
107106
public boolean assignVMToBackupOffering(VirtualMachine vm, BackupOffering backupOffering) {
108-
logger.info("Creating VM backup for VM {} from backup offering {}", vm.getInstanceName(),
109-
backupOffering.getName());
107+
logger.info("Creating VM backup for VM {} from backup offering {}", vm.getInstanceName(), backupOffering.getName());
110108
((VMInstanceVO) vm).setBackupExternalId(backupOffering.getUuid());
111109
return true;
112110
}
113111

114112
@Override
115113
public boolean restoreVMFromBackup(VirtualMachine vm, Backup backup) {
116114
logger.debug("Restoring vm {} from backup {} on the backroll Backup Provider", vm.getUuid(), backup.getUuid());
117-
try {
118-
getClient(vm.getDataCenterId()).restoreVMFromBackup(vm.getUuid(), getBackupName(backup));
119-
} catch (Exception e) {
120-
throw new CloudRuntimeException(
121-
String.format("Failed to restore backup %s to VM %s.", backup.getName(), vm.getName()), e);
122-
}
123-
return true;
115+
boolean isSuccess = getClient(vm.getDataCenterId()).restoreVMFromBackup(vm.getUuid(), getBackupName(backup));
116+
return isSuccess;
124117
}
125118

126119
@Override
@@ -131,23 +124,18 @@ public Map<VirtualMachine, Backup.Metric> getBackupMetrics(Long zoneId, List<Vir
131124
return metrics;
132125
}
133126

134-
List<String> vmUuids = vms.stream().filter(Objects::nonNull).map(VirtualMachine::getUuid)
135-
.collect(Collectors.toList());
127+
List<String> vmUuids = vms.stream().filter(Objects::nonNull).map(VirtualMachine::getUuid).collect(Collectors.toList());
136128
logger.debug("Get Backup Metrics for VMs: {}.", String.join(", ", vmUuids));
137129

138130
for (final VirtualMachine vm : vms) {
139131
if (vm == null) {
140132
continue;
141133
}
142134

143-
try {
144-
Metric metric = getClient(zoneId).getVirtualMachineMetrics(vm.getUuid());
145-
logger.debug("Metrics for VM [uuid: {}, name: {}] is [backup size: {}, data size: {}].", vm.getUuid(),
146-
vm.getInstanceName(), metric.getBackupSize(), metric.getDataSize());
147-
metrics.put(vm, metric);
148-
} catch (Exception e) {
149-
logger.error("Failed to get backup metrics for VM {} due to {}.", vm.getName(), e);
150-
}
135+
Metric metric = getClient(zoneId).getVirtualMachineMetrics(vm.getUuid());
136+
logger.debug("Metrics for VM [uuid: {}, name: {}] is [backup size: {}, data size: {}].", vm.getUuid(),
137+
vm.getInstanceName(), metric.getBackupSize(), metric.getDataSize());
138+
metrics.put(vm, metric);
151139
}
152140
return metrics;
153141
}
@@ -156,30 +144,28 @@ public Map<VirtualMachine, Backup.Metric> getBackupMetrics(Long zoneId, List<Vir
156144
public boolean removeVMFromBackupOffering(VirtualMachine vm) {
157145
logger.info("Removing VM ID {} from Backrool backup offering ", vm.getUuid());
158146

159-
boolean everythingIsOk = true;
147+
boolean isAnyProblemWhileRemovingBackups = false;
160148

161149
List<Backup> backupsInCs = backupDao.listByVmId(null, vm.getId());
162150

163151
for (Backup backup : backupsInCs) {
164152
logger.debug("Trying to remove backup with id {}", backup.getId());
165153

166-
try {
167-
getClient(backup.getZoneId()).deleteBackup(vm.getUuid(), getBackupName(backup));
154+
if (getClient(backup.getZoneId()).deleteBackup(vm.getUuid(), getBackupName(backup))) {
168155
logger.info("Backup {} deleted in Backroll for virtual machine {}", backup.getId(), vm.getName());
169-
if (!backupDao.remove(backup.getId())) {
170-
everythingIsOk = false;
156+
if (!backupDao.remove(backup.getId())){
157+
isAnyProblemWhileRemovingBackups = true;
171158
}
172159
logger.info("Backup {} deleted in CS for virtual machine {}", backup.getId(), vm.getName());
173-
} catch (Exception e) {
174-
logger.error("Failed to remove backup {} for VM {}.", backup.getName(), vm.getName());
175-
everythingIsOk = false;
160+
} else {
161+
isAnyProblemWhileRemovingBackups = false;
176162
}
177163
}
178164

179-
if (!everythingIsOk) {
165+
if (isAnyProblemWhileRemovingBackups) {
180166
logger.info("Problems occured while removing some backups for virtual machine {}", vm.getName());
181167
}
182-
return everythingIsOk;
168+
return isAnyProblemWhileRemovingBackups;
183169
}
184170

185171
@Override
@@ -190,9 +176,10 @@ public boolean willDeleteBackupsOnOfferingRemoval() {
190176
@Override
191177
public boolean takeBackup(VirtualMachine vm) {
192178
logger.info("Starting backup for VM ID {} on backroll provider", vm.getUuid());
193-
try {
194-
final BackrollClient client = getClient(vm.getDataCenterId());
195-
String idBackupTask = client.startBackupJob(vm.getUuid());
179+
final BackrollClient client = getClient(vm.getDataCenterId());
180+
181+
String idBackupTask = client.startBackupJob(vm.getUuid());
182+
if (!StringUtils.isEmpty(idBackupTask)) {
196183
BackupVO backup = new BackupVO();
197184
backup.setVmId(vm.getId());
198185
backup.setExternalId(idBackupTask);
@@ -205,32 +192,22 @@ public boolean takeBackup(VirtualMachine vm) {
205192
backup.setAccountId(vm.getAccountId());
206193
backup.setDomainId(vm.getDomainId());
207194
backup.setZoneId(vm.getDataCenterId());
208-
assert backupDao.persist(backup) != null;
209-
} catch (Exception e) {
210-
throw new CloudRuntimeException(String.format("Failed to take a backup of VM %s.", vm.getName()), e);
195+
return backupDao.persist(backup) != null;
211196
}
212-
return true;
197+
return false;
213198
}
214199

215200
@Override
216201
public void syncBackups(VirtualMachine vm, Backup.Metric metric) {
217202
logger.info("Starting sync backup for VM ID " + vm.getUuid() + " on backroll provider");
218203

219-
final BackrollClient client;
220-
try {
221-
client = getClient(vm.getDataCenterId());
222-
} catch (Exception e) {
223-
throw new CloudRuntimeException(
224-
String.format("Failed to get Backroll client while syncing backups for VM %s.", vm.getName()));
225-
}
226-
204+
final BackrollClient client = getClient(vm.getDataCenterId());
227205
List<Backup> backupsInDb = backupDao.listByVmId(null, vm.getId());
228206

229207
for (Backup backup : backupsInDb) {
230-
try {
231-
if (backup.getStatus().equals(Backup.Status.BackingUp)) {
232-
BackrollTaskStatus response = client.checkBackupTaskStatus(backup.getExternalId());
233-
208+
if (backup.getStatus().equals(Backup.Status.BackingUp)) {
209+
BackrollTaskStatus response = client.checkBackupTaskStatus(backup.getExternalId());
210+
if (response != null) {
234211
logger.debug("backroll backup id: {}", backup.getExternalId());
235212
logger.debug("backroll backup status: {}", response.getState());
236213

@@ -254,8 +231,7 @@ public void syncBackups(VirtualMachine vm, Backup.Metric metric) {
254231
backupToUpdate.setStatus(Backup.Status.BackedUp);
255232
backupToUpdate.setExternalId(backup.getExternalId() + "," + response.getInfo());
256233

257-
BackrollBackupMetrics backupMetrics = client.getBackupMetrics(vm.getUuid(),
258-
response.getInfo());
234+
BackrollBackupMetrics backupMetrics = client.getBackupMetrics(vm.getUuid() , response.getInfo());
259235
if (backupMetrics != null) {
260236
backupToUpdate.setSize(backupMetrics.getDeduplicated()); // real size
261237
backupToUpdate.setProtectedSize(backupMetrics.getSize()); // total size
@@ -268,19 +244,16 @@ public void syncBackups(VirtualMachine vm, Backup.Metric metric) {
268244
logger.info("Backroll mise à jour enregistrée");
269245
backupDao.remove(backup.getId());
270246
}
271-
272-
} else if (backup.getStatus().equals(Backup.Status.BackedUp) && backup.getSize().equals(0L)) {
273-
String backupId = backup.getExternalId().contains(",") ? backup.getExternalId().split(",")[1]
274-
: backup.getExternalId();
275-
276-
BackrollBackupMetrics backupMetrics = client.getBackupMetrics(vm.getUuid(), backupId);
247+
}
248+
} else if (backup.getStatus().equals(Backup.Status.BackedUp) && backup.getSize().equals(0L)) {
249+
String backupId = backup.getExternalId().contains(",") ? backup.getExternalId().split(",")[1] : backup.getExternalId();
250+
BackrollBackupMetrics backupMetrics = client.getBackupMetrics(vm.getUuid() , backupId);
251+
if (backupMetrics != null) {
277252
BackupVO backupToUpdate = ((BackupVO) backup);
278253
backupToUpdate.setSize(backupMetrics.getDeduplicated()); // real size
279254
backupToUpdate.setProtectedSize(backupMetrics.getSize()); // total size
280255
backupDao.persist(backupToUpdate);
281256
}
282-
} catch (Exception e) {
283-
logger.error("Failed to sync backup {}.", backup.getName());
284257
}
285258
}
286259

@@ -291,9 +264,9 @@ public void syncBackups(VirtualMachine vm, Backup.Metric metric) {
291264
// insert new backroll backup in CS
292265
for (BackrollVmBackup backupInBackroll : backupsFromBackroll) {
293266
Backup backupToFind = backupsInDb.stream()
294-
.filter(backupInDb -> backupInDb.getExternalId().contains(backupInBackroll.getName()))
295-
.findAny()
296-
.orElse(null);
267+
.filter(backupInDb -> backupInDb.getExternalId().contains(backupInBackroll.getName()))
268+
.findAny()
269+
.orElse(null);
297270

298271
if (backupToFind == null) {
299272
BackupVO backupToInsert = new BackupVO();
@@ -323,12 +296,11 @@ public void syncBackups(VirtualMachine vm, Backup.Metric metric) {
323296
// delete deleted backroll backup in CS
324297
backupsInDb = backupDao.listByVmId(null, vm.getId());
325298
for (Backup backup : backupsInDb) {
326-
String backupName = backup.getExternalId().contains(",") ? backup.getExternalId().split(",")[1]
327-
: backup.getExternalId();
299+
String backupName = backup.getExternalId().contains(",") ? backup.getExternalId().split(",")[1] : backup.getExternalId();
328300
BackrollVmBackup backupToFind = backupsFromBackroll.stream()
329-
.filter(backupInBackroll -> backupInBackroll.getName().contains(backupName))
330-
.findAny()
331-
.orElse(null);
301+
.filter(backupInBackroll -> backupInBackroll.getName().contains(backupName))
302+
.findAny()
303+
.orElse(null);
332304

333305
if (backupToFind == null) {
334306
BackupVO backupToUpdate = ((BackupVO) backup);
@@ -347,35 +319,32 @@ public String getConfigComponentName() {
347319

348320
@Override
349321
public ConfigKey<?>[] getConfigKeys() {
350-
return new ConfigKey[] {
351-
BackrollUrlConfigKey,
352-
BackrollAppNameConfigKey,
353-
BackrollPasswordConfigKey
322+
return new ConfigKey[]{
323+
BackrollUrlConfigKey,
324+
BackrollAppNameConfigKey,
325+
BackrollPasswordConfigKey
354326
};
355327
}
356328

357329
@Override
358330
public boolean deleteBackup(Backup backup, boolean forced) {
359331
logger.info("backroll delete backup id: {}", backup.getExternalId());
360332
if (backup.getStatus().equals(Backup.Status.BackingUp)) {
361-
throw new CloudRuntimeException("You can't delete a backup while it still backing up.");
333+
throw new CloudRuntimeException("You can't delete a backup while it still BackingUp");
362334
} else {
363335
logger.debug("backroll - try delete backup");
364336
VMInstanceVO vm = vmInstanceDao.findByIdIncludingRemoved(backup.getVmId());
365337

366-
if (backup.getStatus().equals(Backup.Status.Removed) || backup.getStatus().equals(Backup.Status.Failed)) {
338+
if (backup.getStatus().equals(Backup.Status.Removed) || backup.getStatus().equals(Backup.Status.Failed)){
367339
return deleteBackupInDb(backup);
340+
} 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);
344+
}
368345
}
369-
370-
try {
371-
getClient(backup.getZoneId()).deleteBackup(vm.getUuid(), getBackupName(backup));
372-
} catch (Exception e) {
373-
throw new CloudRuntimeException(String.format("Failed to delete backup %s", backup.getName()));
374-
}
375-
376-
logger.debug("Backup deletion for backup {} complete on backroll side.", backup.getUuid());
377-
return deleteBackupInDb(backup);
378346
}
347+
return false;
379348
}
380349

381350
private boolean deleteBackupInDb(Backup backup) {
@@ -388,14 +357,12 @@ private boolean deleteBackupInDb(Backup backup) {
388357
return false;
389358
}
390359

391-
protected BackrollClient getClient(final Long zoneId) throws ClientProtocolException, IOException {
360+
protected BackrollClient getClient(final Long zoneId) {
392361
logger.debug("Backroll Provider GetClient with zone id {}", zoneId);
393362
try {
394363
if (backrollClient == null) {
395364
logger.debug("backroll client null - instanciation of new one ");
396-
backrollClient = new BackrollClient(BackrollUrlConfigKey.valueIn(zoneId),
397-
BackrollAppNameConfigKey.valueIn(zoneId), BackrollPasswordConfigKey.valueIn(zoneId), true, 300,
398-
600);
365+
backrollClient = new BackrollClient(BackrollUrlConfigKey.valueIn(zoneId), BackrollAppNameConfigKey.valueIn(zoneId), BackrollPasswordConfigKey.valueIn(zoneId), true, 300, 600);
399366
}
400367
return backrollClient;
401368
} catch (URISyntaxException e) {
@@ -411,10 +378,8 @@ private String getBackupName(Backup backup) {
411378
}
412379

413380
@Override
414-
public Pair<Boolean, String> restoreBackedUpVolume(Backup backup, String volumeUuid, String hostIp,
415-
String dataStoreUuid, Pair<String, VirtualMachine.State> vmNameAndState) {
416-
logger.debug("Restoring volume {} from backup {} on the Backroll Backup Provider", volumeUuid,
417-
backup.getUuid());
381+
public Pair<Boolean, String> restoreBackedUpVolume(Backup backup, String volumeUuid, String hostIp, String dataStoreUuid, Pair<String, VirtualMachine.State> vmNameAndState) {
382+
logger.debug("Restoring volume {} from backup {} on the Backroll Backup Provider", volumeUuid, backup.getUuid());
418383
throw new CloudRuntimeException("Backroll plugin does not support this feature");
419384
}
420385
}

0 commit comments

Comments
 (0)