/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.block.taskcompleter; import java.net.URI; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.Operation; import com.emc.storageos.db.client.model.Volume; import com.emc.storageos.exceptions.DeviceControllerException; import com.emc.storageos.svcs.errorhandling.model.ServiceCoded; public class SRDFAddPairToGroupCompleter extends SRDFTaskCompleter { private static final Logger log = LoggerFactory .getLogger(SRDFAddPairToGroupCompleter.class); private URI vpoolChangeURI; public SRDFAddPairToGroupCompleter(List<URI> volumeURIs, final URI vPoolChangeUri, String opId) { super(volumeURIs, opId); vpoolChangeURI = vPoolChangeUri; } public URI getVirtualPoolChangeURI() { return vpoolChangeURI; } @Override public void complete(final DbClient dbClient, final Operation.Status status, final ServiceCoded coded) throws DeviceControllerException { log.info("Completing with status: {}", status); setDbClient(dbClient); try { switch (status) { case ready: for (Volume source : getVolumes()) { if (null != vpoolChangeURI) { source.setVirtualPool(vpoolChangeURI); dbClient.persistObject(source); log.info("Updating virtual Pool {} to sourceVlume {}", vpoolChangeURI, source.getNativeGuid()); } } default: log.info("Unable to handle status: {}", status); } } catch (Exception e) { log.info("Failed to update status for task {}", getOpId(), e); } finally { super.complete(dbClient, status, coded); } } @Override protected Volume.LinkStatus getVolumeSRDFLinkStatusForSuccess() { return Volume.LinkStatus.IN_SYNC; } }