/* * Copyright (c) 2014 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.Network; import com.emc.storageos.db.client.model.StringSet; import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback; import com.emc.storageos.svcs.errorhandling.resources.MigrationCallbackException; /** * This class is perform necessary updates of network connected virtual * array as the definition of this field changed between 1.1 and 2.0. * */ public class NetworkConnectedVirtualArraysMigration extends BaseCustomMigrationCallback { private static final Logger log = LoggerFactory.getLogger(NetworkConnectedVirtualArraysMigration.class); /** * Add assigned virtual arrays to connected virtual arrays. * Starting 2.0, connected virtual arrays includes assigned, * connected via port-virtualArray associations, and connected * via routed networks */ @Override public void process() throws MigrationCallbackException { DbClient dbClient = getDbClient(); try { List<URI> networkUris = dbClient.queryByType(Network.class, true); Iterator<Network> networks = dbClient.queryIterativeObjects(Network.class, networkUris); List<Network> updated = new ArrayList<Network>(); while (networks.hasNext()) { Network network = networks.next(); log.info("Updating connected virtual arrays for network {}", network.getLabel()); if (network.getAssignedVirtualArrays() != null) { if (network.getConnectedVirtualArrays() != null) { for (String assignedVarrayUri : network.getAssignedVirtualArrays()) { log.info("Adding virtual array {} to connected virtual arrays", assignedVarrayUri); network.getConnectedVirtualArrays().add(assignedVarrayUri); } } else { log.info("Setting connected virtual arrays to {}", network.getAssignedVirtualArrays()); network.setConnectedVirtualArrays(new StringSet(network.getAssignedVirtualArrays())); } updated.add(network); } } dbClient.updateAndReindexObject(updated); } catch (Exception e) { log.error("Exception occured while updating Network connectedVirtualArrays"); log.error(e.getMessage(), e); } } }