You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ct...@apache.org on 2016/08/22 22:07:13 UTC

[4/8] accumulo git commit: Revert "ACCUMULO-2589 Drop deprecated code from 1.x"

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/NumSummation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/NumSummation.java b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/NumSummation.java
new file mode 100644
index 0000000..4d79894
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/NumSummation.java
@@ -0,0 +1,91 @@
+/*
+ * 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.core.iterators.aggregation;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import org.apache.accumulo.core.data.Value;
+import org.apache.hadoop.io.WritableUtils;
+
+/**
+ * @deprecated since 1.4, replaced by {@link org.apache.accumulo.core.iterators.user.SummingCombiner} with
+ *             {@link org.apache.accumulo.core.iterators.LongCombiner.Type#VARLEN}
+ */
+@Deprecated
+public class NumSummation implements Aggregator {
+  long sum = 0l;
+
+  @Override
+  public Value aggregate() {
+    try {
+      return new Value(NumSummation.longToBytes(sum));
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  @Override
+  public void collect(Value value) {
+    long l;
+    try {
+      l = NumSummation.bytesToLong(value.get());
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+
+    sum = NumSummation.safeAdd(sum, l);
+  }
+
+  public static byte[] longToBytes(long l) throws IOException {
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    DataOutputStream dos = new DataOutputStream(baos);
+
+    WritableUtils.writeVLong(dos, l);
+
+    return baos.toByteArray();
+  }
+
+  public static long bytesToLong(byte[] b) throws IOException {
+    DataInputStream dis = new DataInputStream(new ByteArrayInputStream(b));
+    return WritableUtils.readVLong(dis);
+  }
+
+  public static long safeAdd(long a, long b) {
+    long aSign = Long.signum(a);
+    long bSign = Long.signum(b);
+    if ((aSign != 0) && (bSign != 0) && (aSign == bSign)) {
+      if (aSign > 0) {
+        if (Long.MAX_VALUE - a < b)
+          return Long.MAX_VALUE;
+      } else {
+        if (Long.MIN_VALUE - a > b)
+          return Long.MIN_VALUE;
+      }
+    }
+    return a + b;
+  }
+
+  @Override
+  public void reset() {
+    sum = 0l;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringMax.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringMax.java b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringMax.java
new file mode 100644
index 0000000..3d4516d
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringMax.java
@@ -0,0 +1,48 @@
+/*
+ * 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.core.iterators.aggregation;
+
+import org.apache.accumulo.core.data.Value;
+
+/**
+ * @deprecated since 1.4, replaced by {@link org.apache.accumulo.core.iterators.user.MaxCombiner} with
+ *             {@link org.apache.accumulo.core.iterators.LongCombiner.Type#STRING}
+ */
+@Deprecated
+public class StringMax implements Aggregator {
+
+  long max = Long.MIN_VALUE;
+
+  @Override
+  public Value aggregate() {
+    return new Value(Long.toString(max).getBytes());
+  }
+
+  @Override
+  public void collect(Value value) {
+    long l = Long.parseLong(new String(value.get()));
+    if (l > max) {
+      max = l;
+    }
+  }
+
+  @Override
+  public void reset() {
+    max = Long.MIN_VALUE;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringMin.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringMin.java b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringMin.java
new file mode 100644
index 0000000..7a49f81
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringMin.java
@@ -0,0 +1,48 @@
+/*
+ * 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.core.iterators.aggregation;
+
+import org.apache.accumulo.core.data.Value;
+
+/**
+ * @deprecated since 1.4, replaced by {@link org.apache.accumulo.core.iterators.user.MinCombiner} with
+ *             {@link org.apache.accumulo.core.iterators.LongCombiner.Type#STRING}
+ */
+@Deprecated
+public class StringMin implements Aggregator {
+
+  long min = Long.MAX_VALUE;
+
+  @Override
+  public Value aggregate() {
+    return new Value(Long.toString(min).getBytes());
+  }
+
+  @Override
+  public void collect(Value value) {
+    long l = Long.parseLong(new String(value.get()));
+    if (l < min) {
+      min = l;
+    }
+  }
+
+  @Override
+  public void reset() {
+    min = Long.MAX_VALUE;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringSummation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringSummation.java b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringSummation.java
new file mode 100644
index 0000000..a8b5967
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/StringSummation.java
@@ -0,0 +1,45 @@
+/*
+ * 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.core.iterators.aggregation;
+
+import org.apache.accumulo.core.data.Value;
+
+/**
+ * @deprecated since 1.4, replaced by {@link org.apache.accumulo.core.iterators.user.SummingCombiner} with
+ *             {@link org.apache.accumulo.core.iterators.LongCombiner.Type#STRING}
+ */
+@Deprecated
+public class StringSummation implements Aggregator {
+
+  long sum = 0;
+
+  @Override
+  public Value aggregate() {
+    return new Value(Long.toString(sum).getBytes());
+  }
+
+  @Override
+  public void collect(Value value) {
+    sum += Long.parseLong(new String(value.get()));
+  }
+
+  @Override
+  public void reset() {
+    sum = 0;
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/conf/AggregatorConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/conf/AggregatorConfiguration.java b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/conf/AggregatorConfiguration.java
new file mode 100644
index 0000000..3432cf5
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/conf/AggregatorConfiguration.java
@@ -0,0 +1,34 @@
+/*
+ * 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.core.iterators.aggregation.conf;
+
+import org.apache.hadoop.io.Text;
+
+/**
+ * @deprecated since 1.4
+ */
+@Deprecated
+public class AggregatorConfiguration extends org.apache.accumulo.core.iterators.conf.PerColumnIteratorConfig {
+
+  public AggregatorConfiguration(Text columnFamily, String aggClassName) {
+    super(columnFamily, aggClassName);
+  }
+
+  public AggregatorConfiguration(Text columnFamily, Text columnQualifier, String aggClassName) {
+    super(columnFamily, columnQualifier, aggClassName);
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/conf/AggregatorSet.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/conf/AggregatorSet.java b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/conf/AggregatorSet.java
new file mode 100644
index 0000000..d6545ac
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/aggregation/conf/AggregatorSet.java
@@ -0,0 +1,41 @@
+/*
+ * 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.core.iterators.aggregation.conf;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.accumulo.core.data.Key;
+import org.apache.accumulo.core.iterators.conf.ColumnToClassMapping;
+
+/**
+ * @deprecated since 1.4
+ */
+@Deprecated
+public class AggregatorSet extends ColumnToClassMapping<org.apache.accumulo.core.iterators.aggregation.Aggregator> {
+  public AggregatorSet(Map<String,String> opts) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
+    super(opts, org.apache.accumulo.core.iterators.aggregation.Aggregator.class);
+  }
+
+  public AggregatorSet() {
+    super();
+  }
+
+  public org.apache.accumulo.core.iterators.aggregation.Aggregator getAggregator(Key k) {
+    return getObject(k);
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/iterators/conf/PerColumnIteratorConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/conf/PerColumnIteratorConfig.java b/core/src/main/java/org/apache/accumulo/core/iterators/conf/PerColumnIteratorConfig.java
new file mode 100644
index 0000000..310776aa
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/conf/PerColumnIteratorConfig.java
@@ -0,0 +1,81 @@
+/*
+ * 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.core.iterators.conf;
+
+import org.apache.hadoop.io.Text;
+
+/**
+ * @deprecated since 1.4
+ *
+ * @see org.apache.accumulo.core.client.IteratorSetting.Column
+ * @see org.apache.accumulo.core.iterators.Combiner#setColumns(org.apache.accumulo.core.client.IteratorSetting, java.util.List)
+ */
+@Deprecated
+public class PerColumnIteratorConfig {
+
+  private String parameter;
+  private Text colq;
+  private Text colf;
+
+  public PerColumnIteratorConfig(Text columnFamily, String parameter) {
+    this.colf = columnFamily;
+    this.colq = null;
+    this.parameter = parameter;
+  }
+
+  public PerColumnIteratorConfig(Text columnFamily, Text columnQualifier, String parameter) {
+    this.colf = columnFamily;
+    this.colq = columnQualifier;
+    this.parameter = parameter;
+  }
+
+  public Text getColumnFamily() {
+    return colf;
+  }
+
+  public Text getColumnQualifier() {
+    return colq;
+  }
+
+  public String encodeColumns() {
+    return encodeColumns(this);
+  }
+
+  public String getClassName() {
+    return parameter;
+  }
+
+  private static String encodeColumns(PerColumnIteratorConfig pcic) {
+    return ColumnSet.encodeColumns(pcic.colf, pcic.colq);
+  }
+
+  public static String encodeColumns(Text columnFamily, Text columnQualifier) {
+    return ColumnSet.encodeColumns(columnFamily, columnQualifier);
+  }
+
+  public static PerColumnIteratorConfig decodeColumns(String columns, String className) {
+    String[] cols = columns.split(":");
+
+    if (cols.length == 1) {
+      return new PerColumnIteratorConfig(ColumnSet.decode(cols[0]), className);
+    } else if (cols.length == 2) {
+      return new PerColumnIteratorConfig(ColumnSet.decode(cols[0]), ColumnSet.decode(cols[1]), className);
+    } else {
+      throw new IllegalArgumentException(columns);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java b/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java
index f848b10..94995cb 100644
--- a/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/user/IntersectingIterator.java
@@ -503,6 +503,30 @@ public class IntersectingIterator implements SortedKeyValueIterator<Key,Value> {
   }
 
   /**
+   * @deprecated since 1.6.0
+   */
+  @Deprecated
+  public void addSource(SortedKeyValueIterator<Key,Value> source, IteratorEnvironment env, Text term, boolean notFlag) {
+    // Check if we have space for the added Source
+    if (sources == null) {
+      sources = new TermSource[1];
+    } else {
+      // allocate space for node, and copy current tree.
+      // TODO: Should we change this to an ArrayList so that we can just add() ? - ACCUMULO-1309
+      TermSource[] localSources = new TermSource[sources.length + 1];
+      int currSource = 0;
+      for (TermSource myTerm : sources) {
+        // TODO: Do I need to call new here? or can I just re-use the term? - ACCUMULO-1309
+        localSources[currSource] = new TermSource(myTerm);
+        currSource++;
+      }
+      sources = localSources;
+    }
+    sources[sourcesCount] = new TermSource(source.deepCopy(env), term, notFlag);
+    sourcesCount++;
+  }
+
+  /**
    * Encode the columns to be used when iterating.
    */
   public static void setColumnFamilies(IteratorSetting cfg, Text[] columns) {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/replication/ReplicationTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/replication/ReplicationTable.java b/core/src/main/java/org/apache/accumulo/core/replication/ReplicationTable.java
index 2479051..7076757 100644
--- a/core/src/main/java/org/apache/accumulo/core/replication/ReplicationTable.java
+++ b/core/src/main/java/org/apache/accumulo/core/replication/ReplicationTable.java
@@ -35,6 +35,7 @@ import org.apache.accumulo.core.master.state.tables.TableState;
 import org.apache.accumulo.core.replication.ReplicationSchema.StatusSection;
 import org.apache.accumulo.core.replication.ReplicationSchema.WorkSection;
 import org.apache.accumulo.core.security.Authorizations;
+import org.apache.accumulo.core.util.DeprecationUtil;
 import org.apache.hadoop.io.Text;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -86,7 +87,7 @@ public class ReplicationTable {
   }
 
   public static boolean isOnline(Connector conn) {
-    return TableState.ONLINE == Tables.getTableState(conn.getInstance(), ID);
+    return DeprecationUtil.isMockInstance(conn.getInstance()) || TableState.ONLINE == Tables.getTableState(conn.getInstance(), ID);
   }
 
   public static void setOnline(Connector conn) throws AccumuloSecurityException, AccumuloException {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/security/VisibilityConstraint.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/security/VisibilityConstraint.java b/core/src/main/java/org/apache/accumulo/core/security/VisibilityConstraint.java
new file mode 100644
index 0000000..611c8d4
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/security/VisibilityConstraint.java
@@ -0,0 +1,29 @@
+/*
+ * 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.core.security;
+
+/**
+ *
+ * @deprecated since 1.7.0 This is server side code not intended to exist in a public API package. This class references types that are not in the public API
+ *             and therefore is not guaranteed to be stable. It was deprecated to clearly communicate this. Use
+ *             {@link org.apache.accumulo.core.constraints.VisibilityConstraint} instead.
+ */
+@Deprecated
+public class VisibilityConstraint extends org.apache.accumulo.core.constraints.VisibilityConstraint {
+
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/security/crypto/CachingHDFSSecretKeyEncryptionStrategy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/security/crypto/CachingHDFSSecretKeyEncryptionStrategy.java b/core/src/main/java/org/apache/accumulo/core/security/crypto/CachingHDFSSecretKeyEncryptionStrategy.java
index 9be89db..7b79d99 100644
--- a/core/src/main/java/org/apache/accumulo/core/security/crypto/CachingHDFSSecretKeyEncryptionStrategy.java
+++ b/core/src/main/java/org/apache/accumulo/core/security/crypto/CachingHDFSSecretKeyEncryptionStrategy.java
@@ -41,8 +41,6 @@ import org.slf4j.LoggerFactory;
  */
 public class CachingHDFSSecretKeyEncryptionStrategy implements SecretKeyEncryptionStrategy {
 
-  @SuppressWarnings("deprecation")
-  private static final Property INSTANCE_DFS_DIR = Property.INSTANCE_DFS_DIR;
   private static final Logger log = LoggerFactory.getLogger(CachingHDFSSecretKeyEncryptionStrategy.class);
   private SecretKeyCache secretKeyCache = new SecretKeyCache();
 
@@ -175,16 +173,17 @@ public class CachingHDFSSecretKeyEncryptionStrategy implements SecretKeyEncrypti
 
     }
 
+    @SuppressWarnings("deprecation")
     private String getFullPathToKey(CryptoModuleParameters params) {
       String pathToKeyName = params.getAllOptions().get(Property.CRYPTO_DEFAULT_KEY_STRATEGY_KEY_LOCATION.getKey());
-      String instanceDirectory = params.getAllOptions().get(INSTANCE_DFS_DIR.getKey());
+      String instanceDirectory = params.getAllOptions().get(Property.INSTANCE_DFS_DIR.getKey());
 
       if (pathToKeyName == null) {
         pathToKeyName = Property.CRYPTO_DEFAULT_KEY_STRATEGY_KEY_LOCATION.getDefaultValue();
       }
 
       if (instanceDirectory == null) {
-        instanceDirectory = INSTANCE_DFS_DIR.getDefaultValue();
+        instanceDirectory = Property.INSTANCE_DFS_DIR.getDefaultValue();
       }
 
       if (!pathToKeyName.startsWith("/")) {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/security/crypto/NonCachingSecretKeyEncryptionStrategy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/security/crypto/NonCachingSecretKeyEncryptionStrategy.java b/core/src/main/java/org/apache/accumulo/core/security/crypto/NonCachingSecretKeyEncryptionStrategy.java
index f0eaa26..1dd8d60 100644
--- a/core/src/main/java/org/apache/accumulo/core/security/crypto/NonCachingSecretKeyEncryptionStrategy.java
+++ b/core/src/main/java/org/apache/accumulo/core/security/crypto/NonCachingSecretKeyEncryptionStrategy.java
@@ -39,10 +39,6 @@ import org.slf4j.LoggerFactory;
 //TODO ACCUMULO-2530 Update properties to use a URI instead of a relative path to secret key
 public class NonCachingSecretKeyEncryptionStrategy implements SecretKeyEncryptionStrategy {
 
-  @SuppressWarnings("deprecation")
-  private static final Property INSTANCE_DFS_DIR = Property.INSTANCE_DFS_DIR;
-  @SuppressWarnings("deprecation")
-  private static final Property INSTANCE_DFS_URI = Property.INSTANCE_DFS_URI;
   private static final Logger log = LoggerFactory.getLogger(NonCachingSecretKeyEncryptionStrategy.class);
 
   private void doKeyEncryptionOperation(int encryptionMode, CryptoModuleParameters params, String pathToKeyName, Path pathToKey, FileSystem fs)
@@ -125,16 +121,17 @@ public class NonCachingSecretKeyEncryptionStrategy implements SecretKeyEncryptio
     }
   }
 
+  @SuppressWarnings("deprecation")
   private String getFullPathToKey(CryptoModuleParameters params) {
     String pathToKeyName = params.getAllOptions().get(Property.CRYPTO_DEFAULT_KEY_STRATEGY_KEY_LOCATION.getKey());
-    String instanceDirectory = params.getAllOptions().get(INSTANCE_DFS_DIR.getKey());
+    String instanceDirectory = params.getAllOptions().get(Property.INSTANCE_DFS_DIR.getKey());
 
     if (pathToKeyName == null) {
       pathToKeyName = Property.CRYPTO_DEFAULT_KEY_STRATEGY_KEY_LOCATION.getDefaultValue();
     }
 
     if (instanceDirectory == null) {
-      instanceDirectory = INSTANCE_DFS_DIR.getDefaultValue();
+      instanceDirectory = Property.INSTANCE_DFS_DIR.getDefaultValue();
     }
 
     if (!pathToKeyName.startsWith("/")) {
@@ -145,11 +142,12 @@ public class NonCachingSecretKeyEncryptionStrategy implements SecretKeyEncryptio
     return fullPath;
   }
 
+  @SuppressWarnings("deprecation")
   @Override
   public CryptoModuleParameters encryptSecretKey(CryptoModuleParameters params) {
-    String hdfsURI = params.getAllOptions().get(INSTANCE_DFS_URI.getKey());
+    String hdfsURI = params.getAllOptions().get(Property.INSTANCE_DFS_URI.getKey());
     if (hdfsURI == null) {
-      hdfsURI = INSTANCE_DFS_URI.getDefaultValue();
+      hdfsURI = Property.INSTANCE_DFS_URI.getDefaultValue();
     }
 
     String fullPath = getFullPathToKey(params);
@@ -168,11 +166,12 @@ public class NonCachingSecretKeyEncryptionStrategy implements SecretKeyEncryptio
     return params;
   }
 
+  @SuppressWarnings("deprecation")
   @Override
   public CryptoModuleParameters decryptSecretKey(CryptoModuleParameters params) {
-    String hdfsURI = params.getAllOptions().get(INSTANCE_DFS_URI.getKey());
+    String hdfsURI = params.getAllOptions().get(Property.INSTANCE_DFS_URI.getKey());
     if (hdfsURI == null) {
-      hdfsURI = INSTANCE_DFS_URI.getDefaultValue();
+      hdfsURI = Property.INSTANCE_DFS_URI.getDefaultValue();
     }
 
     String pathToKeyName = getFullPathToKey(params);

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/trace/DistributedTrace.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/trace/DistributedTrace.java b/core/src/main/java/org/apache/accumulo/core/trace/DistributedTrace.java
index bb8a683..f833b11 100644
--- a/core/src/main/java/org/apache/accumulo/core/trace/DistributedTrace.java
+++ b/core/src/main/java/org/apache/accumulo/core/trace/DistributedTrace.java
@@ -23,13 +23,16 @@ import java.util.Map.Entry;
 
 import org.apache.accumulo.core.client.ClientConfiguration;
 import org.apache.accumulo.core.client.ClientConfiguration.ClientProperty;
+import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.Property;
+import org.apache.accumulo.fate.zookeeper.ZooReader;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.util.ShutdownHookManager;
 import org.apache.htrace.HTraceConfiguration;
 import org.apache.htrace.SpanReceiver;
 import org.apache.htrace.SpanReceiverBuilder;
+import org.apache.zookeeper.KeeperException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,6 +55,14 @@ public class DistributedTrace {
   private static final HashSet<SpanReceiver> receivers = new HashSet<>();
 
   /**
+   * @deprecated since 1.7, use {@link DistributedTrace#enable(String, String, org.apache.accumulo.core.client.ClientConfiguration)} instead
+   */
+  @Deprecated
+  public static void enable(Instance instance, ZooReader zoo, String application, String address) throws IOException, KeeperException, InterruptedException {
+    enable(address, application);
+  }
+
+  /**
    * Enable tracing by setting up SpanReceivers for the current process.
    */
   public static void enable() {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/trace/Trace.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/trace/Trace.java b/core/src/main/java/org/apache/accumulo/core/trace/Trace.java
index 35227c5..3ebd031 100644
--- a/core/src/main/java/org/apache/accumulo/core/trace/Trace.java
+++ b/core/src/main/java/org/apache/accumulo/core/trace/Trace.java
@@ -56,6 +56,14 @@ public class Trace {
   }
 
   /**
+   * @deprecated since 1.7, use {@link #off()} instead
+   */
+  @Deprecated
+  public static void offNoFlush() {
+    off();
+  }
+
+  /**
    * Returns whether tracing is currently on.
    */
   public static boolean isTracing() {
@@ -63,6 +71,16 @@ public class Trace {
   }
 
   /**
+   * Return the current span.
+   *
+   * @deprecated since 1.7 -- it is better to save the span you create in a local variable and call its methods, rather than retrieving the current span
+   */
+  @Deprecated
+  public static Span currentTrace() {
+    return new Span(org.apache.htrace.Trace.currentSpan());
+  }
+
+  /**
    * Get the trace id of the current span.
    */
   public static long currentTraceId() {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/util/DeprecationUtil.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/DeprecationUtil.java b/core/src/main/java/org/apache/accumulo/core/util/DeprecationUtil.java
new file mode 100644
index 0000000..cd798bb
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/util/DeprecationUtil.java
@@ -0,0 +1,61 @@
+/*
+ * 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.core.util;
+
+import org.apache.accumulo.core.client.Instance;
+import org.apache.accumulo.core.client.impl.TabletLocator;
+import org.apache.accumulo.core.client.mapreduce.RangeInputSplit;
+
+/**
+ * A utility class for managing deprecated items. This avoids scattering private helper methods all over the code with warnings suppression.
+ *
+ * <p>
+ * This class will never be public API and methods will be removed as soon as they are no longer needed. No methods in this class will, themselves, be
+ * deprecated, because that would propagate the deprecation warning we are trying to avoid.
+ *
+ * <p>
+ * This class should not be used as a substitute for deprecated classes. It should <b>only</b> be used for implementation code which must remain to support the
+ * deprecated features, and <b>only</b> until that feature is removed.
+ */
+public class DeprecationUtil {
+
+  @SuppressWarnings("deprecation")
+  public static boolean isMockInstance(Instance instance) {
+    return instance instanceof org.apache.accumulo.core.client.mock.MockInstance;
+  }
+
+  @SuppressWarnings("deprecation")
+  public static Instance makeMockInstance(String instance) {
+    return new org.apache.accumulo.core.client.mock.MockInstance(instance);
+  }
+
+  @SuppressWarnings("deprecation")
+  public static void setMockInstance(RangeInputSplit split, boolean isMockInstance) {
+    split.setMockInstance(isMockInstance);
+  }
+
+  @SuppressWarnings("deprecation")
+  public static boolean isMockInstanceSet(RangeInputSplit split) {
+    return split.isMockInstance();
+  }
+
+  @SuppressWarnings("deprecation")
+  public static TabletLocator makeMockLocator() {
+    return new org.apache.accumulo.core.client.mock.impl.MockTabletLocator();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/util/format/BinaryFormatter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/format/BinaryFormatter.java b/core/src/main/java/org/apache/accumulo/core/util/format/BinaryFormatter.java
new file mode 100644
index 0000000..f5cbe39
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/util/format/BinaryFormatter.java
@@ -0,0 +1,66 @@
+/*
+ * 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.core.util.format;
+
+import java.util.Map.Entry;
+import org.apache.accumulo.core.data.Key;
+import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.core.security.ColumnVisibility;
+
+/**
+ * @deprecated Use {@link DefaultFormatter} providing showLength and printTimestamps via {@link FormatterConfig}.
+ */
+@Deprecated
+public class BinaryFormatter extends DefaultFormatter {
+  // this class can probably be replaced by DefaultFormatter since DefaultFormatter has the max length stuff
+  @Override
+  public String next() {
+    checkState(true);
+    return formatEntry(getScannerIterator().next(), config.willPrintTimestamps(), config.getShownLength());
+  }
+
+  public static String formatEntry(Entry<Key,Value> entry, boolean printTimestamps, int shownLength) {
+    StringBuilder sb = new StringBuilder();
+
+    Key key = entry.getKey();
+
+    // append row
+    appendText(sb, key.getRow(), shownLength).append(" ");
+
+    // append column family
+    appendText(sb, key.getColumnFamily(), shownLength).append(":");
+
+    // append column qualifier
+    appendText(sb, key.getColumnQualifier(), shownLength).append(" ");
+
+    // append visibility expression
+    sb.append(new ColumnVisibility(key.getColumnVisibility()));
+
+    // append timestamp
+    if (printTimestamps)
+      sb.append(" ").append(entry.getKey().getTimestamp());
+
+    // append value
+    Value value = entry.getValue();
+    if (value != null && value.getSize() > 0) {
+      sb.append("\t");
+      appendValue(sb, value, shownLength);
+    }
+    return sb.toString();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/util/format/DateStringFormatter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/format/DateStringFormatter.java b/core/src/main/java/org/apache/accumulo/core/util/format/DateStringFormatter.java
new file mode 100644
index 0000000..63bd536
--- /dev/null
+++ b/core/src/main/java/org/apache/accumulo/core/util/format/DateStringFormatter.java
@@ -0,0 +1,75 @@
+/*
+ * 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.core.util.format;
+
+import java.util.Map.Entry;
+import java.util.TimeZone;
+import org.apache.accumulo.core.data.Key;
+import org.apache.accumulo.core.data.Value;
+
+/**
+ * This class is <strong>not</strong> recommended because {@link #initialize(Iterable, FormatterConfig)} replaces parameters in {@link FormatterConfig}, which
+ * could surprise users.
+ *
+ * This class can be replaced by {@link DefaultFormatter} where FormatterConfig is initialized with a DateFormat set to {@link #DATE_FORMAT}. See
+ * {@link DateFormatSupplier#createSimpleFormatSupplier(String, java.util.TimeZone)}.
+ *
+ * <pre>
+ * final DateFormatSupplier dfSupplier = DateFormatSupplier.createSimpleFormatSupplier(DateFormatSupplier.HUMAN_READABLE_FORMAT, TimeZone.getTimeZone(&quot;UTC&quot;));
+ * final FormatterConfig config = new FormatterConfig().setPrintTimestamps(true).setDateFormatSupplier(dfSupplier);
+ * </pre>
+ */
+@Deprecated
+public class DateStringFormatter implements Formatter {
+
+  private DefaultFormatter defaultFormatter;
+  private TimeZone timeZone;
+
+  public static final String DATE_FORMAT = DateFormatSupplier.HUMAN_READABLE_FORMAT;
+
+  public DateStringFormatter() {
+    this(TimeZone.getDefault());
+  }
+
+  public DateStringFormatter(TimeZone timeZone) {
+    this.defaultFormatter = new DefaultFormatter();
+    this.timeZone = timeZone;
+  }
+
+  @Override
+  public void initialize(Iterable<Entry<Key,Value>> scanner, FormatterConfig config) {
+    FormatterConfig newConfig = new FormatterConfig(config);
+    newConfig.setDateFormatSupplier(DateFormatSupplier.createSimpleFormatSupplier(DATE_FORMAT, timeZone));
+    defaultFormatter.initialize(scanner, newConfig);
+  }
+
+  @Override
+  public boolean hasNext() {
+    return defaultFormatter.hasNext();
+  }
+
+  @Override
+  public String next() {
+    return defaultFormatter.next();
+  }
+
+  @Override
+  public void remove() {
+    defaultFormatter.remove();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/main/java/org/apache/accumulo/core/volume/VolumeConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/volume/VolumeConfiguration.java b/core/src/main/java/org/apache/accumulo/core/volume/VolumeConfiguration.java
index 31cf53c..573978d 100644
--- a/core/src/main/java/org/apache/accumulo/core/volume/VolumeConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/volume/VolumeConfiguration.java
@@ -31,11 +31,6 @@ import org.apache.hadoop.fs.Path;
 
 public class VolumeConfiguration {
 
-  @SuppressWarnings("deprecation")
-  private static final Property INSTANCE_DFS_DIR = Property.INSTANCE_DFS_DIR;
-  @SuppressWarnings("deprecation")
-  private static final Property INSTANCE_DFS_URI = Property.INSTANCE_DFS_URI;
-
   public static Volume getVolume(String path, Configuration conf, AccumuloConfiguration acuconf) throws IOException {
     requireNonNull(path);
 
@@ -49,7 +44,8 @@ public class VolumeConfiguration {
   }
 
   public static Volume getDefaultVolume(Configuration conf, AccumuloConfiguration acuconf) throws IOException {
-    String uri = acuconf.get(INSTANCE_DFS_URI);
+    @SuppressWarnings("deprecation")
+    String uri = acuconf.get(Property.INSTANCE_DFS_URI);
 
     // By default pull from INSTANCE_DFS_URI, falling back to the Hadoop defined
     // default filesystem (fs.defaultFS or the deprecated fs.default.name)
@@ -64,14 +60,12 @@ public class VolumeConfiguration {
   }
 
   /**
-   * This method gets the old configured base directory, using the URI and DIR. It will not longer be needed when we no longer support upgrading from non-volume
-   * based Accumulo config
-   *
-   * @see #getVolumeUris(AccumuloConfiguration,Configuration)
+   * @see org.apache.accumulo.core.volume.VolumeConfiguration#getVolumeUris(AccumuloConfiguration,Configuration)
    */
-  private static String getConfiguredBaseDir(AccumuloConfiguration conf, Configuration hadoopConfig) {
-    String singleNamespace = conf.get(INSTANCE_DFS_DIR);
-    String dfsUri = conf.get(INSTANCE_DFS_URI);
+  @Deprecated
+  public static String getConfiguredBaseDir(AccumuloConfiguration conf, Configuration hadoopConfig) {
+    String singleNamespace = conf.get(Property.INSTANCE_DFS_DIR);
+    String dfsUri = conf.get(Property.INSTANCE_DFS_URI);
     String baseDir;
 
     if (dfsUri == null || dfsUri.isEmpty()) {
@@ -82,7 +76,7 @@ public class VolumeConfiguration {
       }
     } else {
       if (!dfsUri.contains(":"))
-        throw new IllegalArgumentException("Expected fully qualified URI for " + INSTANCE_DFS_URI.getKey() + " got " + dfsUri);
+        throw new IllegalArgumentException("Expected fully qualified URI for " + Property.INSTANCE_DFS_URI.getKey() + " got " + dfsUri);
       baseDir = dfsUri + singleNamespace;
     }
     return baseDir;
@@ -146,9 +140,10 @@ public class VolumeConfiguration {
    *          A FileSystem to write to
    * @return A Volume instance writing to the given FileSystem in the default path
    */
+  @SuppressWarnings("deprecation")
   public static <T extends FileSystem> Volume create(T fs, AccumuloConfiguration acuconf) {
-    String dfsDir = acuconf.get(INSTANCE_DFS_DIR);
-    return new VolumeImpl(fs, null == dfsDir ? INSTANCE_DFS_DIR.getDefaultValue() : dfsDir);
+    String dfsDir = acuconf.get(Property.INSTANCE_DFS_DIR);
+    return new VolumeImpl(fs, null == dfsDir ? Property.INSTANCE_DFS_DIR.getDefaultValue() : dfsDir);
   }
 
   public static <T extends FileSystem> Volume create(T fs, String basePath) {

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java b/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java
index 638f152..65df5c9 100644
--- a/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java
+++ b/core/src/test/java/org/apache/accumulo/core/cli/TestClientOpts.java
@@ -50,10 +50,6 @@ import org.junit.rules.TestName;
 import com.beust.jcommander.JCommander;
 
 public class TestClientOpts {
-  @SuppressWarnings("deprecation")
-  private static final Property INSTANCE_DFS_DIR = Property.INSTANCE_DFS_DIR;
-  @SuppressWarnings("deprecation")
-  private static final Property INSTANCE_DFS_URI = Property.INSTANCE_DFS_URI;
 
   @Rule
   public TemporaryFolder tmpDir = new TemporaryFolder(new File(System.getProperty("user.dir") + "/target"));
@@ -137,6 +133,7 @@ public class TestClientOpts {
     args.getInstance();
   }
 
+  @SuppressWarnings("deprecation")
   @Test
   public void testInstanceDir() throws IOException {
     File instanceId = tmpDir.newFolder("instance_id");
@@ -149,8 +146,9 @@ public class TestClientOpts {
     FileWriter fileWriter = new FileWriter(siteXml);
     fileWriter.append("<configuration>\n");
 
-    fileWriter.append("<property><name>" + INSTANCE_DFS_DIR.getKey() + "</name><value>" + tmpDir.getRoot().getAbsolutePath() + "</value></property>\n");
-    fileWriter.append("<property><name>" + INSTANCE_DFS_URI.getKey() + "</name><value>file://</value></property>\n");
+    fileWriter
+        .append("<property><name>" + Property.INSTANCE_DFS_DIR.getKey() + "</name><value>" + tmpDir.getRoot().getAbsolutePath() + "</value></property>\n");
+    fileWriter.append("<property><name>" + Property.INSTANCE_DFS_URI.getKey() + "</name><value>file://</value></property>\n");
     fileWriter.append("<property><name>" + ClientProperty.INSTANCE_NAME + "</name><value>foo</value></property>\n");
 
     fileWriter.append("</configuration>\n");

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/test/java/org/apache/accumulo/core/client/impl/TableOperationsHelperTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/impl/TableOperationsHelperTest.java b/core/src/test/java/org/apache/accumulo/core/client/impl/TableOperationsHelperTest.java
index fff03fb..1d699c2 100644
--- a/core/src/test/java/org/apache/accumulo/core/client/impl/TableOperationsHelperTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/client/impl/TableOperationsHelperTest.java
@@ -37,6 +37,7 @@ import org.apache.accumulo.core.client.admin.CompactionConfig;
 import org.apache.accumulo.core.client.admin.DiskUsage;
 import org.apache.accumulo.core.client.admin.Locations;
 import org.apache.accumulo.core.client.admin.NewTableConfiguration;
+import org.apache.accumulo.core.client.admin.TimeType;
 import org.apache.accumulo.core.client.sample.SamplerConfiguration;
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
@@ -64,11 +65,33 @@ public class TableOperationsHelperTest {
     public void create(String tableName) throws AccumuloException, AccumuloSecurityException, TableExistsException {}
 
     @Override
+    @Deprecated
+    public void create(String tableName, boolean limitVersion) throws AccumuloException, AccumuloSecurityException, TableExistsException {
+      create(tableName, limitVersion, TimeType.MILLIS);
+    }
+
+    @Override
+    @Deprecated
+    public void create(String tableName, boolean versioningIter, TimeType timeType) throws AccumuloException, AccumuloSecurityException, TableExistsException {}
+
+    @Override
     public void create(String tableName, NewTableConfiguration ntc) throws AccumuloException, AccumuloSecurityException, TableExistsException {}
 
     @Override
     public void addSplits(String tableName, SortedSet<Text> partitionKeys) throws TableNotFoundException, AccumuloException, AccumuloSecurityException {}
 
+    @Deprecated
+    @Override
+    public Collection<Text> getSplits(String tableName) throws TableNotFoundException {
+      return null;
+    }
+
+    @Deprecated
+    @Override
+    public Collection<Text> getSplits(String tableName, int maxSplits) throws TableNotFoundException {
+      return null;
+    }
+
     @Override
     public Collection<Text> listSplits(String tableName) throws TableNotFoundException {
       return null;
@@ -115,6 +138,10 @@ public class TableOperationsHelperTest {
     public void rename(String oldTableName, String newTableName) throws AccumuloSecurityException, TableNotFoundException, AccumuloException,
         TableExistsException {}
 
+    @Deprecated
+    @Override
+    public void flush(String tableName) throws AccumuloException, AccumuloSecurityException {}
+
     @Override
     public void flush(String tableName, Text start, Text end, boolean wait) throws AccumuloException, AccumuloSecurityException, TableNotFoundException {}
 

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/test/java/org/apache/accumulo/core/client/impl/TabletLocatorImplTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/impl/TabletLocatorImplTest.java b/core/src/test/java/org/apache/accumulo/core/client/impl/TabletLocatorImplTest.java
index d7988ff..bab52f6 100644
--- a/core/src/test/java/org/apache/accumulo/core/client/impl/TabletLocatorImplTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/client/impl/TabletLocatorImplTest.java
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -44,6 +45,7 @@ import org.apache.accumulo.core.client.impl.TabletLocator.TabletServerMutations;
 import org.apache.accumulo.core.client.impl.TabletLocatorImpl.TabletLocationObtainer;
 import org.apache.accumulo.core.client.impl.TabletLocatorImpl.TabletServerLockChecker;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
+import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.PartialKey;
@@ -83,6 +85,7 @@ public class TabletLocatorImplTest {
     return objs;
   }
 
+  @SuppressWarnings("unchecked")
   static Map<String,Map<KeyExtent,List<Range>>> createExpectedBinnings(Object... data) {
 
     Map<String,Map<KeyExtent,List<Range>>> expBinnedRanges = new HashMap<>();
@@ -97,7 +100,6 @@ public class TabletLocatorImplTest {
 
       for (int j = 0; j < binData.length; j += 2) {
         KeyExtent ke = (KeyExtent) binData[j];
-        @SuppressWarnings("unchecked")
         List<Range> ranges = (List<Range>) binData[j + 1];
 
         binnedKE.put(ke, ranges);
@@ -438,6 +440,36 @@ public class TabletLocatorImplTest {
     }
 
     @Override
+    @Deprecated
+    public Connector getConnector(String user, byte[] pass) throws AccumuloException, AccumuloSecurityException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    @Deprecated
+    public Connector getConnector(String user, ByteBuffer pass) throws AccumuloException, AccumuloSecurityException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Deprecated
+    @Override
+    public AccumuloConfiguration getConfiguration() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    @Deprecated
+    public void setConfiguration(AccumuloConfiguration conf) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    @Deprecated
+    public Connector getConnector(String user, CharSequence pass) throws AccumuloException, AccumuloSecurityException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
     public Connector getConnector(String principal, AuthenticationToken token) throws AccumuloException, AccumuloSecurityException {
       throw new UnsupportedOperationException();
     }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/test/java/org/apache/accumulo/core/client/mapred/RangeInputSplitTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/mapred/RangeInputSplitTest.java b/core/src/test/java/org/apache/accumulo/core/client/mapred/RangeInputSplitTest.java
index 47a0e53..c399fb0 100644
--- a/core/src/test/java/org/apache/accumulo/core/client/mapred/RangeInputSplitTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/client/mapred/RangeInputSplitTest.java
@@ -33,6 +33,7 @@ import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.iterators.user.SummingCombiner;
 import org.apache.accumulo.core.iterators.user.WholeRowIterator;
 import org.apache.accumulo.core.security.Authorizations;
+import org.apache.accumulo.core.util.DeprecationUtil;
 import org.apache.accumulo.core.util.Pair;
 import org.apache.hadoop.io.Text;
 import org.apache.log4j.Level;
@@ -86,6 +87,7 @@ public class RangeInputSplitTest {
     split.setToken(new PasswordToken("password"));
     split.setPrincipal("root");
     split.setInstanceName("instance");
+    DeprecationUtil.setMockInstance(split, true);
     split.setZooKeepers("localhost");
     split.setIterators(iterators);
     split.setLogLevel(Level.WARN);
@@ -111,6 +113,7 @@ public class RangeInputSplitTest {
     Assert.assertEquals(split.getToken(), newSplit.getToken());
     Assert.assertEquals(split.getPrincipal(), newSplit.getPrincipal());
     Assert.assertEquals(split.getInstanceName(), newSplit.getInstanceName());
+    Assert.assertEquals(DeprecationUtil.isMockInstanceSet(split), DeprecationUtil.isMockInstanceSet(newSplit));
     Assert.assertEquals(split.getZooKeepers(), newSplit.getZooKeepers());
     Assert.assertEquals(split.getIterators(), newSplit.getIterators());
     Assert.assertEquals(split.getLogLevel(), newSplit.getLogLevel());

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/test/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplitTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplitTest.java b/core/src/test/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplitTest.java
index b1b378e..0eb8010 100644
--- a/core/src/test/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplitTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplitTest.java
@@ -33,6 +33,7 @@ import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.iterators.user.SummingCombiner;
 import org.apache.accumulo.core.iterators.user.WholeRowIterator;
 import org.apache.accumulo.core.security.Authorizations;
+import org.apache.accumulo.core.util.DeprecationUtil;
 import org.apache.accumulo.core.util.Pair;
 import org.apache.hadoop.io.Text;
 import org.apache.log4j.Level;
@@ -89,6 +90,7 @@ public class RangeInputSplitTest {
     split.setToken(new PasswordToken("password"));
     split.setPrincipal("root");
     split.setInstanceName("instance");
+    DeprecationUtil.setMockInstance(split, true);
     split.setZooKeepers("localhost");
     split.setIterators(iterators);
     split.setLogLevel(Level.WARN);
@@ -115,6 +117,7 @@ public class RangeInputSplitTest {
     Assert.assertEquals(split.getToken(), newSplit.getToken());
     Assert.assertEquals(split.getPrincipal(), newSplit.getPrincipal());
     Assert.assertEquals(split.getInstanceName(), newSplit.getInstanceName());
+    Assert.assertEquals(DeprecationUtil.isMockInstanceSet(split), DeprecationUtil.isMockInstanceSet(newSplit));
     Assert.assertEquals(split.getZooKeepers(), newSplit.getZooKeepers());
     Assert.assertEquals(split.getIterators(), newSplit.getIterators());
     Assert.assertEquals(split.getLogLevel(), newSplit.getLogLevel());

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/test/java/org/apache/accumulo/core/client/mapreduce/impl/BatchInputSplitTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/mapreduce/impl/BatchInputSplitTest.java b/core/src/test/java/org/apache/accumulo/core/client/mapreduce/impl/BatchInputSplitTest.java
index 50b149a..17c781d 100644
--- a/core/src/test/java/org/apache/accumulo/core/client/mapreduce/impl/BatchInputSplitTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/client/mapreduce/impl/BatchInputSplitTest.java
@@ -33,6 +33,7 @@ import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.iterators.user.SummingCombiner;
 import org.apache.accumulo.core.iterators.user.WholeRowIterator;
 import org.apache.accumulo.core.security.Authorizations;
+import org.apache.accumulo.core.util.DeprecationUtil;
 import org.apache.accumulo.core.util.Pair;
 import org.apache.hadoop.io.Text;
 import org.apache.log4j.Level;
@@ -87,6 +88,7 @@ public class BatchInputSplitTest {
     split.setFetchedColumns(fetchedColumns);
     split.setToken(new PasswordToken("password"));
     split.setPrincipal("root");
+    DeprecationUtil.setMockInstance(split, true);
     split.setInstanceName("instance");
     split.setZooKeepers("localhost");
     split.setIterators(iterators);
@@ -111,6 +113,7 @@ public class BatchInputSplitTest {
     Assert.assertEquals(split.getToken(), newSplit.getToken());
     Assert.assertEquals(split.getPrincipal(), newSplit.getPrincipal());
     Assert.assertEquals(split.getInstanceName(), newSplit.getInstanceName());
+    Assert.assertEquals(DeprecationUtil.isMockInstanceSet(split), DeprecationUtil.isMockInstanceSet(newSplit));
     Assert.assertEquals(split.getZooKeepers(), newSplit.getZooKeepers());
     Assert.assertEquals(split.getIterators(), newSplit.getIterators());
     Assert.assertEquals(split.getLogLevel(), newSplit.getLogLevel());

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java b/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java
index 1eb29e3..7b5ac26 100644
--- a/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBaseTest.java
@@ -26,6 +26,7 @@ import org.apache.accumulo.core.Constants;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.ClientConfiguration;
 import org.apache.accumulo.core.client.ClientConfiguration.ClientProperty;
+import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.ZooKeeperInstance;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken.AuthenticationTokenSerializer;
@@ -100,6 +101,19 @@ public class ConfiguratorBaseTest {
     // assertEquals(1234000, ((ZooKeeperInstance) instance).getZooKeepersSessionTimeOut());
   }
 
+  @SuppressWarnings("deprecation")
+  @Test
+  public void testSetMockInstance() {
+    Class<?> mockClass = org.apache.accumulo.core.client.mock.MockInstance.class;
+    Configuration conf = new Configuration();
+    ConfiguratorBase.setMockInstance(this.getClass(), conf, "testInstanceName");
+    assertEquals("testInstanceName", conf.get(ConfiguratorBase.enumToConfKey(this.getClass(), ConfiguratorBase.InstanceOpts.NAME)));
+    assertEquals(null, conf.get(ConfiguratorBase.enumToConfKey(this.getClass(), ConfiguratorBase.InstanceOpts.ZOO_KEEPERS)));
+    assertEquals(mockClass.getSimpleName(), conf.get(ConfiguratorBase.enumToConfKey(this.getClass(), ConfiguratorBase.InstanceOpts.TYPE)));
+    Instance instance = ConfiguratorBase.getInstance(this.getClass(), conf);
+    assertEquals(mockClass.getName(), instance.getClass().getName());
+  }
+
   @Test
   public void testSetLogLevel() {
     Configuration conf = new Configuration();

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java b/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java
new file mode 100644
index 0000000..b70cb00
--- /dev/null
+++ b/core/src/test/java/org/apache/accumulo/core/client/mock/MockConnectorTest.java
@@ -0,0 +1,375 @@
+/*
+ * 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.core.client.mock;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Random;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.accumulo.core.client.AccumuloException;
+import org.apache.accumulo.core.client.AccumuloSecurityException;
+import org.apache.accumulo.core.client.BatchDeleter;
+import org.apache.accumulo.core.client.BatchScanner;
+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.Instance;
+import org.apache.accumulo.core.client.IteratorSetting;
+import org.apache.accumulo.core.client.MultiTableBatchWriter;
+import org.apache.accumulo.core.client.Scanner;
+import org.apache.accumulo.core.client.security.tokens.PasswordToken;
+import org.apache.accumulo.core.data.Key;
+import org.apache.accumulo.core.data.Mutation;
+import org.apache.accumulo.core.data.Range;
+import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.core.iterators.Combiner;
+import org.apache.accumulo.core.iterators.user.SummingCombiner;
+import org.apache.accumulo.core.security.Authorizations;
+import org.apache.hadoop.io.Text;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.google.common.collect.Iterators;
+
+@Deprecated
+public class MockConnectorTest {
+  Random random = new Random();
+
+  static Text asText(int i) {
+    return new Text(Integer.toHexString(i));
+  }
+
+  @Test
+  public void testSunnyDay() throws Exception {
+    Connector c = new MockConnector("root", new MockInstance());
+    c.tableOperations().create("test");
+    BatchWriter bw = c.createBatchWriter("test", new BatchWriterConfig());
+    for (int i = 0; i < 100; i++) {
+      int r = random.nextInt();
+      Mutation m = new Mutation(asText(r));
+      m.put(asText(random.nextInt()), asText(random.nextInt()), new Value(Integer.toHexString(r).getBytes()));
+      bw.addMutation(m);
+    }
+    bw.close();
+    BatchScanner s = c.createBatchScanner("test", Authorizations.EMPTY, 2);
+    s.setRanges(Collections.singletonList(new Range()));
+    Key key = null;
+    int count = 0;
+    for (Entry<Key,Value> entry : s) {
+      if (key != null)
+        assertTrue(key.compareTo(entry.getKey()) < 0);
+      assertEquals(entry.getKey().getRow(), new Text(entry.getValue().get()));
+      key = entry.getKey();
+      count++;
+    }
+    assertEquals(100, count);
+  }
+
+  @Test
+  public void testChangeAuths() throws Exception {
+    Connector c = new MockConnector("root", new MockInstance());
+    c.securityOperations().createLocalUser("greg", new PasswordToken(new byte[0]));
+    assertTrue(c.securityOperations().getUserAuthorizations("greg").isEmpty());
+    c.securityOperations().changeUserAuthorizations("greg", new Authorizations("A".getBytes()));
+    assertTrue(c.securityOperations().getUserAuthorizations("greg").contains("A".getBytes()));
+    c.securityOperations().changeUserAuthorizations("greg", new Authorizations("X", "Y", "Z"));
+    assertTrue(c.securityOperations().getUserAuthorizations("greg").contains("X".getBytes()));
+    assertFalse(c.securityOperations().getUserAuthorizations("greg").contains("A".getBytes()));
+  }
+
+  @Test
+  public void testBadMutations() throws Exception {
+    Connector c = new MockConnector("root", new MockInstance());
+    c.tableOperations().create("test");
+    BatchWriter bw = c
+        .createBatchWriter("test", new BatchWriterConfig().setMaxMemory(10000L).setMaxLatency(1000L, TimeUnit.MILLISECONDS).setMaxWriteThreads(4));
+
+    try {
+      bw.addMutation(null);
+      Assert.fail("addMutation should throw IAE for null mutation");
+    } catch (IllegalArgumentException iae) {}
+    try {
+      bw.addMutations(null);
+      Assert.fail("addMutations should throw IAE for null iterable");
+    } catch (IllegalArgumentException iae) {}
+
+    bw.addMutations(Collections.<Mutation> emptyList());
+
+    Mutation bad = new Mutation("bad");
+    try {
+      bw.addMutation(bad);
+      Assert.fail("addMutation should throw IAE for empty mutation");
+    } catch (IllegalArgumentException iae) {}
+
+    Mutation good = new Mutation("good");
+    good.put(asText(random.nextInt()), asText(random.nextInt()), new Value("good".getBytes()));
+    List<Mutation> mutations = new ArrayList<>();
+    mutations.add(good);
+    mutations.add(bad);
+    try {
+      bw.addMutations(mutations);
+      Assert.fail("addMutations should throw IAE if it contains empty mutation");
+    } catch (IllegalArgumentException iae) {}
+
+    bw.close();
+  }
+
+  @Test
+  public void testAggregation() throws Exception {
+    MockInstance mockInstance = new MockInstance();
+    Connector c = mockInstance.getConnector("root", new PasswordToken(""));
+    String table = "perDayCounts";
+    c.tableOperations().create(table);
+    IteratorSetting is = new IteratorSetting(10, "String Summation", SummingCombiner.class);
+    Combiner.setColumns(is, Collections.singletonList(new IteratorSetting.Column("day")));
+    SummingCombiner.setEncodingType(is, SummingCombiner.Type.STRING);
+    c.tableOperations().attachIterator(table, is);
+    String keys[][] = { {"foo", "day", "20080101"}, {"foo", "day", "20080101"}, {"foo", "day", "20080103"}, {"bar", "day", "20080101"},
+        {"bar", "day", "20080101"},};
+    BatchWriter bw = c.createBatchWriter("perDayCounts", new BatchWriterConfig());
+    for (String elt[] : keys) {
+      Mutation m = new Mutation(new Text(elt[0]));
+      m.put(new Text(elt[1]), new Text(elt[2]), new Value("1".getBytes()));
+      bw.addMutation(m);
+    }
+    bw.close();
+
+    Scanner s = c.createScanner("perDayCounts", Authorizations.EMPTY);
+    Iterator<Entry<Key,Value>> iterator = s.iterator();
+    assertTrue(iterator.hasNext());
+    checkEntry(iterator.next(), "bar", "day", "20080101", "2");
+    assertTrue(iterator.hasNext());
+    checkEntry(iterator.next(), "foo", "day", "20080101", "2");
+    assertTrue(iterator.hasNext());
+    checkEntry(iterator.next(), "foo", "day", "20080103", "1");
+    assertFalse(iterator.hasNext());
+  }
+
+  @Test
+  public void testDelete() throws Exception {
+    Connector c = new MockConnector("root", new MockInstance());
+    c.tableOperations().create("test");
+    BatchWriter bw = c.createBatchWriter("test", new BatchWriterConfig());
+
+    Mutation m1 = new Mutation("r1");
+
+    m1.put("cf1", "cq1", 1, "v1");
+
+    bw.addMutation(m1);
+    bw.flush();
+
+    Mutation m2 = new Mutation("r1");
+
+    m2.putDelete("cf1", "cq1", 2);
+
+    bw.addMutation(m2);
+    bw.flush();
+
+    Scanner scanner = c.createScanner("test", Authorizations.EMPTY);
+
+    int count = Iterators.size(scanner.iterator());
+
+    assertEquals(0, count);
+
+    try {
+      c.tableOperations().create("test_this_$tableName");
+      assertTrue(false);
+
+    } catch (IllegalArgumentException iae) {
+
+    }
+  }
+
+  @Test
+  public void testDeletewithBatchDeleter() throws Exception {
+    Connector c = new MockConnector("root", new MockInstance());
+
+    // make sure we are using a clean table
+    if (c.tableOperations().exists("test"))
+      c.tableOperations().delete("test");
+    c.tableOperations().create("test");
+
+    BatchDeleter deleter = c.createBatchDeleter("test", Authorizations.EMPTY, 2, new BatchWriterConfig());
+    // first make sure it deletes fine when its empty
+    deleter.setRanges(Collections.singletonList(new Range(("r1"))));
+    deleter.delete();
+    this.checkRemaining(c, "test", 0);
+
+    // test deleting just one row
+    BatchWriter writer = c.createBatchWriter("test", new BatchWriterConfig());
+    Mutation m = new Mutation("r1");
+    m.put("fam", "qual", "value");
+    writer.addMutation(m);
+
+    // make sure the write goes through
+    writer.flush();
+    writer.close();
+
+    deleter.setRanges(Collections.singletonList(new Range(("r1"))));
+    deleter.delete();
+    this.checkRemaining(c, "test", 0);
+
+    // test multi row deletes
+    writer = c.createBatchWriter("test", new BatchWriterConfig());
+    m = new Mutation("r1");
+    m.put("fam", "qual", "value");
+    writer.addMutation(m);
+    Mutation m2 = new Mutation("r2");
+    m2.put("fam", "qual", "value");
+    writer.addMutation(m2);
+
+    // make sure the write goes through
+    writer.flush();
+    writer.close();
+
+    deleter.setRanges(Collections.singletonList(new Range(("r1"))));
+    deleter.delete();
+    checkRemaining(c, "test", 1);
+  }
+
+  /**
+   * Test to make sure that a certain number of rows remain
+   *
+   * @param c
+   *          connector to the {@link MockInstance}
+   * @param tableName
+   *          Table to check
+   * @param count
+   *          number of entries to expect in the table
+   */
+  private void checkRemaining(Connector c, String tableName, int count) throws Exception {
+    Scanner scanner = c.createScanner(tableName, Authorizations.EMPTY);
+
+    int total = Iterators.size(scanner.iterator());
+    assertEquals(count, total);
+  }
+
+  @Test
+  public void testCMod() throws Exception {
+    // test writing to a table that the is being scanned
+    Connector c = new MockConnector("root", new MockInstance());
+    c.tableOperations().create("test");
+    BatchWriter bw = c.createBatchWriter("test", new BatchWriterConfig());
+
+    for (int i = 0; i < 10; i++) {
+      Mutation m1 = new Mutation("r" + i);
+      m1.put("cf1", "cq1", 1, "v" + i);
+      bw.addMutation(m1);
+    }
+
+    bw.flush();
+
+    int count = 10;
+
+    Scanner scanner = c.createScanner("test", Authorizations.EMPTY);
+    for (Entry<Key,Value> entry : scanner) {
+      Key key = entry.getKey();
+      Mutation m = new Mutation(key.getRow());
+      m.put(key.getColumnFamily().toString(), key.getColumnQualifier().toString(), key.getTimestamp() + 1, "v" + (count));
+      count++;
+      bw.addMutation(m);
+    }
+
+    bw.flush();
+
+    count = 10;
+
+    for (Entry<Key,Value> entry : scanner) {
+      assertEquals(entry.getValue().toString(), "v" + (count++));
+    }
+
+    assertEquals(count, 20);
+
+    try {
+      c.tableOperations().create("test_this_$tableName");
+      assertTrue(false);
+
+    } catch (IllegalArgumentException iae) {
+
+    }
+  }
+
+  private void checkEntry(Entry<Key,Value> next, String row, String cf, String cq, String value) {
+    assertEquals(row, next.getKey().getRow().toString());
+    assertEquals(cf, next.getKey().getColumnFamily().toString());
+    assertEquals(cq, next.getKey().getColumnQualifier().toString());
+    assertEquals(value, next.getValue().toString());
+  }
+
+  @Test
+  public void testMockMultiTableBatchWriter() throws Exception {
+    Connector c = new MockConnector("root", new MockInstance());
+    c.tableOperations().create("a");
+    c.tableOperations().create("b");
+    MultiTableBatchWriter bw = c.createMultiTableBatchWriter(new BatchWriterConfig());
+    Mutation m1 = new Mutation("r1");
+    m1.put("cf1", "cq1", 1, "v1");
+    BatchWriter b = bw.getBatchWriter("a");
+    b.addMutation(m1);
+    b.flush();
+    b = bw.getBatchWriter("b");
+    b.addMutation(m1);
+    b.flush();
+
+    Scanner scanner = c.createScanner("a", Authorizations.EMPTY);
+    int count = Iterators.size(scanner.iterator());
+    assertEquals(1, count);
+    scanner = c.createScanner("b", Authorizations.EMPTY);
+    count = Iterators.size(scanner.iterator());
+    assertEquals(1, count);
+
+  }
+
+  @Test
+  public void testUpdate() throws Exception {
+    Connector c = new MockConnector("root", new MockInstance());
+    c.tableOperations().create("test");
+    BatchWriter bw = c.createBatchWriter("test", new BatchWriterConfig());
+
+    for (int i = 0; i < 10; i++) {
+      Mutation m = new Mutation("r1");
+      m.put("cf1", "cq1", "" + i);
+      bw.addMutation(m);
+    }
+
+    bw.close();
+
+    Scanner scanner = c.createScanner("test", Authorizations.EMPTY);
+
+    Entry<Key,Value> entry = scanner.iterator().next();
+
+    assertEquals("9", entry.getValue().toString());
+
+  }
+
+  @Test
+  public void testMockConnectorReturnsCorrectInstance() throws AccumuloException, AccumuloSecurityException {
+    String name = "an-interesting-instance-name";
+    Instance mockInstance = new MockInstance(name);
+    assertEquals(mockInstance, mockInstance.getConnector("foo", new PasswordToken("bar")).getInstance());
+    assertEquals(name, mockInstance.getConnector("foo", new PasswordToken("bar")).getInstance().getInstanceName());
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/4f2e6472/core/src/test/java/org/apache/accumulo/core/client/mock/MockNamespacesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/client/mock/MockNamespacesTest.java b/core/src/test/java/org/apache/accumulo/core/client/mock/MockNamespacesTest.java
new file mode 100644
index 0000000..ca12838
--- /dev/null
+++ b/core/src/test/java/org/apache/accumulo/core/client/mock/MockNamespacesTest.java
@@ -0,0 +1,297 @@
+/*
+ * 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.core.client.mock;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Map.Entry;
+
+import org.apache.accumulo.core.client.AccumuloException;
+import org.apache.accumulo.core.client.AccumuloSecurityException;
+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.Instance;
+import org.apache.accumulo.core.client.IteratorSetting;
+import org.apache.accumulo.core.client.NamespaceNotEmptyException;
+import org.apache.accumulo.core.client.NamespaceNotFoundException;
+import org.apache.accumulo.core.client.Scanner;
+import org.apache.accumulo.core.client.TableNotFoundException;
+import org.apache.accumulo.core.client.admin.NamespaceOperations;
+import org.apache.accumulo.core.client.impl.Namespaces;
+import org.apache.accumulo.core.client.security.tokens.PasswordToken;
+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.iterators.Filter;
+import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
+import org.apache.accumulo.core.security.Authorizations;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+@Deprecated
+public class MockNamespacesTest {
+
+  @Rule
+  public TestName test = new TestName();
+
+  private Connector conn;
+
+  @Before
+  public void setupInstance() throws Exception {
+    Instance inst = new MockInstance(test.getMethodName());
+    conn = inst.getConnector("user", new PasswordToken("pass"));
+  }
+
+  /**
+   * This test creates a table without specifying a namespace. In this case, it puts the table into the default namespace.
+   */
+  @Test
+  public void testDefaultNamespace() throws Exception {
+    String tableName = "test";
+
+    assertTrue(conn.namespaceOperations().exists(Namespaces.DEFAULT_NAMESPACE));
+    conn.tableOperations().create(tableName);
+    assertTrue(conn.tableOperations().exists(tableName));
+  }
+
+  /**
+   * This test creates a new namespace "testing" and a table "testing.table1" which puts "table1" into the "testing" namespace. Then we create "testing.table2"
+   * which creates "table2" and puts it into "testing" as well. Then we make sure that you can't delete a namespace with tables in it, and then we delete the
+   * tables and delete the namespace.
+   */
+  @Test
+  public void testCreateAndDeleteNamespace() throws Exception {
+    String namespace = "testing";
+    String tableName1 = namespace + ".table1";
+    String tableName2 = namespace + ".table2";
+
+    conn.namespaceOperations().create(namespace);
+    assertTrue(conn.namespaceOperations().exists(namespace));
+
+    conn.tableOperations().create(tableName1);
+    assertTrue(conn.tableOperations().exists(tableName1));
+
+    conn.tableOperations().create(tableName2);
+    assertTrue(conn.tableOperations().exists(tableName2));
+
+    // deleting
+    try {
+      // can't delete a namespace with tables in it
+      conn.namespaceOperations().delete(namespace);
+      fail();
+    } catch (NamespaceNotEmptyException e) {
+      // ignore, supposed to happen
+    }
+    assertTrue(conn.namespaceOperations().exists(namespace));
+    assertTrue(conn.tableOperations().exists(tableName1));
+    assertTrue(conn.tableOperations().exists(tableName2));
+
+    conn.tableOperations().delete(tableName2);
+    assertTrue(!conn.tableOperations().exists(tableName2));
+    assertTrue(conn.namespaceOperations().exists(namespace));
+
+    conn.tableOperations().delete(tableName1);
+    assertTrue(!conn.tableOperations().exists(tableName1));
+    conn.namespaceOperations().delete(namespace);
+    assertTrue(!conn.namespaceOperations().exists(namespace));
+  }
+
+  /**
+   * This test creates a namespace, modifies it's properties, and checks to make sure that those properties are applied to its tables. To do something on a
+   * namespace-wide level, use {@link NamespaceOperations}.
+   *
+   * Checks to make sure namespace-level properties are overridden by table-level properties.
+   *
+   * Checks to see if the default namespace's properties work as well.
+   */
+
+  @Test
+  public void testNamespaceProperties() throws Exception {
+    String namespace = "propchange";
+    String tableName1 = namespace + ".table1";
+    String tableName2 = namespace + ".table2";
+
+    String propKey = Property.TABLE_SCAN_MAXMEM.getKey();
+    String propVal = "42K";
+
+    conn.namespaceOperations().create(namespace);
+    conn.tableOperations().create(tableName1);
+    conn.namespaceOperations().setProperty(namespace, propKey, propVal);
+
+    // check the namespace has the property
+    assertTrue(checkNamespaceHasProp(conn, namespace, propKey, propVal));
+
+    // check that the table gets it from the namespace
+    assertTrue(checkTableHasProp(conn, tableName1, propKey, propVal));
+
+    // test a second table to be sure the first wasn't magical
+    // (also, changed the order, the namespace has the property already)
+    conn.tableOperations().create(tableName2);
+    assertTrue(checkTableHasProp(conn, tableName2, propKey, propVal));
+
+    // test that table properties override namespace properties
+    String propKey2 = Property.TABLE_FILE_MAX.getKey();
+    String propVal2 = "42";
+    String tablePropVal = "13";
+
+    conn.tableOperations().setProperty(tableName2, propKey2, tablePropVal);
+    conn.namespaceOperations().setProperty("propchange", propKey2, propVal2);
+
+    assertTrue(checkTableHasProp(conn, tableName2, propKey2, tablePropVal));
+
+    // now check that you can change the default namespace's properties
+    propVal = "13K";
+    String tableName = "some_table";
+    conn.tableOperations().create(tableName);
+    conn.namespaceOperations().setProperty(Namespaces.DEFAULT_NAMESPACE, propKey, propVal);
+
+    assertTrue(checkTableHasProp(conn, tableName, propKey, propVal));
+
+    // test the properties server-side by configuring an iterator.
+    // should not show anything with column-family = 'a'
+    String tableName3 = namespace + ".table3";
+    conn.tableOperations().create(tableName3);
+
+    IteratorSetting setting = new IteratorSetting(250, "thing", SimpleFilter.class.getName());
+    conn.namespaceOperations().attachIterator(namespace, setting);
+
+    BatchWriter bw = conn.createBatchWriter(tableName3, new BatchWriterConfig());
+    Mutation m = new Mutation("r");
+    m.put("a", "b", new Value("abcde".getBytes()));
+    bw.addMutation(m);
+    bw.flush();
+    bw.close();
+
+    // Scanner s = c.createScanner(tableName3, Authorizations.EMPTY);
+    // do scanners work correctly in mock?
+    // assertTrue(!s.iterator().hasNext());
+  }
+
+  /**
+   * This test renames and clones two separate table into different namespaces. different namespace.
+   */
+  @Test
+  public void testRenameAndCloneTableToNewNamespace() throws Exception {
+    String namespace1 = "renamed";
+    String namespace2 = "cloned";
+    String tableName = "table";
+    String tableName1 = "renamed.table1";
+    // String tableName2 = "cloned.table2";
+
+    conn.tableOperations().create(tableName);
+    conn.namespaceOperations().create(namespace1);
+    conn.namespaceOperations().create(namespace2);
+
+    conn.tableOperations().rename(tableName, tableName1);
+
+    assertTrue(conn.tableOperations().exists(tableName1));
+    assertTrue(!conn.tableOperations().exists(tableName));
+
+    // TODO implement clone in mock
+    // c.tableOperations().clone(tableName1, tableName2, false, null, null);
+    // assertTrue(c.tableOperations().exists(tableName1)); assertTrue(c.tableOperations().exists(tableName2));
+  }
+
+  /**
+   * This test renames a namespace and ensures that its tables are still correct
+   */
+  @Test
+  public void testNamespaceRename() throws Exception {
+    String namespace1 = "n1";
+    String namespace2 = "n2";
+    String table = "t";
+
+    conn.namespaceOperations().create(namespace1);
+    conn.tableOperations().create(namespace1 + "." + table);
+
+    conn.namespaceOperations().rename(namespace1, namespace2);
+
+    assertTrue(!conn.namespaceOperations().exists(namespace1));
+    assertTrue(conn.namespaceOperations().exists(namespace2));
+    assertTrue(!conn.tableOperations().exists(namespace1 + "." + table));
+    assertTrue(conn.tableOperations().exists(namespace2 + "." + table));
+  }
+
+  /**
+   * This tests adding iterators to a namespace, listing them, and removing them
+   */
+  @Test
+  public void testNamespaceIterators() throws Exception {
+    String namespace = "iterator";
+    String tableName = namespace + ".table";
+    String iter = "thing";
+
+    conn.namespaceOperations().create(namespace);
+    conn.tableOperations().create(tableName);
+
+    IteratorSetting setting = new IteratorSetting(250, iter, SimpleFilter.class.getName());
+    HashSet<IteratorScope> scope = new HashSet<>();
+    scope.add(IteratorScope.scan);
+    conn.namespaceOperations().attachIterator(namespace, setting, EnumSet.copyOf(scope));
+
+    BatchWriter bw = conn.createBatchWriter(tableName, new BatchWriterConfig());
+    Mutation m = new Mutation("r");
+    m.put("a", "b", new Value("abcde".getBytes(UTF_8)));
+    bw.addMutation(m);
+    bw.flush();
+
+    Scanner s = conn.createScanner(tableName, Authorizations.EMPTY);
+    System.out.println(s.iterator().next());
+    // do scanners work correctly in mock?
+    // assertTrue(!s.iterator().hasNext());
+
+    assertTrue(conn.namespaceOperations().listIterators(namespace).containsKey(iter));
+    conn.namespaceOperations().removeIterator(namespace, iter, EnumSet.copyOf(scope));
+  }
+
+  private boolean checkTableHasProp(Connector c, String t, String propKey, String propVal) throws AccumuloException, TableNotFoundException {
+    for (Entry<String,String> e : c.tableOperations().getProperties(t)) {
+      if (e.getKey().equals(propKey) && e.getValue().equals(propVal)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  private boolean checkNamespaceHasProp(Connector c, String n, String propKey, String propVal) throws AccumuloException, NamespaceNotFoundException,
+      AccumuloSecurityException {
+    for (Entry<String,String> e : c.namespaceOperations().getProperties(n)) {
+      if (e.getKey().equals(propKey) && e.getValue().equals(propVal)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  public static class SimpleFilter extends Filter {
+    @Override
+    public boolean accept(Key k, Value v) {
+      if (k.getColumnFamily().toString().equals("a"))
+        return false;
+      return true;
+    }
+  }
+}