/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.driver.driversimulator.operations;
import java.util.List;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.driver.driversimulator.StorageDriverSimulator;
import com.emc.storageos.storagedriver.DriverTask;
import com.emc.storageos.storagedriver.model.VolumeSnapshot;
import com.emc.storageos.storagedriver.task.RestoreFromSnapshotDriverTask;
/**
* A simulator operation to manage a restore from snapshot request.
*/
public class RestoreFromSnapshotSimulatorOperation extends BaseDriverSimulatorOperation {
// The name of the operation.
private static final String OP_NAME = "restore-snapshot";
// A reference to a logger.
private static final Logger _log = LoggerFactory.getLogger(RestoreFromSnapshotSimulatorOperation.class);
/**
* Constructor.
*
* @param snapshots A list of the snapshots to be restored.
*/
public RestoreFromSnapshotSimulatorOperation(List<VolumeSnapshot> snapshots) {
super(OP_NAME);
createDriverTask(snapshots);
}
@Override
public void updateOnAsynchronousSuccess() {
// Nothing to do for restore snapshot.
}
@SuppressWarnings("unchecked")
@Override
public String getSuccessMessage(Object... args) {
List<VolumeSnapshot> snapshots;
if ((args != null) && (args.length > 0)) {
snapshots = (List<VolumeSnapshot>) args[0];
} else {
// Must be asynchronous, so updated snapshots are in the task.
RestoreFromSnapshotDriverTask restoreSnapshotTask = (RestoreFromSnapshotDriverTask)_task;
snapshots = restoreSnapshotTask.getSnapshots();
}
return String.format("StorageDriver: restoreSnapshot for storage system %s, snapshots nativeId %s, snap group %s - end",
snapshots.get(0).getStorageSystemId(), snapshots.toString(), snapshots.get(0).getConsistencyGroup());
}
@Override
public String getFailureMessage(Object... args) {
return "StorageDriver: restoreSnapshot simulated failure";
}
/**
* Create the restore from snapshot task that is returned by the request.
*
* @param snapshots A list of the snapshots to be restored.
*/
private void createDriverTask(List<VolumeSnapshot> snapshots) {
String taskId = String.format("%s+%s+%s", StorageDriverSimulator.DRIVER_NAME, OP_NAME, UUID.randomUUID().toString());
_log.info("Creating task {} for operation of type {}", taskId, OP_NAME);
_task = new RestoreFromSnapshotDriverTask(taskId, snapshots);
_task.setStatus(DriverTask.TaskStatus.PROVISIONING);
}
}