in src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/RenameTable.java [35:85]
public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
AccumuloClient client = env.getAccumuloClient();
String srcTableName = state.getRandomTableName();
String newTableName = state.getRandomTableName();
String srcNamespace = "", newNamespace = "";
int index = srcTableName.indexOf('.');
if (-1 != index) {
srcNamespace = srcTableName.substring(0, index);
}
index = newTableName.indexOf('.');
if (-1 != index) {
newNamespace = newTableName.substring(0, index);
}
try {
client.tableOperations().rename(srcTableName, newTableName);
log.debug("Renamed table " + srcTableName + " " + newTableName);
} catch (TableExistsException e) {
log.debug("Rename " + srcTableName + " failed, " + newTableName + " exists");
} catch (TableNotFoundException e) {
Throwable cause = e.getCause();
if (null != cause) {
// Rename has to have failed on the destination namespace,
// because the source namespace
// couldn't be deleted with our table in it
if (cause.getClass().isAssignableFrom(NamespaceNotFoundException.class)) {
log.debug("Rename failed because new namespace doesn't exist: " + newNamespace, cause);
// Avoid the final src/dest namespace check
return;
}
}
log.debug("Rename " + srcTableName + " failed, doesnt exist");
} catch (IllegalArgumentException e) {
log.debug("Rename: " + e);
} catch (AccumuloException e) {
// Catch the expected failure when we try to rename a table into a
// new namespace
if (!srcNamespace.equals(newNamespace)) {
return;
}
log.debug("Rename " + srcTableName + " failed.", e);
}
if (!srcNamespace.equals(newNamespace)) {
log.error("RenameTable operation should have failed when renaming across namespaces.");
}
}