You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by el...@apache.org on 2014/12/02 21:37:25 UTC

[37/50] [abbrv] accumulo git commit: Merge branch '1.6'

Merge branch '1.6'

Conflicts:
	minicluster/src/main/java/org/apache/accumulo/minicluster/impl/MiniAccumuloClusterImpl.java
	minicluster/src/test/java/org/apache/accumulo/cluster/AccumuloClustersTest.java
	test/src/test/java/org/apache/accumulo/test/Accumulo3030IT.java
	test/src/test/java/org/apache/accumulo/test/AllowScansToBeInterruptedIT.java
	test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java
	test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java
	test/src/test/java/org/apache/accumulo/test/InterruptibleScannersIT.java
	test/src/test/java/org/apache/accumulo/test/KeyValueEqualityIT.java
	test/src/test/java/org/apache/accumulo/test/MetaConstraintRetryIT.java
	test/src/test/java/org/apache/accumulo/test/RecoveryCompactionsAreFlushesIT.java
	test/src/test/java/org/apache/accumulo/test/ShellServerIT.java
	test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java
	test/src/test/java/org/apache/accumulo/test/functional/BloomFilterIT.java
	test/src/test/java/org/apache/accumulo/test/functional/BulkFileIT.java
	test/src/test/java/org/apache/accumulo/test/functional/DeleteEverythingIT.java
	test/src/test/java/org/apache/accumulo/test/functional/ExamplesIT.java
	test/src/test/java/org/apache/accumulo/test/functional/MasterFailoverIT.java
	test/src/test/java/org/apache/accumulo/test/functional/MetadataMaxFilesIT.java


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/74e7103f
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/74e7103f
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/74e7103f

Branch: refs/heads/metrics2
Commit: 74e7103f1221524c289385a5244e683bb6150167
Parents: bfcb0ed 7ca9c2d
Author: Josh Elser <el...@apache.org>
Authored: Tue Nov 25 18:50:13 2014 -0500
Committer: Josh Elser <el...@apache.org>
Committed: Tue Nov 25 18:50:13 2014 -0500

----------------------------------------------------------------------
 TESTING                                         | 113 ++++++
 minicluster/pom.xml                             |   8 +
 .../accumulo/cluster/AccumuloCluster.java       |  46 ++-
 .../accumulo/cluster/AccumuloClusters.java      |  43 ---
 .../apache/accumulo/cluster/AccumuloConfig.java | 156 --------
 .../apache/accumulo/cluster/ClusterControl.java |  83 ++++
 .../apache/accumulo/cluster/RemoteShell.java    |  94 +++++
 .../accumulo/cluster/RemoteShellOptions.java    | 126 +++++++
 .../apache/accumulo/cluster/package-info.java   |  27 --
 .../standalone/StandaloneAccumuloCluster.java   | 147 ++++++++
 .../standalone/StandaloneClusterControl.java    | 351 +++++++++++++++++
 .../minicluster/MiniAccumuloCluster.java        |   3 +-
 .../apache/accumulo/minicluster/ServerType.java |   2 +-
 .../impl/MiniAccumuloClusterControl.java        | 375 +++++++++++++++++++
 .../impl/MiniAccumuloClusterImpl.java           | 183 +++------
 .../impl/MiniAccumuloConfigImpl.java            |  37 +-
 .../accumulo/cluster/AccumuloClustersTest.java  |  65 ----
 .../MiniAccumuloClusterStartStopTest.java       |  12 +-
 .../impl/MiniAccumuloClusterImplTest.java       |   7 +-
 .../accumulo/gc/SimpleGarbageCollector.java     |   1 +
 .../accumulo/test/TestMultiTableIngest.java     |  20 +-
 .../accumulo/harness/AccumuloClusterIT.java     | 220 +++++++++++
 .../org/apache/accumulo/harness/AccumuloIT.java |  98 +++++
 .../MiniClusterConfigurationCallback.java       |  41 ++
 .../accumulo/harness/MiniClusterHarness.java    | 148 ++++++++
 .../accumulo/harness/SharedMiniClusterIT.java   |  87 +++++
 .../conf/AccumuloClusterConfiguration.java      |  33 ++
 .../AccumuloClusterPropertyConfiguration.java   | 180 +++++++++
 .../conf/AccumuloMiniClusterConfiguration.java  |  71 ++++
 .../StandaloneAccumuloClusterConfiguration.java | 114 ++++++
 .../test/AllowScansToBeInterruptedIT.java       | 104 -----
 .../apache/accumulo/test/AuditMessageIT.java    |  44 ++-
 .../test/BadDeleteMarkersCreatedIT.java         |  91 ++++-
 .../org/apache/accumulo/test/BatchWriterIT.java |   4 +-
 .../accumulo/test/BulkImportVolumeIT.java       |  37 +-
 .../org/apache/accumulo/test/CleanWalIT.java    |  71 +++-
 .../accumulo/test/ConditionalWriterIT.java      |  63 ++--
 .../test/ConfigurableMajorCompactionIT.java     |   2 +-
 .../org/apache/accumulo/test/DeleteRowsIT.java  |  47 ---
 .../org/apache/accumulo/test/ExistingMacIT.java |   5 +-
 .../apache/accumulo/test/ImportExportIT.java    |   3 +
 .../accumulo/test/InterruptibleScannersIT.java  | 105 ++++++
 .../accumulo/test/KeyValueEqualityIT.java       |   7 +-
 .../accumulo/test/MetaConstraintRetryIT.java    |   7 +-
 .../org/apache/accumulo/test/MetaSplitIT.java   |  77 +++-
 .../accumulo/test/MultiTableBatchWriterIT.java  |  37 +-
 .../org/apache/accumulo/test/NamespacesIT.java  |  33 +-
 .../accumulo/test/NoMutationRecoveryIT.java     |  37 +-
 .../test/RecoveryCompactionsAreFlushesIT.java   |  22 +-
 .../org/apache/accumulo/test/ShellServerIT.java |  50 +--
 .../apache/accumulo/test/SplitRecoveryIT.java   |   4 +-
 .../test/TableConfigurationUpdateIT.java        |   6 +-
 .../apache/accumulo/test/TableOperationsIT.java |  31 +-
 .../test/TracerRecoversAfterOfflineTableIT.java |   1 +
 .../java/org/apache/accumulo/test/VolumeIT.java |  17 +-
 .../accumulo/test/functional/AbstractMacIT.java |  79 +---
 .../test/functional/AccumuloInputFormatIT.java  |   6 +-
 .../accumulo/test/functional/AddSplitIT.java    |   3 +-
 .../test/functional/BadIteratorMincIT.java      |   3 +-
 .../BalanceInPresenceOfOfflineTableIT.java      |  55 ++-
 .../test/functional/BatchScanSplitIT.java       |   7 +-
 .../test/functional/BatchWriterFlushIT.java     |   3 +-
 .../test/functional/BigRootTabletIT.java        |  16 +-
 .../accumulo/test/functional/BinaryIT.java      |  14 +-
 .../test/functional/BinaryStressIT.java         |  78 +++-
 .../accumulo/test/functional/BloomFilterIT.java | 217 ++++++-----
 .../accumulo/test/functional/BulkFileIT.java    |  15 +-
 .../apache/accumulo/test/functional/BulkIT.java |  44 ++-
 .../functional/BulkSplitOptimizationIT.java     |  88 +++--
 .../test/functional/ChaoticBalancerIT.java      |  31 +-
 .../accumulo/test/functional/ClassLoaderIT.java |  18 +-
 .../accumulo/test/functional/CleanTmpIT.java    |  55 ++-
 .../accumulo/test/functional/CleanUpIT.java     |  76 +++-
 .../accumulo/test/functional/CloneTestIT.java   |  16 +-
 .../accumulo/test/functional/CombinerIT.java    |   3 +-
 .../accumulo/test/functional/CompactionIT.java  |  85 ++++-
 .../accumulo/test/functional/ConcurrencyIT.java |  79 ++--
 .../test/functional/ConfigurableMacIT.java      |   5 +-
 .../accumulo/test/functional/ConstraintIT.java  |   3 +-
 .../test/functional/CreateAndUseIT.java         |   3 +-
 .../test/functional/CreateManyScannersIT.java   |   3 +-
 .../accumulo/test/functional/CredentialsIT.java |   3 +-
 .../test/functional/DeleteEverythingIT.java     |  76 ++--
 .../accumulo/test/functional/DeleteIT.java      |  37 +-
 .../accumulo/test/functional/DeleteRowsIT.java  |  17 +-
 .../test/functional/DeleteRowsSplitIT.java      |   3 +-
 .../functional/DeleteTableDuringSplitIT.java    |   3 +-
 .../test/functional/DynamicThreadPoolsIT.java   |  50 ++-
 .../accumulo/test/functional/ExamplesIT.java    | 251 ++++++++-----
 .../test/functional/FateStarvationIT.java       |   3 +-
 .../accumulo/test/functional/LargeRowIT.java    |  32 +-
 .../accumulo/test/functional/LogicalTimeIT.java |  31 +-
 .../test/functional/MasterAssignmentIT.java     |   6 +-
 .../test/functional/MasterFailoverIT.java       |  38 +-
 .../accumulo/test/functional/MaxOpenIT.java     | 103 +++--
 .../accumulo/test/functional/MergeIT.java       |   3 +-
 .../accumulo/test/functional/MetadataIT.java    |   6 +-
 .../accumulo/test/functional/PermissionsIT.java |  39 +-
 .../accumulo/test/functional/ReadWriteIT.java   | 255 +++++++++----
 .../functional/RecoveryWithEmptyRFileIT.java    |  20 +-
 .../accumulo/test/functional/RenameIT.java      |   3 +-
 .../accumulo/test/functional/RestartIT.java     | 250 ++++++++++---
 .../test/functional/RestartStressIT.java        |  88 ++++-
 .../accumulo/test/functional/RowDeleteIT.java   |  62 +--
 .../test/functional/ScanIteratorIT.java         |   3 +-
 .../accumulo/test/functional/ScanRangeIT.java   |   3 +-
 .../test/functional/ScanSessionTimeOutIT.java   |  80 ++--
 .../accumulo/test/functional/ScannerIT.java     |   7 +-
 .../test/functional/ServerSideErrorIT.java      |   3 +-
 .../accumulo/test/functional/SimpleMacIT.java   |   9 +-
 .../test/functional/SparseColumnFamilyIT.java   |   3 +-
 .../accumulo/test/functional/SplitIT.java       | 140 +++++--
 .../apache/accumulo/test/functional/SslIT.java  |   7 +-
 .../accumulo/test/functional/StartIT.java       |  14 +-
 .../accumulo/test/functional/TableIT.java       |  18 +-
 .../accumulo/test/functional/TabletIT.java      |   7 +-
 .../accumulo/test/functional/TimeoutIT.java     |   5 +-
 .../accumulo/test/functional/VisibilityIT.java  |   3 +-
 .../test/functional/WriteAheadLogIT.java        |  30 +-
 .../accumulo/test/functional/WriteLotsIT.java   |   3 +-
 .../test/replication/CyclicReplicationIT.java   |   6 +-
 .../replication/MultiInstanceReplicationIT.java |   8 +-
 .../UnorderedWorkAssignerReplicationIT.java     |   8 +-
 123 files changed, 4770 insertions(+), 1767 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/minicluster/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/minicluster/src/main/java/org/apache/accumulo/minicluster/impl/MiniAccumuloClusterImpl.java
