@Override public SnapshotInfo backupSnapshot(SnapshotInfo snapshot) { return snapshotSvr.backupSnapshot(snapshot); }
@Override public void cleanupSnapshotsByVolume(Long volumeId) { List<SnapshotInfo> infos = snapshotFactory.getSnapshots(volumeId, DataStoreRole.Primary); for(SnapshotInfo info: infos) { try { if(info != null) { snapshotSrv.deleteSnapshot(info); } } catch(CloudRuntimeException e) { String msg = "Cleanup of Snapshot with uuid " + info.getUuid() + " in primary storage is failed. Ignoring"; s_logger.warn(msg); } } }
@Override protected void runInContext() { try { s_logger.debug("Value of attempts is " + (snapshotBackupRetries-attempts)); SnapshotInfo backupedSnapshot = snapshotStrategy.backupSnapshot(snapshot); if (backupedSnapshot != null) { snapshotStrategy.postSnapshotCreation(snapshot); } } catch (final Exception e) { if (attempts >= 0) { s_logger.debug("Backing up of snapshot failed, for snapshot with ID "+snapshot.getSnapshotId()+", left with "+attempts+" more attempts"); backupSnapshotExecutor.schedule(new BackupSnapshotTask(snapshot, --attempts, snapshotStrategy), snapshotBackupRetryInterval, TimeUnit.SECONDS); } else { s_logger.debug("Done with "+snapshotBackupRetries+" attempts in backing up of snapshot with ID "+snapshot.getSnapshotId()); snapshotSrv.cleanupOnSnapshotBackupFailure(snapshot); } } } }
@Override public Snapshot archiveSnapshot(Long snapshotId) { SnapshotInfo snapshotOnPrimary = snapshotFactory.getSnapshot(snapshotId, DataStoreRole.Primary); if (snapshotOnPrimary == null || !snapshotOnPrimary.getStatus().equals(ObjectInDataStoreStateMachine.State.Ready)) { throw new CloudRuntimeException("Can only archive snapshots present on primary storage. " + "Cannot find snapshot " + snapshotId + " on primary storage"); } SnapshotInfo snapshotOnSecondary = snapshotSrv.backupSnapshot(snapshotOnPrimary); SnapshotVO snapshotVO = _snapshotDao.findById(snapshotOnSecondary.getId()); snapshotVO.setLocationType(Snapshot.LocationType.SECONDARY); _snapshotDao.persist(snapshotVO); try { snapshotSrv.deleteSnapshot(snapshotOnPrimary); } catch (Exception e) { throw new CloudRuntimeException("Snapshot archived to Secondary Storage but there was an error deleting " + " the snapshot on Primary Storage. Please manually delete the primary snapshot " + snapshotId, e); } return snapshotOnSecondary; }
@Override public boolean revertSnapshot(SnapshotInfo snapshot) { return snapshotSvr.revertSnapshot(snapshot); } }
@Override public SnapshotInfo takeSnapshot(SnapshotInfo snapshot) { return snapshotSvr.takeSnapshot(snapshot).getSnapshot(); }
private void cleanupVolumeDuringSnapshotFailure(Long volumeId, Long snapshotId) { _snapshotSrv.cleanupVolumeDuringSnapshotFailure(volumeId, snapshotId); VolumeVO volume = _volsDao.findById(volumeId); if (volume.getState() == Volume.State.Snapshotting) { s_logger.debug("change volume state back to Ready: " + volume.getId()); volume.setState(Volume.State.Ready); _volsDao.update(volume.getId(), volume); } }
for (final SnapshotDetailsVO snapshotDetailsVO : snapshotList) { SnapshotInfo snapshot = snapshotFactory.getSnapshot(snapshotDetailsVO.getResourceId(), DataStoreRole.Primary); snapshotSrv.processEventOnSnapshotObject(snapshot, Snapshot.Event.OperationFailed); _snapshotDetailsDao.removeDetail(snapshotDetailsVO.getResourceId(), AsyncJob.Constants.MS_ID);
long snapVolId = snapInfo.getVolumeId(); _snapshotSrv.syncVolumeSnapshotsToRegionStore(snapVolId, snapStore); } catch (Exception ex) {
result = snapshotSvr.revertSnapshot(snapshot);
SnapshotResult result = null; try { result = snapshotSvr.takeSnapshot(snapshot); if (result.isFailed()) { s_logger.debug("Failed to take snapshot: " + result.getResult());
@Override public void postSnapshotCreation(SnapshotInfo snapshot) { updateLocationTypeInDb(snapshot); if (snapshot.getLocationType() == Snapshot.LocationType.SECONDARY) { // remove the snapshot on primary storage try { snapshotSvr.deleteSnapshot(snapshot); } catch (Exception e) { s_logger.warn("Failed to clean up snapshot '" + snapshot.getId() + "' on primary storage: " + e.getMessage()); } } }
@Override public Snapshot backupSnapshot(Long snapshotId) { SnapshotInfo snapshot = snapshotFactory.getSnapshot(snapshotId, DataStoreRole.Image); if (snapshot != null) { throw new CloudRuntimeException("Already in the backup snapshot:" + snapshotId); } return snapshotSrv.backupSnapshot(snapshot); }
success = snapshotSvr.revertSnapshot(snapshotInfo);
result = snapshotSvr.takeSnapshot(snapshotInfo);
snapshotSvr.deleteSnapshot(snapshotObj);
@Override public SnapshotInfo backupSnapshot(SnapshotInfo snapshotInfo) { Preconditions.checkArgument(snapshotInfo != null, "'snapshotInfo' cannot be 'null'."); if (snapshotInfo.getLocationType() != Snapshot.LocationType.SECONDARY) { markAsBackedUp((SnapshotObject)snapshotInfo); return snapshotInfo; } // At this point, the snapshot is either taken as a native // snapshot on the storage or exists as a volume on the storage (clone). // If archive flag is passed in, we should copy this snapshot to secondary // storage and delete it from primary storage. HostVO host = getHost(snapshotInfo.getVolumeId()); boolean canStorageSystemCreateVolumeFromSnapshot = canStorageSystemCreateVolumeFromSnapshot(snapshotInfo.getBaseVolume().getPoolId()); if (!canStorageSystemCreateVolumeFromSnapshot) { String msg = "Cannot archive snapshot: 'canStorageSystemCreateVolumeFromSnapshot' was false."; s_logger.warn(msg); throw new CloudRuntimeException(msg); } boolean computeClusterSupportsResign = clusterDao.getSupportsResigning(host.getClusterId()); if (!computeClusterSupportsResign) { String msg = "Cannot archive snapshot: 'computeClusterSupportsResign' was false."; s_logger.warn(msg); throw new CloudRuntimeException(msg); } return snapshotSvr.backupSnapshot(snapshotInfo); }
boolean r = snapshotSvr.deleteSnapshot(snapshot); if (r) {
return snapshotSvr.backupSnapshot(snapshot);
VolumeVO volumeVO = volumeDao.findById(volumeId); if (((PrimaryDataStoreImpl)snapshotOnPrimaryInfo.getDataStore()).getPoolType() == StoragePoolType.RBD && volumeVO != null) { snapshotSvr.deleteSnapshot(snapshotOnPrimaryInfo);