/*
* Copyright (c) 2014 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 com.emc.storageos.db.client.model.DiscoveredDataObject;
import com.emc.storageos.db.client.model.StorageSystem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.StringSet;
import com.emc.storageos.db.client.model.Volume;
import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback;
import com.emc.storageos.db.client.util.NullColumnValueGetter;
import com.emc.storageos.svcs.errorhandling.resources.MigrationCallbackException;
/**
* Migration process to handle setting allocated capacity to match
* provisioned capacity on VPLEX volumes.
*
* @author beachn
* @since 2.0
*/
public class VplexVolumeAllocatedCapacityMigration extends BaseCustomMigrationCallback {
private static final Logger log = LoggerFactory.getLogger(VplexVolumeAllocatedCapacityMigration.class);
@Override
public void process() throws MigrationCallbackException {
DbClient dbClient = getDbClient();
try {
List<URI> volumeUris = dbClient.queryByType(Volume.class, true);
Iterator<Volume> volumes = dbClient.queryIterativeObjects(Volume.class, volumeUris, true);
while (volumes.hasNext()) {
Volume volume = volumes.next();
URI storageURI = volume.getStorageController();
if (!NullColumnValueGetter.isNullURI(storageURI)) {
StorageSystem storage = dbClient.queryObject(StorageSystem.class, storageURI);
if (DiscoveredDataObject.Type.vplex.name().equals(storage.getSystemType())) {
Long allocatedCapacity = volume.getAllocatedCapacity();
// For Vplex virtual volumes set allocated capacity to 0 (cop-18608)
if (allocatedCapacity != null && allocatedCapacity != 0) {
log.info("migrating allocated capacity from {} to 0 on VPLEX volume {}",
allocatedCapacity, volume.getLabel());
volume.setAllocatedCapacity(0L);
dbClient.persistObject(volume);
}
}
}
}
} catch (Exception ex) {
log.error("Exception occured while migrating VPLEX Volume Allocated Capacities.");
log.error(ex.getMessage(), ex);
}
}
}