----------------------------------------------------------------------
diff --cc minicluster/src/main/java/org/apache/accumulo/minicluster/impl/MiniAccumuloClusterImpl.java
index 5149d9d,50e90b8..237c37c
--- a/minicluster/src/main/java/org/apache/accumulo/minicluster/impl/MiniAccumuloClusterImpl.java
+++ b/minicluster/src/main/java/org/apache/accumulo/minicluster/impl/MiniAccumuloClusterImpl.java
@@@ -89,7 -88,7 +88,6 @@@ import org.apache.accumulo.server.util.
  import org.apache.accumulo.server.zookeeper.ZooReaderWriterFactory;
  import org.apache.accumulo.start.Main;
  import org.apache.accumulo.start.classloader.vfs.MiniDFSUtil;
- import org.apache.accumulo.tserver.TabletServer;
 -import org.apache.accumulo.trace.instrument.Tracer;
  import org.apache.commons.configuration.MapConfiguration;
  import org.apache.commons.io.FileUtils;
  import org.apache.commons.vfs2.FileObject;
@@@ -870,7 -772,8 +770,12 @@@ public class MiniAccumuloClusterImpl im
      return stats;
    }
  
 +  public MiniDFSCluster getMiniDfs() {
 +    return this.miniDFS;
 +  }
++
+   @Override
+   public MiniAccumuloClusterControl getClusterControl() {
+     return clusterControl;
+   }
  }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/minicluster/src/main/java/org/apache/accumulo/minicluster/impl/MiniAccumuloConfigImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/main/java/org/apache/accumulo/test/TestMultiTableIngest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/AuditMessageIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java
index 2ad28b4,0000000..9cae889
mode 100644,000000..100644
--- a/test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/BadDeleteMarkersCreatedIT.java
@@@ -1,94 -1,0 +1,175 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +package org.apache.accumulo.test;
 +
++import java.util.Map;
 +import java.util.Map.Entry;
 +import java.util.SortedSet;
 +import java.util.TreeSet;
 +
++import org.apache.accumulo.core.Constants;
 +import org.apache.accumulo.core.client.Connector;
++import org.apache.accumulo.core.client.Instance;
 +import org.apache.accumulo.core.client.Scanner;
++import org.apache.accumulo.core.client.admin.InstanceOperations;
 +import org.apache.accumulo.core.conf.Property;
 +import org.apache.accumulo.core.data.Key;
 +import org.apache.accumulo.core.data.Value;
 +import org.apache.accumulo.core.metadata.MetadataTable;
 +import org.apache.accumulo.core.metadata.schema.MetadataSchema;
 +import org.apache.accumulo.core.security.Authorizations;
 +import org.apache.accumulo.core.util.UtilWaitThread;
++import org.apache.accumulo.core.zookeeper.ZooUtil;
++import org.apache.accumulo.fate.zookeeper.ZooCache;
++import org.apache.accumulo.fate.zookeeper.ZooLock;
++import org.apache.accumulo.harness.AccumuloClusterIT;
++import org.apache.accumulo.minicluster.ServerType;
 +import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
- import org.apache.accumulo.test.functional.ConfigurableMacIT;
 +import org.apache.hadoop.conf.Configuration;
 +import org.apache.hadoop.io.Text;
++import org.apache.log4j.Logger;
++import org.junit.After;
 +import org.junit.Assert;
 +import org.junit.Before;
 +import org.junit.Test;
 +
 +// Accumulo3047
