/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.client.upgrade.callbacks; import java.net.URI; import java.util.ArrayList; 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 DedupCapable to false in all existing Block vPools. * DedupCapable field was introduced as identify de-duplication supported storage pools in v3.5 * */ public class VirtualPoolDedupCapableMigration extends BaseCustomMigrationCallback { private static final Logger logger = LoggerFactory.getLogger(VirtualPoolDedupCapableMigration.class); @Override public void process() throws MigrationCallbackException { logger.info("Virtual pool DedupCapable migration START"); DbClient dbClient = getDbClient(); try { List<URI> virtualPoolURIs = dbClient.queryByType(VirtualPool.class, true); Iterator<VirtualPool> virtualPools = dbClient.queryIterativeObjects(VirtualPool.class, virtualPoolURIs, true); List<VirtualPool> modifiedVpools = new ArrayList<VirtualPool>(); while (virtualPools.hasNext()) { VirtualPool virtualPool = virtualPools.next(); if (VirtualPool.Type.block.name().equals(virtualPool.getType()) && virtualPool.getDedupCapable() == null) { virtualPool.setDedupCapable(false); modifiedVpools.add(virtualPool); logger.info("Updating VirtualPool (id={}) with DedupCapable set to default value 'false' ", virtualPool.getId().toString()); } } if (!modifiedVpools.isEmpty()) { dbClient.updateObject(modifiedVpools); } } catch (Exception ex) { logger.error("Exception occured while migrating DedupCapable for Virtual pools"); logger.error(ex.getMessage(), ex); } logger.info("Virtual pool DedupCapable migration END"); } }