You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by mm...@apache.org on 2019/06/25 19:30:07 UTC

[accumulo-testing] branch master updated: Add type safety to State (#86)

This is an automated email from the ASF dual-hosted git repository.

mmiller pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/accumulo-testing.git


The following commit(s) were added to refs/heads/master by this push:
     new 0dd88ca  Add type safety to State (#86)
0dd88ca is described below

commit 0dd88ca38e1b058b613f70e0426a82df0861d02e
Author: Mike Miller <mm...@apache.org>
AuthorDate: Tue Jun 25 15:30:00 2019 -0400

    Add type safety to State (#86)
    
    * Clean up code through reuse of new type safe State methods in bulk and concurrent modules
    * Allowed removal of a bunch of warning suppresses
---
 .../apache/accumulo/testing/randomwalk/State.java  | 52 ++++++++++++++++++++++
 .../testing/randomwalk/bulk/BulkPlusOne.java       |  2 +-
 .../testing/randomwalk/bulk/ConsistencyCheck.java  |  2 +-
 .../accumulo/testing/randomwalk/bulk/Merge.java    |  2 +-
 .../accumulo/testing/randomwalk/bulk/Setup.java    |  3 +-
 .../accumulo/testing/randomwalk/bulk/Split.java    |  2 +-
 .../testing/randomwalk/concurrent/AddSplits.java   | 11 ++---
 .../testing/randomwalk/concurrent/BatchScan.java   |  9 +---
 .../testing/randomwalk/concurrent/BatchWrite.java  | 10 +----
 .../testing/randomwalk/concurrent/BulkImport.java  |  9 +---
 .../concurrent/ChangeAuthorizations.java           |  9 +---
 .../randomwalk/concurrent/ChangePermissions.java   | 18 ++------
 .../randomwalk/concurrent/CheckPermission.java     | 19 ++------
 .../testing/randomwalk/concurrent/CloneTable.java  | 12 ++---
 .../testing/randomwalk/concurrent/Compact.java     | 10 +----
 .../randomwalk/concurrent/CreateNamespace.java     | 10 +----
 .../testing/randomwalk/concurrent/CreateTable.java | 10 +----
 .../testing/randomwalk/concurrent/CreateUser.java  | 10 +----
 .../randomwalk/concurrent/DeleteNamespace.java     | 10 +----
 .../testing/randomwalk/concurrent/DeleteRange.java |  9 +---
 .../testing/randomwalk/concurrent/DeleteTable.java | 10 +----
 .../testing/randomwalk/concurrent/DropUser.java    | 10 +----
 .../randomwalk/concurrent/IsolatedScan.java        | 10 +----
 .../testing/randomwalk/concurrent/ListSplits.java  | 10 +----
 .../testing/randomwalk/concurrent/Merge.java       | 11 ++---
 .../randomwalk/concurrent/OfflineTable.java        | 10 +----
 .../randomwalk/concurrent/RenameNamespace.java     | 12 +----
 .../testing/randomwalk/concurrent/RenameTable.java | 12 +----
 .../testing/randomwalk/concurrent/ScanTable.java   | 10 +----
 .../testing/randomwalk/concurrent/Setup.java       | 21 ++++-----
 .../testing/randomwalk/conditional/Compact.java    |  2 +-
 .../testing/randomwalk/conditional/Flush.java      |  2 +-
 .../testing/randomwalk/conditional/Merge.java      |  2 +-
 .../testing/randomwalk/conditional/Setup.java      |  2 +-
 .../testing/randomwalk/conditional/Split.java      |  2 +-
 .../testing/randomwalk/conditional/Transfer.java   |  2 +-
 .../testing/randomwalk/shard/BulkInsert.java       |  2 +-
 .../testing/randomwalk/shard/CompactFilter.java    |  2 +-
 .../accumulo/testing/randomwalk/shard/Delete.java  |  2 +-
 .../testing/randomwalk/shard/DeleteSomeDocs.java   |  2 +-
 .../testing/randomwalk/shard/DeleteWord.java       |  2 +-
 .../accumulo/testing/randomwalk/shard/Flush.java   |  2 +-
 .../accumulo/testing/randomwalk/shard/Grep.java    |  2 +-
 .../accumulo/testing/randomwalk/shard/Insert.java  |  2 +-
 .../accumulo/testing/randomwalk/shard/Reindex.java |  2 +-
 .../accumulo/testing/randomwalk/shard/Search.java  |  2 +-
 .../accumulo/testing/randomwalk/shard/Split.java   |  2 +-
 47 files changed, 127 insertions(+), 242 deletions(-)

diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/State.java b/src/main/java/org/apache/accumulo/testing/randomwalk/State.java
index 9b3e781..2e4f634 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/State.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/State.java
@@ -16,7 +16,10 @@
  */
 package org.apache.accumulo.testing.randomwalk;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Random;
 
 /**
  * A structure for storing state kept during a test. This class is not thread-safe.
@@ -24,6 +27,10 @@ import java.util.HashMap;
 public class State {
 
   private HashMap<String,Object> stateMap = new HashMap<>();
+  private List<String> tables = new ArrayList<>();
+  private List<String> namespaces = new ArrayList<>();
+  private List<String> users = new ArrayList<>();
+  private Random random = new Random();
 
   /**
    * Creates new empty state.
@@ -43,6 +50,20 @@ public class State {
   }
 
   /**
+   * Resets the Random object.
+   */
+  public void setRandom(Random rand) {
+    this.random = rand;
+  }
+
+  /**
+   * Gets the random object.
+   */
+  public Random getRandom() {
+    return random;
+  }
+
+  /**
    * Removes a state object.
    *
    * @param key
@@ -68,6 +89,37 @@ public class State {
     return stateMap.get(key);
   }
 
+  public List<String> getTableNames() {
+    return tables;
+  }
+
+  public void addTable(String tableName) {
+    tables.add(tableName);
+  }
+
+  public void addNamespace(String ns) {
+    namespaces.add(ns);
+  }
+
+  public String getRandomNamespace() {
+    return namespaces.get(random.nextInt(namespaces.size()));
+  }
+
+  /**
+   * Gets a random table name
+   */
+  public String getRandomTableName() {
+    return tables.get(random.nextInt(tables.size()));
+  }
+
+  public void addUser(String userName) {
+    users.add(userName);
+  }
+
+  public String getRandomUser() {
+    return users.get(random.nextInt(users.size()));
+  }
+
   /**
    * Gets a state object, returning null if it is absent.
    *
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/BulkPlusOne.java b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/BulkPlusOne.java
index 64db3c6..60821e2 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/BulkPlusOne.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/BulkPlusOne.java
@@ -59,7 +59,7 @@ public class BulkPlusOne extends BulkImportTest {
     final Path dir = new Path(fs.getUri() + "/tmp", "bulk_" + UUID.randomUUID().toString());
     log.debug("Bulk loading from {}", dir);
     final Path fail = new Path(dir.toString() + "_fail");
-    final Random rand = (Random) state.get("rand");
+    final Random rand = state.getRandom();
     fs.mkdirs(fail);
     final int parts = rand.nextInt(10) + 1;
 
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/ConsistencyCheck.java b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/ConsistencyCheck.java
index f011e0a..86da69d 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/ConsistencyCheck.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/ConsistencyCheck.java
@@ -33,7 +33,7 @@ public class ConsistencyCheck extends SelectiveBulkTest {
 
   @Override
   protected void runLater(State state, RandWalkEnv env) throws Exception {
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     Text row = Merge.getRandomRow(rand);
     log.info("Checking " + row);
     String user = env.getAccumuloClient().whoami();
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Merge.java b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Merge.java
index 242d795..1ffc764 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Merge.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Merge.java
@@ -44,7 +44,7 @@ public class Merge extends SelectiveBulkTest {
   }
 
   public static Text[] getRandomTabletRange(State state) {
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     Text[] points = {getRandomRow(rand), getRandomRow(rand),};
     Arrays.sort(points);
     if (rand.nextInt(10) == 0) {
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Setup.java b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Setup.java
index 2f4e66f..696fa92 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Setup.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Setup.java
@@ -39,7 +39,6 @@ public class Setup extends Test {
 
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
-    Random rand = new Random();
     String hostname = InetAddress.getLocalHost().getHostName().replaceAll("[-.]", "_");
     String pid = env.getPid();
     tableName = String.format("bulk_%s_%s_%d", hostname, pid, System.currentTimeMillis());
@@ -57,7 +56,7 @@ public class Setup extends Test {
     } catch (TableExistsException ex) {
       // expected if there are multiple walkers
     }
-    state.set("rand", rand);
+    state.setRandom(new Random());
     state.set("fs", FileSystem.get(env.getHadoopConfiguration()));
     state.set("bulkImportSuccess", "true");
     BulkPlusOne.counter.set(0l);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Split.java b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Split.java
index 2588cb1..eb5e28e 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Split.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/bulk/Split.java
@@ -29,7 +29,7 @@ public class Split extends SelectiveBulkTest {
   @Override
   protected void runLater(State state, RandWalkEnv env) throws Exception {
     SortedSet<Text> splits = new TreeSet<>();
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     int count = rand.nextInt(20);
     for (int i = 0; i < count; i++)
       splits.add(new Text(String.format(BulkPlusOne.FMT,
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/AddSplits.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/AddSplits.java
index ff31aaa..ab4cbce 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/AddSplits.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/AddSplits.java
@@ -25,7 +25,6 @@ import java.util.TreeSet;
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.TableOfflineException;
-import org.apache.accumulo.core.metadata.MetadataTable;
 import org.apache.accumulo.testing.randomwalk.RandWalkEnv;
 import org.apache.accumulo.testing.randomwalk.State;
 import org.apache.accumulo.testing.randomwalk.Test;
@@ -36,13 +35,9 @@ public class AddSplits extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-    tableNames = new ArrayList<>(tableNames);
-    tableNames.add(MetadataTable.NAME);
+    Random rand = state.getRandom();
+    List<String> tableNames = new ArrayList<>(state.getTableNames());
+    tableNames.add("accumulo.metadata");
     String tableName = tableNames.get(rand.nextInt(tableNames.size()));
 
     TreeSet<Text> splits = new TreeSet<>();
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BatchScan.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BatchScan.java
index 2f3af0a..e5c1934 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BatchScan.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BatchScan.java
@@ -42,13 +42,8 @@ public class BatchScan extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    Random rand = state.getRandom();
+    String tableName = state.getRandomTableName();
 
     try {
       BatchScanner bs = client.createBatchScanner(tableName, Authorizations.EMPTY, 3);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BatchWrite.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BatchWrite.java
index a533af7..b22ff8a 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BatchWrite.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BatchWrite.java
@@ -18,7 +18,6 @@ package org.apache.accumulo.testing.randomwalk.concurrent;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import java.util.List;
 import java.util.Properties;
 import java.util.Random;
 
@@ -40,13 +39,8 @@ public class BatchWrite extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    Random rand = state.getRandom();
+    String tableName = state.getRandomTableName();
 
     try {
       BatchWriter bw = client.createBatchWriter(tableName, new BatchWriterConfig());
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BulkImport.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BulkImport.java
index df45f87..1d1d0c1 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BulkImport.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/BulkImport.java
@@ -92,13 +92,8 @@ public class BulkImport extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    String tableName = state.getRandomTableName();
+    Random rand = state.getRandom();
 
     FileSystem fs = FileSystem.get(env.getHadoopConfiguration());
 
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ChangeAuthorizations.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ChangeAuthorizations.java
index 5a0a9fc..713f38a 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ChangeAuthorizations.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ChangeAuthorizations.java
@@ -35,13 +35,8 @@ public class ChangeAuthorizations extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> userNames = (List<String>) state.get("users");
-
-    String userName = userNames.get(rand.nextInt(userNames.size()));
+    Random rand = state.getRandom();
+    String userName = state.getRandomUser();
     try {
       List<byte[]> auths = new ArrayList<>(
           client.securityOperations().getUserAuthorizations(userName).getAuthorizations());
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ChangePermissions.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ChangePermissions.java
index e3a3d7c..2570065 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ChangePermissions.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ChangePermissions.java
@@ -37,20 +37,10 @@ public class ChangePermissions extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> userNames = (List<String>) state.get("users");
-    String userName = userNames.get(rand.nextInt(userNames.size()));
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
-
-    @SuppressWarnings("unchecked")
-    List<String> namespaces = (List<String>) state.get("namespaces");
-    String namespace = namespaces.get(rand.nextInt(namespaces.size()));
+    Random rand = state.getRandom();
+    String userName = state.getRandomUser();
+    String tableName = state.getRandomTableName();
+    String namespace = state.getRandomNamespace();
 
     try {
       int dice = rand.nextInt(3);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CheckPermission.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CheckPermission.java
index ec65a18..f62abee 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CheckPermission.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CheckPermission.java
@@ -16,7 +16,6 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Properties;
 import java.util.Random;
 
@@ -34,20 +33,10 @@ public class CheckPermission extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> userNames = (List<String>) state.get("users");
-    String userName = userNames.get(rand.nextInt(userNames.size()));
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
-
-    @SuppressWarnings("unchecked")
-    List<String> namespaces = (List<String>) state.get("namespaces");
-    String namespace = namespaces.get(rand.nextInt(namespaces.size()));
+    Random rand = state.getRandom();
+    String userName = state.getRandomUser();
+    String tableName = state.getRandomTableName();
+    String namespace = state.getRandomNamespace();
 
     try {
       int dice = rand.nextInt(2);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CloneTable.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CloneTable.java
index f97ba01..bdabd2c 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CloneTable.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CloneTable.java
@@ -18,7 +18,6 @@ package org.apache.accumulo.testing.randomwalk.concurrent;
 
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Properties;
 import java.util.Random;
 
@@ -36,14 +35,9 @@ public class CloneTable extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String srcTableName = tableNames.get(rand.nextInt(tableNames.size()));
-    String newTableName = tableNames.get(rand.nextInt(tableNames.size()));
+    Random rand = state.getRandom();
+    String srcTableName = state.getRandomTableName();
+    String newTableName = state.getRandomTableName();
     boolean flush = rand.nextBoolean();
 
     try {
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Compact.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Compact.java
index 9b5980f..bb22ded 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Compact.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Compact.java
@@ -33,14 +33,8 @@ public class Compact extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
-
+    Random rand = state.getRandom();
+    String tableName = state.getRandomTableName();
     List<Text> range = ConcurrentFixture.generateRange(rand);
 
     try {
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateNamespace.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateNamespace.java
index 24b870e..dabb939 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateNamespace.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateNamespace.java
@@ -16,9 +16,7 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.NamespaceExistsException;
@@ -31,13 +29,7 @@ public class CreateNamespace extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> namespaces = (List<String>) state.get("namespaces");
-
-    String namespace = namespaces.get(rand.nextInt(namespaces.size()));
+    String namespace = state.getRandomNamespace();
 
     try {
       client.namespaceOperations().create(namespace);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateTable.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateTable.java
index 378ac46..fb6bfa0 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateTable.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateTable.java
@@ -16,9 +16,7 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.AccumuloException;
@@ -34,13 +32,7 @@ public class CreateTable extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    String tableName = state.getRandomTableName();
 
     try {
       client.tableOperations().create(tableName);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateUser.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateUser.java
index 7e28385..8951c10 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateUser.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/CreateUser.java
@@ -16,9 +16,7 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
@@ -31,13 +29,7 @@ public class CreateUser extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> userNames = (List<String>) state.get("users");
-
-    String userName = userNames.get(rand.nextInt(userNames.size()));
+    String userName = state.getRandomUser();
 
     try {
       log.debug("Creating user " + userName);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteNamespace.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteNamespace.java
index dbdad2c..c4d5f4f 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteNamespace.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteNamespace.java
@@ -16,9 +16,7 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.NamespaceNotEmptyException;
@@ -32,13 +30,7 @@ public class DeleteNamespace extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> namespaces = (List<String>) state.get("namespaces");
-
-    String namespace = namespaces.get(rand.nextInt(namespaces.size()));
+    String namespace = state.getRandomNamespace();
 
     try {
       client.namespaceOperations().delete(namespace);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteRange.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteRange.java
index 6c5d9d0..965656b 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteRange.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteRange.java
@@ -35,13 +35,8 @@ public class DeleteRange extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    Random rand = state.getRandom();
+    String tableName = state.getRandomTableName();
 
     List<Text> range = new ArrayList<>();
     do {
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteTable.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteTable.java
index 67f3e14..6a45b00 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteTable.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DeleteTable.java
@@ -16,9 +16,7 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.TableNotFoundException;
@@ -31,13 +29,7 @@ public class DeleteTable extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    String tableName = state.getRandomTableName();
 
     try {
       client.tableOperations().delete(tableName);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DropUser.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DropUser.java
index bd21b5e..866b8be 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DropUser.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/DropUser.java
@@ -16,9 +16,7 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
@@ -30,13 +28,7 @@ public class DropUser extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> userNames = (List<String>) state.get("users");
-
-    String userName = userNames.get(rand.nextInt(userNames.size()));
+    String userName = state.getRandomUser();
 
     try {
       log.debug("Dropping user " + userName);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/IsolatedScan.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/IsolatedScan.java
index 43112ce..1e69a1f 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/IsolatedScan.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/IsolatedScan.java
@@ -16,10 +16,8 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Map.Entry;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.IsolatedScanner;
@@ -42,13 +40,7 @@ public class IsolatedScan extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    String tableName = state.getRandomTableName();
 
     try {
       RowIterator iter = new RowIterator(
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ListSplits.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ListSplits.java
index 1f046fe..1678bd5 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ListSplits.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ListSplits.java
@@ -17,9 +17,7 @@
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
 import java.util.Collection;
-import java.util.List;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
@@ -34,13 +32,7 @@ public class ListSplits extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    String tableName = state.getRandomTableName();
 
     try {
       Collection<Text> splits = client.tableOperations().listSplits(tableName);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Merge.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Merge.java
index d7803dc..4f90e1e 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Merge.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Merge.java
@@ -24,7 +24,6 @@ import java.util.Random;
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.TableOfflineException;
-import org.apache.accumulo.core.metadata.MetadataTable;
 import org.apache.accumulo.testing.randomwalk.RandWalkEnv;
 import org.apache.accumulo.testing.randomwalk.State;
 import org.apache.accumulo.testing.randomwalk.Test;
@@ -35,13 +34,9 @@ public class Merge extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-    tableNames = new ArrayList<>(tableNames);
-    tableNames.add(MetadataTable.NAME);
+    Random rand = state.getRandom();
+    List<String> tableNames = new ArrayList<>(state.getTableNames());
+    tableNames.add("accumulo.metadata");
     String tableName = tableNames.get(rand.nextInt(tableNames.size()));
 
     List<Text> range = ConcurrentFixture.generateRange(rand);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/OfflineTable.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/OfflineTable.java
index 2d3c12f..a3af9d5 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/OfflineTable.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/OfflineTable.java
@@ -18,7 +18,6 @@ package org.apache.accumulo.testing.randomwalk.concurrent;
 
 import static com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly;
 
-import java.util.List;
 import java.util.Properties;
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
@@ -34,13 +33,8 @@ public class OfflineTable extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    Random rand = state.getRandom();
+    String tableName = state.getRandomTableName();
 
     try {
       client.tableOperations().offline(tableName, rand.nextBoolean());
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/RenameNamespace.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/RenameNamespace.java
index 5399e22..23b1e5a 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/RenameNamespace.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/RenameNamespace.java
@@ -16,9 +16,7 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.NamespaceExistsException;
@@ -32,14 +30,8 @@ public class RenameNamespace extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> namespaces = (List<String>) state.get("namespaces");
-
-    String srcName = namespaces.get(rand.nextInt(namespaces.size()));
-    String newName = namespaces.get(rand.nextInt(namespaces.size()));
+    String srcName = state.getRandomNamespace();
+    String newName = state.getRandomNamespace();
 
     try {
       client.namespaceOperations().rename(srcName, newName);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/RenameTable.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/RenameTable.java
index a8c1b73..526a6c1 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/RenameTable.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/RenameTable.java
@@ -16,9 +16,7 @@
  */
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
-import java.util.List;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.AccumuloException;
@@ -34,14 +32,8 @@ public class RenameTable extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String srcTableName = tableNames.get(rand.nextInt(tableNames.size()));
-    String newTableName = tableNames.get(rand.nextInt(tableNames.size()));
+    String srcTableName = state.getRandomTableName();
+    String newTableName = state.getRandomTableName();
 
     String srcNamespace = "", newNamespace = "";
 
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ScanTable.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ScanTable.java
index 3ac45cb..c5ad06e 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ScanTable.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/ScanTable.java
@@ -17,10 +17,8 @@
 package org.apache.accumulo.testing.randomwalk.concurrent;
 
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map.Entry;
 import java.util.Properties;
-import java.util.Random;
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
@@ -40,13 +38,7 @@ public class ScanTable extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     AccumuloClient client = env.getAccumuloClient();
-
-    Random rand = (Random) state.get("rand");
-
-    @SuppressWarnings("unchecked")
-    List<String> tableNames = (List<String>) state.get("tables");
-
-    String tableName = tableNames.get(rand.nextInt(tableNames.size()));
+    String tableName = state.getRandomTableName();
 
     try {
       Scanner scanner = client.createScanner(tableName, Authorizations.EMPTY);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Setup.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Setup.java
index 833da77..20f2b0a 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Setup.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/Setup.java
@@ -29,43 +29,40 @@ public class Setup extends Test {
 
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
-    Random rand = new Random();
-    state.set("rand", rand);
+    state.setRandom(new Random());
 
     int numTables = Integer.parseInt(props.getProperty("numTables", "9"));
     int numNamespaces = Integer.parseInt(props.getProperty("numNamespaces", "2"));
     log.debug("numTables = " + numTables);
     log.debug("numNamespaces = " + numNamespaces);
-    List<String> tables = new ArrayList<>();
     List<String> namespaces = new ArrayList<>();
 
     for (int i = 0; i < numNamespaces; i++) {
-      namespaces.add(String.format("nspc_%03d", i));
+      String ns = String.format("nspc_%03d", i);
+      namespaces.add(ns);
+      state.addNamespace(ns);
     }
 
     // Make tables in the default namespace
     double tableCeil = Math.ceil((double) numTables / (numNamespaces + 1));
     for (int i = 0; i < tableCeil; i++) {
-      tables.add(String.format("ctt_%03d", i));
+      state.addTable(String.format("ctt_%03d", i));
     }
 
     // Make tables in each namespace
     double tableFloor = Math.floor(numTables / (numNamespaces + 1));
     for (String n : namespaces) {
       for (int i = 0; i < tableFloor; i++) {
-        tables.add(String.format(n + ".ctt_%03d", i));
+        state.addTable(String.format(n + ".ctt_%03d", i));
       }
     }
 
-    state.set("tables", tables);
-    state.set("namespaces", namespaces);
-
     int numUsers = Integer.parseInt(props.getProperty("numUsers", "5"));
     log.debug("numUsers = " + numUsers);
-    List<String> users = new ArrayList<>();
     for (int i = 0; i < numUsers; i++)
-      users.add(String.format("user%03d", i));
-    state.set("users", users);
+      state.addUser(String.format("user%03d", i));
+
+    log.info("TABLES = " + state.getTableNames());
   }
 
 }
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Compact.java b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Compact.java
index 647bb7d..a31d3fb 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Compact.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Compact.java
@@ -32,7 +32,7 @@ public class Compact extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     String table = state.getString("tableName");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     AccumuloClient client = env.getAccumuloClient();
     Text row1 = new Text(Utils.getBank(rand.nextInt((Integer) state.get("numBanks"))));
     Text row2 = new Text(Utils.getBank(rand.nextInt((Integer) state.get("numBanks"))));
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Flush.java b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Flush.java
index fe48c39..86f2775 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Flush.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Flush.java
@@ -32,7 +32,7 @@ public class Flush extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     String table = state.getString("tableName");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     AccumuloClient client = env.getAccumuloClient();
     Text row1 = new Text(Utils.getBank(rand.nextInt((Integer) state.get("numBanks"))));
     Text row2 = new Text(Utils.getBank(rand.nextInt((Integer) state.get("numBanks"))));
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Merge.java b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Merge.java
index 363bd87..393dc6e 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Merge.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Merge.java
@@ -32,7 +32,7 @@ public class Merge extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     String table = state.getString("tableName");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     AccumuloClient client = env.getAccumuloClient();
     Text row1 = new Text(Utils.getBank(rand.nextInt((Integer) state.get("numBanks"))));
     Text row2 = new Text(Utils.getBank(rand.nextInt((Integer) state.get("numBanks"))));
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Setup.java b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Setup.java
index b4fbb99..8153fc8 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Setup.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Setup.java
@@ -32,7 +32,7 @@ public class Setup extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     Random rand = new Random();
-    state.set("rand", rand);
+    state.setRandom(rand);
 
     int numBanks = Integer.parseInt(props.getProperty("numBanks", "1000"));
     log.debug("numBanks = " + numBanks);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Split.java b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Split.java
index b8e306f..cd77682 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Split.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Split.java
@@ -34,7 +34,7 @@ public class Split extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     String table = state.getString("tableName");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     AccumuloClient client = env.getAccumuloClient();
     String row = Utils.getBank(rand.nextInt((Integer) state.get("numBanks")));
 
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Transfer.java b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Transfer.java
index a8fa018..f6b8544 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Transfer.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/conditional/Transfer.java
@@ -63,7 +63,7 @@ public class Transfer extends Test {
   @Override
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     String table = state.getString("tableName");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     AccumuloClient client = env.getAccumuloClient();
 
     int numAccts = (Integer) state.get("numAccts");
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/BulkInsert.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/BulkInsert.java
index cbc6589..e1c377a 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/BulkInsert.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/BulkInsert.java
@@ -101,7 +101,7 @@ public class BulkInsert extends Test {
     String indexTableName = (String) state.get("indexTableName");
     String dataTableName = (String) state.get("docTableName");
     int numPartitions = (Integer) state.get("numPartitions");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     long nextDocID = (Long) state.get("nextDocID");
 
     int minInsert = Integer.parseInt(props.getProperty("minInsert"));
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/CompactFilter.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/CompactFilter.java
index 3c09149..e4689af 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/CompactFilter.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/CompactFilter.java
@@ -44,7 +44,7 @@ public class CompactFilter extends Test {
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     String indexTableName = (String) state.get("indexTableName");
     String docTableName = (String) state.get("docTableName");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
 
     String deleteChar = Integer.toHexString(rand.nextInt(16)) + "";
     String regex = "^[0-9a-f][" + deleteChar + "].*";
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Delete.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Delete.java
index 2689075..340a6b3 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Delete.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Delete.java
@@ -34,7 +34,7 @@ public class Delete extends Test {
     String indexTableName = (String) state.get("indexTableName");
     String dataTableName = (String) state.get("docTableName");
     int numPartitions = (Integer) state.get("numPartitions");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
 
     Entry<Key,Value> entry = Search.findRandomDocument(state, env, dataTableName, rand);
     if (entry == null)
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/DeleteSomeDocs.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/DeleteSomeDocs.java
index a0ee586..baf4719 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/DeleteSomeDocs.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/DeleteSomeDocs.java
@@ -40,7 +40,7 @@ public class DeleteSomeDocs extends Test {
     // from doc and index table
     // using the batch deleter
 
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     String indexTableName = (String) state.get("indexTableName");
     String dataTableName = (String) state.get("docTableName");
 
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/DeleteWord.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/DeleteWord.java
index f1dd3b0..e61c4ad 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/DeleteWord.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/DeleteWord.java
@@ -46,7 +46,7 @@ public class DeleteWord extends Test {
     String indexTableName = (String) state.get("indexTableName");
     String docTableName = (String) state.get("docTableName");
     int numPartitions = (Integer) state.get("numPartitions");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
 
     String wordToDelete = Insert.generateRandomWord(rand);
 
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Flush.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Flush.java
index af050f9..741a60c 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Flush.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Flush.java
@@ -29,7 +29,7 @@ public class Flush extends Test {
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     String indexTableName = (String) state.get("indexTableName");
     String dataTableName = (String) state.get("docTableName");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
 
     String table;
 
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Grep.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Grep.java
index 2ba0397..519bf5a 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Grep.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Grep.java
@@ -45,7 +45,7 @@ public class Grep extends Test {
 
     String indexTableName = (String) state.get("indexTableName");
     String dataTableName = (String) state.get("docTableName");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
 
     Text[] words = new Text[rand.nextInt(4) + 2];
 
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Insert.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Insert.java
index 27e8f19..4b86dbf 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Insert.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Insert.java
@@ -41,7 +41,7 @@ public class Insert extends Test {
     String indexTableName = (String) state.get("indexTableName");
     String dataTableName = (String) state.get("docTableName");
     int numPartitions = (Integer) state.get("numPartitions");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
     long nextDocID = (Long) state.get("nextDocID");
 
     BatchWriter dataWriter = env.getMultiTableBatchWriter().getBatchWriter(dataTableName);
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Reindex.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Reindex.java
index 5f321c5..11d3c61 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Reindex.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Reindex.java
@@ -39,7 +39,7 @@ public class Reindex extends Test {
     String docTableName = (String) state.get("docTableName");
     int numPartitions = (Integer) state.get("numPartitions");
 
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
 
     ShardFixture.createIndexTable(this.log, state, env, "_tmp", rand);
 
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Search.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Search.java
index 77963e6..56ee193 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Search.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Search.java
@@ -43,7 +43,7 @@ public class Search extends Test {
     String indexTableName = (String) state.get("indexTableName");
     String dataTableName = (String) state.get("docTableName");
 
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
 
     Entry<Key,Value> entry = findRandomDocument(state, env, dataTableName, rand);
     if (entry == null)
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Split.java b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Split.java
index 65b0fbf..1cf381e 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Split.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/shard/Split.java
@@ -31,7 +31,7 @@ public class Split extends Test {
   public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
     String indexTableName = (String) state.get("indexTableName");
     int numPartitions = (Integer) state.get("numPartitions");
-    Random rand = (Random) state.get("rand");
+    Random rand = state.getRandom();
 
     SortedSet<Text> splitSet = ShardFixture.genSplits(numPartitions,
         rand.nextInt(numPartitions) + 1, "%06x");