- public class BadDeleteMarkersCreatedIT extends ConfigurableMacIT {
++public class BadDeleteMarkersCreatedIT extends AccumuloClusterIT {
++  private static final Logger log = Logger.getLogger(BadDeleteMarkersCreatedIT.class);
 +
 +  @Override
 +  public int defaultTimeoutSeconds() {
 +    return 60;
 +  }
 +
 +  @Override
-   public void configure(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {
++  public void configureMiniCluster(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {
 +    cfg.setNumTservers(1);
 +    cfg.setProperty(Property.GC_CYCLE_DELAY, "1s");
 +    cfg.setProperty(Property.GC_CYCLE_START, "0s");
 +  }
 +
 +  private int timeoutFactor = 1;
 +
 +  @Before
 +  public void getTimeoutFactor() {
 +    try {
 +      timeoutFactor = Integer.parseInt(System.getProperty("timeout.factor"));
 +    } catch (NumberFormatException e) {
 +      log.warn("Could not parse integer from timeout.factor");
 +    }
 +
 +    Assert.assertTrue("timeout.factor must be greater than or equal to 1", timeoutFactor >= 1);
 +  }
 +
++  private String gcCycleDelay, gcCycleStart;
++
++  @Before
++  public void alterConfig() throws Exception {
++    InstanceOperations iops = getConnector().instanceOperations();
++    Map<String,String> config = iops.getSystemConfiguration();
++    gcCycleDelay = config.get(Property.GC_CYCLE_DELAY.getKey());
++    gcCycleStart = config.get(Property.GC_CYCLE_START.getKey());
++    iops.setProperty(Property.GC_CYCLE_DELAY.getKey(), "1s");
++    iops.setProperty(Property.GC_CYCLE_START.getKey(), "0s");
++    log.info("Restarting garbage collector");
++
++    getCluster().getClusterControl().stopAllServers(ServerType.GARBAGE_COLLECTOR);
++
++    Instance instance = getConnector().getInstance();
++    ZooCache zcache = new ZooCache(instance.getZooKeepers(), instance.getZooKeepersSessionTimeOut());
++    zcache.clear();
++    String path = ZooUtil.getRoot(instance) + Constants.ZGC_LOCK;
++    byte[] gcLockData;
++    do {
++      gcLockData = ZooLock.getLockData(zcache, path, null);
++      if (null != gcLockData) {
++        log.info("Waiting for GC ZooKeeper lock to expire");
++        Thread.sleep(2000);
++      }
++    } while (null != gcLockData);
++
++    log.info("GC lock was lost");
++
++    getCluster().getClusterControl().startAllServers(ServerType.GARBAGE_COLLECTOR);
++    log.info("Garbage collector was restarted");
++
++    gcLockData = null;
++    do {
++      gcLockData = ZooLock.getLockData(zcache, path, null);
++      if (null == gcLockData) {
++        log.info("Waiting for GC ZooKeeper lock to be acquired");
++        Thread.sleep(2000);
++      }
++    } while (null == gcLockData);
++
++    log.info("GC lock was acquired");
++  }
++
++  @After
++  public void restoreConfig() throws Exception {
++    InstanceOperations iops = getConnector().instanceOperations();
++    if (null != gcCycleDelay) {
++      iops.setProperty(Property.GC_CYCLE_DELAY.getKey(), gcCycleDelay);
++    }
++    if (null != gcCycleStart) {
++      iops.setProperty(Property.GC_CYCLE_START.getKey(), gcCycleStart);
++    }
++    log.info("Restarting garbage collector");
++    getCluster().getClusterControl().stopAllServers(ServerType.GARBAGE_COLLECTOR);
++    getCluster().getClusterControl().startAllServers(ServerType.GARBAGE_COLLECTOR);
++    log.info("Garbage collector was restarted");
++  }
++
 +  @Test
 +  public void test() throws Exception {
 +    // make a table
 +    String tableName = getUniqueNames(1)[0];
 +    Connector c = getConnector();
++    log.info("Creating table to be deleted");
 +    c.tableOperations().create(tableName);
++    final String tableId = c.tableOperations().tableIdMap().get(tableName);
++    Assert.assertNotNull("Expected to find a tableId", tableId);
++
 +    // add some splits
 +    SortedSet<Text> splits = new TreeSet<Text>();
 +    for (int i = 0; i < 10; i++) {
 +      splits.add(new Text("" + i));
 +    }
 +    c.tableOperations().addSplits(tableName, splits);
 +    // get rid of all the splits
 +    c.tableOperations().deleteRows(tableName, null, null);
 +    // get rid of the table
 +    c.tableOperations().delete(tableName);
++    log.info("Sleeping to let garbage collector run");
 +    // let gc run
-     UtilWaitThread.sleep(timeoutFactor * 5 * 1000);
++    UtilWaitThread.sleep(timeoutFactor * 15 * 1000);
++    log.info("Verifying that delete markers were deleted");
 +    // look for delete markers
 +    Scanner scanner = c.createScanner(MetadataTable.NAME, Authorizations.EMPTY);
 +    scanner.setRange(MetadataSchema.DeletesSection.getRange());
 +    for (Entry<Key,Value> entry : scanner) {
-       Assert.fail(entry.getKey().getRow().toString());
++      String row = entry.getKey().getRow().toString();
++      if (!row.contains("/" + tableId + "/")) {
++        log.info("Ignoring delete entry for a table other than the one we deleted");
++        continue;
++      }
++      Assert.fail("Delete entry should have been deleted by the garbage collector: " + entry.getKey().getRow().toString());
 +    }
 +  }
 +
 +}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java
index 2fcd61e,50185b8..a283305
--- a/test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/ConditionalWriterIT.java
@@@ -67,21 -68,26 +68,25 @@@ import org.apache.accumulo.core.iterato
  import org.apache.accumulo.core.iterators.user.VersioningIterator;
  import org.apache.accumulo.core.security.Authorizations;
  import org.apache.accumulo.core.security.ColumnVisibility;
+ import org.apache.accumulo.core.security.SystemPermission;
  import org.apache.accumulo.core.security.TablePermission;
  import org.apache.accumulo.core.trace.DistributedTrace;
 -import org.apache.accumulo.core.trace.TraceDump;
 -import org.apache.accumulo.core.trace.TraceDump.Printer;
 +import org.apache.accumulo.core.trace.Span;
 +import org.apache.accumulo.core.trace.Trace;
  import org.apache.accumulo.core.util.FastFormat;
  import org.apache.accumulo.core.util.UtilWaitThread;
  import org.apache.accumulo.examples.simple.constraints.AlphaNumKeyConstraint;
 -import org.apache.accumulo.fate.zookeeper.ZooReader;
+ import org.apache.accumulo.harness.AccumuloClusterIT;
+ import org.apache.accumulo.minicluster.impl.MiniAccumuloClusterImpl;
  import org.apache.accumulo.test.functional.BadIterator;
- import org.apache.accumulo.test.functional.SimpleMacIT;
  import org.apache.accumulo.test.functional.SlowIterator;
 -import org.apache.accumulo.trace.instrument.Span;
 -import org.apache.accumulo.trace.instrument.Trace;
 +import org.apache.accumulo.tracer.TraceDump;
 +import org.apache.accumulo.tracer.TraceDump.Printer;
  import org.apache.accumulo.tracer.TraceServer;
  import org.apache.hadoop.io.Text;
+ import org.apache.log4j.Logger;
  import org.junit.Assert;
+ import org.junit.Assume;
  import org.junit.Test;
  
  import com.google.common.collect.Iterables;
@@@ -1219,20 -1234,23 +1233,23 @@@ public class ConditionalWriterIT extend
  
    @Test
    public void testTrace() throws Exception {
--
++    // Need to add a getClientConfig() to AccumuloCluster
++    Assume.assumeTrue(getClusterType() == ClusterType.MINI);
      Process tracer = null;
      Connector conn = getConnector();
++    AccumuloCluster cluster = getCluster();
++    MiniAccumuloClusterImpl mac = (MiniAccumuloClusterImpl) cluster;
      if (!conn.tableOperations().exists("trace")) {
-       tracer = getStaticCluster().exec(TraceServer.class);
-     }
-     while (!conn.tableOperations().exists("trace")) {
-       UtilWaitThread.sleep(1000);
 -      Assume.assumeTrue(getClusterType() == ClusterType.MINI);
 -      AccumuloCluster cluster = getCluster();
 -      MiniAccumuloClusterImpl mac = (MiniAccumuloClusterImpl) cluster;
+       tracer = mac.exec(TraceServer.class);
+       while (!conn.tableOperations().exists("trace")) {
+         UtilWaitThread.sleep(1000);
+       }
      }
  
      String tableName = getUniqueNames(1)[0];
      conn.tableOperations().create(tableName);
  
-     DistributedTrace.enable("localhost", "testTrace", getClientConfig());
 -    DistributedTrace.enable(conn.getInstance(), new ZooReader(conn.getInstance().getZooKeepers(), 30*1000), "testTrace", "localhost");
++    DistributedTrace.enable("localhost", "testTrace", mac.getClientConfig());
      Span root = Trace.on("traceTest");
      ConditionalWriter cw = conn.createConditionalWriter(tableName, new ConditionalWriterConfig());
  

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/KeyValueEqualityIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/KeyValueEqualityIT.java
index b1e5364,0000000..7dd7e52
mode 100644,000000..100644
--- a/test/src/test/java/org/apache/accumulo/test/KeyValueEqualityIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/KeyValueEqualityIT.java
@@@ -1,75 -1,0 +1,76 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +package org.apache.accumulo.test;
 +
 +import java.util.Iterator;
 +import java.util.Map.Entry;
 +
 +import org.apache.accumulo.core.client.BatchWriter;
 +import org.apache.accumulo.core.client.BatchWriterConfig;
 +import org.apache.accumulo.core.client.Connector;
 +import org.apache.accumulo.core.client.admin.TableOperations;
 +import org.apache.accumulo.core.data.Key;
 +import org.apache.accumulo.core.data.Mutation;
 +import org.apache.accumulo.core.data.Value;
 +import org.apache.accumulo.core.security.Authorizations;
- import org.apache.accumulo.test.functional.SimpleMacIT;
++import org.apache.accumulo.harness.AccumuloClusterIT;
 +import org.junit.Assert;
 +import org.junit.Test;
 +
- public class KeyValueEqualityIT extends SimpleMacIT {
++public class KeyValueEqualityIT extends AccumuloClusterIT {
 +
 +  @Override
 +  public int defaultTimeoutSeconds() {
 +    return 60;
 +  }
 +
 +  @Test
 +  public void testEquality() throws Exception {
 +    Connector conn = this.getConnector();
 +    final BatchWriterConfig config = new BatchWriterConfig();
 +
-     final String table1 = "table1", table2 = "table2";
++    final String[] tables = getUniqueNames(2);
++    final String table1 = tables[0], table2 = tables[1];
 +    final TableOperations tops = conn.tableOperations();
 +    tops.create(table1);
 +    tops.create(table2);
 +
 +    final BatchWriter bw1 = conn.createBatchWriter(table1, config), bw2 = conn.createBatchWriter(table2, config);
 +
 +    for (int row = 0; row < 100; row++) {
 +      Mutation m = new Mutation(Integer.toString(row));
 +      for (int col = 0; col < 10; col++) {
 +        m.put(Integer.toString(col), "", System.currentTimeMillis(), Integer.toString(col * 2));
 +      }
 +      bw1.addMutation(m);
 +      bw2.addMutation(m);
 +    }
 +
 +    bw1.close();
 +    bw2.close();
 +
 +    Iterator<Entry<Key,Value>> t1 = conn.createScanner(table1, Authorizations.EMPTY).iterator(), t2 = conn.createScanner(table2, Authorizations.EMPTY).iterator();
 +    while (t1.hasNext() && t2.hasNext()) {
 +      // KeyValue, the implementation of Entry<Key,Value>, should support equality and hashCode properly
 +      Entry<Key,Value> e1 = t1.next(), e2 = t2.next();
 +      Assert.assertEquals(e1, e2);
 +      Assert.assertEquals(e1.hashCode(), e2.hashCode());
 +    }
 +    Assert.assertFalse("table1 had more data to read", t1.hasNext());
 +    Assert.assertFalse("table2 had more data to read", t2.hasNext());
 +  }
 +}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/MetaConstraintRetryIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/NamespacesIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/RecoveryCompactionsAreFlushesIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/RecoveryCompactionsAreFlushesIT.java
index 8a4f275,0000000..b78e724
mode 100644,000000..100644
--- a/test/src/test/java/org/apache/accumulo/test/RecoveryCompactionsAreFlushesIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/RecoveryCompactionsAreFlushesIT.java
@@@ -1,97 -1,0 +1,101 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one or more
 + * contributor license agreements.  See the NOTICE file distributed with
 + * this work for additional information regarding copyright ownership.
 + * The ASF licenses this file to You under the Apache License, Version 2.0
 + * (the "License"); you may not use this file except in compliance with
 + * the License.  You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +package org.apache.accumulo.test;
 +
 +import java.util.Map.Entry;
 +
++import org.apache.accumulo.cluster.ClusterControl;
 +import org.apache.accumulo.core.client.BatchWriter;
 +import org.apache.accumulo.core.client.BatchWriterConfig;
 +import org.apache.accumulo.core.client.Connector;
 +import org.apache.accumulo.core.client.Scanner;
 +import org.apache.accumulo.core.conf.Property;
 +import org.apache.accumulo.core.data.Key;
 +import org.apache.accumulo.core.data.Mutation;
 +import org.apache.accumulo.core.data.Value;
 +import org.apache.accumulo.core.metadata.MetadataTable;
 +import org.apache.accumulo.core.metadata.schema.MetadataSchema;
 +import org.apache.accumulo.core.security.Authorizations;
++import org.apache.accumulo.harness.AccumuloClusterIT;
 +import org.apache.accumulo.minicluster.ServerType;
 +import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
- import org.apache.accumulo.minicluster.impl.ProcessReference;
- import org.apache.accumulo.test.functional.ConfigurableMacIT;
 +import org.apache.hadoop.conf.Configuration;
 +import org.apache.hadoop.fs.RawLocalFileSystem;
 +import org.junit.Assert;
 +import org.junit.Test;
 +
 +// Accumulo3010
- public class RecoveryCompactionsAreFlushesIT extends ConfigurableMacIT {
++public class RecoveryCompactionsAreFlushesIT extends AccumuloClusterIT {
 +
 +  @Override
 +  public int defaultTimeoutSeconds() {
 +    return 60;
 +  }
 +
 +  @Override
-   public void configure(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {
++  public void configureMiniCluster(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {
 +    cfg.setNumTservers(1);
 +    cfg.setProperty(Property.INSTANCE_ZK_TIMEOUT, "5s");
 +    // file system supports recovery
 +    hadoopCoreSite.set("fs.file.impl", RawLocalFileSystem.class.getName());
 +  }
 +
 +  @Test
 +  public void test() throws Exception {
 +    // create a table
 +    String tableName = getUniqueNames(1)[0];
 +    Connector c = getConnector();
 +    c.tableOperations().create(tableName);
 +    c.tableOperations().setProperty(tableName, Property.TABLE_MAJC_RATIO.getKey(), "100");
 +    c.tableOperations().setProperty(tableName, Property.TABLE_FILE_MAX.getKey(), "3");
 +    // create 3 flush files
 +    BatchWriter bw = c.createBatchWriter(tableName, new BatchWriterConfig());
 +    Mutation m = new Mutation("a");
 +    m.put("b", "c", new Value("v".getBytes()));
 +    for (int i = 0; i < 3; i++) {
 +      bw.addMutation(m);
 +      bw.flush();
 +      c.tableOperations().flush(tableName, null, null, true);
 +    }
 +    // create an unsaved mutation
 +    bw.addMutation(m);
 +    bw.close();
-     // kill the tablet server
-     for (ProcessReference p : cluster.getProcesses().get(ServerType.TABLET_SERVER)) {
-       cluster.killProcess(ServerType.TABLET_SERVER, p);
-     }
++
++    ClusterControl control = cluster.getClusterControl();
++
++    // kill the tablet servers
++    control.stopAllServers(ServerType.TABLET_SERVER);
++
 +    // recover
-     cluster.start();
++    control.startAllServers(ServerType.TABLET_SERVER);
++
 +    // ensure the table is readable
 +    for (@SuppressWarnings("unused") Entry<Key,Value> entry : c.createScanner(tableName, Authorizations.EMPTY)) {
 +    }
++
 +    // ensure that the recovery was not a merging minor compaction
 +    Scanner s = c.createScanner(MetadataTable.NAME, Authorizations.EMPTY);
 +    s.fetchColumnFamily(MetadataSchema.TabletsSection.DataFileColumnFamily.NAME);
 +    for (Entry<Key, Value> entry : s) {
 +      String filename = entry.getKey().getColumnQualifier().toString();
 +      String parts[] = filename.split("/");
 +      Assert.assertFalse(parts[parts.length-1].startsWith("M"));
 +    }
 +  }
 +
 +
 +}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/ShellServerIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/ShellServerIT.java
index 4114dc8,544e2f9..544bb76
--- a/test/src/test/java/org/apache/accumulo/test/ShellServerIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/ShellServerIT.java
@@@ -53,11 -52,12 +52,11 @@@ import org.apache.accumulo.core.data.Va
  import org.apache.accumulo.core.file.FileOperations;
  import org.apache.accumulo.core.file.FileSKVWriter;
  import org.apache.accumulo.core.metadata.MetadataTable;
 -import org.apache.accumulo.core.metadata.RootTable;
  import org.apache.accumulo.core.security.Authorizations;
  import org.apache.accumulo.core.util.UtilWaitThread;
 -import org.apache.accumulo.core.util.shell.Shell;
 +import org.apache.accumulo.shell.Shell;
+ import org.apache.accumulo.harness.SharedMiniClusterIT;
  import org.apache.accumulo.test.functional.FunctionalTestUtils;
- import org.apache.accumulo.test.functional.SimpleMacIT;
  import org.apache.accumulo.test.functional.SlowIterator;
  import org.apache.accumulo.tracer.TraceServer;
  import org.apache.commons.io.FileUtils;
@@@ -239,8 -244,9 +243,8 @@@ public class ShellServerIT extends Shar
  
    @Before
    public void setupShell() throws Exception {
-     ts = new TestShell(ROOT_PASSWORD, getStaticCluster().getConfig().getInstanceName(), getStaticCluster().getConfig().getZooKeepers(), getStaticCluster()
-         .getConfig().getClientConfFile().getAbsolutePath());
+     ts = new TestShell(getRootPassword(), getCluster().getConfig().getInstanceName(), getCluster().getConfig().getZooKeepers(), getCluster().getConfig()
 -        .getClientConfFile()
 -        .getAbsolutePath());
++        .getClientConfFile().getAbsolutePath());
    }
  
    @AfterClass

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/TracerRecoversAfterOfflineTableIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/VolumeIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java
index 644b05e,3833e3c..b0dd816
--- a/test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/AbstractMacIT.java
@@@ -52,36 -45,7 +45,7 @@@ public abstract class AbstractMacIT ext
        } catch (Exception e) {}
    }
  
-   public static File createSharedTestDir(String name) {
-     File baseDir = new File(System.getProperty("user.dir") + "/target/mini-tests");
-     baseDir.mkdirs();
-     if (name != null)
-       baseDir = new File(baseDir, name);
-     File testDir = new File(baseDir, System.currentTimeMillis() + "_" + new Random().nextInt(Short.MAX_VALUE));
-     FileUtils.deleteQuietly(testDir);
-     testDir.mkdir();
-     return testDir;
-   }
- 
-   public static File createTestDir(String name) {
-     File baseDir = new File(System.getProperty("user.dir") + "/target/mini-tests");
-     baseDir.mkdirs();
-     if (name == null)
-       return baseDir;
-     File testDir = new File(baseDir, name);
-     FileUtils.deleteQuietly(testDir);
-     testDir.mkdir();
-     return testDir;
-   }
- 
-   public String[] getUniqueNames(int num) {
-     String[] names = new String[num];
-     for (int i = 0; i < num; i++)
-       names[i] = this.getClass().getSimpleName() + "_" + testName.getMethodName() + i;
-     return names;
-   }
- 
-   public static void configureForEnvironment(MiniAccumuloConfigImpl cfg, File folder) {
 -  protected static void configureForEnvironment(MiniAccumuloConfigImpl cfg, Class<?> testClass, File folder) {
++  public static void configureForEnvironment(MiniAccumuloConfigImpl cfg, Class<?> testClass, File folder) {
      if ("true".equals(System.getProperty("org.apache.accumulo.test.functional.useSslForIT"))) {
        configureForSsl(cfg, folder);
      }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/AddSplitIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/BadIteratorMincIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/BalanceInPresenceOfOfflineTableIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/BalanceInPresenceOfOfflineTableIT.java
index 887aee4,0b87b28..d45b186
--- a/test/src/test/java/org/apache/accumulo/test/functional/BalanceInPresenceOfOfflineTableIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/BalanceInPresenceOfOfflineTableIT.java
@@@ -22,17 -22,27 +22,27 @@@ import java.util.Map
  import java.util.SortedSet;
  import java.util.TreeSet;
  
+ import org.apache.accumulo.core.cli.BatchWriterOpts;
+ import org.apache.accumulo.core.cli.ScannerOpts;
  import org.apache.accumulo.core.client.AccumuloException;
  import org.apache.accumulo.core.client.AccumuloSecurityException;
+ import org.apache.accumulo.core.client.Connector;
+ import org.apache.accumulo.core.client.Instance;
  import org.apache.accumulo.core.client.TableExistsException;
  import org.apache.accumulo.core.client.TableNotFoundException;
- import org.apache.accumulo.core.client.Connector;
+ import org.apache.accumulo.core.client.ZooKeeperInstance;
+ import org.apache.accumulo.core.client.impl.MasterClient;
+ import org.apache.accumulo.core.client.impl.thrift.ThriftSecurityException;
  import org.apache.accumulo.core.conf.Property;
+ import org.apache.accumulo.core.master.thrift.MasterClientService;
  import org.apache.accumulo.core.master.thrift.MasterMonitorInfo;
  import org.apache.accumulo.core.master.thrift.TableInfo;
++import org.apache.accumulo.core.trace.Tracer;
+ import org.apache.accumulo.harness.AccumuloClusterIT;
  import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
+ import org.apache.accumulo.server.security.SystemCredentials;
  import org.apache.accumulo.test.TestIngest;
  import org.apache.accumulo.test.VerifyIngest;
 -import org.apache.accumulo.trace.instrument.Tracer;
  import org.apache.commons.lang.math.NumberUtils;
  import org.apache.hadoop.conf.Configuration;
  import org.apache.hadoop.io.Text;
@@@ -101,9 -121,11 +121,11 @@@ public class BalanceInPresenceOfOffline
      TestIngest.Opts opts = new TestIngest.Opts();
      VerifyIngest.Opts vopts = new VerifyIngest.Opts();
      vopts.rows = opts.rows = 200000;
-     TestIngest.ingest(connector, opts, BWOPTS);
 -    opts.tableName = TEST_TABLE;
++    opts.setTableName(TEST_TABLE);
+     TestIngest.ingest(connector, opts, new BatchWriterOpts());
      connector.tableOperations().flush(TEST_TABLE, null, null, true);
-     VerifyIngest.verifyIngest(connector, vopts, SOPTS);
 -    vopts.tableName = TEST_TABLE;
++    vopts.setTableName(TEST_TABLE);
+     VerifyIngest.verifyIngest(connector, vopts, new ScannerOpts());
  
      log.debug("waiting for balancing, up to ~5 minutes to allow for migration cleanup.");
      final long startTime = System.currentTimeMillis();

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/BatchScanSplitIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/BatchWriterFlushIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/BinaryIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/BloomFilterIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/BloomFilterIT.java
index 6ee671e,d497d40..3319247
--- a/test/src/test/java/org/apache/accumulo/test/functional/BloomFilterIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/BloomFilterIT.java
@@@ -53,15 -58,11 +58,10 @@@ public class BloomFilterIT extends Accu
      cfg.setDefaultMemory(1, MemoryUnit.GIGABYTE);
      cfg.setNumTservers(1);
      Map<String,String> siteConfig = new HashMap<String, String>();
--    siteConfig.put(Property.TSERV_READ_AHEAD_MAXCONCURRENT.getKey(), "1");
-     siteConfig.put(Property.TABLE_BLOOM_SIZE.getKey(), "2000000");
-     siteConfig.put(Property.TABLE_BLOOM_ERRORRATE.getKey(), "1%");
-     siteConfig.put(Property.TABLE_BLOOM_LOAD_THRESHOLD.getKey(), "0");
 -    siteConfig.put(Property.TSERV_MUTATION_QUEUE_MAX.getKey(), "10M");
 +    siteConfig.put(Property.TSERV_TOTAL_MUTATION_QUEUE_MAX.getKey(), "10M");
-     siteConfig.put(Property.TABLE_FILE_COMPRESSED_BLOCK_SIZE.getKey(), "64K");
      cfg.setSiteConfig(siteConfig );
    }
-   
+ 
    @Override
    protected int defaultTimeoutSeconds() {
      return 6 * 60;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/BulkFileIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/BulkFileIT.java
index 22aa0cd,67de2e6..13c4d32
--- a/test/src/test/java/org/apache/accumulo/test/functional/BulkFileIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/BulkFileIT.java
@@@ -37,6 -36,7 +37,7 @@@ import org.apache.accumulo.harness.Accu
  import org.apache.accumulo.minicluster.MemoryUnit;
  import org.apache.accumulo.minicluster.ServerType;
  import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
 -import org.apache.accumulo.server.conf.ServerConfiguration;
++import org.apache.accumulo.server.conf.ServerConfigurationFactory;
  import org.apache.hadoop.conf.Configuration;
  import org.apache.hadoop.fs.FileSystem;
  import org.apache.hadoop.fs.Path;
@@@ -65,10 -65,12 +66,12 @@@ public class BulkFileIT extends Accumul
        splits.add(new Text(split));
      c.tableOperations().addSplits(tableName, splits);
      Configuration conf = new Configuration();
-     AccumuloConfiguration aconf = DefaultConfiguration.getInstance();
-     FileSystem fs = VolumeConfiguration.getDefaultVolume(conf, aconf).getFileSystem();
 -    AccumuloConfiguration aconf = ServerConfiguration.getDefaultConfiguration();
++    AccumuloConfiguration aconf = new ServerConfigurationFactory(c.getInstance()).getConfiguration();
+     FileSystem fs = getCluster().getFileSystem();
  
-     String dir = rootPath() + "/bulk_test_diff_files_89723987592_" + getUniqueNames(1)[0];
+     String rootPath = getUsableDir();
+ 
+     String dir = rootPath + "/bulk_test_diff_files_89723987592_" + getUniqueNames(1)[0];
  
      fs.delete(new Path(dir), true);
  

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/BulkIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/BulkSplitOptimizationIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/BulkSplitOptimizationIT.java
index 492e36f,27b5147..13cad1a
--- a/test/src/test/java/org/apache/accumulo/test/functional/BulkSplitOptimizationIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/BulkSplitOptimizationIT.java
@@@ -90,11 -119,12 +119,12 @@@ public class BulkSplitOptimizationIT ex
      opts.rows = 100000;
      opts.startRow = 0;
      opts.cols = 1;
-     opts.password = new Password(ROOT_PASSWORD);
-     VerifyIngest.verifyIngest(c, opts, SOPTS);
+     opts.password = new Password(new String(token.getPassword(), UTF_8));
 -    opts.tableName = tableName;
++    opts.setTableName(tableName);
+     VerifyIngest.verifyIngest(c, opts, new ScannerOpts());
  
      // ensure each tablet does not have all map files, should be ~2.5 files per tablet
-     FunctionalTestUtils.checkRFiles(c, TABLE_NAME, 50, 100, 1, 4);
+     FunctionalTestUtils.checkRFiles(c, tableName, 50, 100, 1, 4);
    }
  
  }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/ChaoticBalancerIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/ChaoticBalancerIT.java
index 8afb3d2,fc141db..8ffdbd2
--- a/test/src/test/java/org/apache/accumulo/test/functional/ChaoticBalancerIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/ChaoticBalancerIT.java
@@@ -61,9 -66,10 +66,11 @@@ public class ChaoticBalancerIT extends 
      TestIngest.Opts opts = new TestIngest.Opts();
      VerifyIngest.Opts vopts = new VerifyIngest.Opts();
      vopts.rows = opts.rows = 20000;
-     TestIngest.ingest(c, opts, BWOPTS);
-     c.tableOperations().flush("test_ingest", null, null, true);
-     VerifyIngest.verifyIngest(c, vopts, SOPTS);
 -    opts.tableName = vopts.tableName = tableName;
++    opts.setTableName(tableName);
++    vopts.setTableName(tableName);
+     TestIngest.ingest(c, opts, new BatchWriterOpts());
+     c.tableOperations().flush(tableName, null, null, true);
+     VerifyIngest.verifyIngest(c, vopts, new ScannerOpts());
    }
-   
+ 
  }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/CompactionIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/CompactionIT.java
index b659913,dc877dc..ab26a44
--- a/test/src/test/java/org/apache/accumulo/test/functional/CompactionIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/CompactionIT.java
@@@ -89,8 -127,10 +127,10 @@@ public class CompactionIT extends Accum
                opts.random = 56;
                opts.dataSize = 50;
                opts.cols = 1;
 -              opts.tableName = tableName;
++              opts.setTableName(tableName);
                VerifyIngest.verifyIngest(c, opts, new ScannerOpts());
              } catch (Exception ex) {
+               log.warn("Got exception verifying data", ex);
                fail.set(true);
              }
            }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/ConcurrencyIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/ConfigurableMacIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/ConstraintIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/CreateAndUseIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/DeleteEverythingIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/DeleteEverythingIT.java
index f7f8700,d8bc864..68911ca
--- a/test/src/test/java/org/apache/accumulo/test/functional/DeleteEverythingIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/DeleteEverythingIT.java
@@@ -16,11 -16,10 +16,10 @@@
   */
  package org.apache.accumulo.test.functional;
  
 -import static com.google.common.base.Charsets.UTF_8;
 -import static org.junit.Assert.assertEquals;
 +import static java.nio.charset.StandardCharsets.UTF_8;
 +import static org.junit.Assert.*;
  
  import java.util.Collections;
- import java.util.Map.Entry;
  
  import org.apache.accumulo.core.client.BatchWriter;
  import org.apache.accumulo.core.client.BatchWriterConfig;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/DeleteIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/DeleteIT.java
index 3510fbd,f7396b3..db86d89
--- a/test/src/test/java/org/apache/accumulo/test/functional/DeleteIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/DeleteIT.java
@@@ -37,14 -41,21 +41,22 @@@ public class DeleteIT extends AccumuloC
    @Test
    public void test() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
-     deleteTest(c, cluster);
-     assertEquals(0, cluster.exec(Admin.class, "stopAll").waitFor());
+     String tableName = getUniqueNames(1)[0];
+     c.tableOperations().create(tableName);
+     PasswordToken token = (PasswordToken) getToken();
+     deleteTest(c, getCluster(), new String(token.getPassword(), Charsets.UTF_8), tableName);
+     try {
+       getCluster().getClusterControl().adminStopAll();
+     } finally {
+       getCluster().start();
+     }
    }
  
-   public static void deleteTest(Connector c, MiniAccumuloClusterImpl cluster) throws Exception {
+   public static void deleteTest(Connector c, AccumuloCluster cluster, String password, String tableName) throws Exception {
      VerifyIngest.Opts vopts = new VerifyIngest.Opts();
      TestIngest.Opts opts = new TestIngest.Opts();
 -    vopts.tableName = opts.tableName = tableName;
++    vopts.setTableName(tableName);
++    opts.setTableName(tableName);
      vopts.rows = opts.rows = 1000;
      vopts.cols = opts.cols = 1;
      vopts.random = opts.random = 56;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/DeleteRowsSplitIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/DynamicThreadPoolsIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/DynamicThreadPoolsIT.java
index 3ec3ccf,c10d3df..f96f8f8
--- a/test/src/test/java/org/apache/accumulo/test/functional/DynamicThreadPoolsIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/DynamicThreadPoolsIT.java
@@@ -29,17 -30,20 +30,20 @@@ import org.apache.accumulo.core.master.
  import org.apache.accumulo.core.master.thrift.TableInfo;
  import org.apache.accumulo.core.master.thrift.TabletServerStatus;
  import org.apache.accumulo.core.security.Credentials;
 +import org.apache.accumulo.core.trace.Tracer;
  import org.apache.accumulo.core.util.UtilWaitThread;
+ import org.apache.accumulo.harness.AccumuloClusterIT;
  import org.apache.accumulo.minicluster.impl.MiniAccumuloConfigImpl;
  import org.apache.accumulo.test.TestIngest;
 -import org.apache.accumulo.trace.instrument.Tracer;
  import org.apache.hadoop.conf.Configuration;
+ import org.junit.After;
+ import org.junit.Before;
  import org.junit.Test;
  
- public class DynamicThreadPoolsIT extends ConfigurableMacIT {
-   
+ public class DynamicThreadPoolsIT extends AccumuloClusterIT {
+ 
    @Override
-   public void configure(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {
+   public void configureMiniCluster(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) {
      cfg.setNumTservers(1);
      cfg.setSiteConfig(Collections.singletonMap(Property.TSERV_MAJC_DELAY.getKey(), "100ms"));
    }
@@@ -57,14 -80,15 +80,15 @@@
      TestIngest.Opts opts = new TestIngest.Opts();
      opts.rows = 500 * 1000;
      opts.createTable = true;
-     TestIngest.ingest(c, opts, BWOPTS);
-     c.tableOperations().flush("test_ingest", null, null, true);
-     for (int i = 1; i < TABLES; i++)
-       c.tableOperations().clone("test_ingest", "test_ingest" + i, true, null, null);
 -    opts.tableName = firstTable;
++    opts.setTableName(firstTable);
+     TestIngest.ingest(c, opts, new BatchWriterOpts());
+     c.tableOperations().flush(firstTable, null, null, true);
+     for (int i = 1; i < tables.length; i++)
+       c.tableOperations().clone(firstTable, tables[i], true, null, null);
      UtilWaitThread.sleep(11 * 1000); // time between checks of the thread pool sizes
-     Credentials creds = new Credentials("root", new PasswordToken(ROOT_PASSWORD));
-     for (int i = 1; i < TABLES; i++)
-       c.tableOperations().compact("test_ingest" + i, null, null, true, false);
+     Credentials creds = new Credentials(getPrincipal(), getToken());
+     for (int i = 1; i < tables.length; i++)
+       c.tableOperations().compact(tables[i], null, null, true, false);
      for (int i = 0; i < 30; i++) {
        int count = 0;
        MasterClientService.Iface client = null;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/ExamplesIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/ExamplesIT.java
index 5b03b17,5bced81..f2f99b7
--- a/test/src/test/java/org/apache/accumulo/test/functional/ExamplesIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/ExamplesIT.java
@@@ -145,9 -168,10 +168,13 @@@ public class ExamplesIT extends Accumul
        count++;
      }
      assertTrue(count > 0);
-     result = FunctionalTestUtils.readAll(cluster, TraceDumpExample.class, p);
-     assertTrue(result.contains("myApp@myHost"));
-     trace.destroy();
++    pair = cluster.getClusterControl().execWithStdout(TracingExample.class,
++        new String[] {"-i", instance, "-z", keepers, "-u", user, "-p", passwd, "-C", "-D", "-c"});
++    Assert.assertEquals("Expected return code of zero. STDOUT=" + pair.getValue(), 0, pair.getKey().intValue());
+     assertTrue(pair.getValue().contains("myHost@myApp"));
+     if (ClusterType.MINI == getClusterType() && null != trace) {
+       trace.destroy();
+     }
    }
  
    @Test
@@@ -288,6 -334,7 +337,7 @@@
      TestIngest.Opts opts = new TestIngest.Opts();
      opts.rows = 1;
      opts.cols = 1000;
 -    opts.tableName = tableName;
++    opts.setTableName(tableName);
      try {
        TestIngest.ingest(c, opts, bwOpts);
      } catch (MutationsRejectedException ex) {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/FateStarvationIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/LargeRowIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/MasterFailoverIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/MasterFailoverIT.java
index 4fd8b70,0bd303a..2b44ccb
--- a/test/src/test/java/org/apache/accumulo/test/functional/MasterFailoverIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/MasterFailoverIT.java
@@@ -44,22 -46,20 +46,20 @@@ public class MasterFailoverIT extends A
    @Test
    public void test() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
+     String[] names = getUniqueNames(2);
+     c.tableOperations().create(names[0]);
      TestIngest.Opts opts = new TestIngest.Opts();
-     TestIngest.ingest(c, opts, BWOPTS);
-     for (ProcessReference master : cluster.getProcesses().get(ServerType.MASTER)) {
-       cluster.killProcess(ServerType.MASTER, master);
-     }
 -    opts.tableName = names[0];
++    opts.setTableName(names[0]);
+     TestIngest.ingest(c, opts, new BatchWriterOpts());
+ 
+     ClusterControl control = cluster.getClusterControl();
+     control.stopAllServers(ServerType.MASTER);
      // start up a new one
-     Process p = cluster.exec(Master.class);
+     control.startAllServers(ServerType.MASTER);
      // talk to it
-     c.tableOperations().rename("test_ingest", "test_ingest2");
-     try {
-       VerifyIngest.Opts vopts = new VerifyIngest.Opts();
-       vopts.setTableName("test_ingest2");
-       VerifyIngest.verifyIngest(c, vopts, SOPTS);
-     } finally {
-       p.destroy();
-     }
+     c.tableOperations().rename(names[0], names[1]);
+     VerifyIngest.Opts vopts = new VerifyIngest.Opts();
 -    vopts.tableName = names[1];
++    vopts.setTableName(names[1]);
+     VerifyIngest.verifyIngest(c, vopts, new ScannerOpts());
    }
  }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/MaxOpenIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/MaxOpenIT.java
index 2649890,ff9370c..729ec46
--- a/test/src/test/java/org/apache/accumulo/test/functional/MaxOpenIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/MaxOpenIT.java
@@@ -74,14 -104,15 +104,15 @@@ public class MaxOpenIT extends Accumulo
        opts.rows = NUM_TO_INGEST;
        opts.cols = 1;
        opts.random = i;
 -      opts.tableName = tableName;
++      opts.setTableName(tableName);
        TestIngest.ingest(c, opts, new BatchWriterOpts());
-       
-       c.tableOperations().flush("test_ingest", null, null, true);
-       FunctionalTestUtils.checkRFiles(c, "test_ingest", NUM_TABLETS, NUM_TABLETS, i + 1, i + 1);
+ 
+       c.tableOperations().flush(tableName, null, null, true);
+       FunctionalTestUtils.checkRFiles(c, tableName, NUM_TABLETS, NUM_TABLETS, i + 1, i + 1);
      }
-     
+ 
      List<Range> ranges = new ArrayList<Range>(NUM_TO_INGEST);
-     
+ 
      for (int i = 0; i < NUM_TO_INGEST; i++) {
        ranges.add(new Range(TestIngest.generateRow(i, 0)));
      }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/ReadWriteIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/ReadWriteIT.java
index bc9ab4a,da398d6..5e7dbfd
--- a/test/src/test/java/org/apache/accumulo/test/functional/ReadWriteIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/ReadWriteIT.java
@@@ -96,14 -141,16 +141,16 @@@ public class ReadWriteIT extends Accumu
      opts.startRow = offset;
      opts.columnFamily = colf;
      opts.createTable = true;
 -    opts.tableName = tableName;
++    opts.setTableName(tableName);
+ 
      TestIngest.ingest(connector, opts, new BatchWriterOpts());
    }
-   
-   public static void verify(Connector connector, int rows, int cols, int width, int offset) throws Exception {
-     verify(connector, rows, cols, width, offset, COLF);
+ 
+   public static void verify(Connector connector, int rows, int cols, int width, int offset, String tableName) throws Exception {
+     verify(connector, rows, cols, width, offset, COLF, tableName);
    }
-   
-   private static void verify(Connector connector, int rows, int cols, int width, int offset, String colf) throws Exception {
+ 
+   private static void verify(Connector connector, int rows, int cols, int width, int offset, String colf, String tableName) throws Exception {
      ScannerOpts scannerOpts = new ScannerOpts();
      VerifyIngest.Opts opts = new VerifyIngest.Opts();
      opts.rows = rows;
@@@ -111,9 -158,10 +158,10 @@@
      opts.dataSize = width;
      opts.startRow = offset;
      opts.columnFamily = colf;
 -    opts.tableName = tableName;
++    opts.setTableName(tableName);
      VerifyIngest.verifyIngest(connector, opts, scannerOpts);
    }
-   
+ 
    public static String[] args(String... args) {
      return args;
    }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/RenameIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/RestartIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/RestartIT.java
index e4b9c5a,8d5a1dd..d0e32a2
--- a/test/src/test/java/org/apache/accumulo/test/functional/RestartIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/RestartIT.java
@@@ -68,33 -107,74 +107,74 @@@ public class RestartIT extends Accumulo
    @Test
    public void restartMaster() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
-     Process ingest = cluster.exec(TestIngest.class, "-u", "root", "-p", ROOT_PASSWORD, "-i", cluster.getInstanceName(), "-z", cluster.getZooKeepers(),
-         "--rows", "" + OPTS.rows);
-     for (ProcessReference master : cluster.getProcesses().get(ServerType.MASTER)) {
-       cluster.killProcess(ServerType.MASTER, master);
-     }
-     cluster.start();
-     assertEquals(0, ingest.waitFor());
+     final String tableName = getUniqueNames(1)[0];
 -    OPTS.tableName = tableName;
 -    VOPTS.tableName = tableName;
++    OPTS.setTableName(tableName);
++    VOPTS.setTableName(tableName);
+     c.tableOperations().create(tableName);
+     final PasswordToken token = (PasswordToken) getToken();
+     final ClusterControl control = getCluster().getClusterControl();
+ 
+     Future<Integer> ret = svc.submit(new Callable<Integer>() {
+       @Override
+       public Integer call() {
+         try {
+           return control.exec(TestIngest.class,
+               new String[] {"-u", "root", "-p", new String(token.getPassword(), Charsets.UTF_8), "-i", cluster.getInstanceName(), "-z",
+                   cluster.getZooKeepers(), "--rows", "" + OPTS.rows, "--table", tableName});
+         } catch (IOException e) {
+           log.error("Error running TestIngest", e);
+           return -1;
+         }
+       }
+     });
+ 
+     control.stopAllServers(ServerType.MASTER);
+     control.startAllServers(ServerType.MASTER);
+     assertEquals(0, ret.get().intValue());
      VerifyIngest.verifyIngest(c, VOPTS, SOPTS);
-     ingest.destroy();
    }
  
    @Test
    public void restartMasterRecovery() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
+     String tableName = getUniqueNames(1)[0];
+     c.tableOperations().create(tableName);
 -    OPTS.tableName = tableName;
 -    VOPTS.tableName = tableName;
++    OPTS.setTableName(tableName);
++    VOPTS.setTableName(tableName);
      TestIngest.ingest(c, OPTS, BWOPTS);
-     for (Entry<ServerType,Collection<ProcessReference>> entry : cluster.getProcesses().entrySet()) {
-       for (ProcessReference proc : entry.getValue()) {
-         cluster.killProcess(entry.getKey(), proc);
+     ClusterControl control = getCluster().getClusterControl();
+ 
+     // TODO implement a kill all too?
+     // cluster.stop() would also stop ZooKeeper
+     control.stopAllServers(ServerType.MASTER);
+     control.stopAllServers(ServerType.TRACER);
+     control.stopAllServers(ServerType.TABLET_SERVER);
+     control.stopAllServers(ServerType.GARBAGE_COLLECTOR);
+     control.stopAllServers(ServerType.MONITOR);
+ 
+     ZooReader zreader = new ZooReader(c.getInstance().getZooKeepers(), c.getInstance().getZooKeepersSessionTimeOut());
+     ZooCache zcache = new ZooCache(zreader, null);
+     byte[] masterLockData;
+     do {
+       masterLockData = ZooLock.getLockData(zcache, ZooUtil.getRoot(c.getInstance()) + Constants.ZMASTER_LOCK, null);
+       if (null != masterLockData) {
+         log.info("Master lock is still held");
+         Thread.sleep(1000);
        }
-     }
+     } while (null != masterLockData);
+ 
      cluster.start();
      UtilWaitThread.sleep(5);
-     for (ProcessReference master : cluster.getProcesses().get(ServerType.MASTER)) {
-       cluster.killProcess(ServerType.MASTER, master);
-     }
+     control.stopAllServers(ServerType.MASTER);
+ 
+     masterLockData = new byte[0];
+     do {
+       masterLockData = ZooLock.getLockData(zcache, ZooUtil.getRoot(c.getInstance()) + Constants.ZMASTER_LOCK, null);
+       if (null != masterLockData) {
+         log.info("Master lock is still held");
+         Thread.sleep(1000);
+       }
+     } while (null != masterLockData);
      cluster.start();
      VerifyIngest.verifyIngest(c, VOPTS, SOPTS);
    }
@@@ -102,29 -182,54 +182,54 @@@
    @Test
    public void restartMasterSplit() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
-     c.tableOperations().setProperty("test_ingest", Property.TABLE_SPLIT_THRESHOLD.getKey(), "5K");
-     Process ingest = cluster.exec(TestIngest.class, "-u", "root", "-p", ROOT_PASSWORD, "-i", cluster.getInstanceName(), "-z", cluster.getZooKeepers(),
-         "--rows", "" + VOPTS.rows);
-     for (ProcessReference master : cluster.getProcesses().get(ServerType.MASTER)) {
-       cluster.killProcess(ServerType.MASTER, master);
-     }
+     final String tableName = getUniqueNames(1)[0];
+     final PasswordToken token = (PasswordToken) getToken();
+     final ClusterControl control = getCluster().getClusterControl();
 -    VOPTS.tableName = tableName;
++    VOPTS.setTableName(tableName);
+     c.tableOperations().create(tableName);
+     c.tableOperations().setProperty(tableName, Property.TABLE_SPLIT_THRESHOLD.getKey(), "5K");
+     Future<Integer> ret = svc.submit(new Callable<Integer>() {
+       @Override
+       public Integer call() {
+         try {
+           return control.exec(TestIngest.class,
+               new String[] {"-u", "root", "-p", new String(token.getPassword(), Charsets.UTF_8), "-i", cluster.getInstanceName(), "-z",
+                   cluster.getZooKeepers(), "--rows", Integer.toString(VOPTS.rows), "--table", tableName});
+         } catch (Exception e) {
+           log.error("Error running TestIngest", e);
+           return -1;
+         }
+       }
+     });
+ 
+     control.stopAllServers(ServerType.MASTER);
+ 
+     ZooReader zreader = new ZooReader(c.getInstance().getZooKeepers(), c.getInstance().getZooKeepersSessionTimeOut());
+     ZooCache zcache = new ZooCache(zreader, null);
+     byte[] masterLockData;
+     do {
+       masterLockData = ZooLock.getLockData(zcache, ZooUtil.getRoot(c.getInstance()) + Constants.ZMASTER_LOCK, null);
+       if (null != masterLockData) {
+         log.info("Master lock is still held");
+         Thread.sleep(1000);
+       }
+     } while (null != masterLockData);
+ 
      cluster.start();
-     assertEquals(0, ingest.waitFor());
+     assertEquals(0, ret.get().intValue());
      VerifyIngest.verifyIngest(c, VOPTS, SOPTS);
-     ingest.destroy();
    }
  
    @Test
    public void killedTabletServer() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
+     String tableName = getUniqueNames(1)[0];
+     c.tableOperations().create(tableName);
 -    OPTS.tableName = tableName;
 -    VOPTS.tableName = tableName;
++    OPTS.setTableName(tableName);
++    VOPTS.setTableName(tableName);
      TestIngest.ingest(c, OPTS, BWOPTS);
      VerifyIngest.verifyIngest(c, VOPTS, SOPTS);
-     List<ProcessReference> procs = new ArrayList<ProcessReference>(cluster.getProcesses().get(ServerType.TABLET_SERVER));
-     for (ProcessReference tserver : procs) {
-       cluster.killProcess(ServerType.TABLET_SERVER, tserver);
-     }
+     cluster.getClusterControl().stopAllServers(ServerType.TABLET_SERVER);
      cluster.start();
      VerifyIngest.verifyIngest(c, VOPTS, SOPTS);
    }
@@@ -147,23 -252,46 +252,46 @@@
    @Test
    public void killedTabletServerDuringShutdown() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
+     String tableName = getUniqueNames(1)[0];
+     c.tableOperations().create(tableName);
 -    OPTS.tableName = tableName;
++    OPTS.setTableName(tableName);
      TestIngest.ingest(c, OPTS, BWOPTS);
-     List<ProcessReference> procs = new ArrayList<ProcessReference>(cluster.getProcesses().get(ServerType.TABLET_SERVER));
-     cluster.killProcess(ServerType.TABLET_SERVER, procs.get(0));
-     assertEquals(0, cluster.exec(Admin.class, "stopAll").waitFor());
+     try {
+       getCluster().getClusterControl().stopAllServers(ServerType.TABLET_SERVER);
+       getCluster().getClusterControl().adminStopAll();
+     } finally {
+       getCluster().start();
+     }
    }
  
    @Test
    public void shutdownDuringCompactingSplitting() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
-     c.tableOperations().setProperty("test_ingest", Property.TABLE_SPLIT_THRESHOLD.getKey(), "10K");
-     c.tableOperations().setProperty(MetadataTable.NAME, Property.TABLE_SPLIT_THRESHOLD.getKey(), "20K");
-     TestIngest.Opts opts = new TestIngest.Opts();
-     TestIngest.ingest(c, opts, BWOPTS);
-     c.tableOperations().flush("test_ingest", null, null, false);
-     VerifyIngest.verifyIngest(c, VOPTS, SOPTS);
-     assertEquals(0, cluster.exec(Admin.class, "stopAll").waitFor());
+     String tableName = getUniqueNames(1)[0];
 -    VOPTS.tableName = tableName;
++    VOPTS.setTableName(tableName);
+     c.tableOperations().create(tableName);
+     c.tableOperations().setProperty(tableName, Property.TABLE_SPLIT_THRESHOLD.getKey(), "10K");
+     String splitThreshold = null;
+     for (Entry<String,String> entry : c.tableOperations().getProperties(tableName)) {
+       if (entry.getKey().equals(Property.TABLE_SPLIT_THRESHOLD.getKey())) {
+         splitThreshold = entry.getValue();
+         break;
+       }
+     }
+     Assert.assertNotNull(splitThreshold);
+     try {
+       c.tableOperations().setProperty(MetadataTable.NAME, Property.TABLE_SPLIT_THRESHOLD.getKey(), "20K");
+       TestIngest.Opts opts = new TestIngest.Opts();
 -      opts.tableName = tableName;
++      opts.setTableName(tableName);
+       TestIngest.ingest(c, opts, BWOPTS);
+       c.tableOperations().flush(tableName, null, null, false);
+       VerifyIngest.verifyIngest(c, VOPTS, SOPTS);
+       getCluster().stop();
+     } finally {
+       if (getClusterType() == ClusterType.STANDALONE) {
+         getCluster().start();
+         c.tableOperations().setProperty(MetadataTable.NAME, Property.TABLE_SPLIT_THRESHOLD.getKey(), splitThreshold);
+       }
+     }
    }
  }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/RestartStressIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/RestartStressIT.java
index d8c2804,6ad80ea..f4ff912
--- a/test/src/test/java/org/apache/accumulo/test/functional/RestartStressIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/RestartStressIT.java
@@@ -56,27 -93,40 +93,40 @@@ public class RestartStressIT extends Ac
    static {
      IOPTS = new TestIngest.Opts();
      VOPTS = new VerifyIngest.Opts();
-     IOPTS.rows = VOPTS.rows = 10*1000;
+     IOPTS.rows = VOPTS.rows = 10 * 1000;
    }
    private static final ScannerOpts SOPTS = new ScannerOpts();
-   
-   
+ 
    @Test
    public void test() throws Exception {
-     Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
-     c.tableOperations().setProperty("test_ingest", Property.TABLE_SPLIT_THRESHOLD.getKey(), "500K");
-     Process ingest = cluster.exec(TestIngest.class, 
-         "-u", "root", "-p", ROOT_PASSWORD, 
-         "-i", cluster.getInstanceName(), "-z", cluster.getZooKeepers(), 
-         "--rows", "" + IOPTS.rows);
+     final Connector c = getConnector();
+     final String tableName = getUniqueNames(1)[0];
+     final PasswordToken token = (PasswordToken) getToken();
+     c.tableOperations().create(tableName);
+     c.tableOperations().setProperty(tableName, Property.TABLE_SPLIT_THRESHOLD.getKey(), "500K");
+     final ClusterControl control = getCluster().getClusterControl();
+     Future<Integer> retCode = svc.submit(new Callable<Integer>() {
+       @Override
+       public Integer call() {
+         try {
+           return control.exec(TestIngest.class,
+               new String[] {"-u", "root", "-p", new String(token.getPassword(), Charsets.UTF_8), "-i", cluster.getInstanceName(), "-z", cluster.getZooKeepers(),
+                   "--rows", "" + IOPTS.rows, "--table", tableName});
+         } catch (Exception e) {
+           log.error("Error running TestIngest", e);
+           return -1;
+         }
+       }
+     });
+ 
      for (int i = 0; i < 2; i++) {
-       UtilWaitThread.sleep(10*1000);
-       cluster.killProcess(ServerType.TABLET_SERVER, cluster.getProcesses().get(ServerType.TABLET_SERVER).iterator().next());
-       cluster.start();
+       UtilWaitThread.sleep(10 * 1000);
+       control.stopAllServers(ServerType.TABLET_SERVER);
+       control.startAllServers(ServerType.TABLET_SERVER);
      }
-     assertEquals(0, ingest.waitFor());
+     assertEquals(0, retCode.get().intValue());
 -    VOPTS.tableName = tableName;
++    VOPTS.setTableName(tableName);
      VerifyIngest.verifyIngest(c, VOPTS, SOPTS);
    }
-   
+ 
  }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/ScanIteratorIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/ScanRangeIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/ScanSessionTimeOutIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/SimpleMacIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/SimpleMacIT.java
