public void visit()

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.");
    }
  }