/*
* Copyright (c) 2016 EMC
* All Rights Reserved
*/
package com.emc.sa.service.vipr.block.tasks;
import java.net.URI;
import java.util.Map;
import java.util.Set;
import com.emc.sa.service.vipr.tasks.ViPRExecutionTask;
import com.emc.storageos.model.block.VolumeRestRep;
import com.emc.storageos.model.block.VolumeVirtualPoolChangeParam;
import com.emc.vipr.client.Task;
import com.emc.vipr.client.Tasks;
import com.emc.vipr.client.exceptions.ServiceErrorException;
import com.google.common.collect.Lists;
public class ChangeBlockVolumeVirtualPoolNoWait extends ViPRExecutionTask<Tasks<VolumeRestRep>> {
// map of vpool -> set of volumes
private final Map<URI, Set<URI>> volumeIds;
private final URI targetVirtualPoolId;
public ChangeBlockVolumeVirtualPoolNoWait(Map<URI, Set<URI>> volumeIds, URI targetVirtualPoolId) {
this.volumeIds = volumeIds;
this.targetVirtualPoolId = targetVirtualPoolId;
provideDetailArgs(volumeIds, targetVirtualPoolId);
}
@Override
public Tasks<VolumeRestRep> executeTask() throws Exception {
Tasks<VolumeRestRep> result = new Tasks<VolumeRestRep>(getClient().auth().getClient(), null,
VolumeRestRep.class);
// One request per virtual pool
for (URI vpool : volumeIds.keySet()) {
if (!vpool.equals(targetVirtualPoolId)) {
VolumeVirtualPoolChangeParam input = new VolumeVirtualPoolChangeParam();
input.setVolumes(Lists.newArrayList(volumeIds.get(vpool)));
input.setVirtualPool(targetVirtualPoolId);
try {
Tasks<VolumeRestRep> tasks = getClient().blockVolumes().changeVirtualPool(input);
for (Task<VolumeRestRep> task : tasks.getTasks()) {
addOrderIdTag(task.getTaskResource().getId());
}
result.getTasks().addAll(tasks.getTasks());
} catch (ServiceErrorException ex) {
logError(ex.getMessage());
}
}
}
return result;
}
}