/*
* Copyright (c) 2015 EMC Software LLC
* All Rights Reserved
*/
package com.emc.sa.service.vipr.block;
import static com.emc.sa.service.ServiceParams.CONSISTENCY_GROUP;
import static com.emc.sa.service.ServiceParams.SNAPSHOTS;
import static com.emc.sa.service.ServiceParams.STORAGE_TYPE;
import static com.emc.sa.service.ServiceParams.TYPE;
import java.net.URI;
import java.util.List;
import com.emc.sa.asset.providers.BlockProvider;
import com.emc.sa.engine.ExecutionUtils;
import com.emc.sa.engine.bind.Param;
import com.emc.sa.engine.service.Service;
import com.emc.sa.service.vipr.ViPRService;
import com.emc.sa.service.vipr.block.tasks.DeactivateBlockSnapshot;
import com.emc.sa.service.vipr.block.tasks.DeactivateBlockSnapshotSession;
import com.emc.storageos.model.DataObjectRestRep;
import com.emc.storageos.model.block.VolumeDeleteTypeEnum;
import com.emc.vipr.client.Tasks;
@Service("RemoveBlockSnapshot")
public class RemoveBlockSnapshotService extends ViPRService {
@Param(value = STORAGE_TYPE, required = false)
protected String storageType;
@Param(value = TYPE, required = false)
protected String type;
@Param(value = CONSISTENCY_GROUP, required = false)
protected URI consistencyGroupId;
@Param(SNAPSHOTS)
protected List<String> snapshotIds;
@Override
public void precheck() throws Exception {
super.precheck();
if (!ConsistencyUtils.isVolumeStorageType(storageType)) {
if (consistencyGroupId == null) {
ExecutionUtils.fail("failTask.ConsistencyGroup.noConsistencyGroup", consistencyGroupId);
}
}
}
@Override
public void execute() {
for (String snapshotId : snapshotIds) {
Tasks<? extends DataObjectRestRep> tasks;
if (ConsistencyUtils.isVolumeStorageType(storageType)) {
if (BlockProvider.SNAPSHOT_SESSION_TYPE_VALUE.equals(type)) {
tasks = execute(new DeactivateBlockSnapshotSession(snapshotId));
} else {
tasks = execute(new DeactivateBlockSnapshot(snapshotId, VolumeDeleteTypeEnum.FULL));
}
} else {
if (BlockProvider.CG_SNAPSHOT_SESSION_TYPE_VALUE.equals(type)) {
tasks = ConsistencyUtils.removeSnapshotSession(consistencyGroupId, uri(snapshotId));
} else {
tasks = ConsistencyUtils.removeSnapshot(consistencyGroupId, uri(snapshotId));
}
}
addAffectedResources(tasks);
}
}
}