@Override public void deleteGroupSnapshots(StorageSystem storage, URI snapshot, TaskCompleter taskCompleter) throws DeviceControllerException { try { List<BlockSnapshot> snapshots = _dbClient.queryObject(BlockSnapshot.class, Arrays.asList(snapshot)); BlockSnapshot snapshotObj = snapshots.get(0); VNXeApiClient apiClient = getVnxeClient(storage); VNXeLunGroupSnap lunGroupSnap = apiClient.getLunGroupSnapshot(snapshotObj.getReplicationGroupInstance()); if (lunGroupSnap != null) { VNXeCommandJob job = apiClient.deleteLunGroupSnap(lunGroupSnap.getId()); if (job != null) { ControllerServiceImpl.enqueueJob( new QueueJob( new VNXeBlockDeleteSnapshotJob(job.getId(), storage.getId(), taskCompleter))); } else { // Should not take this path, but treat as an error if we do // happen to get a null job due to some error in the client. _log.error("Unexpected null job from VNXe client call to delete group snapshot."); ServiceCoded sc = DeviceControllerExceptions.vnxe.nullJobForDeleteGroupSnapshot( snapshotObj.forDisplay(), snapshotObj.getReplicationGroupInstance()); taskCompleter.error(_dbClient, sc); } } else { // Treat as in the single volume snapshot case and presume // the group snapshot has already been deleted. List<BlockSnapshot> grpSnapshots = ControllerUtils.getSnapshotsPartOfReplicationGroup(snapshotObj, _dbClient); for (BlockSnapshot grpSnapshot : grpSnapshots) { grpSnapshot.setInactive(true); grpSnapshot.setIsSyncActive(false); } _dbClient.updateObject(grpSnapshots); taskCompleter.ready(_dbClient); } } catch (VNXeException e) { _log.error("Delete group snapshot got the exception", e); taskCompleter.error(_dbClient, e); } catch (Exception ex) { _log.error("Delete group snapshot got the exception", ex); ServiceError error = DeviceControllerErrors.vnxe.jobFailed("DeletGroupSnapshot", ex.getMessage()); taskCompleter.error(_dbClient, error); } }
@Override public void restoreGroupSnapshots( StorageSystem storage, URI volume, URI snapshot, TaskCompleter taskCompleter) throws DeviceControllerException { try { BlockSnapshot snapshotObj = _dbClient.queryObject(BlockSnapshot.class, snapshot); VNXeApiClient apiClient = getVnxeClient(storage); VNXeLunGroupSnap lunGroupSnap = apiClient.getLunGroupSnapshot(snapshotObj.getReplicationGroupInstance()); // Error out if the snapshot is attached if (lunGroupSnap.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.restoreLunGroupSnap(lunGroupSnap.getId()); if (job != null) { ControllerServiceImpl.enqueueJob( new QueueJob( new VNXeBlockRestoreSnapshotJob(job.getId(), storage.getId(), taskCompleter))); } } catch (VNXeException e) { _log.error("Restore group snapshot got the exception", e); taskCompleter.error(_dbClient, e); } catch (Exception ex) { _log.error("Restore group snapshot got the exception", ex); ServiceError error = DeviceControllerErrors.vnxe.jobFailed("RestoreSnapshotJob", ex.getMessage()); taskCompleter.error(_dbClient, error); } }