/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.client.upgrade.callbacks; 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; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.URI; import java.util.Iterator; import java.util.List; /** * Migration handler to convert value of 'nonDisruptiveExpansion' property to 'expandable' and * 'fastExpansion' properties. * In 2.0 we allow expansion of all VMAX/VNX volumes, except volume with local mirrors. * Volumes with 'nodDisruptiveExpansion' true, are expanded with 'fastExpansion', otherwise we expand with 'fastExpansion' false. * NOTE: due to customer issue, need to set pools with nonDisruptiveExpansion=false to expandable=false. * Customer wants to enable mirroring for 1.1 non expandable pools after upgrade to 2.0. If we set expandable to true after upgrade, * apisvc validation won't allow to enable mirroring. */ public class VirtualPoolExpandableMigration extends BaseCustomMigrationCallback { private static final Logger log = LoggerFactory.getLogger(VirtualPoolExpandableMigration.class); @Override public void process() throws MigrationCallbackException { log.info("Handle VirtualPool 'nonDisruptiveExpansion' conversion."); DbClient dbClient = getDbClient(); List<URI> vpURIs = dbClient.queryByType(VirtualPool.class, true); Iterator<VirtualPool> vpIter = dbClient.queryIterativeObjects(VirtualPool.class, vpURIs); while (vpIter.hasNext()) { VirtualPool vp = vpIter.next(); if (vp.getNonDisruptiveExpansion()) { vp.setExpandable(true); vp.setFastExpansion(true); } else if (VirtualPool.vPoolSpecifiesMirrors(vp, dbClient)) { // As of now, we do not allow expansion of virtual pools with local mirror protection vp.setExpandable(false); vp.setFastExpansion(false); } else { // Do not allow expansion. See NOTE above. vp.setExpandable(false); vp.setFastExpansion(false); } log.info(String.format( "Migrated VirtualPool %s, nonDisruptiveExpansion: %s, local mirrors: %s, expandable: %s, fastExpansion; %s", vp.getId().toString(), vp.getNonDisruptiveExpansion(), vp.getMaxNativeContinuousCopies(), vp.getExpandable(), vp.getFastExpansion())); dbClient.persistObject(vp); } log.info("Completed VirtualPool 'nonDisruptiveExpansion' conversion."); } }