@Override public void deleteSingleVolumeSnapshot( StorageSystem storage, URI snapshot, TaskCompleter taskCompleter) throws DeviceControllerException { try { BlockSnapshot snap = _dbClient.queryObject(BlockSnapshot.class, snapshot); VNXeApiClient apiClient = getVnxeClient(storage); VNXeLunSnap lunSnap = apiClient.getLunSnapshot(snap.getNativeId()); if (lunSnap != null) { VNXeCommandJob job = apiClient.deleteLunSnap(lunSnap.getId()); if (job != null) { ControllerServiceImpl.enqueueJob( new QueueJob( new VNXeBlockDeleteSnapshotJob(job.getId(), storage.getId(), taskCompleter))); } } else { // Perhaps, it's already been deleted or was deleted on the array. // In that case, we'll just say all is well, so that this operation // is idempotent. snap.setInactive(true); snap.setIsSyncActive(false); _dbClient.updateObject(snap); taskCompleter.ready(_dbClient); } } catch (VNXeException e) { _log.error("Delete volume snapshot got the exception", e); taskCompleter.error(_dbClient, e); } catch (Exception ex) { _log.error("Delete volume snapshot got the exception", ex); ServiceError error = DeviceControllerErrors.vnxe.jobFailed("DeleteSnapshot", ex.getMessage()); taskCompleter.error(_dbClient, error); } }
@Override public void restoreSingleVolumeSnapshot( StorageSystem storage, URI volume, URI snapshot, TaskCompleter taskCompleter) throws DeviceControllerException { try { BlockSnapshot snapshotObj = _dbClient.queryObject(BlockSnapshot.class, snapshot); VNXeApiClient apiClient = getVnxeClient(storage); VNXeLunSnap lunSnap = apiClient.getLunSnapshot(snapshotObj.getNativeId()); // Error out if the snapshot is attached if (lunSnap.getIsAttached()) { _log.error( "Snapshot {})is attached and cannot be used for restore", snapshotObj.getLabel()); ServiceError error = DeviceControllerErrors.vnxe.cannotRestoreAttachedSnapshot(snapshot.toString()); taskCompleter.error(_dbClient, error); } VNXeCommandJob job = apiClient.restoreLunSnap(lunSnap.getId()); if (job != null) { ControllerServiceImpl.enqueueJob( new QueueJob( new VNXeBlockRestoreSnapshotJob(job.getId(), storage.getId(), taskCompleter))); } } catch (VNXeException e) { _log.error("Restore snapshot got the exception", e); taskCompleter.error(_dbClient, e); } catch (Exception ex) { _log.error("Restore snapshot got the exception", ex); ServiceError error = DeviceControllerErrors.vnxe.jobFailed("RestoreSnapshotJob", ex.getMessage()); taskCompleter.error(_dbClient, error); } }