/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.client.upgrade.callbacks; import java.net.URI; import java.util.Iterator; 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.VirtualPool; import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback; import com.emc.storageos.svcs.errorhandling.resources.MigrationCallbackException; /** * Migration handler to set the "uniquePolicyNames" to true if there is a FAST policy * associated with the virtual pool. This is required because of a bug in 1.1 which will * always save the policy name irrespective of the value of uniquePolicyNames. * */ public class VirtualPoolAutoTieringPolicyMigration extends BaseCustomMigrationCallback { private static final Logger logger = LoggerFactory.getLogger(VirtualPoolAutoTieringPolicyMigration.class); public static final String NATIVE_GUID_DELIMITER = "+"; @Override public void process() throws MigrationCallbackException { logger.info("Processing virtual pool auto tiering policy migration"); DbClient dbClient = getDbClient(); try { List<URI> virtualPoolUris = dbClient.queryByType(VirtualPool.class, true); Iterator<VirtualPool> virtualPools = dbClient.queryIterativeObjects(VirtualPool.class, virtualPoolUris, true); while (virtualPools.hasNext()) { VirtualPool virtualPool = virtualPools.next(); // If there is a FAST policy associated with the vpool, then mark the uniquePolicyNames to true if (virtualPool.getAutoTierPolicyName() != null && !virtualPool.getAutoTierPolicyName().isEmpty()) { // No way other than using contains to differentiate NativeGuid if (virtualPool.getAutoTierPolicyName().contains(NATIVE_GUID_DELIMITER)) { virtualPool.setUniquePolicyNames(false); } else { virtualPool.setUniquePolicyNames(true); } dbClient.persistObject(virtualPool); logger.info("Updating VirtualPool (id={}) with unique policy names set to {}", virtualPool.getId().toString(), virtualPool.getUniquePolicyNames()); } } } catch (Exception ex) { logger.error("Exception occured while migrating auto tiering policy of vpool"); logger.error(ex.getMessage(), ex); } } }