/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.fast;
import java.io.IOException;
import java.net.URI;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.cim.CIMInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.constraint.ContainmentConstraint;
import com.emc.storageos.db.client.model.StorageTier;
import com.emc.storageos.plugins.AccessProfile;
import com.emc.storageos.plugins.BaseCollectionException;
import com.emc.storageos.plugins.common.Constants;
import com.emc.storageos.plugins.common.domainmodel.Operation;
/**
* Responsible for removing Tiers which had been deleted from Array
* Pool--> Tiers and policy-->tiers had been updated already in previous operations.
* Hence, we can blindly delete StorageTiers.
*/
public class TierBookKeepingProcessor extends AbstractFASTPolicyProcessor {
private Logger _logger = LoggerFactory.getLogger(TierBookKeepingProcessor.class);
private DbClient _dbClient;
Set<String> _tierNativeGuids = new HashSet<String>();
@Override
public void processResult(
Operation operation, Object resultObj, Map<String, Object> keyMap)
throws BaseCollectionException {
try {
final Iterator<CIMInstance> it = (Iterator<CIMInstance>) resultObj;
_dbClient = (DbClient) keyMap.get(Constants.dbClient);
AccessProfile profile = (AccessProfile) keyMap.get(Constants.ACCESSPROFILE);
String serialID = (String) keyMap.get(Constants._serialID);
while (it.hasNext()) {
CIMInstance tierInstance = it.next();
if (tierInstance.getObjectPath().toString().contains(serialID)) {
_tierNativeGuids.add(getTierNativeGuidFromTierInstance(tierInstance));
}
}
performStorageTierBookKeeping(profile.getSystemId());
} catch (Exception e) {
_logger.info("BookKeeping Storage Tiers failed", e);
}
}
/**
* perform Storage Tier BookKeeping
*
* @throws IOException
*/
private void performStorageTierBookKeeping(URI storageSystemUri) throws IOException {
List<URI> storageTierUris = _dbClient.queryByConstraint(ContainmentConstraint.Factory
.getStorageDeviceStorageTierConstraint(storageSystemUri));
List<StorageTier> storageTiers = _dbClient.queryObject(StorageTier.class,
storageTierUris);
for (StorageTier tier : storageTiers) {
if (!_tierNativeGuids.contains(tier.getNativeGuid())) {
tier.setInactive(true);
_dbClient.persistObject(tier);
}
}
}
@Override
protected void setPrerequisiteObjects(List<Object> inputArgs)
throws BaseCollectionException {
// TODO Auto-generated method stub
}
}