/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.client.upgrade.callbacks; import java.net.URI; import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.math.NumberUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.BlockMirror; import com.emc.storageos.db.client.model.BlockObject; import com.emc.storageos.db.client.model.BlockSnapshot; import com.emc.storageos.db.client.model.Volume; import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback; import com.emc.storageos.svcs.errorhandling.resources.MigrationCallbackException; public class BlockObjectNormalizeWwnMigration extends BaseCustomMigrationCallback { public static final Long FLAG_DEFAULT = 2L; private static final Logger log = LoggerFactory.getLogger(BlockObjectNormalizeWwnMigration.class); @Override public void process() throws MigrationCallbackException { processType(Volume.class); processType(BlockSnapshot.class); processType(BlockMirror.class); } private <T extends BlockObject> void processType(Class<T> clazz) { DbClient dbClient = getDbClient(); List<URI> blockObjectKeys = dbClient.queryByType(clazz, true); for (URI blockObjectKey : blockObjectKeys) { List<T> blockObjects = dbClient.queryObjectField(clazz, "wwn", Arrays.asList(blockObjectKey)); for (BlockObject blockObject : blockObjects) { String currentWwn = blockObject.getWWN(); if (currentWwn != null && !NumberUtils.isDigits(currentWwn)) { // BlockObject#setWWN has been updated to upper case the WWN blockObject.setWWN(currentWwn); log.info("Normalizing WWN of " + blockObject.getId() + " from " + currentWwn + " to " + blockObject.getWWN()); dbClient.persistObject(blockObject); } } } } }