/*
* Copyright (c) 2013 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 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 initialize the multi-volume consistency field to true for
* RecoverPoint VirtualPools.
*
*/
public class VirtualPoolMultiVolumeConsistencyMigration extends BaseCustomMigrationCallback {
private static final Logger log = LoggerFactory.getLogger(VirtualPoolMultiVolumeConsistencyMigration.class);
@Override
public void process() throws MigrationCallbackException {
updateRecoverPointVirtualPools();
}
/**
* Update RecoverPoint VirtualPools. Ensure the multi volume consistency field
* is set to true.
*/
private void updateRecoverPointVirtualPools() {
log.info("Updating RecoverPoint VirtualPools to enable multi volume consistency.");
DbClient dbClient = getDbClient();
List<URI> virtualPoolURIs = dbClient.queryByType(VirtualPool.class, false);
Iterator<VirtualPool> virtualPools = dbClient.queryIterativeObjects(VirtualPool.class, virtualPoolURIs);
while (virtualPools.hasNext()) {
VirtualPool virtualPool = virtualPools.next();
if (VirtualPool.vPoolSpecifiesProtection(virtualPool) &&
(virtualPool.getMultivolumeConsistency() == null || !virtualPool.getMultivolumeConsistency())) {
virtualPool.setMultivolumeConsistency(true);
dbClient.persistObject(virtualPool);
log.info("Updating VirtualPool (id={}) to enable multi volume consistency.", virtualPool.getId().toString());
}
}
}
}