index 3f04b94,b2667e8..34cc772
--- a/test/src/test/java/org/apache/accumulo/test/functional/SimpleMacIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/SimpleMacIT.java
@@@ -41,11 -40,13 +44,15 @@@ import org.junit.BeforeClass
  /**
   * An implementation of {@link AbstractMacIT} for test cases that do not need to know any special details of {@link MiniAccumuloCluster}. Tests which extend
   * this class should be runnable on any instance of Accumulo, given a root connector.
+  *
+  * New tests should be written using {@link AccumuloClusterIT}. To obtain the same semantics (shared instance across methods in a class), extend
+  * {@link AccumuloIT} and use {@link MiniClusterHarness} to create a MiniAccumuloCluster properly configured for the environment.
   */
+ @Deprecated
  public class SimpleMacIT extends AbstractMacIT {
 -  public static final Logger log = Logger.getLogger(SimpleMacIT.class);
 +  protected static final Logger log = Logger.getLogger(SimpleMacIT.class);
 +
 +  private static final String INSTANCE_NAME = "instance1";
  
    private static File folder;
    private static MiniAccumuloClusterImpl cluster = null;

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/SplitIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/SplitIT.java
index 6203523,66d80fa..22c509b
--- a/test/src/test/java/org/apache/accumulo/test/functional/SplitIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/SplitIT.java
@@@ -61,17 -124,22 +124,22 @@@ public class SplitIT extends AccumuloCl
    @Test
    public void tabletShouldSplit() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
-     c.tableOperations().setProperty("test_ingest", Property.TABLE_SPLIT_THRESHOLD.getKey(), "256K");
-     c.tableOperations().setProperty("test_ingest", Property.TABLE_FILE_COMPRESSED_BLOCK_SIZE.getKey(), "1K");
+     String table = getUniqueNames(1)[0];
+     c.tableOperations().create(table);
+     c.tableOperations().setProperty(table, Property.TABLE_SPLIT_THRESHOLD.getKey(), "256K");
+     c.tableOperations().setProperty(table, Property.TABLE_FILE_COMPRESSED_BLOCK_SIZE.getKey(), "1K");
      TestIngest.Opts opts = new TestIngest.Opts();
      opts.rows = 100000;
 -    opts.tableName = table;
++    opts.setTableName(table);
      TestIngest.ingest(c, opts, new BatchWriterOpts());
      VerifyIngest.Opts vopts = new VerifyIngest.Opts();
      vopts.rows = opts.rows;
 -    vopts.tableName = table;
++    vopts.setTableName(table);
      VerifyIngest.verifyIngest(c, vopts, new ScannerOpts());
-     UtilWaitThread.sleep(15 * 1000);
-     String id = c.tableOperations().tableIdMap().get("test_ingest");
+     while (c.tableOperations().listSplits(table).size() < 10) {
+       UtilWaitThread.sleep(15 * 1000);
+     }
+     String id = c.tableOperations().tableIdMap().get(table);
      Scanner s = c.createScanner(MetadataTable.NAME, Authorizations.EMPTY);
      KeyExtent extent = new KeyExtent(new Text(id), null, null);
      s.setRange(extent.toMetadataRange());

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/TableIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/TabletIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/VisibilityIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/WriteAheadLogIT.java
----------------------------------------------------------------------
diff --cc test/src/test/java/org/apache/accumulo/test/functional/WriteAheadLogIT.java
index af6eca5,07218ad..2f41323
--- a/test/src/test/java/org/apache/accumulo/test/functional/WriteAheadLogIT.java
+++ b/test/src/test/java/org/apache/accumulo/test/functional/WriteAheadLogIT.java
@@@ -58,20 -54,18 +54,18 @@@ public class WriteAheadLogIT extends Ac
    @Test
    public void test() throws Exception {
      Connector c = getConnector();
-     c.tableOperations().create("test_ingest");
-     c.tableOperations().setProperty("test_ingest", Property.TABLE_SPLIT_THRESHOLD.getKey(), "750K");
+     String tableName = getUniqueNames(1)[0];
+     c.tableOperations().create(tableName);
+     c.tableOperations().setProperty(tableName, Property.TABLE_SPLIT_THRESHOLD.getKey(), "750K");
      TestIngest.Opts opts = new TestIngest.Opts();
 -    opts.tableName = tableName;
++    opts.setTableName(tableName);
      TestIngest.ingest(c, opts, new BatchWriterOpts());
      VerifyIngest.Opts vopts = new VerifyIngest.Opts();
 -    vopts.tableName = tableName;
++    vopts.setTableName(tableName);
      VerifyIngest.verifyIngest(c, vopts, new ScannerOpts());
-     Map<ServerType,Collection<ProcessReference>> processes = cluster.getProcesses();
-     for (ProcessReference tserver : processes.get(ServerType.TABLET_SERVER)) {
-       cluster.killProcess(ServerType.TABLET_SERVER, tserver);
-     }
-     assertEquals(0, cluster.getProcesses().get(ServerType.TABLET_SERVER).size());
-     cluster.start();
+     getCluster().getClusterControl().stopAllServers(ServerType.TABLET_SERVER);
+     getCluster().getClusterControl().startAllServers(ServerType.TABLET_SERVER);
      VerifyIngest.verifyIngest(c, vopts, new ScannerOpts());
-     assertEquals(0, cluster.exec(Admin.class, "stopAll").waitFor());
    }
-   
+ 
  }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/74e7103f/test/src/test/java/org/apache/accumulo/test/functional/WriteLotsIT.java
----------------------------------------------------------------------