/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.upgrade;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.model.DataObject;
import com.emc.storageos.db.exceptions.DatabaseException;
/**
* @author cgarber
*
*/
public class MigrateIndexHelper {
private static final Logger log = LoggerFactory.getLogger(MigrateIndexHelper.class);
public static void migrateAddedIndex(InternalDbClient dbClient, Class<? extends DataObject> cfClass, String fieldName, String annoName) {
if (cfClass == null || fieldName == null || annoName == null) {
// this callback has not been set up; skip it.
throw DatabaseException.fatals.failedDuringUpgrade("Unexpected state: callback not setup", null);
}
String cfName = cfClass.getCanonicalName();
log.info("Adding new index records for class: {} field: {} annotation: {}",
new Object[] { cfName, fieldName, annoName });
if (DataObject.class.isAssignableFrom(cfClass)) {
try {
dbClient.generateFieldIndex(cfClass, fieldName);
} catch (Exception e) {
throw DatabaseException.fatals.failedDuringUpgrade("db schema migration error: could not update index "
+ annoName + " for " + cfName + ":" + fieldName + " fields", e);
}
} else {
throw DatabaseException.fatals.failedDuringUpgrade("db schema migration error: could not update index "
+ annoName + " for " + cfName + ":" + fieldName + " fields", null);
}
}
public static void migrateRemovedIndex(InternalDbClient dbClient, Class<? extends DataObject> cfClass, String fieldName,
String annoName, String previousIndexCf) {
if (cfClass == null || fieldName == null || annoName == null || previousIndexCf == null) {
// this callback has not been set up; skip it.
throw DatabaseException.fatals.failedDuringUpgrade("Unexpected state: callback not setup", null);
}
String cfName = cfClass.getCanonicalName();
log.info("Removing index records for class: {} field: {} annotation: {} index cf: {}",
new Object[] { cfName, fieldName, annoName, previousIndexCf });
if (DataObject.class.isAssignableFrom(cfClass)) {
try {
dbClient.removeFieldIndex(cfClass, fieldName, previousIndexCf);
} catch (Exception e) {
throw DatabaseException.fatals.failedDuringUpgrade("db schema migration error: could not update index "
+ annoName + " for " + cfName + ":" + fieldName + " fields", e);
}
} else {
throw DatabaseException.fatals.failedDuringUpgrade("db schema migration error: could not update index "
+ annoName + " for " + cfName + ":" + fieldName + " fields", null);
}
}
}