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 2018/04/06 09:53:06 UTC

[accumulo] branch master updated (add1c4c -> fbaee3e)

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

ctubbsii pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/accumulo.git.


    from add1c4c  Merge branch '1.8'
     new fc20be3  POM updates for formatting (#416)
     new 19dc538  Merge commit 'fc20be34d6984114e7240c4eba276a3fe87a347b'
     new f4f43fe  Apply initial formatting changes to 100-char lines
     new e113e2f  Merge commit 'f4f43febbc3e68013d8a1bcd46d8b44275e2e55e'
     new 2387957  Fix findbugs error due to line-wrapping
     new 2ecae2d  Fix line wrap and other checkstyle errors
     new b8c19f8  Remove unused variables
     new ddfe3b9  Merge branch '1.8'
     new fbaee3e  Additional wrapping fixes for checkstyle (#416)

The 9 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 contrib/Eclipse-Accumulo-Codestyle.xml             |    4 +-
 .../java/org/apache/accumulo/core/Constants.java   |    3 +-
 .../accumulo/core/bloomfilter/BloomFilter.java     |   36 +-
 .../core/bloomfilter/DynamicBloomFilter.java       |   49 +-
 .../apache/accumulo/core/bloomfilter/Filter.java   |    5 +-
 .../apache/accumulo/core/cli/BatchScannerOpts.java |    3 +-
 .../apache/accumulo/core/cli/BatchWriterOpts.java  |   12 +-
 .../org/apache/accumulo/core/cli/ClientOpts.java   |   46 +-
 .../core/cli/MapReduceClientOnRequiredTable.java   |    3 +-
 .../accumulo/core/cli/MapReduceClientOpts.java     |   13 +-
 .../org/apache/accumulo/core/cli/ScannerOpts.java  |    3 +-
 .../core/client/AccumuloSecurityException.java     |   15 +-
 .../apache/accumulo/core/client/BatchScanner.java  |   26 +-
 .../apache/accumulo/core/client/BatchWriter.java   |   15 +-
 .../accumulo/core/client/BatchWriterConfig.java    |   52 +-
 .../accumulo/core/client/ClientConfiguration.java  |   84 +-
 .../core/client/ClientSideIteratorScanner.java     |   56 +-
 .../accumulo/core/client/ConditionalWriter.java    |   30 +-
 .../core/client/ConditionalWriterConfig.java       |   25 +-
 .../org/apache/accumulo/core/client/Connector.java |  141 ++-
 .../apache/accumulo/core/client/Durability.java    |    6 +-
 .../org/apache/accumulo/core/client/Instance.java  |   28 +-
 .../accumulo/core/client/IsolatedScanner.java      |   16 +-
 .../accumulo/core/client/IteratorSetting.java      |   54 +-
 .../core/client/MultiTableBatchWriter.java         |    8 +-
 .../core/client/MutationsRejectedException.java    |   11 +-
 .../core/client/NamespaceExistsException.java      |   11 +-
 .../core/client/NamespaceNotEmptyException.java    |   11 +-
 .../core/client/NamespaceNotFoundException.java    |   11 +-
 .../apache/accumulo/core/client/RowIterator.java   |   11 +-
 .../core/client/SampleNotPresentException.java     |    3 +-
 .../org/apache/accumulo/core/client/Scanner.java   |   25 +-
 .../apache/accumulo/core/client/ScannerBase.java   |   93 +-
 .../core/client/TableDeletedException.java         |    3 +-
 .../accumulo/core/client/TableExistsException.java |    8 +-
 .../core/client/TableNotFoundException.java        |   14 +-
 .../accumulo/core/client/TimedOutException.java    |    3 +-
 .../accumulo/core/client/ZooKeeperInstance.java    |   74 +-
 .../core/client/admin/ActiveCompaction.java        |    3 +-
 .../core/client/admin/CompactionConfig.java        |   30 +-
 .../client/admin/CompactionStrategyConfig.java     |   14 +-
 .../core/client/admin/DelegationTokenConfig.java   |   10 +-
 .../apache/accumulo/core/client/admin/FindMax.java |   15 +-
 .../core/client/admin/InstanceOperations.java      |   35 +-
 .../accumulo/core/client/admin/Locations.java      |   12 +-
 .../core/client/admin/NamespaceOperations.java     |   82 +-
 .../core/client/admin/NewTableConfiguration.java   |   47 +-
 .../core/client/admin/ReplicationOperations.java   |   34 +-
 .../core/client/admin/SecurityOperations.java      |   76 +-
 .../core/client/admin/SummaryRetriever.java        |   40 +-
 .../core/client/admin/TableOperations.java         |  316 +++--
 .../accumulo/core/client/admin/TimeType.java       |    7 +-
 .../accumulo/core/client/impl/AbstractId.java      |    6 +-
 .../AcceptableThriftTableOperationException.java   |    6 +-
 .../core/client/impl/ActiveCompactionImpl.java     |    6 +-
 .../accumulo/core/client/impl/ActiveScanImpl.java  |    4 +-
 .../client/impl/AuthenticationTokenIdentifier.java |    3 +-
 .../core/client/impl/BaseIteratorEnvironment.java  |    8 +-
 .../core/client/impl/ClientConfConverter.java      |    9 +-
 .../accumulo/core/client/impl/ClientContext.java   |   86 +-
 .../core/client/impl/ConditionalWriterImpl.java    |   77 +-
 .../core/client/impl/ConnectionInfoFactory.java    |    3 +-
 .../accumulo/core/client/impl/ConnectorImpl.java   |   91 +-
 .../accumulo/core/client/impl/Credentials.java     |   67 +-
 .../core/client/impl/DelegationTokenImpl.java      |   21 +-
 .../core/client/impl/InstanceOperationsImpl.java   |   61 +-
 .../accumulo/core/client/impl/MasterClient.java    |   32 +-
 .../client/impl/MultiTableBatchWriterImpl.java     |   18 +-
 .../accumulo/core/client/impl/Namespace.java       |   13 +-
 .../client/impl/NamespaceOperationsHelper.java     |   80 +-
 .../core/client/impl/NamespaceOperationsImpl.java  |   78 +-
 .../accumulo/core/client/impl/Namespaces.java      |   33 +-
 .../accumulo/core/client/impl/OfflineIterator.java |   66 +-
 .../accumulo/core/client/impl/OfflineScanner.java  |    3 +-
 .../core/client/impl/ReplicationClient.java        |   44 +-
 .../client/impl/ReplicationOperationsImpl.java     |   32 +-
 .../core/client/impl/RootTabletLocator.java        |   27 +-
 .../accumulo/core/client/impl/ScannerImpl.java     |   13 +-
 .../accumulo/core/client/impl/ScannerIterator.java |   17 +-
 .../accumulo/core/client/impl/ScannerOptions.java  |    3 +-
 .../core/client/impl/SecurityOperationsImpl.java   |  126 +-
 .../accumulo/core/client/impl/ServerClient.java    |   52 +-
 .../core/client/impl/SyncingTabletLocator.java     |   17 +-
 .../apache/accumulo/core/client/impl/Table.java    |   11 +-
 .../apache/accumulo/core/client/impl/TableMap.java |    3 +-
 .../core/client/impl/TableOperationsHelper.java    |   80 +-
 .../core/client/impl/TableOperationsImpl.java      |  470 +++++---
 .../apache/accumulo/core/client/impl/Tables.java   |   65 +-
 .../accumulo/core/client/impl/TabletLocator.java   |   28 +-
 .../core/client/impl/TabletLocatorImpl.java        |  141 ++-
 .../core/client/impl/TabletServerBatchDeleter.java |    9 +-
 .../core/client/impl/TabletServerBatchReader.java  |   15 +-
 .../impl/TabletServerBatchReaderIterator.java      |  142 ++-
 .../core/client/impl/TabletServerBatchWriter.java  |  142 ++-
 .../accumulo/core/client/impl/TabletType.java      |    3 +-
 .../accumulo/core/client/impl/ThriftScanner.java   |  129 +-
 .../core/client/impl/ThriftTransportKey.java       |    6 +-
 .../core/client/impl/ThriftTransportPool.java      |   45 +-
 .../core/client/impl/TimeoutTabletLocator.java     |   15 +-
 .../accumulo/core/client/impl/Translator.java      |   15 +-
 .../apache/accumulo/core/client/impl/Writer.java   |   12 +-
 .../core/client/lexicoder/AbstractEncoder.java     |   14 +-
 .../core/client/lexicoder/BigIntegerLexicoder.java |    6 +-
 .../core/client/lexicoder/BytesLexicoder.java      |   10 +-
 .../core/client/lexicoder/DateLexicoder.java       |    3 +-
 .../core/client/lexicoder/DoubleLexicoder.java     |    3 +-
 .../accumulo/core/client/lexicoder/Encoder.java    |    3 +-
 .../core/client/lexicoder/FloatLexicoder.java      |    3 +-
 .../core/client/lexicoder/IntegerLexicoder.java    |    7 +-
 .../accumulo/core/client/lexicoder/Lexicoder.java  |    4 +-
 .../core/client/lexicoder/ListLexicoder.java       |    6 +-
 .../core/client/lexicoder/LongLexicoder.java       |    4 +-
 .../core/client/lexicoder/PairLexicoder.java       |   44 +-
 .../core/client/lexicoder/ReverseLexicoder.java    |    7 +-
 .../core/client/lexicoder/StringLexicoder.java     |    7 +-
 .../core/client/lexicoder/TextLexicoder.java       |    7 +-
 .../core/client/lexicoder/UIntegerLexicoder.java   |    8 +-
 .../core/client/lexicoder/ULongLexicoder.java      |    8 +-
 .../core/client/lexicoder/UUIDLexicoder.java       |    7 +-
 .../lexicoder/impl/FixedByteArrayOutputStream.java |    3 +-
 .../core/client/mapred/AbstractInputFormat.java    |  130 ++-
 .../client/mapred/AccumuloFileOutputFormat.java    |   53 +-
 .../core/client/mapred/AccumuloInputFormat.java    |   15 +-
 .../mapred/AccumuloMultiTableInputFormat.java      |   11 +-
 .../core/client/mapred/AccumuloOutputFormat.java   |   82 +-
 .../core/client/mapred/AccumuloRowInputFormat.java |   66 +-
 .../core/client/mapred/InputFormatBase.java        |   94 +-
 .../core/client/mapred/RangeInputSplit.java        |    3 +-
 .../core/client/mapred/impl/BatchInputSplit.java   |    9 +-
 .../core/client/mapreduce/AbstractInputFormat.java |  144 ++-
 .../client/mapreduce/AccumuloFileOutputFormat.java |   47 +-
 .../core/client/mapreduce/AccumuloInputFormat.java |   15 +-
 .../mapreduce/AccumuloMultiTableInputFormat.java   |   11 +-
 .../client/mapreduce/AccumuloOutputFormat.java     |   88 +-
 .../client/mapreduce/AccumuloRowInputFormat.java   |   13 +-
 .../core/client/mapreduce/InputFormatBase.java     |   97 +-
 .../core/client/mapreduce/InputTableConfig.java    |   58 +-
 .../core/client/mapreduce/RangeInputSplit.java     |   21 +-
 .../client/mapreduce/impl/BatchInputSplit.java     |   30 +-
 .../client/mapreduce/impl/DelegationTokenStub.java |    3 +-
 .../core/client/mapreduce/impl/SplitUtils.java     |   16 +-
 .../mapreduce/lib/impl/ConfiguratorBase.java       |  136 ++-
 .../mapreduce/lib/impl/FileOutputConfigurator.java |   86 +-
 .../mapreduce/lib/impl/InputConfigurator.java      |  231 ++--
 .../mapreduce/lib/impl/OutputConfigurator.java     |   36 +-
 .../client/mapreduce/lib/impl/package-info.java    |   27 +-
 .../lib/partition/KeyRangePartitioner.java         |    3 +-
 .../mapreduce/lib/partition/RangePartitioner.java  |    9 +-
 .../accumulo/core/client/mock/MockAccumulo.java    |   15 +-
 .../core/client/mock/MockBatchDeleter.java         |    9 +-
 .../accumulo/core/client/mock/MockConnector.java   |   49 +-
 .../accumulo/core/client/mock/MockInstance.java    |   25 +-
 .../core/client/mock/MockInstanceOperations.java   |   18 +-
 .../client/mock/MockMultiTableBatchWriter.java     |    3 +-
 .../core/client/mock/MockNamespaceOperations.java  |   25 +-
 .../accumulo/core/client/mock/MockScannerBase.java |   14 +-
 .../core/client/mock/MockSecurityOperations.java   |   54 +-
 .../accumulo/core/client/mock/MockTable.java       |   14 +-
 .../core/client/mock/MockTableOperations.java      |  160 ++-
 .../core/client/mock/impl/MockTabletLocator.java   |   12 +-
 .../accumulo/core/client/mock/package-info.java    |    1 -
 .../client/replication/PeerExistsException.java    |    3 +-
 .../apache/accumulo/core/client/rfile/RFile.java   |  129 +-
 .../accumulo/core/client/rfile/RFileScanner.java   |   35 +-
 .../core/client/rfile/RFileScannerBuilder.java     |    6 +-
 .../accumulo/core/client/rfile/RFileSource.java    |    4 +-
 .../core/client/rfile/RFileSummariesRetriever.java |    6 +-
 .../accumulo/core/client/rfile/RFileWriter.java    |   56 +-
 .../core/client/rfile/RFileWriterBuilder.java      |   19 +-
 .../core/client/sample/AbstractHashSampler.java    |   13 +-
 .../core/client/sample/RowColumnSampler.java       |   23 +-
 .../accumulo/core/client/sample/RowSampler.java    |   18 +-
 .../accumulo/core/client/sample/Sampler.java       |   30 +-
 .../security/tokens/AuthenticationToken.java       |   26 +-
 .../security/tokens/CredentialProviderToken.java   |   24 +-
 .../client/security/tokens/DelegationToken.java    |   13 +-
 .../core/client/security/tokens/KerberosToken.java |   28 +-
 .../core/client/security/tokens/PasswordToken.java |   21 +-
 .../core/client/summary/CounterSummary.java        |   24 +-
 .../core/client/summary/CountingSummarizer.java    |  111 +-
 .../accumulo/core/client/summary/Summarizer.java   |   75 +-
 .../client/summary/SummarizerConfiguration.java    |   36 +-
 .../accumulo/core/client/summary/Summary.java      |   55 +-
 .../summary/summarizers/DeletesSummarizer.java     |    8 +-
 .../summary/summarizers/EntryLengthSummarizer.java |   22 +-
 .../summary/summarizers/FamilySummarizer.java      |    8 +-
 .../summary/summarizers/VisibilitySummarizer.java  |    8 +-
 .../accumulo/core/conf/AccumuloConfiguration.java  |   45 +-
 .../accumulo/core/conf/CliConfiguration.java       |    3 +-
 .../accumulo/core/conf/ClientConfigGenerate.java   |   30 +-
 .../apache/accumulo/core/conf/ClientProperty.java  |   50 +-
 .../accumulo/core/conf/ConfigSanityCheck.java      |   61 +-
 .../accumulo/core/conf/ConfigurationCopy.java      |    3 +-
 .../accumulo/core/conf/ConfigurationDocGen.java    |   34 +-
 .../core/conf/ConfigurationTypeHelper.java         |   46 +-
 .../core/conf/CredentialProviderFactoryShim.java   |  120 +-
 .../accumulo/core/conf/DefaultConfiguration.java   |    9 +-
 .../apache/accumulo/core/conf/Interpolated.java    |    9 +-
 .../core/conf/ObservableConfiguration.java         |    6 +-
 .../org/apache/accumulo/core/conf/Property.java    | 1234 +++++++++++++-------
 .../apache/accumulo/core/conf/PropertyType.java    |  133 ++-
 .../org/apache/accumulo/core/conf/Sensitive.java   |    3 +-
 .../accumulo/core/conf/SiteConfiguration.java      |   50 +-
 .../accumulo/core/constraints/Constraint.java      |   14 +-
 .../core/constraints/VisibilityConstraint.java     |    3 +-
 .../accumulo/core/data/ArrayByteSequence.java      |   24 +-
 .../apache/accumulo/core/data/ByteSequence.java    |   17 +-
 .../java/org/apache/accumulo/core/data/Column.java |   10 +-
 .../apache/accumulo/core/data/ColumnUpdate.java    |   20 +-
 .../org/apache/accumulo/core/data/Condition.java   |   55 +-
 .../accumulo/core/data/ConditionalMutation.java    |    6 +-
 .../core/data/ConstraintViolationSummary.java      |   13 +-
 .../java/org/apache/accumulo/core/data/Key.java    |  322 +++--
 .../org/apache/accumulo/core/data/KeyBuilder.java  |   47 +-
 .../org/apache/accumulo/core/data/Mutation.java    |  237 ++--
 .../org/apache/accumulo/core/data/PartialKey.java  |    6 +-
 .../java/org/apache/accumulo/core/data/Range.java  |  180 ++-
 .../org/apache/accumulo/core/data/TabletId.java    |    3 +-
 .../java/org/apache/accumulo/core/data/Value.java  |   32 +-
 .../accumulo/core/data/impl/ComparableBytes.java   |    3 +-
 .../apache/accumulo/core/data/impl/KeyExtent.java  |   82 +-
 .../accumulo/core/file/BloomFilterLayer.java       |   71 +-
 .../accumulo/core/file/DispatchingFileFactory.java |   14 +-
 .../apache/accumulo/core/file/FileOperations.java  |  139 ++-
 .../accumulo/core/file/blockfile/ABlockReader.java |    3 +-
 .../core/file/blockfile/BlockFileReader.java       |    3 +-
 .../core/file/blockfile/BlockFileWriter.java       |    3 +-
 .../core/file/blockfile/cache/BlockCache.java      |   13 +-
 .../file/blockfile/cache/BlockCacheManager.java    |   39 +-
 .../core/file/blockfile/cache/CacheEntry.java      |    7 +-
 .../cache/impl/BlockCacheConfiguration.java        |    3 +-
 .../cache/impl/BlockCacheManagerFactory.java       |   21 +-
 .../core/file/blockfile/cache/impl/ClassSize.java  |   18 +-
 .../core/file/blockfile/cache/lru/CachedBlock.java |   16 +-
 .../file/blockfile/cache/lru/CachedBlockQueue.java |   15 +-
 .../core/file/blockfile/cache/lru/HeapSize.java    |    9 +-
 .../file/blockfile/cache/lru/LruBlockCache.java    |  113 +-
 .../cache/lru/LruBlockCacheConfiguration.java      |   32 +-
 .../cache/lru/SynchronousLoadingBlockCache.java    |    3 +-
 .../blockfile/cache/tinylfu/TinyLfuBlockCache.java |   29 +-
 .../file/blockfile/impl/CachableBlockFile.java     |   96 +-
 .../impl/SeekableByteArrayInputStream.java         |    9 +-
 .../file/keyfunctor/ColumnQualifierFunctor.java    |    3 +-
 .../accumulo/core/file/keyfunctor/RowFunctor.java  |    3 +-
 .../accumulo/core/file/map/MapFileOperations.java  |   19 +-
 .../apache/accumulo/core/file/map/MapFileUtil.java |    6 +-
 .../accumulo/core/file/rfile/BlockIndex.java       |   21 +-
 .../accumulo/core/file/rfile/CreateEmpty.java      |   23 +-
 .../accumulo/core/file/rfile/IndexIterator.java    |    6 +-
 .../accumulo/core/file/rfile/KeyShortener.java     |   27 +-
 .../accumulo/core/file/rfile/MetricsGatherer.java  |   10 +-
 .../core/file/rfile/MultiIndexIterator.java        |    6 +-
 .../accumulo/core/file/rfile/MultiLevelIndex.java  |   58 +-
 .../apache/accumulo/core/file/rfile/PrintInfo.java |   28 +-
 .../org/apache/accumulo/core/file/rfile/RFile.java |  232 ++--
 .../accumulo/core/file/rfile/RFileOperations.java  |   22 +-
 .../accumulo/core/file/rfile/RelativeKey.java      |   33 +-
 .../accumulo/core/file/rfile/RollingStats.java     |   15 +-
 .../accumulo/core/file/rfile/SplitLarge.java       |   15 +-
 .../core/file/rfile/VisMetricsGatherer.java        |   19 +-
 .../accumulo/core/file/rfile/VisibilityMetric.java |   10 +-
 .../accumulo/core/file/rfile/bcfile/BCFile.java    |  188 +--
 .../core/file/rfile/bcfile/Compression.java        |  134 ++-
 .../accumulo/core/file/rfile/bcfile/PrintInfo.java |   15 +-
 .../core/file/rfile/bcfile/RawComparable.java      |   10 +-
 .../rfile/bcfile/SimpleBufferedOutputStream.java   |    3 +-
 .../accumulo/core/file/rfile/bcfile/Utils.java     |   67 +-
 .../file/streams/BoundedRangeFileInputStream.java  |   11 +-
 .../file/streams/PositionedDataOutputStream.java   |    6 +-
 .../core/file/streams/PositionedOutput.java        |    3 +-
 .../core/file/streams/PositionedOutputs.java       |    8 +-
 .../core/file/streams/RateLimitedInputStream.java  |    3 +-
 .../core/file/streams/SeekableDataInputStream.java |    3 +-
 .../core/iterators/AggregatingIterator.java        |   35 +-
 .../core/iterators/ColumnFamilyCounter.java        |    9 +-
 .../apache/accumulo/core/iterators/Combiner.java   |  134 ++-
 .../accumulo/core/iterators/DebugIterator.java     |   10 +-
 .../apache/accumulo/core/iterators/DevNull.java    |   10 +-
 .../core/iterators/FamilyIntersectingIterator.java |    3 +-
 .../org/apache/accumulo/core/iterators/Filter.java |   25 +-
 .../core/iterators/FirstEntryInRowIterator.java    |   16 +-
 .../core/iterators/IntersectingIterator.java       |    6 +-
 .../accumulo/core/iterators/IteratorAdapter.java   |    3 +-
 .../core/iterators/IteratorEnvironment.java        |   17 +-
 .../accumulo/core/iterators/IteratorUtil.java      |  164 ++-
 .../accumulo/core/iterators/LongCombiner.java      |   61 +-
 .../accumulo/core/iterators/OptionDescriber.java   |   39 +-
 .../apache/accumulo/core/iterators/OrIterator.java |   52 +-
 .../core/iterators/RowDeletingIterator.java        |    6 +-
 .../accumulo/core/iterators/ServerFilter.java      |   15 +-
 .../core/iterators/ServerSkippingIterator.java     |   10 +-
 .../core/iterators/ServerWrappingIterator.java     |   17 +-
 .../accumulo/core/iterators/SkippingIterator.java  |   10 +-
 .../accumulo/core/iterators/SortedKeyIterator.java |    4 +-
 .../core/iterators/SortedKeyValueIterator.java     |   89 +-
 .../accumulo/core/iterators/SortedMapIterator.java |   13 +-
 .../core/iterators/SynchronizedServerFilter.java   |   12 +-
 .../core/iterators/TypedValueCombiner.java         |   38 +-
 .../core/iterators/VersioningIterator.java         |    3 +-
 .../accumulo/core/iterators/WholeRowIterator.java  |    3 +-
 .../accumulo/core/iterators/WrappingIterator.java  |   22 +-
 .../accumulo/core/iterators/YieldCallback.java     |    5 +-
 .../core/iterators/YieldingKeyValueIterator.java   |   12 +-
 .../core/iterators/aggregation/LongSummation.java  |   15 +-
 .../iterators/aggregation/NumArraySummation.java   |    3 +-
 .../core/iterators/aggregation/NumSummation.java   |    3 +-
 .../core/iterators/aggregation/StringMax.java      |    4 +-
 .../core/iterators/aggregation/StringMin.java      |    4 +-
 .../iterators/aggregation/StringSummation.java     |    3 +-
 .../aggregation/conf/AggregatorConfiguration.java  |    3 +-
 .../iterators/aggregation/conf/AggregatorSet.java  |    6 +-
 .../accumulo/core/iterators/conf/ColumnSet.java    |    6 +-
 .../core/iterators/conf/ColumnToClassMapping.java  |   12 +-
 .../accumulo/core/iterators/conf/ColumnUtil.java   |    9 +-
 .../iterators/conf/PerColumnIteratorConfig.java    |    6 +-
 .../system/ColumnFamilySkippingIterator.java       |   12 +-
 .../iterators/system/ColumnQualifierFilter.java    |    6 +-
 .../core/iterators/system/CountingIterator.java    |    3 +-
 .../core/iterators/system/DeletingIterator.java    |   15 +-
 .../core/iterators/system/EmptyIterator.java       |    6 +-
 .../core/iterators/system/HeapIterator.java        |    4 +-
 .../iterators/system/LocalityGroupIterator.java    |   43 +-
 .../core/iterators/system/MapFileIterator.java     |    9 +-
 .../core/iterators/system/MultiIterator.java       |    9 +-
 .../iterators/system/SequenceFileIterator.java     |    6 +-
 .../iterators/system/SourceSwitchingIterator.java  |   50 +-
 .../core/iterators/system/StatsIterator.java       |    6 +-
 .../iterators/system/SynchronizedIterator.java     |   14 +-
 .../core/iterators/system/TimeSettingIterator.java |    6 +-
 .../core/iterators/system/VisibilityFilter.java    |   16 +-
 .../accumulo/core/iterators/user/AgeOffFilter.java |   18 +-
 .../core/iterators/user/BigDecimalCombiner.java    |   12 +-
 .../core/iterators/user/CfCqSliceFilter.java       |   13 +-
 .../core/iterators/user/CfCqSliceOpts.java         |   50 +-
 .../iterators/user/CfCqSliceSeekingFilter.java     |   27 +-
 .../core/iterators/user/ColumnAgeOffFilter.java    |   17 +-
 .../core/iterators/user/ColumnSliceFilter.java     |   22 +-
 .../accumulo/core/iterators/user/GrepIterator.java |    9 +-
 .../core/iterators/user/IndexedDocIterator.java    |   35 +-
 .../core/iterators/user/IntersectingIterator.java  |  100 +-
 .../core/iterators/user/LargeRowFilter.java        |   49 +-
 .../accumulo/core/iterators/user/MaxCombiner.java  |    4 +-
 .../accumulo/core/iterators/user/MinCombiner.java  |    4 +-
 .../accumulo/core/iterators/user/RegExFilter.java  |   26 +-
 .../core/iterators/user/RowDeletingIterator.java   |   45 +-
 .../core/iterators/user/RowEncodingIterator.java   |   64 +-
 .../accumulo/core/iterators/user/RowFilter.java    |   44 +-
 .../core/iterators/user/SeekingFilter.java         |   47 +-
 .../core/iterators/user/SummingArrayCombiner.java  |   26 +-
 .../core/iterators/user/SummingCombiner.java       |    4 +-
 .../core/iterators/user/TimestampFilter.java       |   15 +-
 .../core/iterators/user/TransformingIterator.java  |  234 ++--
 .../core/iterators/user/VersioningIterator.java    |   19 +-
 .../core/iterators/user/VisibilityFilter.java      |   16 +-
 .../iterators/user/WholeColumnFamilyIterator.java  |   52 +-
 .../core/iterators/user/WholeRowIterator.java      |   27 +-
 .../core/metadata/MetadataLocationObtainer.java    |   54 +-
 .../accumulo/core/metadata/MetadataServicer.java   |    9 +-
 .../apache/accumulo/core/metadata/RootTable.java   |    3 +-
 .../core/metadata/ServicerForRootTable.java        |    3 +-
 .../core/metadata/TableMetadataServicer.java       |   26 +-
 .../core/metadata/schema/MetadataScanner.java      |   12 +-
 .../core/metadata/schema/MetadataSchema.java       |   50 +-
 .../core/metadata/schema/TabletMetadata.java       |   36 +-
 .../replication/AccumuloReplicationReplayer.java   |    7 +-
 .../core/replication/ReplicationSchema.java        |   53 +-
 .../core/replication/ReplicationTable.java         |    9 +-
 .../core/replication/ReplicationTarget.java        |   10 +-
 .../apache/accumulo/core/rpc/FilterTransport.java  |    5 +-
 .../rpc/ProtocolOverridingSSLSocketFactory.java    |   24 +-
 .../core/rpc/SaslClientDigestCallbackHandler.java  |    5 +-
 .../accumulo/core/rpc/SaslConnectionParams.java    |   15 +-
 .../core/rpc/SaslDigestCallbackHandler.java        |    6 +-
 .../accumulo/core/rpc/SslConnectionParams.java     |   19 +-
 .../apache/accumulo/core/rpc/TBufferedSocket.java  |    3 +-
 .../accumulo/core/rpc/TServiceClientWrapper.java   |    5 +-
 .../accumulo/core/rpc/TTimeoutTransport.java       |   21 +-
 .../org/apache/accumulo/core/rpc/ThriftUtil.java   |  144 ++-
 .../accumulo/core/rpc/TraceProtocolFactory.java    |    3 +-
 .../accumulo/core/rpc/UGIAssumingTransport.java    |    8 +-
 .../core/sample/impl/SamplerConfigurationImpl.java |    9 +-
 .../accumulo/core/sample/impl/SamplerFactory.java  |   12 +-
 .../accumulo/core/security/Authorizations.java     |   24 +-
 .../accumulo/core/security/ColumnVisibility.java   |   91 +-
 .../core/security/NamespacePermission.java         |    3 +-
 .../accumulo/core/security/SystemPermission.java   |    3 +-
 .../accumulo/core/security/TablePermission.java    |    3 +-
 .../core/security/VisibilityEvaluator.java         |   29 +-
 .../core/security/VisibilityParseException.java    |    3 +-
 .../core/security/crypto/BlockedInputStream.java   |   10 +-
 .../core/security/crypto/BlockedOutputStream.java  |   19 +-
 .../CachingHDFSSecretKeyEncryptionStrategy.java    |   45 +-
 .../core/security/crypto/CryptoModule.java         |   90 +-
 .../core/security/crypto/CryptoModuleFactory.java  |   72 +-
 .../security/crypto/CryptoModuleParameters.java    |  255 ++--
 .../core/security/crypto/DefaultCryptoModule.java  |  177 ++-
 .../security/crypto/DefaultCryptoModuleUtils.java  |   18 +-
 .../NonCachingSecretKeyEncryptionStrategy.java     |   38 +-
 .../security/crypto/RFileCipherOutputStream.java   |   25 +-
 .../org/apache/accumulo/core/summary/Gatherer.java |  117 +-
 .../core/summary/SummarizerConfigurationUtil.java  |    6 +-
 .../accumulo/core/summary/SummarizerFactory.java   |    9 +-
 .../accumulo/core/summary/SummaryCollection.java   |   12 +-
 .../accumulo/core/summary/SummaryReader.java       |   45 +-
 .../accumulo/core/summary/SummarySerializer.java   |   39 +-
 .../accumulo/core/summary/SummaryWriter.java       |   21 +-
 .../apache/accumulo/core/trace/CountSampler.java   |    3 +-
 .../accumulo/core/trace/DistributedTrace.java      |   39 +-
 .../accumulo/core/trace/ProbabilitySampler.java    |    3 +-
 .../java/org/apache/accumulo/core/trace/Span.java  |    3 +-
 .../java/org/apache/accumulo/core/trace/Trace.java |    3 +-
 .../accumulo/core/trace/wrappers/TraceWrap.java    |   11 +-
 .../org/apache/accumulo/core/util/AddressUtil.java |    6 +-
 .../apache/accumulo/core/util/ByteBufferUtil.java  |   12 +-
 .../accumulo/core/util/CancelFlagFuture.java       |    6 +-
 .../org/apache/accumulo/core/util/Classpath.java   |    3 +-
 .../org/apache/accumulo/core/util/CleanUp.java     |   11 +-
 .../apache/accumulo/core/util/ComparablePair.java  |    3 +-
 .../accumulo/core/util/CompletableFutureUtil.java  |    6 +-
 .../org/apache/accumulo/core/util/CreateToken.java |   24 +-
 .../apache/accumulo/core/util/DeprecationUtil.java |   13 +-
 .../org/apache/accumulo/core/util/FastFormat.java  |    6 +-
 .../org/apache/accumulo/core/util/HostAndPort.java |   46 +-
 .../accumulo/core/util/LocalityGroupUtil.java      |   41 +-
 .../java/org/apache/accumulo/core/util/Merge.java  |   34 +-
 .../org/apache/accumulo/core/util/OpTimer.java     |   14 +-
 .../apache/accumulo/core/util/PeekingIterator.java |    3 +-
 .../accumulo/core/util/PreAllocatedArray.java      |    5 +-
 .../apache/accumulo/core/util/ServerServices.java  |    3 +-
 .../accumulo/core/util/SimpleThreadPool.java       |    3 +-
 .../accumulo/core/util/ThriftMessageUtil.java      |   13 +-
 .../accumulo/core/util/UnsynchronizedBuffer.java   |   26 +-
 .../org/apache/accumulo/core/util/Validator.java   |   15 +-
 .../accumulo/core/util/format/BinaryFormatter.java |   12 +-
 .../core/util/format/DateFormatSupplier.java       |   19 +-
 .../core/util/format/DateStringFormatter.java      |   17 +-
 .../core/util/format/DefaultFormatter.java         |    9 +-
 .../accumulo/core/util/format/FormatterConfig.java |    5 +-
 .../core/util/format/FormatterFactory.java         |    6 +-
 .../accumulo/core/util/format/HexFormatter.java    |    3 +-
 .../format/ShardedTableDistributionFormatter.java  |    7 +-
 .../util/format/StatisticsDisplayFormatter.java    |    5 +-
 .../core/util/interpret/HexScanInterpreter.java    |    5 +-
 .../core/util/interpret/ScanInterpreter.java       |    3 +-
 .../core/util/ratelimit/GuavaRateLimiter.java      |    9 +-
 .../util/ratelimit/SharedRateLimiterFactory.java   |   22 +-
 .../accumulo/core/volume/NonConfiguredVolume.java  |   21 +-
 .../org/apache/accumulo/core/volume/Volume.java    |    6 +-
 .../accumulo/core/volume/VolumeConfiguration.java  |   21 +-
 .../apache/accumulo/core/volume/VolumeImpl.java    |   12 +-
 .../apache/accumulo/core/zookeeper/ZooUtil.java    |   16 +-
 .../core/client/BatchWriterConfigTest.java         |    6 +-
 .../core/client/ClientConfigurationTest.java       |    9 +-
 .../accumulo/core/client/IteratorSettingTest.java  |    6 +-
 .../core/client/ZooKeeperInstanceTest.java         |   21 +-
 .../client/admin/DelegationTokenConfigTest.java    |    6 +-
 .../core/client/impl/ClientContextTest.java        |   15 +-
 .../accumulo/core/client/impl/NamespaceTest.java   |    3 +-
 .../core/client/impl/ScannerOptionsTest.java       |    3 +-
 .../client/impl/TableOperationsHelperTest.java     |  157 ++-
 .../core/client/impl/TableOperationsImplTest.java  |    3 +-
 .../accumulo/core/client/impl/TableTest.java       |    3 +-
 .../core/client/impl/TabletLocatorImplTest.java    |  264 +++--
 .../core/client/impl/ThriftScannerTest.java        |    6 +-
 .../core/client/impl/ThriftTransportKeyTest.java   |   89 +-
 .../client/lexicoder/BigIntegerLexicoderTest.java  |   19 +-
 .../core/client/lexicoder/DoubleLexicoderTest.java |   10 +-
 .../core/client/lexicoder/FloatLexicoderTest.java  |    9 +-
 .../client/lexicoder/IntegerLexicoderTest.java     |    4 +-
 .../core/client/lexicoder/LexicoderTest.java       |    3 +-
 .../core/client/lexicoder/LongLexicoderTest.java   |    8 +-
 .../core/client/lexicoder/PairLexicoderTest.java   |   21 +-
 .../client/lexicoder/ReverseLexicoderTest.java     |   11 +-
 .../core/client/lexicoder/ULongLexicoderTest.java  |   31 +-
 .../core/client/lexicoder/UUIDLexicoderTest.java   |    4 +-
 .../lexicoder/impl/AbstractLexicoderTest.java      |    5 +-
 .../mapred/AccumuloFileOutputFormatTest.java       |   18 +-
 .../client/mapred/AccumuloInputFormatTest.java     |   38 +-
 .../mapred/AccumuloMultiTableInputFormatTest.java  |    9 +-
 .../client/mapred/AccumuloOutputFormatTest.java    |    6 +-
 .../core/client/mapred/RangeInputSplitTest.java    |    9 +-
 .../mapreduce/AccumuloFileOutputFormatTest.java    |   21 +-
 .../client/mapreduce/AccumuloInputFormatTest.java  |   38 +-
 .../AccumuloMultiTableInputFormatTest.java         |    3 +-
 .../client/mapreduce/AccumuloOutputFormatTest.java |    6 +-
 .../core/client/mapreduce/RangeInputSplitTest.java |    9 +-
 .../client/mapreduce/impl/BatchInputSplitTest.java |    9 +-
 .../mapreduce/lib/impl/ConfiguratorBaseTest.java   |   42 +-
 .../lib/partition/RangePartitionerTest.java        |    9 +-
 .../core/client/mock/MockConnectorTest.java        |   26 +-
 .../core/client/mock/MockNamespacesTest.java       |   25 +-
 .../accumulo/core/client/mock/MockScannerTest.java |    6 +-
 .../core/client/mock/MockTableOperationsTest.java  |   34 +-
 .../core/client/mock/TestBatchScanner821.java      |    3 +-
 .../accumulo/core/client/rfile/RFileTest.java      |  134 ++-
 .../client/security/SecurityErrorCodeTest.java     |    6 +-
 .../security/tokens/DelegationTokenImplTest.java   |   21 +-
 .../client/security/tokens/KerberosTokenTest.java  |    3 +-
 .../client/summary/CountingSummarizerTest.java     |   13 +-
 .../summarizers/EntryLengthSummarizersTest.java    |   91 +-
 .../core/conf/AccumuloConfigurationTest.java       |    6 +-
 .../accumulo/core/conf/ConfigSanityCheckTest.java  |   36 +-
 .../core/conf/ConfigurationTypeHelperTest.java     |   10 +-
 .../conf/CredentialProviderFactoryShimTest.java    |   38 +-
 .../core/conf/DefaultConfigurationTest.java        |    3 +-
 .../apache/accumulo/core/conf/PropertyTest.java    |   35 +-
 .../accumulo/core/conf/PropertyTypeTest.java       |   38 +-
 .../accumulo/core/conf/SiteConfigurationTest.java  |   15 +-
 .../constraints/DefaultKeySizeConstraintTest.java  |   16 +-
 .../accumulo/core/data/ArrayByteSequenceTest.java  |    3 +-
 .../apache/accumulo/core/data/ConditionTest.java   |   12 +-
 .../core/data/ConstraintViolationSummaryTest.java  |   13 +-
 .../apache/accumulo/core/data/KeyBuilderTest.java  |   47 +-
 .../apache/accumulo/core/data/KeyExtentTest.java   |    3 +-
 .../org/apache/accumulo/core/data/KeyTest.java     |   12 +-
 .../apache/accumulo/core/data/MutationTest.java    |   41 +-
 .../org/apache/accumulo/core/data/OldMutation.java |   84 +-
 .../org/apache/accumulo/core/data/RangeTest.java   |  123 +-
 .../core/file/BloomFilterLayerLookupTest.java      |   12 +-
 .../accumulo/core/file/FileOperationsTest.java     |    3 +-
 .../blockfile/cache/BlockCacheManagerTest.java     |   12 +-
 .../file/blockfile/cache/TestCachedBlockQueue.java |   16 +-
 .../file/blockfile/cache/TestLruBlockCache.java    |   63 +-
 .../accumulo/core/file/rfile/BlockIndexTest.java   |   15 +-
 .../core/file/rfile/CreateCompatTestFile.java      |   22 +-
 .../accumulo/core/file/rfile/KeyShortenerTest.java |   78 +-
 .../core/file/rfile/MultiLevelIndexTest.java       |    6 +-
 .../core/file/rfile/MultiThreadedRFileTest.java    |   56 +-
 .../accumulo/core/file/rfile/RFileMetricsTest.java |    9 +-
 .../apache/accumulo/core/file/rfile/RFileTest.java |  295 +++--
 .../accumulo/core/file/rfile/RelativeKeyTest.java  |   24 +-
 .../core/file/rfile/RolllingStatsTest.java         |    4 +-
 .../core/file/rfile/bcfile/CompressionTest.java    |   21 +-
 .../file/streams/RateLimitedInputStreamTest.java   |   12 +-
 .../file/streams/RateLimitedOutputStreamTest.java  |    3 +-
 .../core/iterators/AggregatingIteratorTest.java    |    9 +-
 .../core/iterators/DefaultIteratorEnvironment.java |    3 +-
 .../iterators/FirstEntryInRowIteratorTest.java     |   15 +-
 .../core/iterators/FirstEntryInRowTest.java        |    9 +-
 .../accumulo/core/iterators/IteratorUtilTest.java  |   74 +-
 .../conf/AggregatorConfigurationTest.java          |   21 +-
 .../system/ColumnFamilySkippingIteratorTest.java   |   16 +-
 .../core/iterators/system/ColumnFilterTest.java    |    6 +-
 .../iterators/system/DeletingIteratorTest.java     |    3 +-
 .../core/iterators/system/MultiIteratorTest.java   |   20 +-
 .../system/SourceSwitchingIteratorTest.java        |   28 +-
 .../iterators/system/TimeSettingIteratorTest.java  |   21 +-
 .../iterators/system/VisibilityFilterTest.java     |    6 +-
 .../core/iterators/user/ColumnSliceFilterTest.java |    3 +-
 .../accumulo/core/iterators/user/CombinerTest.java |   59 +-
 .../accumulo/core/iterators/user/FilterTest.java   |   27 +-
 .../core/iterators/user/GrepIteratorTest.java      |    3 +-
 .../iterators/user/IndexedDocIteratorTest.java     |   39 +-
 .../iterators/user/IntersectingIteratorTest.java   |   39 +-
 .../core/iterators/user/LargeRowFilterTest.java    |   27 +-
 .../iterators/user/RowDeletingIteratorTest.java    |    6 +-
 .../iterators/user/RowEncodingIteratorTest.java    |    9 +-
 .../core/iterators/user/RowFilterTest.java         |   12 +-
 .../core/iterators/user/TestCfCqSlice.java         |   81 +-
 .../iterators/user/TransformingIteratorTest.java   |  102 +-
 .../iterators/user/VersioningIteratorTest.java     |    3 +-
 .../core/iterators/user/VisibilityFilterTest.java  |   15 +-
 .../user/WholeColumnFamilyIteratorTest.java        |   51 +-
 .../core/iterators/user/WholeRowIteratorTest.java  |   42 +-
 .../core/metadata/MetadataServicerTest.java        |    3 +-
 .../ReplicationConfigurationUtilTest.java          |   18 +-
 .../rpc/SaslClientDigestCallbackHandlerTest.java   |    5 +-
 .../core/rpc/SaslConnectionParamsTest.java         |  121 +-
 .../accumulo/core/rpc/TTimeoutTransportTest.java   |   10 +-
 .../AuthenticationTokenIdentifierTest.java         |    6 +-
 .../core/security/AuthenticationTokenTest.java     |    6 +-
 .../accumulo/core/security/AuthorizationsTest.java |    3 +-
 .../core/security/ColumnVisibilityTest.java        |    6 +-
 .../accumulo/core/security/CredentialsTest.java    |   19 +-
 .../core/security/NamespacePermissionsTest.java    |    3 +-
 .../core/security/VisibilityConstraintTest.java    |    3 +-
 .../core/security/VisibilityEvaluatorTest.java     |   33 +-
 .../core/security/crypto/BlockedIOStreamTest.java  |    3 +-
 .../accumulo/core/security/crypto/CryptoTest.java  |   99 +-
 .../accumulo/core/util/ByteBufferUtilTest.java     |    6 +-
 .../core/util/CompletableFutureUtilTest.java       |    6 +-
 .../accumulo/core/util/LocalityGroupUtilTest.java  |    3 +-
 .../org/apache/accumulo/core/util/MergeTest.java   |   12 +-
 .../org/apache/accumulo/core/util/OpTimerTest.java |   15 +-
 .../org/apache/accumulo/core/util/PairTest.java    |    3 +-
 .../apache/accumulo/core/util/PartitionerTest.java |    3 +-
 .../accumulo/core/util/PreAllocatedArrayTest.java  |    3 +-
 .../core/util/format/DateFormatSupplierTest.java   |    6 +-
 .../core/util/format/DefaultFormatterTest.java     |    9 +-
 .../core/util/format/FormatterFactoryTest.java     |    3 +-
 .../apache/accumulo/fate/AcceptableException.java  |   12 +-
 .../java/org/apache/accumulo/fate/AdminUtil.java   |   56 +-
 .../java/org/apache/accumulo/fate/AgeOffStore.java |    6 +-
 .../main/java/org/apache/accumulo/fate/Fate.java   |   21 +-
 .../org/apache/accumulo/fate/ReadOnlyRepo.java     |    4 +-
 .../org/apache/accumulo/fate/ReadOnlyStore.java    |    6 +-
 .../org/apache/accumulo/fate/ReadOnlyTStore.java   |   19 +-
 .../main/java/org/apache/accumulo/fate/TStore.java |    7 +-
 .../java/org/apache/accumulo/fate/ZooStore.java    |   27 +-
 .../org/apache/accumulo/fate/util/AddressUtil.java |   23 +-
 .../apache/accumulo/fate/util/LoggingRunnable.java |    9 +-
 .../java/org/apache/accumulo/fate/util/Retry.java  |   47 +-
 .../apache/accumulo/fate/util/UtilWaitThread.java  |    8 +-
 .../fate/zookeeper/DistributedReadWriteLock.java   |   20 +-
 .../apache/accumulo/fate/zookeeper/IZooReader.java |    9 +-
 .../accumulo/fate/zookeeper/IZooReaderWriter.java  |   24 +-
 .../apache/accumulo/fate/zookeeper/ZooCache.java   |   63 +-
 .../accumulo/fate/zookeeper/ZooCacheFactory.java   |    7 +-
 .../apache/accumulo/fate/zookeeper/ZooLock.java    |   49 +-
 .../accumulo/fate/zookeeper/ZooQueueLock.java      |    3 +-
 .../apache/accumulo/fate/zookeeper/ZooReader.java  |   42 +-
 .../accumulo/fate/zookeeper/ZooReaderWriter.java   |   43 +-
 .../accumulo/fate/zookeeper/ZooReservation.java    |   12 +-
 .../apache/accumulo/fate/zookeeper/ZooSession.java |   18 +-
 .../apache/accumulo/fate/zookeeper/ZooUtil.java    |   72 +-
 .../org/apache/accumulo/fate/AgeOffStoreTest.java  |   12 +-
 .../apache/accumulo/fate/ReadOnlyStoreTest.java    |    6 +-
 .../java/org/apache/accumulo/fate/SimpleStore.java |    6 +-
 .../apache/accumulo/fate/util/AddressUtilTest.java |   15 +-
 .../org/apache/accumulo/fate/util/RetryTest.java   |   29 +-
 .../accumulo/fate/zookeeper/ZooCacheTest.java      |   24 +-
 .../zookeeper/ZooKeeperConnectionInfoTest.java     |    7 +-
 .../fate/zookeeper/ZooReaderWriterTest.java        |   17 +-
 .../iteratortest/IteratorTestCaseFinder.java       |    9 +-
 .../accumulo/iteratortest/IteratorTestInput.java   |   26 +-
 .../accumulo/iteratortest/IteratorTestOutput.java  |   11 +-
 .../accumulo/iteratortest/IteratorTestReport.java  |    6 +-
 .../accumulo/iteratortest/IteratorTestRunner.java  |   14 +-
 .../accumulo/iteratortest/IteratorTestUtil.java    |    3 +-
 .../iteratortest/SimpleKVReusingIterator.java      |    9 +-
 .../environments/SimpleIteratorEnvironment.java    |    3 +-
 .../junit4/BaseJUnit4IteratorTest.java             |   12 +-
 .../testcases/InstantiationTestCase.java           |    3 +-
 .../testcases/IsolatedDeepCopiesTestCase.java      |   24 +-
 .../iteratortest/testcases/IteratorTestCase.java   |    7 +-
 .../testcases/MultipleHasTopCalls.java             |   13 +-
 .../testcases/OutputVerifyingTestCase.java         |    3 +-
 .../iteratortest/testcases/ReSeekTestCase.java     |   20 +-
 .../iteratortest/testcases/YieldingTestCase.java   |   24 +-
 .../iteratortest/framework/JUnitFrameworkTest.java |    3 +-
 .../maven/plugin/AbstractAccumuloMojo.java         |    6 +-
 .../apache/accumulo/maven/plugin/StartMojo.java    |   24 +-
 .../org/apache/accumulo/maven/plugin/StopMojo.java |    6 +-
 .../apache/accumulo/cluster/AccumuloCluster.java   |    6 +-
 .../apache/accumulo/cluster/ClusterControl.java    |    9 +-
 .../org/apache/accumulo/cluster/ClusterUser.java   |    6 +-
 .../org/apache/accumulo/cluster/ClusterUsers.java  |    3 +-
 .../org/apache/accumulo/cluster/RemoteShell.java   |   12 +-
 .../accumulo/cluster/RemoteShellOptions.java       |    5 +-
 .../standalone/StandaloneAccumuloCluster.java      |   23 +-
 .../standalone/StandaloneClusterControl.java       |   54 +-
 .../apache/accumulo/minicluster/MemoryUnit.java    |    5 +-
 .../accumulo/minicluster/MiniAccumuloCluster.java  |   18 +-
 .../accumulo/minicluster/MiniAccumuloConfig.java   |   18 +-
 .../accumulo/minicluster/MiniAccumuloInstance.java |    7 +-
 .../accumulo/minicluster/MiniAccumuloRunner.java   |   64 +-
 .../apache/accumulo/minicluster/ServerType.java    |    7 +-
 .../impl/MiniAccumuloClusterControl.java           |   16 +-
 .../minicluster/impl/MiniAccumuloClusterImpl.java  |  128 +-
 .../minicluster/impl/MiniAccumuloConfigImpl.java   |   76 +-
 .../minicluster/impl/ProcessReference.java         |    3 +-
 .../minicluster/impl/ZooKeeperBindException.java   |    3 +-
 .../standalone/StandaloneAccumuloClusterTest.java  |    6 +-
 .../standalone/StandaloneClusterControlTest.java   |   15 +-
 .../MiniAccumuloClusterExistingZooKeepersTest.java |   13 +-
 .../MiniAccumuloClusterStartStopTest.java          |    3 +-
 .../minicluster/MiniAccumuloClusterTest.java       |   20 +-
 .../minicluster/impl/CleanShutdownMacTest.java     |    6 +-
 .../impl/MiniAccumuloClusterImplTest.java          |   18 +-
 .../impl/MiniAccumuloConfigImplTest.java           |   15 +-
 pom.xml                                            |   50 +-
 .../main/java/org/apache/accumulo/proxy/Proxy.java |   59 +-
 .../org/apache/accumulo/proxy/ProxyServer.java     |  803 ++++++++-----
 .../main/java/org/apache/accumulo/proxy/Util.java  |   15 +-
 .../org/apache/accumulo/proxy/ProxyServerTest.java |    6 +-
 .../java/org/apache/accumulo/server/Accumulo.java  |   68 +-
 .../accumulo/server/AccumuloServerContext.java     |   27 +-
 .../accumulo/server/GarbageCollectionLogger.java   |    9 +-
 .../accumulo/server/HighlyAvailableService.java    |    4 +-
 .../apache/accumulo/server/ServerConstants.java    |   44 +-
 .../org/apache/accumulo/server/ServerOpts.java     |    3 +-
 .../accumulo/server/client/BulkImporter.java       |  172 ++-
 .../server/client/ClientServiceHandler.java        |  181 +--
 .../accumulo/server/client/HdfsZooInstance.java    |   27 +-
 .../accumulo/server/conf/NamespaceConfWatcher.java |   13 +-
 .../server/conf/NamespaceConfiguration.java        |   12 +-
 .../server/conf/ServerConfigurationFactory.java    |   18 +-
 .../accumulo/server/conf/TableConfWatcher.java     |   13 +-
 .../accumulo/server/conf/TableConfiguration.java   |   15 +-
 .../server/conf/ZooCachePropertyAccessor.java      |   15 +-
 .../accumulo/server/conf/ZooConfiguration.java     |    6 +-
 .../server/conf/ZooConfigurationFactory.java       |   15 +-
 .../server/constraints/MetadataConstraints.java    |   60 +-
 .../accumulo/server/data/ServerColumnUpdate.java   |    3 +-
 .../accumulo/server/data/ServerMutation.java       |    6 +-
 .../org/apache/accumulo/server/fs/FileRef.java     |    8 +-
 .../accumulo/server/fs/PerTableVolumeChooser.java  |   66 +-
 .../accumulo/server/fs/PreferredVolumeChooser.java |   61 +-
 .../accumulo/server/fs/RandomVolumeChooser.java    |    3 +-
 .../org/apache/accumulo/server/fs/ViewFSUtils.java |    6 +-
 .../apache/accumulo/server/fs/VolumeChooser.java   |   12 +-
 .../apache/accumulo/server/fs/VolumeManager.java   |   18 +-
 .../accumulo/server/fs/VolumeManagerImpl.java      |   63 +-
 .../org/apache/accumulo/server/fs/VolumeUtil.java  |   56 +-
 .../apache/accumulo/server/init/Initialize.java    |  350 ++++--
 .../server/iterators/MetadataBulkLoadFilter.java   |    3 +-
 .../apache/accumulo/server/log/SortedLogState.java |    5 +-
 .../accumulo/server/log/WalStateManager.java       |   44 +-
 .../accumulo/server/master/LiveTServerSet.java     |   81 +-
 .../master/balancer/ChaoticLoadBalancer.java       |   22 +-
 .../master/balancer/DefaultLoadBalancer.java       |   33 +-
 .../server/master/balancer/GroupBalancer.java      |   94 +-
 .../balancer/HostRegexTableLoadBalancer.java       |  126 +-
 .../server/master/balancer/RegexGroupBalancer.java |   35 +-
 .../server/master/balancer/TableLoadBalancer.java  |   25 +-
 .../server/master/balancer/TabletBalancer.java     |   86 +-
 .../server/master/recovery/HadoopLogCloser.java    |    3 +-
 .../accumulo/server/master/state/CurrentState.java |    3 +-
 .../accumulo/server/master/state/MergeInfo.java    |    3 +-
 .../accumulo/server/master/state/MergeState.java   |    6 +-
 .../server/master/state/MetaDataStateStore.java    |   21 +-
 .../server/master/state/MetaDataTableScanner.java  |   20 +-
 .../server/master/state/RootTabletStateStore.java  |    3 +-
 .../server/master/state/TServerInstance.java       |    6 +-
 .../server/master/state/TabletLocationState.java   |   26 +-
 .../master/state/TabletStateChangeIterator.java    |   15 +-
 .../server/master/state/TabletStateStore.java      |   46 +-
 .../server/master/state/ZooTabletStateStore.java   |   21 +-
 .../master/tableOps/UserCompactionConfig.java      |    3 +-
 .../server/metrics/AbstractMetricsImpl.java        |   16 +-
 .../server/metrics/MetricsConfiguration.java       |   14 +-
 .../server/metrics/MetricsSystemHelper.java        |    3 +-
 .../accumulo/server/metrics/ThriftMetrics.java     |    3 +-
 .../accumulo/server/monitor/DedupedLogEvent.java   |    6 +-
 .../apache/accumulo/server/monitor/LogService.java |    6 +-
 .../accumulo/server/problems/ProblemReport.java    |   27 +-
 .../server/problems/ProblemReportingIterator.java  |   19 +-
 .../accumulo/server/problems/ProblemReports.java   |   33 +-
 .../DistributedWorkQueueWorkAssignerHelper.java    |   22 +-
 .../replication/PrintReplicationRecords.java       |    6 +-
 .../accumulo/server/replication/ReplicaSystem.java |    6 +-
 .../server/replication/ReplicaSystemFactory.java   |   15 +-
 .../server/replication/ReplicaSystemHelper.java    |   10 +-
 .../server/replication/ReplicationUtil.java        |   33 +-
 .../server/replication/StatusCombiner.java         |   20 +-
 .../server/replication/StatusFormatter.java        |   10 +-
 .../accumulo/server/replication/StatusUtil.java    |   15 +-
 .../replication/ZooKeeperInitialization.java       |    6 +-
 .../server/rpc/ClientInfoProcessorFactory.java     |    3 +-
 .../server/rpc/CustomNonBlockingServer.java        |   25 +-
 .../HighlyAvailableServiceInvocationHandler.java   |    8 +-
 .../server/rpc/HighlyAvailableServiceWrapper.java  |   11 +-
 .../org/apache/accumulo/server/rpc/RpcWrapper.java |   30 +-
 .../server/rpc/SaslServerConnectionParams.java     |    9 +-
 .../rpc/SaslServerDigestCallbackHandler.java       |   12 +-
 .../rpc/TCredentialsUpdatingInvocationHandler.java |   65 +-
 .../server/rpc/TCredentialsUpdatingWrapper.java    |   13 +-
 .../apache/accumulo/server/rpc/TServerUtils.java   |  281 +++--
 .../accumulo/server/rpc/ThriftServerType.java      |   10 +-
 .../apache/accumulo/server/rpc/TimedProcessor.java |    6 +-
 .../accumulo/server/rpc/UGIAssumingProcessor.java  |    6 +-
 .../server/security/AuditedSecurityOperation.java  |  272 +++--
 .../server/security/SecurityOperation.java         |  391 ++++---
 .../accumulo/server/security/SecurityUtil.java     |   36 +-
 .../server/security/SystemCredentials.java         |   15 +-
 .../server/security/UserImpersonation.java         |   37 +-
 .../security/delegation/AuthenticationKey.java     |   12 +-
 .../delegation/AuthenticationTokenKeyManager.java  |   21 +-
 .../AuthenticationTokenSecretManager.java          |   36 +-
 .../ZooAuthenticationKeyDistributor.java           |   36 +-
 .../delegation/ZooAuthenticationKeyWatcher.java    |   24 +-
 .../server/security/handler/Authenticator.java     |   11 +-
 .../server/security/handler/Authorizor.java        |   14 +-
 .../security/handler/InsecureAuthenticator.java    |   14 +-
 .../security/handler/InsecurePermHandler.java      |   54 +-
 .../security/handler/KerberosAuthenticator.java    |   30 +-
 .../security/handler/KerberosAuthorizor.java       |   24 +-
 .../handler/KerberosPermissionHandler.java         |   91 +-
 .../server/security/handler/PermissionHandler.java |   62 +-
 .../server/security/handler/ZKAuthenticator.java   |   28 +-
 .../server/security/handler/ZKAuthorizor.java      |   19 +-
 .../server/security/handler/ZKPermHandler.java     |  135 ++-
 .../server/security/handler/ZKSecurityTool.java    |   16 +-
 .../accumulo/server/tables/TableManager.java       |  160 +--
 .../server/tablets/UniqueNameAllocator.java        |   26 +-
 .../tabletserver/LargestFirstMemoryManager.java    |   37 +-
 .../server/tabletserver/MemoryManager.java         |   14 +-
 .../accumulo/server/util/AccumuloStatus.java       |    3 +-
 .../org/apache/accumulo/server/util/Admin.java     |   96 +-
 .../apache/accumulo/server/util/ChangeSecret.java  |   28 +-
 .../server/util/CheckForMetadataProblems.java      |   21 +-
 .../accumulo/server/util/CleanZookeeper.java       |   10 +-
 .../apache/accumulo/server/util/DefaultMap.java    |    3 +-
 .../apache/accumulo/server/util/DumpZookeeper.java |   12 +-
 .../accumulo/server/util/FileSystemMonitor.java    |    6 +-
 .../org/apache/accumulo/server/util/FileUtil.java  |  147 ++-
 .../accumulo/server/util/FindOfflineTablets.java   |   21 +-
 .../apache/accumulo/server/util/ListInstances.java |   23 +-
 .../accumulo/server/util/ListVolumesUsed.java      |   15 +-
 .../apache/accumulo/server/util/LocalityCheck.java |    9 +-
 .../accumulo/server/util/LoginProperties.java      |   12 +-
 .../accumulo/server/util/MasterMetadataUtil.java   |   95 +-
 .../accumulo/server/util/MetadataTableUtil.java    |  285 +++--
 .../accumulo/server/util/NamespacePropUtil.java    |   21 +-
 .../apache/accumulo/server/util/RandomWriter.java  |    6 +-
 .../accumulo/server/util/RandomizeVolumes.java     |   14 +-
 .../server/util/RemoveEntriesForMissingFiles.java  |   17 +-
 .../accumulo/server/util/ReplicationTableUtil.java |   30 +-
 .../accumulo/server/util/RestoreZookeeper.java     |    6 +-
 .../accumulo/server/util/SendLogToChainsaw.java    |   32 +-
 .../accumulo/server/util/SystemPropUtil.java       |   27 +-
 .../accumulo/server/util/TableDiskUsage.java       |   14 +-
 .../apache/accumulo/server/util/TableInfoUtil.java |    3 +-
 .../apache/accumulo/server/util/TablePropUtil.java |   18 +-
 .../accumulo/server/util/TabletIterator.java       |   32 +-
 .../accumulo/server/util/TabletServerLocks.java    |    3 +-
 .../server/util/VerifyTabletAssignments.java       |   22 +-
 .../apache/accumulo/server/util/ZooKeeperMain.java |   12 +-
 .../org/apache/accumulo/server/util/ZooZap.java    |    6 +-
 .../server/util/time/BaseRelativeTime.java         |    3 +-
 .../accumulo/server/util/time/SimpleTimer.java     |   21 +-
 .../server/zookeeper/DistributedWorkQueue.java     |   21 +-
 .../server/zookeeper/TransactionWatcher.java       |   21 +-
 .../apache/accumulo/server/zookeeper/ZooLock.java  |    3 +-
 .../accumulo/server/zookeeper/ZooQueueLock.java    |    3 +-
 .../accumulo/server/zookeeper/ZooReaderWriter.java |    3 +-
 .../server/zookeeper/ZooReaderWriterFactory.java   |    6 +-
 .../accumulo/server/AccumuloServerContextTest.java |   42 +-
 .../org/apache/accumulo/server/AccumuloTest.java   |    6 +-
 .../accumulo/server/ServerConstantsTest.java       |   51 +-
 .../org/apache/accumulo/server/ServerOptsTest.java |    3 +-
 .../accumulo/server/client/BulkImporterTest.java   |   52 +-
 .../server/conf/NamespaceConfigurationTest.java    |   27 +-
 .../conf/ServerConfigurationFactoryTest.java       |    3 +-
 .../server/conf/TableConfigurationTest.java        |   24 +-
 .../constraints/MetadataConstraintsTest.java       |   72 +-
 .../org/apache/accumulo/server/fs/FileRefTest.java |   72 +-
 .../apache/accumulo/server/fs/FileTypeTest.java    |   75 +-
 .../server/fs/PerTableVolumeChooserTest.java       |   33 +-
 .../server/fs/PreferredVolumeChooserTest.java      |   33 +-
 .../apache/accumulo/server/fs/ViewFSUtilsTest.java |   41 +-
 .../accumulo/server/fs/VolumeManagerImplTest.java  |   12 +-
 .../apache/accumulo/server/fs/VolumeUtilTest.java  |  153 ++-
 .../accumulo/server/init/InitializeTest.java       |   12 +-
 .../iterators/MetadataBulkLoadFilterTest.java      |    6 +-
 .../accumulo/server/master/LiveTServerSetTest.java |    6 +-
 .../BaseHostRegexTableLoadBalancerTest.java        |   96 +-
 .../master/balancer/ChaoticLoadBalancerTest.java   |   18 +-
 .../master/balancer/DefaultLoadBalancerTest.java   |   29 +-
 .../server/master/balancer/GroupBalancerTest.java  |   45 +-
 ...tRegexTableLoadBalancerReconfigurationTest.java |   24 +-
 .../balancer/HostRegexTableLoadBalancerTest.java   |   80 +-
 .../master/balancer/TableLoadBalancerTest.java     |   29 +-
 .../server/master/state/MergeInfoTest.java         |    3 +-
 .../server/problems/ProblemReportTest.java         |   36 +-
 .../server/replication/ReplicationUtilTest.java    |    6 +-
 .../server/replication/StatusCombinerTest.java     |  114 +-
 .../server/replication/StatusUtilTest.java         |   15 +-
 .../replication/ZooKeeperInitializationTest.java   |   12 +-
 .../server/rpc/SaslDigestCallbackHandlerTest.java  |   15 +-
 .../server/rpc/SaslServerConnectionParamsTest.java |    3 +-
 .../TCredentialsUpdatingInvocationHandlerTest.java |   63 +-
 .../accumulo/server/rpc/ThriftServerTypeTest.java  |    3 +-
 .../server/security/SystemCredentialsTest.java     |   27 +-
 .../server/security/UserImpersonationTest.java     |   18 +-
 .../security/delegation/AuthenticationKeyTest.java |    9 +-
 .../AuthenticationTokenKeyManagerTest.java         |   32 +-
 .../AuthenticationTokenSecretManagerTest.java      |   99 +-
 .../ZooAuthenticationKeyDistributorTest.java       |   70 +-
 .../ZooAuthenticationKeyWatcherTest.java           |   68 +-
 .../security/handler/ZKAuthenticatorTest.java      |    6 +-
 .../IllegalTableTransitionExceptionTest.java       |    6 +-
 .../org/apache/accumulo/server/util/AdminTest.java |   23 +-
 .../accumulo/server/util/DefaultMapTest.java       |    3 +-
 .../server/util/FileSystemMonitorTest.java         |   39 +-
 .../apache/accumulo/server/util/FileUtilTest.java  |   15 +-
 .../server/util/ReplicationTableUtilTest.java      |   21 +-
 .../accumulo/server/util/TServerUtilsTest.java     |   47 +-
 .../server/util/time/BaseRelativeTimeTest.java     |    3 +-
 .../accumulo/gc/GarbageCollectWriteAheadLogs.java  |   43 +-
 .../accumulo/gc/GarbageCollectionAlgorithm.java    |   60 +-
 .../accumulo/gc/GarbageCollectionEnvironment.java  |   37 +-
 .../apache/accumulo/gc/SimpleGarbageCollector.java |  108 +-
 .../replication/CloseWriteAheadLogReferences.java  |   30 +-
 .../gc/GarbageCollectWriteAheadLogsTest.java       |   60 +-
 .../apache/accumulo/gc/GarbageCollectionTest.java  |   47 +-
 .../accumulo/gc/SimpleGarbageCollectorTest.java    |   30 +-
 .../apache/accumulo/master/FateServiceHandler.java |  248 ++--
 .../java/org/apache/accumulo/master/Master.java    |  334 ++++--
 .../master/MasterClientServiceHandler.java         |  150 ++-
 .../org/apache/accumulo/master/MasterTime.java     |   21 +-
 .../apache/accumulo/master/TabletGroupWatcher.java |  145 ++-
 .../master/metrics/Metrics2ReplicationMetrics.java |   23 +-
 .../master/metrics/ReplicationMetrics.java         |    4 +-
 .../master/metrics/ReplicationMetricsMBean.java    |   14 +-
 .../accumulo/master/recovery/RecoveryManager.java  |   35 +-
 .../DistributedWorkQueueWorkAssigner.java          |   30 +-
 .../master/replication/FinishedWorkUpdater.java    |   30 +-
 .../replication/MasterReplicationCoordinator.java  |   23 +-
 .../RemoveCompleteReplicationRecords.java          |   29 +-
 .../master/replication/ReplicationDriver.java      |    6 +-
 .../master/replication/SequentialWorkAssigner.java |   30 +-
 .../accumulo/master/replication/StatusMaker.java   |   34 +-
 .../master/replication/UnorderedWorkAssigner.java  |   26 +-
 .../accumulo/master/replication/WorkMaker.java     |    9 +-
 .../apache/accumulo/master/state/MergeStats.java   |   51 +-
 .../apache/accumulo/master/state/SetGoalState.java |    8 +-
 .../accumulo/master/tableOps/BulkImport.java       |   35 +-
 .../master/tableOps/CancelCompactions.java         |    7 +-
 .../accumulo/master/tableOps/ChangeTableState.java |    6 +-
 .../apache/accumulo/master/tableOps/ChooseDir.java |    6 +-
 .../apache/accumulo/master/tableOps/CleanUp.java   |   27 +-
 .../master/tableOps/CleanUpBulkImport.java         |    3 +-
 .../accumulo/master/tableOps/CloneMetadata.java    |   14 +-
 .../accumulo/master/tableOps/ClonePermissions.java |    9 +-
 .../accumulo/master/tableOps/CloneTable.java       |   10 +-
 .../accumulo/master/tableOps/CloneZookeeper.java   |    9 +-
 .../accumulo/master/tableOps/CompactRange.java     |   35 +-
 .../accumulo/master/tableOps/CompactionDriver.java |   26 +-
 .../accumulo/master/tableOps/CopyFailed.java       |   16 +-
 .../accumulo/master/tableOps/CreateImportDir.java  |    3 +-
 .../accumulo/master/tableOps/CreateNamespace.java  |    3 +-
 .../accumulo/master/tableOps/CreateTable.java      |    3 +-
 .../accumulo/master/tableOps/DeleteTable.java      |    3 +-
 .../accumulo/master/tableOps/ExportTable.java      |    3 +-
 .../accumulo/master/tableOps/FinishCloneTable.java |    9 +-
 .../master/tableOps/FinishCreateNamespace.java     |    3 +-
 .../master/tableOps/FinishCreateTable.java         |    3 +-
 .../master/tableOps/FinishImportTable.java         |    3 +-
 .../master/tableOps/ImportPopulateZookeeper.java   |   16 +-
 .../master/tableOps/ImportSetupPermissions.java    |    6 +-
 .../accumulo/master/tableOps/ImportTable.java      |    9 +-
 .../apache/accumulo/master/tableOps/LoadFiles.java |   23 +-
 .../master/tableOps/MapImportFileNames.java        |    5 +-
 .../master/tableOps/MoveExportedFiles.java         |   10 +-
 .../accumulo/master/tableOps/PopulateMetadata.java |    6 +-
 .../master/tableOps/PopulateMetadataTable.java     |   48 +-
 .../master/tableOps/PopulateZookeeper.java         |    6 +-
 .../tableOps/PopulateZookeeperWithNamespace.java   |   12 +-
 .../accumulo/master/tableOps/RenameNamespace.java  |   10 +-
 .../accumulo/master/tableOps/RenameTable.java      |   21 +-
 .../master/tableOps/SetupNamespacePermissions.java |    3 +-
 .../accumulo/master/tableOps/SetupPermissions.java |    6 +-
 .../accumulo/master/tableOps/TableRangeOp.java     |   13 +-
 .../accumulo/master/tableOps/TableRangeOpWait.java |   18 +-
 .../org/apache/accumulo/master/tableOps/Utils.java |   65 +-
 .../accumulo/master/tableOps/WriteExportFiles.java |   64 +-
 .../master/tserverOps/ShutdownTServer.java         |    6 +-
 .../org/apache/accumulo/master/util/FateAdmin.java |    5 +-
 .../accumulo/master/util/TableValidators.java      |   11 +-
 .../metrics/Metrics2ReplicationMetricsTest.java    |    3 +-
 ...DistributedWorkQueueWorkAssignerHelperTest.java |    3 +-
 .../replication/SequentialWorkAssignerTest.java    |   26 +-
 .../replication/UnorderedWorkAssignerTest.java     |   20 +-
 .../accumulo/master/replication/WorkMakerTest.java |    6 +-
 .../master/state/RootTabletStateStoreTest.java     |    3 +-
 .../accumulo/master/tableOps/ImportTableTest.java  |    9 +-
 .../apache/accumulo/monitor/EmbeddedWebServer.java |    9 +-
 .../java/org/apache/accumulo/monitor/Monitor.java  |  100 +-
 .../apache/accumulo/monitor/ZooKeeperStatus.java   |    6 +-
 .../apache/accumulo/monitor/rest/XMLResource.java  |    3 +-
 .../rest/bulkImports/BulkImportResource.java       |   10 +-
 .../TabletServerBulkImportInformation.java         |    3 +-
 .../accumulo/monitor/rest/logs/LogResource.java    |    7 +-
 .../monitor/rest/master/MasterInformation.java     |   11 +-
 .../monitor/rest/master/MasterResource.java        |   23 +-
 .../rest/problems/ProblemDetailInformation.java    |    3 +-
 .../rest/problems/ProblemSummaryInformation.java   |    3 +-
 .../monitor/rest/problems/ProblemsResource.java    |   43 +-
 .../rest/replication/ReplicationInformation.java   |    3 +-
 .../rest/replication/ReplicationResource.java      |   18 +-
 .../rest/statistics/StatisticsResource.java        |    3 +-
 .../monitor/rest/status/StatusInformation.java     |    3 +-
 .../monitor/rest/status/StatusResource.java        |    8 +-
 .../monitor/rest/tables/TableInformation.java      |    3 +-
 .../monitor/rest/tables/TablesResource.java        |   18 +-
 .../monitor/rest/trace/TraceInformation.java       |    3 +-
 .../monitor/rest/trace/TracesResource.java         |   31 +-
 .../rest/tservers/AllTimeTabletResults.java        |    4 +-
 .../monitor/rest/tservers/CurrentOperations.java   |    5 +-
 .../rest/tservers/CurrentTabletResults.java        |    3 +-
 .../accumulo/monitor/rest/tservers/ServerStat.java |    6 +-
 .../tservers/TabletServerDetailInformation.java    |    3 +-
 .../rest/tservers/TabletServerResource.java        |   89 +-
 .../monitor/rest/tservers/TabletServerSummary.java |    3 +-
 .../tservers/TabletServerWithTableInformation.java |    3 +-
 .../monitor/util/AccumuloMonitorAppender.java      |   21 +-
 .../org/apache/accumulo/monitor/view/WebViews.java |   36 +-
 .../accumulo/monitor/ShowTraceLinkTypeTest.java    |    3 +-
 .../accumulo/monitor/ZooKeeperStatusTest.java      |    3 +-
 .../org/apache/accumulo/monitor/it/WebViewsIT.java |   32 +-
 .../rest/tservers/TabletServerInformationTest.java |    6 +-
 .../monitor/util/AccumuloMonitorAppenderTest.java  |   43 +-
 .../monitor/util/ParameterValidatorTest.java       |    9 +-
 .../apache/accumulo/tracer/AsyncSpanReceiver.java  |    9 +-
 .../apache/accumulo/tracer/SendSpansViaThrift.java |    3 +-
 .../java/org/apache/accumulo/tracer/SpanTree.java  |    3 +-
 .../java/org/apache/accumulo/tracer/TraceDump.java |   19 +-
 .../org/apache/accumulo/tracer/TraceFormatter.java |    6 +-
 .../org/apache/accumulo/tracer/TraceServer.java    |   81 +-
 .../apache/accumulo/tracer/TraceTableStats.java    |   17 +-
 .../org/apache/accumulo/tracer/ZooTraceClient.java |    6 +-
 .../accumulo/tracer/AsyncSpanReceiverTest.java     |    9 +-
 .../org/apache/accumulo/tracer/TracerTest.java     |   16 +-
 .../apache/accumulo/tracer/ZooTraceClientTest.java |   12 +-
 .../accumulo/tserver/ActiveAssignmentRunnable.java |    9 +-
 .../apache/accumulo/tserver/CompactionQueue.java   |    6 +-
 .../accumulo/tserver/ConditionCheckerContext.java  |   30 +-
 .../accumulo/tserver/ConditionalMutationSet.java   |   15 +-
 .../org/apache/accumulo/tserver/FileManager.java   |   60 +-
 .../org/apache/accumulo/tserver/InMemoryMap.java   |   71 +-
 .../java/org/apache/accumulo/tserver/MemKey.java   |    3 +-
 .../accumulo/tserver/MemKeyConversionIterator.java |    3 +-
 .../java/org/apache/accumulo/tserver/MemValue.java |    3 +-
 .../org/apache/accumulo/tserver/NativeMap.java     |   94 +-
 .../java/org/apache/accumulo/tserver/RowLocks.java |    6 +-
 .../tserver/TConstraintViolationException.java     |    3 +-
 .../tserver/TabletIteratorEnvironment.java         |   29 +-
 .../org/apache/accumulo/tserver/TabletServer.java  |  787 ++++++++-----
 .../tserver/TabletServerResourceManager.java       |  120 +-
 .../accumulo/tserver/TservConstraintEnv.java       |    4 +-
 .../org/apache/accumulo/tserver/WriteTracker.java  |    7 +-
 .../tserver/compaction/CompactionPlan.java         |    7 +-
 .../tserver/compaction/CompactionStrategy.java     |   49 +-
 .../compaction/DefaultCompactionStrategy.java      |    3 +-
 .../compaction/EverythingCompactionStrategy.java   |    3 +-
 .../tserver/compaction/MajorCompactionReason.java  |    5 +-
 .../tserver/compaction/MajorCompactionRequest.java |   68 +-
 .../compaction/TwoTierCompactionStrategy.java      |   27 +-
 .../strategies/ConfigurableCompactionStrategy.java |   46 +-
 .../TooManyDeletesCompactionStrategy.java          |   69 +-
 .../tserver/constraints/ConstraintChecker.java     |   15 +-
 .../tserver/data/ServerConditionalMutation.java    |    3 +-
 .../org/apache/accumulo/tserver/log/DfsLogger.java |  103 +-
 .../org/apache/accumulo/tserver/log/LogSorter.java |   18 +-
 .../apache/accumulo/tserver/log/MultiReader.java   |    8 +-
 .../accumulo/tserver/log/SortedLogRecovery.java    |   38 +-
 .../accumulo/tserver/log/TabletServerLogger.java   |   69 +-
 .../apache/accumulo/tserver/logger/LogEvents.java  |    7 +-
 .../apache/accumulo/tserver/logger/LogFileKey.java |    6 +-
 .../accumulo/tserver/logger/LogFileValue.java      |    8 +-
 .../apache/accumulo/tserver/logger/LogReader.java  |    6 +-
 .../tserver/mastermessage/MasterMessage.java       |    3 +-
 .../tserver/mastermessage/SplitReportMessage.java  |    6 +-
 .../tserver/mastermessage/TabletStatusMessage.java |    3 +-
 .../metrics/Metrics2TabletServerMetrics.java       |   46 +-
 .../metrics/Metrics2TabletServerMinCMetrics.java   |    6 +-
 .../metrics/Metrics2TabletServerScanMetrics.java   |    6 +-
 .../metrics/Metrics2TabletServerUpdateMetrics.java |   30 +-
 .../tserver/metrics/TabletServerMBeanImpl.java     |    4 +-
 .../metrics/TabletServerMetricsFactory.java        |    3 +-
 .../tserver/metrics/TabletServerMinCMetrics.java   |   10 +-
 .../tserver/metrics/TabletServerScanMetrics.java   |   10 +-
 .../tserver/metrics/TabletServerUpdateMetrics.java |   10 +-
 .../tserver/replication/AccumuloReplicaSystem.java |  209 ++--
 .../BatchWriterReplicationReplayer.java            |   41 +-
 .../tserver/replication/ReplicationProcessor.java  |   21 +-
 .../replication/ReplicationServicerHandler.java    |   23 +-
 .../tserver/replication/ReplicationWorker.java     |    9 +-
 .../apache/accumulo/tserver/scan/LookupTask.java   |   24 +-
 .../accumulo/tserver/scan/NextBatchTask.java       |   17 +-
 .../org/apache/accumulo/tserver/scan/ScanTask.java |    9 +-
 .../tserver/session/ConditionalSession.java        |    3 +-
 .../accumulo/tserver/session/MultiScanSession.java |    6 +-
 .../accumulo/tserver/session/ScanSession.java      |    5 +-
 .../accumulo/tserver/session/SessionManager.java   |   32 +-
 .../tserver/tablet/BulkImportCacheCleaner.java     |    3 +-
 .../accumulo/tserver/tablet/CompactionInfo.java    |    9 +-
 .../accumulo/tserver/tablet/CompactionRunner.java  |    3 +-
 .../accumulo/tserver/tablet/CompactionWatcher.java |   14 +-
 .../apache/accumulo/tserver/tablet/Compactor.java  |   51 +-
 .../accumulo/tserver/tablet/CountingIterator.java  |    3 +-
 .../accumulo/tserver/tablet/DatafileManager.java   |  114 +-
 .../tserver/tablet/MinorCompactionTask.java        |   23 +-
 .../accumulo/tserver/tablet/MinorCompactor.java    |   68 +-
 .../apache/accumulo/tserver/tablet/RootFiles.java  |   30 +-
 .../accumulo/tserver/tablet/ScanDataSource.java    |   70 +-
 .../accumulo/tserver/tablet/ScanOptions.java       |    6 +-
 .../apache/accumulo/tserver/tablet/Scanner.java    |   22 +-
 .../org/apache/accumulo/tserver/tablet/Tablet.java |  547 +++++----
 .../accumulo/tserver/tablet/TabletCommitter.java   |    5 +-
 .../apache/accumulo/tserver/tablet/TabletData.java |   13 +-
 .../accumulo/tserver/tablet/TabletMemory.java      |    3 +-
 .../accumulo/tserver/CheckTabletMetadataTest.java  |   24 +-
 .../apache/accumulo/tserver/InMemoryMapTest.java   |   55 +-
 .../tserver/LargestFirstMemoryManagerTest.java     |   87 +-
 .../tserver/TabletServerSyncCheckTest.java         |   12 +-
 .../accumulo/tserver/TservConstraintEnvTest.java   |    9 +-
 .../compaction/DefaultCompactionStrategyTest.java  |   24 +-
 .../SizeLimitCompactionStrategyTest.java           |   12 +-
 .../compaction/TwoTierCompactionStrategyTest.java  |   19 +-
 .../ConfigurableCompactionStrategyTest.java        |   15 +-
 .../accumulo/tserver/log/MultiReaderTest.java      |    8 +-
 .../tserver/log/SortedLogRecoveryTest.java         |  215 ++--
 .../tserver/log/TestUpgradePathForWALogs.java      |   16 +-
 .../accumulo/tserver/logger/LogFileTest.java       |   11 +-
 .../replication/AccumuloReplicaSystemTest.java     |   74 +-
 .../BatchWriterReplicationReplayerTest.java        |    6 +-
 .../replication/ReplicationProcessorTest.java      |    6 +-
 .../tserver/tablet/DatafileManagerTest.java        |   27 +-
 .../accumulo/tserver/tablet/RootFilesTest.java     |   12 +-
 .../apache/accumulo/tserver/tablet/TabletTest.java |    9 +-
 .../main/java/org/apache/accumulo/shell/Shell.java |  261 +++--
 .../org/apache/accumulo/shell/ShellCompletor.java  |    3 +-
 .../org/apache/accumulo/shell/ShellOptionsJC.java  |   70 +-
 .../java/org/apache/accumulo/shell/ShellUtil.java  |    5 +-
 .../accumulo/shell/commands/AboutCommand.java      |    3 +-
 .../shell/commands/ActiveCompactionIterator.java   |   15 +-
 .../shell/commands/ActiveScanIterator.java         |   16 +-
 .../accumulo/shell/commands/AddAuthsCommand.java   |   12 +-
 .../accumulo/shell/commands/AddSplitsCommand.java  |    9 +-
 .../shell/commands/AuthenticateCommand.java        |    9 +-
 .../shell/commands/BulkImportListIterator.java     |    3 +-
 .../accumulo/shell/commands/ClearCommand.java      |    3 +-
 .../accumulo/shell/commands/CloneTableCommand.java |   20 +-
 .../accumulo/shell/commands/CompactCommand.java    |   89 +-
 .../accumulo/shell/commands/ConfigCommand.java     |   76 +-
 .../accumulo/shell/commands/ConstraintCommand.java |   40 +-
 .../shell/commands/CreateNamespaceCommand.java     |   12 +-
 .../shell/commands/CreateTableCommand.java         |   87 +-
 .../accumulo/shell/commands/CreateUserCommand.java |   11 +-
 .../apache/accumulo/shell/commands/DUCommand.java  |   24 +-
 .../accumulo/shell/commands/DebugCommand.java      |   12 +-
 .../shell/commands/DeleteAuthsCommand.java         |    9 +-
 .../accumulo/shell/commands/DeleteCommand.java     |   11 +-
 .../accumulo/shell/commands/DeleteIterCommand.java |   27 +-
 .../accumulo/shell/commands/DeleteManyCommand.java |   14 +-
 .../shell/commands/DeleteNamespaceCommand.java     |   12 +-
 .../accumulo/shell/commands/DeleteRowsCommand.java |   12 +-
 .../shell/commands/DeleteScanIterCommand.java      |   18 +-
 .../shell/commands/DeleteShellIterCommand.java     |    6 +-
 .../shell/commands/DeleteTableCommand.java         |    3 +-
 .../accumulo/shell/commands/DropUserCommand.java   |   12 +-
 .../accumulo/shell/commands/EGrepCommand.java      |   15 +-
 .../accumulo/shell/commands/ExecfileCommand.java   |    6 +-
 .../shell/commands/ExportTableCommand.java         |    8 +-
 .../accumulo/shell/commands/FateCommand.java       |   31 +-
 .../accumulo/shell/commands/FlushCommand.java      |    6 +-
 .../accumulo/shell/commands/FormatterCommand.java  |   19 +-
 .../accumulo/shell/commands/GetAuthsCommand.java   |    6 +-
 .../accumulo/shell/commands/GetGroupsCommand.java  |    9 +-
 .../accumulo/shell/commands/GetSplitsCommand.java  |   33 +-
 .../accumulo/shell/commands/GrantCommand.java      |   37 +-
 .../accumulo/shell/commands/GrepCommand.java       |   15 +-
 .../accumulo/shell/commands/HelpCommand.java       |   21 +-
 .../accumulo/shell/commands/HiddenCommand.java     |   16 +-
 .../accumulo/shell/commands/HistoryCommand.java    |    6 +-
 .../shell/commands/ImportDirectoryCommand.java     |   10 +-
 .../shell/commands/ImportTableCommand.java         |    5 +-
 .../accumulo/shell/commands/InsertCommand.java     |   20 +-
 .../shell/commands/InterpreterCommand.java         |    6 +-
 .../accumulo/shell/commands/ListBulkCommand.java   |    6 +-
 .../shell/commands/ListCompactionsCommand.java     |    7 +-
 .../accumulo/shell/commands/ListIterCommand.java   |   39 +-
 .../accumulo/shell/commands/ListScansCommand.java  |    6 +-
 .../shell/commands/ListShellIterCommand.java       |   12 +-
 .../accumulo/shell/commands/MaxRowCommand.java     |    7 +-
 .../accumulo/shell/commands/MergeCommand.java      |   16 +-
 .../commands/NamespacePermissionsCommand.java      |    3 +-
 .../accumulo/shell/commands/NamespacesCommand.java |    9 +-
 .../accumulo/shell/commands/NoTableCommand.java    |    3 +-
 .../accumulo/shell/commands/OfflineCommand.java    |    6 +-
 .../accumulo/shell/commands/OnlineCommand.java     |    6 +-
 .../apache/accumulo/shell/commands/OptUtil.java    |   16 +-
 .../accumulo/shell/commands/PasswdCommand.java     |   15 +-
 .../accumulo/shell/commands/PingCommand.java       |    3 +-
 .../shell/commands/QuotedStringTokenizer.java      |   12 +-
 .../shell/commands/RenameNamespaceCommand.java     |    8 +-
 .../shell/commands/RenameTableCommand.java         |    8 +-
 .../accumulo/shell/commands/RevokeCommand.java     |   37 +-
 .../accumulo/shell/commands/ScanCommand.java       |  133 ++-
 .../accumulo/shell/commands/ScriptCommand.java     |    6 +-
 .../accumulo/shell/commands/SetAuthsCommand.java   |   12 +-
 .../accumulo/shell/commands/SetGroupsCommand.java  |    3 +-
 .../accumulo/shell/commands/SetIterCommand.java    |  106 +-
 .../shell/commands/SetScanIterCommand.java         |   18 +-
 .../shell/commands/SetShellIterCommand.java        |   15 +-
 .../commands/ShellPluginConfigurationCommand.java  |   40 +-
 .../accumulo/shell/commands/SleepCommand.java      |    3 +-
 .../accumulo/shell/commands/SummariesCommand.java  |   13 +-
 .../shell/commands/SystemPermissionsCommand.java   |    3 +-
 .../accumulo/shell/commands/TableCommand.java      |    7 +-
 .../accumulo/shell/commands/TableOperation.java    |   21 +-
 .../shell/commands/TablePermissionsCommand.java    |    3 +-
 .../accumulo/shell/commands/TablesCommand.java     |   14 +-
 .../accumulo/shell/commands/TraceCommand.java      |   15 +-
 .../accumulo/shell/commands/UserCommand.java       |    6 +-
 .../shell/commands/UserPermissionsCommand.java     |   12 +-
 .../accumulo/shell/commands/UsersCommand.java      |    3 +-
 .../accumulo/shell/commands/WhoAmICommand.java     |    3 +-
 .../accumulo/shell/format/DeleterFormatter.java    |    9 +-
 .../org/apache/accumulo/shell/mock/MockShell.java  |    8 +-
 .../org/apache/accumulo/shell/ShellConfigTest.java |    6 +-
 .../accumulo/shell/ShellSetInstanceTest.java       |   18 +-
 .../java/org/apache/accumulo/shell/ShellTest.java  |   44 +-
 .../org/apache/accumulo/shell/ShellUtilTest.java   |    6 +-
 .../shell/commands/CompactCommandTest.java         |    3 +-
 .../shell/commands/DeleteAuthsCommandTest.java     |    9 +-
 .../shell/commands/DeleteManyCommandTest.java      |    3 +-
 .../shell/commands/DeleteRowsCommandTest.java      |    3 +-
 .../shell/commands/DeleteTableCommandTest.java     |    3 +-
 .../accumulo/shell/commands/FlushCommandTest.java  |    3 +-
 .../shell/commands/HistoryCommandTest.java         |    6 +-
 .../accumulo/shell/commands/MergeCommandTest.java  |    3 +-
 .../accumulo/shell/commands/ScanCommandTest.java   |    3 +-
 .../shell/commands/SetIterCommandTest.java         |   25 +-
 .../shell/format/DeleterFormatterTest.java         |   18 +-
 .../main/java/org/apache/accumulo/start/Main.java  |   57 +-
 .../java/org/apache/accumulo/start/TestMain.java   |    5 +-
 .../start/classloader/AccumuloClassLoader.java     |   38 +-
 .../vfs/AccumuloReloadingVFSClassLoader.java       |   17 +-
 .../classloader/vfs/AccumuloVFSClassLoader.java    |   65 +-
 .../start/classloader/vfs/ContextManager.java      |    9 +-
 .../vfs/PostDelegatingVFSClassLoader.java          |    6 +-
 .../classloader/vfs/UniqueFileReplicator.java      |    3 +-
 .../accumulo/start/spi/KeywordExecutable.java      |   18 +-
 .../test/categories/MiniClusterOnlyTests.java      |    3 +-
 .../accumulo/test/categories/MonitorTests.java     |    3 +-
 .../accumulo/test/categories/PerformanceTests.java |    8 +-
 .../categories/StandaloneCapableClusterTests.java  |    4 +-
 .../accumulo/test/categories/SunnyDayTests.java    |    4 +-
 .../accumulo/test/categories/package-info.java     |    1 -
 .../classloader/vfs/AccumuloClasspathTest.java     |    6 +-
 .../vfs/AccumuloReloadingVFSClassLoaderTest.java   |   76 +-
 .../vfs/AccumuloVFSClassLoaderTest.java            |   33 +-
 .../start/classloader/vfs/ContextManagerTest.java  |   12 +-
 .../accumulo/start/test/AccumuloDFSBase.java       |   10 +-
 .../accumulo/harness/AccumuloClusterHarness.java   |   79 +-
 .../apache/accumulo/harness/AccumuloITBase.java    |   28 +-
 .../harness/MiniClusterConfigurationCallback.java  |    3 +-
 .../accumulo/harness/MiniClusterHarness.java       |  113 +-
 .../accumulo/harness/SharedMiniClusterBase.java    |   55 +-
 .../org/apache/accumulo/harness/TestingKdc.java    |    9 +-
 .../conf/AccumuloClusterPropertyConfiguration.java |   18 +-
 .../conf/AccumuloMiniClusterConfiguration.java     |    6 +-
 .../StandaloneAccumuloClusterConfiguration.java    |   54 +-
 .../accumulo/test/ArbitraryTablePropertiesIT.java  |   12 +-
 .../org/apache/accumulo/test/AuditMessageIT.java   |  234 ++--
 .../accumulo/test/BadDeleteMarkersCreatedIT.java   |    6 +-
 .../accumulo/test/BatchWriterInTabletServerIT.java |   19 +-
 .../apache/accumulo/test/BatchWriterIterator.java  |   50 +-
 .../accumulo/test/BulkImportMonitoringIT.java      |   10 +-
 .../accumulo/test/BulkImportSequentialRowsIT.java  |   12 +-
 .../java/org/apache/accumulo/test/CleanWalIT.java  |    6 +-
 .../apache/accumulo/test/ClientSideIteratorIT.java |    9 +-
 .../java/org/apache/accumulo/test/CloneIT.java     |   30 +-
 .../accumulo/test/CompactionRateLimitingIT.java    |   10 +-
 .../apache/accumulo/test/ConditionalWriterIT.java  |  310 +++--
 .../test/ConfigurableMajorCompactionIT.java        |    3 +-
 .../org/apache/accumulo/test/CreateRFiles.java     |   11 +-
 .../apache/accumulo/test/CreateRandomRFile.java    |    3 +-
 .../accumulo/test/DetectDeadTabletServersIT.java   |    3 +-
 .../org/apache/accumulo/test/DumpConfigIT.java     |   10 +-
 .../accumulo/test/EstimateInMemMapOverhead.java    |    6 +-
 .../org/apache/accumulo/test/ExistingMacIT.java    |   22 +-
 .../accumulo/test/FaultyConditionalWriter.java     |    6 +-
 .../org/apache/accumulo/test/FileArchiveIT.java    |   33 +-
 .../java/org/apache/accumulo/test/FindMaxIT.java   |   30 +-
 .../apache/accumulo/test/GarbageCollectWALIT.java  |    3 +-
 .../accumulo/test/GenerateSequentialRFile.java     |    6 +-
 .../apache/accumulo/test/GetFileInfoBulkIT.java    |    7 +-
 .../org/apache/accumulo/test/GetMasterStats.java   |    3 +-
 .../org/apache/accumulo/test/HardListIterator.java |   30 +-
 .../org/apache/accumulo/test/IMMLGBenchmark.java   |   19 +-
 .../org/apache/accumulo/test/ImportExportIT.java   |   30 +-
 .../org/apache/accumulo/test/InMemoryMapIT.java    |   83 +-
 .../accumulo/test/InMemoryMapMemoryUsageTest.java  |    3 +-
 .../accumulo/test/InterruptibleScannersIT.java     |    6 +-
 .../accumulo/test/IsolationAndDeepCopyIT.java      |    9 +-
 .../apache/accumulo/test/KeyValueEqualityIT.java   |   10 +-
 .../org/apache/accumulo/test/LargeSplitRowIT.java  |   48 +-
 .../java/org/apache/accumulo/test/LocatorIT.java   |   16 +-
 .../java/org/apache/accumulo/test/ManySplitIT.java |    3 +-
 .../test/MasterRepairsDualAssignmentIT.java        |    6 +-
 .../org/apache/accumulo/test/MemoryUsageTest.java  |    8 +-
 .../accumulo/test/MetaConstraintRetryIT.java       |    3 +-
 .../apache/accumulo/test/MetaGetsReadersIT.java    |    3 +-
 .../java/org/apache/accumulo/test/MetaSplitIT.java |    9 +-
 .../test/MissingWalHeaderCompletesRecoveryIT.java  |   33 +-
 .../accumulo/test/MultiTableBatchWriterIT.java     |   12 +-
 .../apache/accumulo/test/MultiTableRecoveryIT.java |    3 +-
 .../org/apache/accumulo/test/NamespacesIT.java     |  160 ++-
 .../accumulo/test/NativeMapConcurrencyTest.java    |    9 +-
 .../accumulo/test/NativeMapPerformanceTest.java    |   19 +-
 .../apache/accumulo/test/NativeMapStressTest.java  |   29 +-
 .../accumulo/test/NewTableConfigurationIT.java     |  217 ++--
 .../org/apache/accumulo/test/NullBatchWriter.java  |    3 +-
 .../org/apache/accumulo/test/OrIteratorIT.java     |   21 +-
 .../apache/accumulo/test/QueryMetadataTable.java   |    6 +-
 .../accumulo/test/RewriteTabletDirectoriesIT.java  |   24 +-
 .../java/org/apache/accumulo/test/SampleIT.java    |   56 +-
 .../org/apache/accumulo/test/ShellConfigIT.java    |   26 +-
 .../org/apache/accumulo/test/ShellServerIT.java    |  243 ++--
 .../org/apache/accumulo/test/SplitRecoveryIT.java  |    9 +-
 .../accumulo/test/TableConfigurationUpdateIT.java  |   13 +-
 .../apache/accumulo/test/TableOperationsIT.java    |   50 +-
 .../org/apache/accumulo/test/TestBinaryRows.java   |   38 +-
 .../java/org/apache/accumulo/test/TestIngest.java  |   44 +-
 .../apache/accumulo/test/TestMultiTableIngest.java |    9 +-
 .../apache/accumulo/test/TestRandomDeletes.java    |   19 +-
 .../apache/accumulo/test/TextMemoryUsageTest.java  |    4 +-
 .../ThriftServerBindsBeforeZooKeeperLockIT.java    |   30 +-
 .../org/apache/accumulo/test/TotalQueuedIT.java    |   17 +-
 .../test/TracerRecoversAfterOfflineTableIT.java    |    3 +-
 .../apache/accumulo/test/TransportCachingIT.java   |    9 +-
 .../java/org/apache/accumulo/test/UnusedWALIT.java |    9 +-
 .../accumulo/test/UserCompactionStrategyIT.java    |   57 +-
 .../java/org/apache/accumulo/test/UsersIT.java     |    9 +-
 .../org/apache/accumulo/test/VerifyIngest.java     |   41 +-
 .../accumulo/test/VerifySerialRecoveryIT.java      |    3 +-
 .../accumulo/test/VolumeChooserFailureIT.java      |   27 +-
 .../org/apache/accumulo/test/VolumeChooserIT.java  |  105 +-
 .../java/org/apache/accumulo/test/VolumeIT.java    |   71 +-
 .../org/apache/accumulo/test/WaitForBalanceIT.java |    9 +-
 .../org/apache/accumulo/test/WrongTabletTest.java  |    5 +-
 .../org/apache/accumulo/test/YieldScannersIT.java  |   30 +-
 .../test/constraints/NumericValueConstraint.java   |    3 +-
 .../accumulo/test/functional/AddSplitIT.java       |    3 +-
 .../accumulo/test/functional/AuthsIterator.java    |    3 +-
 .../accumulo/test/functional/BackupMasterIT.java   |    3 +-
 .../test/functional/BadIteratorMincIT.java         |    3 +-
 .../functional/BalanceAfterCommsFailureIT.java     |   16 +-
 .../BalanceInPresenceOfOfflineTableIT.java         |   19 +-
 .../accumulo/test/functional/BatchScanSplitIT.java |    9 +-
 .../test/functional/BatchWriterFlushIT.java        |   15 +-
 .../accumulo/test/functional/BigRootTabletIT.java  |    9 +-
 .../accumulo/test/functional/BloomFilterIT.java    |   30 +-
 .../accumulo/test/functional/BulkFileIT.java       |   18 +-
 .../apache/accumulo/test/functional/BulkIT.java    |   11 +-
 .../test/functional/BulkSplitOptimizationIT.java   |    9 +-
 .../test/functional/ChaoticBalancerIT.java         |    6 +-
 .../accumulo/test/functional/ClassLoaderIT.java    |    9 +-
 .../apache/accumulo/test/functional/CleanUpIT.java |   14 +-
 .../accumulo/test/functional/CloneTestIT.java      |   26 +-
 .../accumulo/test/functional/CombinerIT.java       |    3 +-
 .../accumulo/test/functional/CompactionIT.java     |    3 +-
 .../accumulo/test/functional/ConcurrencyIT.java    |    8 +-
 .../test/functional/ConcurrentDeleteTableIT.java   |    3 +-
 .../test/functional/ConfigurableCompactionIT.java  |   21 +-
 .../test/functional/ConfigurableMacBase.java       |   39 +-
 .../accumulo/test/functional/ConnectorIT.java      |    6 +-
 .../accumulo/test/functional/ConstraintIT.java     |   63 +-
 .../accumulo/test/functional/CreateAndUseIT.java   |    3 +-
 .../accumulo/test/functional/CredentialsIT.java    |    6 +-
 .../test/functional/DeleteEverythingIT.java        |    6 +-
 .../apache/accumulo/test/functional/DeleteIT.java  |   15 +-
 .../accumulo/test/functional/DeleteRowsIT.java     |   10 +-
 .../accumulo/test/functional/DropModIter.java      |    6 +-
 .../accumulo/test/functional/DurabilityIT.java     |    3 +-
 .../test/functional/DynamicThreadPoolsIT.java      |    3 +-
 .../test/functional/FunctionalTestUtils.java       |   36 +-
 .../test/functional/GarbageCollectorIT.java        |   20 +-
 .../test/functional/HalfDeadTServerIT.java         |   16 +-
 .../accumulo/test/functional/KerberosIT.java       |  222 ++--
 .../accumulo/test/functional/KerberosProxyIT.java  |  172 +--
 .../test/functional/KerberosRenewalIT.java         |   44 +-
 .../accumulo/test/functional/LargeRowIT.java       |   18 +-
 .../test/functional/LateLastContactIT.java         |    3 +-
 .../accumulo/test/functional/LogicalTimeIT.java    |   62 +-
 .../accumulo/test/functional/MapReduceIT.java      |   13 +-
 .../test/functional/MasterAssignmentIT.java        |    6 +-
 .../apache/accumulo/test/functional/MaxOpenIT.java |    9 +-
 .../apache/accumulo/test/functional/MergeIT.java   |   64 +-
 .../test/functional/MetadataMaxFilesIT.java        |    3 +-
 .../accumulo/test/functional/MetadataSplitIT.java  |    3 +-
 .../accumulo/test/functional/MonitorSslIT.java     |   30 +-
 .../accumulo/test/functional/NativeMapIT.java      |   47 +-
 .../accumulo/test/functional/PermissionsIT.java    |  194 +--
 .../accumulo/test/functional/ReadWriteIT.java      |   96 +-
 .../test/functional/RecoveryWithEmptyRFileIT.java  |   14 +-
 .../test/functional/RegexGroupBalanceIT.java       |   23 +-
 .../apache/accumulo/test/functional/RestartIT.java |   37 +-
 .../accumulo/test/functional/RestartStressIT.java  |    8 +-
 .../apache/accumulo/test/functional/ScanIdIT.java  |   53 +-
 .../accumulo/test/functional/ScanIteratorIT.java   |   40 +-
 .../accumulo/test/functional/ScanRangeIT.java      |   18 +-
 .../test/functional/ScanSessionTimeOutIT.java      |    3 +-
 .../accumulo/test/functional/ScannerContextIT.java |   27 +-
 .../apache/accumulo/test/functional/ScannerIT.java |    6 +-
 .../test/functional/SessionBlockVerifyIT.java      |   17 +-
 .../test/functional/SessionDurabilityIT.java       |    3 +-
 .../accumulo/test/functional/ShutdownIT.java       |   28 +-
 .../test/functional/SimpleBalancerFairnessIT.java  |   10 +-
 .../accumulo/test/functional/SlowIterator.java     |    6 +-
 .../test/functional/SparseColumnFamilyIT.java      |    3 +-
 .../apache/accumulo/test/functional/SplitIT.java   |   16 +-
 .../accumulo/test/functional/SplitRecoveryIT.java  |   76 +-
 .../org/apache/accumulo/test/functional/SslIT.java |   13 +-
 .../apache/accumulo/test/functional/SummaryIT.java |  166 ++-
 .../test/functional/TableChangeStateIT.java        |   93 +-
 .../apache/accumulo/test/functional/TabletIT.java  |    6 +-
 .../functional/TabletStateChangeIteratorIT.java    |   76 +-
 .../apache/accumulo/test/functional/TimeoutIT.java |    3 +-
 .../accumulo/test/functional/TooManyDeletesIT.java |   15 +-
 .../accumulo/test/functional/VisibilityIT.java     |   33 +-
 .../accumulo/test/functional/WALSunnyDayIT.java    |   24 +-
 .../test/functional/WatchTheWatchCountIT.java      |    6 +-
 .../accumulo/test/functional/WriteLotsIT.java      |    3 +-
 .../accumulo/test/functional/YieldingIterator.java |   27 +-
 .../accumulo/test/functional/ZombieTServer.java    |   26 +-
 .../accumulo/test/functional/ZooCacheIT.java       |    6 +-
 .../CloseWriteAheadLogReferencesIT.java            |   45 +-
 .../test/mapred/AccumuloFileOutputFormatIT.java    |   21 +-
 .../test/mapred/AccumuloInputFormatIT.java         |   19 +-
 .../mapred/AccumuloMultiTableInputFormatIT.java    |    9 +-
 .../test/mapred/AccumuloOutputFormatIT.java        |   15 +-
 .../test/mapred/AccumuloRowInputFormatIT.java      |   18 +-
 .../apache/accumulo/test/mapred/TokenFileIT.java   |   12 +-
 .../test/mapreduce/AccumuloFileOutputFormatIT.java |   33 +-
 .../test/mapreduce/AccumuloInputFormatIT.java      |   91 +-
 .../mapreduce/AccumuloMultiTableInputFormatIT.java |   12 +-
 .../test/mapreduce/AccumuloOutputFormatIT.java     |    9 +-
 .../test/mapreduce/AccumuloRowInputFormatIT.java   |   21 +-
 .../apache/accumulo/test/mapreduce/RowHash.java    |    3 +-
 .../accumulo/test/mapreduce/TokenFileIT.java       |   12 +-
 .../apache/accumulo/test/master/MergeStateIT.java  |   32 +-
 .../accumulo/test/master/SuspendedTabletsIT.java   |   47 +-
 .../test/mrit/IntegrationTestMapReduce.java        |   19 +-
 .../test/performance/ContinuousIngest.java         |   41 +-
 .../accumulo/test/performance/ContinuousOpts.java  |   15 +-
 .../accumulo/test/performance/NullTserver.java     |  110 +-
 .../test/performance/RollWALPerformanceIT.java     |    5 +-
 .../performance/metadata/FastBulkImportIT.java     |    3 +-
 .../metadata/MetadataBatchScanTest.java            |   19 +-
 .../test/performance/scan/CollectTabletStats.java  |   84 +-
 .../accumulo/test/proxy/ProxyDurabilityIT.java     |    9 +-
 .../accumulo/test/proxy/SimpleProxyBase.java       |  525 ++++++---
 .../accumulo/test/proxy/TestProxyClient.java       |   17 +-
 .../test/proxy/TestProxyInstanceOperations.java    |   10 +-
 .../test/proxy/TestProxyNamespaceOperations.java   |   39 +-
 .../accumulo/test/proxy/TestProxyReadWrite.java    |   60 +-
 .../test/proxy/TestProxySecurityOperations.java    |   26 +-
 .../test/proxy/TestProxyTableOperations.java       |   24 +-
 .../test/replication/CyclicReplicationIT.java      |   88 +-
 .../test/replication/FinishedWorkUpdaterIT.java    |   64 +-
 ...GarbageCollectorCommunicatesWithTServersIT.java |   82 +-
 .../test/replication/KerberosReplicationIT.java    |   32 +-
 .../test/replication/MockReplicaSystem.java        |   19 +-
 .../replication/MultiInstanceReplicationIT.java    |  194 +--
 .../replication/MultiTserverReplicationIT.java     |    9 +-
 .../RemoveCompleteReplicationRecordsIT.java        |   45 +-
 .../accumulo/test/replication/ReplicationIT.java   |  255 ++--
 .../replication/ReplicationOperationsImplIT.java   |   45 +-
 .../test/replication/SequentialWorkAssignerIT.java |   75 +-
 .../test/replication/StatusCombinerMacIT.java      |   15 +-
 .../accumulo/test/replication/StatusMakerIT.java   |   47 +-
 .../test/replication/UnorderedWorkAssignerIT.java  |   38 +-
 .../UnorderedWorkAssignerReplicationIT.java        |  194 +--
 .../UnusedWalDoesntCloseReplicationStatusIT.java   |   27 +-
 .../accumulo/test/replication/WorkMakerIT.java     |   39 +-
 .../java/org/apache/accumulo/test/rpc/Mocket.java  |    5 +-
 .../test/rpc/SimpleThriftServiceRunner.java        |    3 +-
 .../apache/accumulo/test/rpc/ThriftBehaviorIT.java |   15 +-
 .../test/server/security/SystemCredentialsIT.java  |   39 +-
 .../apache/accumulo/test/start/KeywordStartIT.java |   18 +-
 .../org/apache/accumulo/test/util/CertUtils.java   |  103 +-
 .../accumulo/test/util/SerializationUtil.java      |   17 +-
 .../constraints/AlphaNumKeyConstraintTest.java     |   13 +-
 .../constraints/NumericValueConstraintTest.java    |    6 +-
 .../accumulo/test/fate/zookeeper/ZooLockTest.java  |   36 +-
 .../test/functional/ValueReversingIterator.java    |    6 +-
 .../accumulo/test/iterator/AgeOffFilterTest.java   |    9 +-
 .../test/iterator/CfCqSliceFilterTest.java         |    6 +-
 .../apache/accumulo/test/iterator/RegExTest.java   |    9 +-
 .../test/iterator/SummingCombinerTest.java         |    6 +-
 .../test/iterator/WholeRowIteratorTest.java        |    6 +-
 .../apache/accumulo/test/util/CertUtilsTest.java   |   24 +-
 1467 files changed, 30421 insertions(+), 16778 deletions(-)

-- 
To stop receiving notification emails like this one, please contact
ctubbsii@apache.org.

[accumulo] 04/04: Additional wrapping fixes for checkstyle (#416)

Posted by ct...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit fbaee3e76438202752c03d18dfcc31fb664c5ce6
Author: Christopher Tubbs <ct...@apache.org>
AuthorDate: Fri Apr 6 04:16:04 2018 -0400

    Additional wrapping fixes for checkstyle (#416)
    
    Additional line-wrapping fixes for checkstyle for the master branch
---
 .../core/client/admin/NewTableConfiguration.java   |   5 +-
 .../accumulo/core/client/impl/MasterClient.java    |   4 +-
 .../impl/TabletServerBatchReaderIterator.java      |  11 +-
 .../core/client/summary/CountingSummarizer.java    |  36 +--
 .../accumulo/core/client/summary/Summarizer.java   |  32 +--
 .../accumulo/core/conf/ClientConfigGenerate.java   |  11 +-
 .../apache/accumulo/core/conf/ClientProperty.java  |   9 +-
 .../accumulo/core/conf/ConfigSanityCheck.java      |   8 +-
 .../accumulo/core/conf/ConfigurationDocGen.java    |   9 +-
 .../org/apache/accumulo/core/conf/Property.java    | 258 +++++++++++++--------
 .../apache/accumulo/core/conf/PropertyType.java    |  35 ++-
 .../file/blockfile/cache/lru/LruBlockCache.java    |   6 +-
 .../accumulo/core/iterators/IteratorUtil.java      |  37 +--
 .../CachingHDFSSecretKeyEncryptionStrategy.java    |  13 +-
 .../core/security/crypto/DefaultCryptoModule.java  |  11 +-
 .../org/apache/accumulo/core/summary/Gatherer.java |   5 +-
 .../accumulo/core/summary/SummaryReader.java       |  12 +-
 .../accumulo/core/conf/ConfigSanityCheckTest.java  |   6 +-
 .../main/java/org/apache/accumulo/proxy/Proxy.java |   4 +-
 .../java/org/apache/accumulo/server/Accumulo.java  |   8 +-
 .../org/apache/accumulo/server/ServerOpts.java     |   3 +-
 .../accumulo/server/client/BulkImporter.java       |   6 +-
 .../accumulo/server/fs/VolumeManagerImpl.java      |   5 +-
 .../apache/accumulo/server/init/Initialize.java    |  36 +--
 .../balancer/HostRegexTableLoadBalancer.java       |   8 +-
 .../server/metrics/MetricsConfiguration.java       |   4 +-
 .../rpc/TCredentialsUpdatingInvocationHandler.java |   5 +-
 .../apache/accumulo/server/rpc/TServerUtils.java   |   6 +-
 .../server/security/SecurityOperation.java         |  15 +-
 .../org/apache/accumulo/server/util/FileUtil.java  |   3 +-
 .../java/org/apache/accumulo/master/Master.java    |   6 +-
 .../monitor/util/AccumuloMonitorAppenderTest.java  |  28 ++-
 .../apache/accumulo/tracer/AsyncSpanReceiver.java  |   8 +-
 .../org/apache/accumulo/tracer/TraceServer.java    |   5 +-
 .../org/apache/accumulo/tserver/NativeMap.java     |   6 +-
 .../org/apache/accumulo/tserver/TabletServer.java  |   9 +-
 .../tserver/TabletServerResourceManager.java       |  17 +-
 .../tserver/compaction/MajorCompactionRequest.java |   6 +-
 .../tserver/LargestFirstMemoryManagerTest.java     |   6 +-
 .../main/java/org/apache/accumulo/shell/Shell.java |   8 +-
 .../org/apache/accumulo/shell/ShellOptionsJC.java  |  14 +-
 .../shell/commands/CreateTableCommand.java         |  11 +-
 .../accumulo/shell/commands/HiddenCommand.java     |  13 +-
 .../accumulo/shell/commands/SummariesCommand.java  |   3 +-
 .../main/java/org/apache/accumulo/start/Main.java  |   4 +-
 .../accumulo/harness/AccumuloClusterHarness.java   |   5 +-
 .../apache/accumulo/test/ConditionalWriterIT.java  |   5 +-
 .../org/apache/accumulo/test/ShellConfigIT.java    |   5 +-
 .../org/apache/accumulo/test/VerifyIngest.java     |   3 +-
 .../org/apache/accumulo/test/VolumeChooserIT.java  |   4 +-
 .../test/functional/RegexGroupBalanceIT.java       |   4 +-
 .../test/functional/SessionBlockVerifyIT.java      |   5 +-
 52 files changed, 463 insertions(+), 323 deletions(-)

diff --git a/core/src/main/java/org/apache/accumulo/core/client/admin/NewTableConfiguration.java b/core/src/main/java/org/apache/accumulo/core/client/admin/NewTableConfiguration.java
index aa34f2e..9c97f54 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/admin/NewTableConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/admin/NewTableConfiguration.java
@@ -235,9 +235,8 @@ public class NewTableConfiguration {
     try {
       TableOperationsHelper.checkIteratorConflicts(iteratorProps, setting, scopes);
     } catch (AccumuloException e) {
-      throw new IllegalArgumentException(
-          "The specified IteratorSetting conflicts with an iterator already defined on this NewTableConfiguration",
-          e);
+      throw new IllegalArgumentException("The specified IteratorSetting"
+          + " conflicts with an iterator already defined on this NewTableConfiguration", e);
     }
     for (IteratorScope scope : scopes) {
       String root = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX,
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/MasterClient.java b/core/src/main/java/org/apache/accumulo/core/client/impl/MasterClient.java
index ca05f84..dfe29e5 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/MasterClient.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/MasterClient.java
@@ -155,8 +155,8 @@ public class MasterClient {
         }
       } catch (ThriftNotActiveServiceException e) {
         // Let it loop, fetching a new location
-        log.debug(
-            "Contacted a Master which is no longer active, re-creating the connection to the active Master");
+        log.debug("Contacted a Master which is no longer active, re-creating"
+            + " the connection to the active Master");
       } catch (Exception e) {
         throw new AccumuloException(e);
       } finally {
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReaderIterator.java b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReaderIterator.java
index 4609b8f..4c87dca 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReaderIterator.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReaderIterator.java
@@ -185,11 +185,12 @@ public class TabletServerBatchReaderIterator implements Iterator<Entry<Key,Value
             throw new RuntimeException(fatalException);
 
         if (queryThreadPool.isShutdown()) {
-          String shortMsg = "The BatchScanner was unexpectedly closed while this Iterator was still in use.";
-          log.error(
-              "{} Ensure that a reference to the BatchScanner is retained so that it can be closed when this Iterator is exhausted."
-                  + " Not retaining a reference to the BatchScanner guarantees that you are leaking threads in your client JVM.",
-              shortMsg);
+          String shortMsg = "The BatchScanner was unexpectedly closed while"
+              + " this Iterator was still in use.";
+          log.error("{} Ensure that a reference to the BatchScanner is retained"
+              + " so that it can be closed when this Iterator is exhausted. Not"
+              + " retaining a reference to the BatchScanner guarantees that you are"
+              + " leaking threads in your client JVM.", shortMsg);
           throw new RuntimeException(shortMsg + " Ensure proper handling of the BatchScanner.");
         }
 
diff --git a/core/src/main/java/org/apache/accumulo/core/client/summary/CountingSummarizer.java b/core/src/main/java/org/apache/accumulo/core/client/summary/CountingSummarizer.java
index 58bbc3b..ffb26ff 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/CountingSummarizer.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/CountingSummarizer.java
@@ -30,32 +30,36 @@ import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
 import org.apache.commons.lang.mutable.MutableLong;
 
-//checkstyle and formatter are in conflict
-//@formatter:off
 /**
- * This class counts arbitrary keys while defending against too many keys and keys that are too long.
+ * This class counts arbitrary keys while defending against too many keys and keys that are too
+ * long.
  *
  * <p>
- * During collection and summarization this class will use the functions from {@link #converter()} and {@link #encoder()}. For each key/value the function from
- * {@link #converter()} will be called to create zero or more counter objects. A counter associated with each counter object will be incremented, as long as
- * there are not too many counters and the counter object is not too long.
+ * During collection and summarization this class will use the functions from {@link #converter()}
+ * and {@link #encoder()}. For each key/value the function from {@link #converter()} will be called
+ * to create zero or more counter objects. A counter associated with each counter object will be
+ * incremented, as long as there are not too many counters and the counter object is not too long.
  *
  * <p>
- * When {@link Summarizer.Collector#summarize(Summarizer.StatisticConsumer)} is called, the function from {@link #encoder()} will be used to convert counter
- * objects to strings. These strings will be used to emit statistics. Overriding {@link #encoder()} is optional. One reason to override is if the counter object
- * contains binary or special data. For example, a function that base64 encodes counter objects could be created.
+ * When {@link Summarizer.Collector#summarize(Summarizer.StatisticConsumer)} is called, the function
+ * from {@link #encoder()} will be used to convert counter objects to strings. These strings will be
+ * used to emit statistics. Overriding {@link #encoder()} is optional. One reason to override is if
+ * the counter object contains binary or special data. For example, a function that base64 encodes
+ * counter objects could be created.
  *
  * <p>
  * If the counter key type is mutable, then consider overriding {@link #copier()}.
  *
  * <p>
- * The function returned by {@link #converter()} will be called frequently and should be very efficient. The function returned by {@link #encoder()} will be
- * called less frequently and can be more expensive. The reason these two functions exists is to avoid the conversion to string for each key value, if that
- * conversion is unnecessary.
+ * The function returned by {@link #converter()} will be called frequently and should be very
+ * efficient. The function returned by {@link #encoder()} will be called less frequently and can be
+ * more expensive. The reason these two functions exists is to avoid the conversion to string for
+ * each key value, if that conversion is unnecessary.
  *
  * <p>
- * Below is an example implementation that counts column visibilities. This example avoids converting column visibility to string for each key/value. This
- * example shows the source code for {@link VisibilitySummarizer}.
+ * Below is an example implementation that counts column visibilities. This example avoids
+ * converting column visibility to string for each key/value. This example shows the source code for
+ * {@link VisibilitySummarizer}.
  *
  * <pre>
  * <code>
@@ -75,11 +79,11 @@ import org.apache.commons.lang.mutable.MutableLong;
  * </pre>
  *
  * @param <K>
- *          The counter key type. This type must have good implementations of {@link Object#hashCode()} and {@link Object#equals(Object)}.
+ *          The counter key type. This type must have good implementations of
+ *          {@link Object#hashCode()} and {@link Object#equals(Object)}.
  * @see CounterSummary
  * @since 2.0.0
  */
-//@formatter:on
 public abstract class CountingSummarizer<K> implements Summarizer {
 
   /**
diff --git a/core/src/main/java/org/apache/accumulo/core/client/summary/Summarizer.java b/core/src/main/java/org/apache/accumulo/core/client/summary/Summarizer.java
index 02cf2ab..5d42d48 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/Summarizer.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/Summarizer.java
@@ -24,18 +24,18 @@ import org.apache.accumulo.core.client.rfile.RFile;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
 
-//checkstyle and the formatter are in conflict, so turn off the formatter
-//@formatter:off
 /**
- * <p>
- * Instances of this interface can be configured for Accumulo tables. When Accumulo compacts files, it will use this Factory to create {@link Collector} and
- * {@link Combiner} objects to generate summary information about the data in the file.
+ * Instances of this interface can be configured for Accumulo tables. When Accumulo compacts files,
+ * it will use this Factory to create {@link Collector} and {@link Combiner} objects to generate
+ * summary information about the data in the file.
  *
  * <p>
- * In order to merge summary information from multiple files, Accumulo will use this factory to create a {@link Combiner} object.
+ * In order to merge summary information from multiple files, Accumulo will use this factory to
+ * create a {@link Combiner} object.
  *
  * <p>
- * Below is an example of a very simple summarizer that will compute the number of deletes, total number of keys, min timestamp and max timestamp.
+ * Below is an example of a very simple summarizer that will compute the number of deletes, total
+ * number of keys, min timestamp and max timestamp.
  *
  * <pre>
  * <code>
@@ -140,18 +140,21 @@ import org.apache.accumulo.core.data.Value;
  * </pre>
  *
  * <p>
- * The reason a Summarizer is a factory for a Collector and Combiner is to make it very clear in the API that Accumulo uses them independently at different
- * times. Therefore its not advisable to share internal state between the Collector and Combiner. The example implementation shows that the Collectors design
- * allows for very efficient collection of specialized summary information. Creating {@link String} + {@link Long} pairs is deferred until the summarize method
- * is called.
+ * The reason a Summarizer is a factory for a Collector and Combiner is to make it very clear in the
+ * API that Accumulo uses them independently at different times. Therefore its not advisable to
+ * share internal state between the Collector and Combiner. The example implementation shows that
+ * the Collectors design allows for very efficient collection of specialized summary information.
+ * Creating {@link String} + {@link Long} pairs is deferred until the summarize method is called.
  *
  * <p>
  * Summary data can be used by Compaction Strategies to decide which files to compact.
  *
  * <p>
- * Summary data is persisted, so ideally the same summarizer class with the same options should always produce the same results.  If you need to change the behavior
- * of a summarizer, then consider doing this by adding a new option.  If the same summarizer is configured twice with different options, then Accumulo will store and
- * merge each one separately.  This can allow old and new behavior to coexists simultaneously.
+ * Summary data is persisted, so ideally the same summarizer class with the same options should
+ * always produce the same results. If you need to change the behavior of a summarizer, then
+ * consider doing this by adding a new option. If the same summarizer is configured twice with
+ * different options, then Accumulo will store and merge each one separately. This can allow old and
+ * new behavior to coexists simultaneously.
  *
  * @since 2.0.0
  *
@@ -162,7 +165,6 @@ import org.apache.accumulo.core.data.Value;
  * @see RFile#summaries()
  * @see SummarizerConfiguration
  */
- //@formatter:on
 public interface Summarizer {
 
   public static interface StatisticConsumer {
diff --git a/core/src/main/java/org/apache/accumulo/core/conf/ClientConfigGenerate.java b/core/src/main/java/org/apache/accumulo/core/conf/ClientConfigGenerate.java
index f71b7e0..3f1bfaa 100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/ClientConfigGenerate.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ClientConfigGenerate.java
@@ -87,12 +87,13 @@ class ClientConfigGenerate {
       doc.println("category: development");
       doc.println("order: 9");
       doc.println("---\n");
-      doc.println(
-          "<!-- WARNING: Do not edit this file. It is a generated file that is copied from Accumulo build (from core/target/generated-docs) -->");
+      doc.println("<!-- WARNING: Do not edit this file. It is a generated file"
+          + " that is copied from Accumulo build (from core/target/generated-docs)" + " -->");
       doc.println("<!-- Generated by : " + getClass().getName() + " -->\n");
-      doc.println(
-          "Below are properties set in `accumulo-client.properties` that configure [Accumulo clients]({{ page.docs_baseurl }}/getting-started/clients#connecting). "
-              + "All properties have been part of the API since 2.0.0 (unless otherwise specified):\n");
+      doc.println("Below are properties set in `accumulo-client.properties`"
+          + " that configure [Accumulo clients]({{ page.docs_baseurl"
+          + " }}/getting-started/clients#connecting). All properties have been part"
+          + " of the API since 2.0.0 (unless otherwise specified):\n");
       doc.println("| Property | Default value | Since | Description |");
       doc.println("|----------|---------------|-------|-------------|");
     }
diff --git a/core/src/main/java/org/apache/accumulo/core/conf/ClientProperty.java b/core/src/main/java/org/apache/accumulo/core/conf/ClientProperty.java
index 5a2fc44..e481f6a 100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/ClientProperty.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ClientProperty.java
@@ -34,7 +34,8 @@ public enum ClientProperty {
 
   // Authentication
   AUTH_METHOD("auth.method", "password",
-      "Authentication method (i.e password, kerberos, provider). Set more properties for chosen method below.",
+      "Authentication method (i.e password,"
+          + " kerberos, provider). Set more properties for chosen method below.",
       "", true),
   AUTH_USERNAME("auth.username", "", "Accumulo username/principal for chosen authentication method",
       "", true),
@@ -51,11 +52,13 @@ public enum ClientProperty {
   BATCH_WRITER_MAX_LATENCY_SEC("batch.writer.max.latency.sec", "120",
       "Max amount of time (in seconds) to hold data in memory before flushing it"),
   BATCH_WRITER_MAX_TIMEOUT_SEC("batch.writer.max.timeout.sec", "0",
-      "Max amount of time (in seconds) an unresponsive server will be re-tried. An exception is thrown when this timeout is exceeded. Set to zero for no timeout."),
+      "Max amount" + " of time (in seconds) an unresponsive server will be re-tried. An"
+          + " exception is thrown when this timeout is exceeded. Set to zero for no timeout."),
   BATCH_WRITER_MAX_WRITE_THREADS("batch.writer.max.write.threads", "3",
       "Maximum number of threads to use for writing data to tablet servers."),
   BATCH_WRITER_DURABILITY("batch.writer.durability", "default",
-      "Change the durability for the BatchWriter session. To use the table's durability setting. use \"default\" which is the table's durability setting."),
+      "Change the" + " durability for the BatchWriter session. To use the table's durability"
+          + " setting. use \"default\" which is the table's durability setting."),
 
   // SSL
   SSL_ENABLED("ssl.enabled", "false", "Enable SSL for client RPC"),
diff --git a/core/src/main/java/org/apache/accumulo/core/conf/ConfigSanityCheck.java b/core/src/main/java/org/apache/accumulo/core/conf/ConfigSanityCheck.java
index 34ec3df..1b778cc 100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/ConfigSanityCheck.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ConfigSanityCheck.java
@@ -36,7 +36,7 @@ public class ConfigSanityCheck {
   private static final String PREFIX = "BAD CONFIG ";
   private static final String NULL_CIPHER = "NullCipher";
   private static final String NULL_CRYPTO_MODULE = "NullCryptoModule";
-  private static final String NULL_SECRET_KEY_ENCRYPTION_STRATEGY = "NullSecretKeyEncryptionStrategy";
+  private static final String NULL_SECRET_KEY_CRYPT_STRATEGY = "NullSecretKeyEncryptionStrategy";
   @SuppressWarnings("deprecation")
   private static final Property INSTANCE_DFS_URI = Property.INSTANCE_DFS_URI;
   @SuppressWarnings("deprecation")
@@ -58,7 +58,7 @@ public class ConfigSanityCheck {
     boolean usingVolumes = false;
     String cipherSuite = NULL_CIPHER;
     String keyAlgorithm = NULL_CIPHER;
-    String secretKeyEncryptionStrategy = NULL_SECRET_KEY_ENCRYPTION_STRATEGY;
+    String secretKeyEncryptionStrategy = NULL_SECRET_KEY_CRYPT_STRATEGY;
     String cryptoModule = NULL_CRYPTO_MODULE;
     for (Entry<String,String> entry : entries) {
       String key = entry.getKey();
@@ -112,7 +112,7 @@ public class ConfigSanityCheck {
       }
       if (key.equals(Property.CRYPTO_SECRET_KEY_ENCRYPTION_STRATEGY_CLASS.getKey())) {
         secretKeyEncryptionStrategy = Objects.requireNonNull(value);
-        if (!secretKeyEncryptionStrategy.equals(NULL_SECRET_KEY_ENCRYPTION_STRATEGY)) {
+        if (!secretKeyEncryptionStrategy.equals(NULL_SECRET_KEY_CRYPT_STRATEGY)) {
           verifyValidClassName(key, secretKeyEncryptionStrategy, SecretKeyEncryptionStrategy.class);
         }
       }
@@ -135,7 +135,7 @@ public class ConfigSanityCheck {
     }
 
     if (cryptoModule.equals(NULL_CRYPTO_MODULE)
-        ^ secretKeyEncryptionStrategy.equals(NULL_SECRET_KEY_ENCRYPTION_STRATEGY)) {
+        ^ secretKeyEncryptionStrategy.equals(NULL_SECRET_KEY_CRYPT_STRATEGY)) {
       fatal(Property.CRYPTO_MODULE_CLASS.getKey() + " and "
           + Property.CRYPTO_SECRET_KEY_ENCRYPTION_STRATEGY_CLASS.getKey()
           + " must both be configured.");
diff --git a/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationDocGen.java b/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationDocGen.java
index 90b8b55..5b23807 100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationDocGen.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationDocGen.java
@@ -85,10 +85,11 @@ class ConfigurationDocGen {
       doc.println("category: administration");
       doc.println("order: 3");
       doc.println("---\n");
-      doc.println(
-          "<!-- WARNING: Do not edit this file. It is a generated file that is copied from Accumulo build (from core/target/generated-docs) -->\n");
-      doc.println(
-          "Below are properties set in `accumulo-site.xml` or the Accumulo shell that configure Accumulo servers (i.e tablet server, master, etc):\n");
+      doc.println("<!-- WARNING: Do not edit this file. It is a generated file"
+          + " that is copied from Accumulo build (from core/target/generated-docs)" + " -->\n");
+      doc.println("Below are properties set in `accumulo-site.xml` or the"
+          + " Accumulo shell that configure Accumulo servers (i.e tablet server,"
+          + " master, etc):\n");
     }
 
     @Override
diff --git a/core/src/main/java/org/apache/accumulo/core/conf/Property.java b/core/src/main/java/org/apache/accumulo/core/conf/Property.java
index 8298abd..c8cbc65 100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/Property.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/Property.java
@@ -54,20 +54,25 @@ public enum Property {
           + " (future) other parts of the code."),
   @Experimental
   CRYPTO_CIPHER_SUITE("crypto.cipher.suite", "NullCipher", PropertyType.STRING,
-      "Describes the cipher suite to use for rfile encryption. The value must be either NullCipher or in the form of algorithm/mode/padding, "
-          + "e.g. AES/CBC/NoPadding"),
+      "Describes the cipher suite to use for rfile encryption. The value must"
+          + " be either NullCipher or in the form of algorithm/mode/padding, e.g."
+          + " AES/CBC/NoPadding"),
   @Experimental
   CRYPTO_WAL_CIPHER_SUITE("crypto.wal.cipher.suite", "", PropertyType.STRING,
-      "Describes the cipher suite to use for the write-ahead log. Defaults to 'cyrpto.cipher.suite' "
-          + "and will use that value for WAL encryption unless otherwise specified. Valid suite values include: an empty string, NullCipher, or a string the "
-          + "form of algorithm/mode/padding, e.g. AES/CBC/NOPadding"),
+      "Describes the cipher suite to use for the write-ahead log. Defaults to"
+          + " 'cyrpto.cipher.suite' and will use that value for WAL encryption unless"
+          + " otherwise specified. Valid suite values include: an empty string,"
+          + " NullCipher, or a string the form of algorithm/mode/padding, e.g."
+          + " AES/CBC/NOPadding"),
   @Experimental
   CRYPTO_CIPHER_KEY_ALGORITHM_NAME("crypto.cipher.key.algorithm.name", "NullCipher",
       PropertyType.STRING,
-      "States the name of the algorithm used for the key for the corresponding cipher suite. The key type must be compatible with the cipher suite."),
+      "States the name of the algorithm used for the key for the corresponding"
+          + " cipher suite. The key type must be compatible with the cipher suite."),
   @Experimental
   CRYPTO_BLOCK_STREAM_SIZE("crypto.block.stream.size", "1K", PropertyType.BYTES,
-      "The size of the buffer above the cipher stream. Used for reading files and padding walog entries."),
+      "The size of the buffer above the cipher stream. Used for reading files"
+          + " and padding walog entries."),
   @Experimental
   CRYPTO_CIPHER_KEY_LENGTH("crypto.cipher.key.length", "128", PropertyType.STRING,
       "Specifies the key length *in bits* to use for the symmetric key, "
@@ -115,7 +120,8 @@ public enum Property {
   // SSL properties local to each node (see also instance.ssl.enabled which must be consistent
   // across all nodes in an instance)
   RPC_PREFIX("rpc.", null, PropertyType.PREFIX,
-      "Properties in this category related to the configuration of SSL keys for RPC. See also instance.ssl.enabled"),
+      "Properties in this category related to the configuration of SSL keys for"
+          + " RPC. See also instance.ssl.enabled"),
   RPC_SSL_KEYSTORE_PATH("rpc.javax.net.ssl.keyStore", "", PropertyType.PATH,
       "Path of the keystore file for the server's private SSL key"),
   @Sensitive
@@ -175,11 +181,14 @@ public enum Property {
           + "Do not change after accumulo is initialized."),
   @Sensitive
   INSTANCE_SECRET("instance.secret", "DEFAULT", PropertyType.STRING,
-      "A secret unique to a given instance that all servers must know in order to communicate with one another."
-          + "It should be changed prior to the initialization of Accumulo. To change it after Accumulo has been initialized, use the ChangeSecret tool "
-          + "and then update accumulo-site.xml everywhere. Before using the ChangeSecret tool, make sure Accumulo is not running and you are logged "
-          + "in as the user that controls Accumulo files in HDFS.  To use the ChangeSecret tool, run the command: "
-          + "./bin/accumulo org.apache.accumulo.server.util.ChangeSecret"),
+      "A secret unique to a given instance that all servers must know in order"
+          + " to communicate with one another. It should be changed prior to the"
+          + " initialization of Accumulo. To change it after Accumulo has been"
+          + " initialized, use the ChangeSecret tool and then update accumulo-site.xml"
+          + " everywhere. Before using the ChangeSecret tool, make sure Accumulo is not"
+          + " running and you are logged in as the user that controls Accumulo files in"
+          + " HDFS. To use the ChangeSecret tool, run the command: ./bin/accumulo"
+          + " org.apache.accumulo.server.util.ChangeSecret"),
   INSTANCE_VOLUMES("instance.volumes", "", PropertyType.STRING,
       "A comma seperated list of dfs uris to use. Files will be stored across"
           + " these filesystems. If this is empty, then instance.dfs.uri will be used."
@@ -239,12 +248,15 @@ public enum Property {
 
   // general properties
   GENERAL_PREFIX("general.", null, PropertyType.PREFIX,
-      "Properties in this category affect the behavior of accumulo overall, but do not have to be consistent throughout a cloud."),
+      "Properties in this category affect the behavior of accumulo overall, but"
+          + " do not have to be consistent throughout a cloud."),
   @Deprecated
   GENERAL_CLASSPATHS(AccumuloClassLoader.GENERAL_CLASSPATHS, "", PropertyType.STRING,
-      "This property is deprecated. The class path should instead be configured by the launch environment (for example, accumulo-env.sh). "
-          + "A list of all of the places to look for a class. Order does matter, as it will look for the jar "
-          + "starting in the first location to the last. Supports full regex on filename alone."),
+      "This property is deprecated. The class path should instead be configured"
+          + " by the launch environment (for example, accumulo-env.sh). A list of all"
+          + " of the places to look for a class. Order does matter, as it will look for"
+          + " the jar starting in the first location to the last. Supports full regex"
+          + " on filename alone."),
   GENERAL_DYNAMIC_CLASSPATHS(AccumuloVFSClassLoader.DYNAMIC_CLASSPATH_PROPERTY_NAME,
       AccumuloVFSClassLoader.DEFAULT_DYNAMIC_CLASSPATH_VALUE, PropertyType.STRING,
       "A list of all of the places where changes in jars or classes will force "
@@ -264,8 +276,9 @@ public enum Property {
           + "principal. Leave blank if not using kerberoized hdfs"),
   GENERAL_KERBEROS_RENEWAL_PERIOD("general.kerberos.renewal.period", "30s",
       PropertyType.TIMEDURATION,
-      "The amount of time between attempts to perform "
-          + "Kerberos ticket renewals. This does not equate to how often tickets are actually renewed (which is performed at 80% of the ticket lifetime)."),
+      "The amount of time between attempts to perform Kerberos ticket renewals."
+          + " This does not equate to how often tickets are actually renewed (which is"
+          + " performed at 80% of the ticket lifetime)."),
   GENERAL_MAX_MESSAGE_SIZE("general.server.message.size.max", "1G", PropertyType.BYTES,
       "The maximum size of a message that can be sent to a server."),
   GENERAL_SIMPLETIMER_THREADPOOL_SIZE("general.server.simpletimer.threadpool.size", "1",
@@ -279,11 +292,13 @@ public enum Property {
   GENERAL_SECURITY_CREDENTIAL_PROVIDER_PATHS("general.security.credential.provider.paths", "",
       PropertyType.STRING, "Comma-separated list of paths to CredentialProviders"),
   GENERAL_LEGACY_METRICS("general.legacy.metrics", "false", PropertyType.BOOLEAN,
-      "Use the old metric infrastructure configured by accumulo-metrics.xml, instead of Hadoop Metrics2"),
+      "Use the old metric infrastructure configured by accumulo-metrics.xml,"
+          + " instead of Hadoop Metrics2"),
   GENERAL_ARBITRARY_PROP_PREFIX("general.custom.", null, PropertyType.PREFIX,
-      "Prefix to be used for user defined system-wide properties. "
-          + "This may be particularly useful for system-wide configuration for various user-implementations of "
-          + "pluggable Accumulo features, such as the balancer or volume chooser."),
+      "Prefix to be used for user defined system-wide properties. This may be"
+          + " particularly useful for system-wide configuration for various"
+          + " user-implementations of pluggable Accumulo features, such as the balancer"
+          + " or volume chooser."),
   GENERAL_DELEGATION_TOKEN_LIFETIME("general.delegation.token.lifetime", "7d",
       PropertyType.TIMEDURATION,
       "The length of time that delegation tokens and secret keys are valid"),
@@ -331,7 +346,8 @@ public enum Property {
       "org.apache.accumulo.server.master.recovery.HadoopLogCloser", PropertyType.CLASSNAME,
       "A class that implements a mechanism to steal write access to a write-ahead log"),
   MASTER_FATE_THREADPOOL_SIZE("master.fate.threadpool.size", "4", PropertyType.COUNT,
-      "The number of threads used to run fault-tolerant executions (FATE). These are primarily table operations like merge."),
+      "The number of threads used to run fault-tolerant executions (FATE)."
+          + " These are primarily table operations like merge."),
   MASTER_REPLICATION_SCAN_INTERVAL("master.replication.status.scan.interval", "30s",
       PropertyType.TIMEDURATION,
       "Amount of time to sleep before scanning the status section of the "
@@ -358,8 +374,9 @@ public enum Property {
       "Specifies a default blocksize for the tserver caches"),
   TSERV_CACHE_MANAGER_IMPL("tserver.cache.manager.class",
       "org.apache.accumulo.core.file.blockfile.cache.lru.LruBlockCacheManager", PropertyType.STRING,
-      "Specifies the class name of the block cache factory implementation. Alternative implementation is "
-          + "org.apache.accumulo.core.file.blockfile.cache.tinylfu.TinyLfuBlockCacheManager"),
+      "Specifies the class name of the block cache factory implementation."
+          + " Alternative implementation is"
+          + " org.apache.accumulo.core.file.blockfile.cache.tinylfu.TinyLfuBlockCacheManager"),
   TSERV_DATACACHE_SIZE("tserver.cache.data.size", "10%", PropertyType.MEMORY,
       "Specifies the size of the cache for RFile data blocks."),
   TSERV_INDEXCACHE_SIZE("tserver.cache.index.size", "25%", PropertyType.MEMORY,
@@ -372,26 +389,34 @@ public enum Property {
       "The port used for handling client connections on the tablet servers"),
   @Deprecated
   TSERV_MUTATION_QUEUE_MAX("tserver.mutation.queue.max", "1M", PropertyType.BYTES,
-      "This setting is deprecated. See tserver.total.mutation.queue.max. "
-          + "The amount of memory to use to store write-ahead-log mutations-per-session before flushing them. Since the buffer is per write session, consider the"
-          + " max number of concurrent writer when configuring. When using Hadoop 2, Accumulo will call hsync() on the WAL . For a small number of "
-          + "concurrent writers, increasing this buffer size decreases the frequncy of hsync calls. For a large number of concurrent writers a small buffers "
-          + "size is ok because of group commit."),
+      "This setting is deprecated. See tserver.total.mutation.queue.max. The"
+          + " amount of memory to use to store write-ahead-log mutations-per-session"
+          + " before flushing them. Since the buffer is per write session, consider the"
+          + " max number of concurrent writer when configuring. When using Hadoop 2,"
+          + " Accumulo will call hsync() on the WAL . For a small number of concurrent"
+          + " writers, increasing this buffer size decreases the frequncy of hsync"
+          + " calls. For a large number of concurrent writers a small buffers size is"
+          + " ok because of group commit."),
   TSERV_TOTAL_MUTATION_QUEUE_MAX("tserver.total.mutation.queue.max", "5%", PropertyType.MEMORY,
       "The amount of memory used to store write-ahead-log mutations before flushing them."),
   TSERV_TABLET_SPLIT_FINDMIDPOINT_MAXOPEN("tserver.tablet.split.midpoint.files.max", "300",
       PropertyType.COUNT,
-      "To find a tablets split points, all RFiles are opened and their indexes are read. This setting determines how many "
-          + "RFiles can be opened at once. When there are more RFiles than this setting multiple passes "
-          + "must be made, which is slower. However opening too many RFiles at once can cause problems."),
+      "To find a tablets split points, all RFiles are opened and their indexes"
+          + " are read. This setting determines how many RFiles can be opened at once."
+          + " When there are more RFiles than this setting multiple passes must be"
+          + " made, which is slower. However opening too many RFiles at once can cause"
+          + " problems."),
   TSERV_WALOG_MAX_SIZE("tserver.walog.max.size", "1g", PropertyType.BYTES,
-      "The maximum size for each write-ahead log. See comment for property tserver.memory.maps.max"),
+      "The maximum size for each write-ahead log. See comment for property"
+          + " tserver.memory.maps.max"),
   TSERV_WALOG_MAX_AGE("tserver.walog.max.age", "24h", PropertyType.TIMEDURATION,
       "The maximum age for each write-ahead log."),
   TSERV_WALOG_TOLERATED_CREATION_FAILURES("tserver.walog.tolerated.creation.failures", "50",
       PropertyType.COUNT,
-      "The maximum number of failures tolerated when creating a new write-ahead log.  Values < 0 will allow unlimited creation failures."
-          + " Exceeding this number of failures consecutively trying to create a new write-ahead log causes the TabletServer to exit."),
+      "The maximum number of failures tolerated when creating a new write-ahead"
+          + " log. Negative values will allow unlimited creation failures. Exceeding this"
+          + " number of failures consecutively trying to create a new write-ahead log"
+          + " causes the TabletServer to exit."),
   TSERV_WALOG_TOLERATED_WAIT_INCREMENT("tserver.walog.tolerated.wait.increment", "1000ms",
       PropertyType.TIMEDURATION,
       "The amount of time to wait between failures to create or write a write-ahead log."),
@@ -406,14 +431,18 @@ public enum Property {
   TSERV_SCAN_MAX_OPENFILES("tserver.scan.files.open.max", "100", PropertyType.COUNT,
       "Maximum total RFiles that all tablets in a tablet server can open for scans. "),
   TSERV_MAX_IDLE("tserver.files.open.idle", "1m", PropertyType.TIMEDURATION,
-      "Tablet servers leave previously used RFiles open for future queries. "
-          + "This setting determines how much time an unused RFile should be kept open until it is closed."),
+      "Tablet servers leave previously used RFiles open for future queries."
+          + " This setting determines how much time an unused RFile should be kept open"
+          + " until it is closed."),
   TSERV_NATIVEMAP_ENABLED("tserver.memory.maps.native.enabled", "true", PropertyType.BOOLEAN,
-      "An in-memory data store for accumulo implemented in c++ that increases the amount of data accumulo can hold in memory and avoids Java GC pauses."),
+      "An in-memory data store for accumulo implemented in c++ that increases"
+          + " the amount of data accumulo can hold in memory and avoids Java GC" + " pauses."),
   TSERV_MAXMEM("tserver.memory.maps.max", "33%", PropertyType.MEMORY,
-      "Maximum amount of memory that can be used to buffer data written to a tablet server. There are two other properties that can effectively limit memory"
-          + " usage table.compaction.minor.logs.threshold and tserver.walog.max.size. Ensure that table.compaction.minor.logs.threshold *"
-          + " tserver.walog.max.size >= this property."),
+      "Maximum amount of memory that can be used to buffer data written to a"
+          + " tablet server. There are two other properties that can effectively limit"
+          + " memory usage table.compaction.minor.logs.threshold and"
+          + " tserver.walog.max.size. Ensure that table.compaction.minor.logs.threshold"
+          + " * tserver.walog.max.size >= this property."),
   TSERV_MEM_MGMT("tserver.memory.manager",
       "org.apache.accumulo.server.tabletserver.LargestFirstMemoryManager", PropertyType.CLASSNAME,
       "An implementation of MemoryManger that accumulo will use."),
@@ -436,7 +465,8 @@ public enum Property {
   TSERV_MAJC_MAXCONCURRENT("tserver.compaction.major.concurrent.max", "3", PropertyType.COUNT,
       "The maximum number of concurrent major compactions for a tablet server"),
   TSERV_MAJC_THROUGHPUT("tserver.compaction.major.throughput", "0B", PropertyType.BYTES,
-      "Maximum number of bytes to read or write per second over all major compactions on a TabletServer, or 0B for unlimited."),
+      "Maximum number of bytes to read or write per second over all major"
+          + " compactions on a TabletServer, or 0B for unlimited."),
   TSERV_MINC_MAXCONCURRENT("tserver.compaction.minor.concurrent.max", "4", PropertyType.COUNT,
       "The maximum number of concurrent minor compactions for a tablet server"),
   TSERV_MAJC_TRACE_PERCENT("tserver.compaction.major.trace.percent", "0.1", PropertyType.FRACTION,
@@ -459,13 +489,17 @@ public enum Property {
           + " minor compacted file because it may have been modified by iterators. The"
           + " file dumped to the local dir is an exact copy of what was in memory."),
   TSERV_BULK_PROCESS_THREADS("tserver.bulk.process.threads", "1", PropertyType.COUNT,
-      "The master will task a tablet server with pre-processing a bulk import RFile prior to assigning it to the appropriate tablet servers. This configuration"
-          + " value controls the number of threads used to process the files."),
+      "The master will task a tablet server with pre-processing a bulk import"
+          + " RFile prior to assigning it to the appropriate tablet servers. This"
+          + " configuration value controls the number of threads used to process the" + " files."),
   TSERV_BULK_ASSIGNMENT_THREADS("tserver.bulk.assign.threads", "1", PropertyType.COUNT,
-      "The master delegates bulk import RFile processing and assignment to tablet servers. After file has been processed, the tablet server will assign"
-          + " the file to the appropriate tablets on all servers. This property controls the number of threads used to communicate to the other servers."),
+      "The master delegates bulk import RFile processing and assignment to"
+          + " tablet servers. After file has been processed, the tablet server will"
+          + " assign the file to the appropriate tablets on all servers. This property"
+          + " controls the number of threads used to communicate to the other" + " servers."),
   TSERV_BULK_RETRY("tserver.bulk.retry.max", "5", PropertyType.COUNT,
-      "The number of times the tablet server will attempt to assign a RFile to a tablet as it migrates and splits."),
+      "The number of times the tablet server will attempt to assign a RFile to"
+          + " a tablet as it migrates and splits."),
   TSERV_BULK_TIMEOUT("tserver.bulk.timeout", "5m", PropertyType.TIMEDURATION,
       "The time to wait for a tablet server to process a bulk import request."),
   TSERV_MINTHREADS("tserver.server.threads.minimum", "20", PropertyType.COUNT,
@@ -475,11 +509,14 @@ public enum Property {
   TSERV_MAX_MESSAGE_SIZE("tserver.server.message.size.max", "1G", PropertyType.BYTES,
       "The maximum size of a message that can be sent to a tablet server."),
   TSERV_HOLD_TIME_SUICIDE("tserver.hold.time.max", "5m", PropertyType.TIMEDURATION,
-      "The maximum time for a tablet server to be in the \"memory full\" state. If the tablet server cannot write out memory"
-          + " in this much time, it will assume there is some failure local to its node, and quit. A value of zero is equivalent to forever."),
+      "The maximum time for a tablet server to be in the \"memory full\" state."
+          + " If the tablet server cannot write out memory in this much time, it will"
+          + " assume there is some failure local to its node, and quit. A value of zero"
+          + " is equivalent to forever."),
   TSERV_WAL_BLOCKSIZE("tserver.wal.blocksize", "0", PropertyType.BYTES,
-      "The size of the HDFS blocks used to write to the Write-Ahead log. If zero, it will be 110% of tserver.walog.max.size (that is, try to use just one"
-          + " block)"),
+      "The size of the HDFS blocks used to write to the Write-Ahead log. If"
+          + " zero, it will be 110% of tserver.walog.max.size (that is, try to use just"
+          + " one block)"),
   TSERV_WAL_REPLICATION("tserver.wal.replication", "0", PropertyType.COUNT,
       "The replication to use when writing the Write-Ahead log to HDFS. If"
           + " zero, it will use the HDFS default replication setting."),
@@ -490,7 +527,8 @@ public enum Property {
   TSERV_ARCHIVE_WALOGS("tserver.archive.walogs", "false", PropertyType.BOOLEAN,
       "Keep copies of the WALOGs for debugging purposes"),
   TSERV_WORKQ_THREADS("tserver.workq.threads", "2", PropertyType.COUNT,
-      "The number of threads for the distributed work queue. These threads are used for copying failed bulk import RFiles."),
+      "The number of threads for the distributed work queue. These threads are"
+          + " used for copying failed bulk import RFiles."),
   TSERV_WAL_SYNC("tserver.wal.sync", "true", PropertyType.BOOLEAN,
       "Use the SYNC_BLOCK create flag to sync WAL writes to disk. Prevents"
           + " problems recovering from sudden system resets."),
@@ -512,15 +550,21 @@ public enum Property {
   TSERV_ASSIGNMENT_MAXCONCURRENT("tserver.assignment.concurrent.max", "2", PropertyType.COUNT,
       "The number of threads available to load tablets. Recoveries are still performed serially."),
   TSERV_SLOW_FLUSH_MILLIS("tserver.slow.flush.time", "100ms", PropertyType.TIMEDURATION,
-      "If a flush to the write-ahead log takes longer than this period of time, debugging information will written, and may result in a log rollover."),
+      "If a flush to the write-ahead log takes longer than this period of time,"
+          + " debugging information will written, and may result in a log rollover."),
   TSERV_SUMMARY_PARTITION_THREADS("tserver.summary.partition.threads", "10", PropertyType.COUNT,
-      "Summary data must be retrieved from RFiles.  For a large number of RFiles, the files are broken into partitions of 100K files.  This setting determines "
-          + "how many of these groups of 100K RFiles will be processed concurrently."),
+      "Summary data must be retrieved from RFiles. For a large number of"
+          + " RFiles, the files are broken into partitions of 100K files. This setting"
+          + " determines how many of these groups of 100K RFiles will be processed"
+          + " concurrently."),
   TSERV_SUMMARY_REMOTE_THREADS("tserver.summary.remote.threads", "128", PropertyType.COUNT,
-      "For a partitioned group of 100K RFiles, those files are grouped by tablet server.  Then a remote tablet server is asked to gather summary data.  This "
-          + "setting determines how many concurrent request are made per partition."),
+      "For a partitioned group of 100K RFiles, those files are grouped by"
+          + " tablet server. Then a remote tablet server is asked to gather summary"
+          + " data. This setting determines how many concurrent request are made per"
+          + " partition."),
   TSERV_SUMMARY_RETRIEVAL_THREADS("tserver.summary.retrieval.threads", "10", PropertyType.COUNT,
-      "The number of threads on each tablet server available to retrieve summary data, that is not currently in cache, from RFiles."),
+      "The number of threads on each tablet server available to retrieve"
+          + " summary data, that is not currently in cache, from RFiles."),
 
   // accumulo garbage collector properties
   GC_PREFIX("gc.", null, PropertyType.PREFIX,
@@ -587,10 +631,13 @@ public enum Property {
       "The SimpleDateFormat string used to configure "
           + "the date shown on the 'Recent Logs' monitor page"),
   MONITOR_RESOURCES_EXTERNAL("monitor.resources.external", "", PropertyType.STRING,
-      "A JSON Map of Strings. Each String should be an HTML tag of an external resource (JS or CSS) to be imported by the Monitor. \n"
-          + "Be sure to wrap with CDATA tags. If this value is set, all of the external resources in the <head> tag of the Monitor will be replaced with \n"
-          + "the tags set here. Be sure the jquery tag is first since other scripts will depend on it. The resources that are used by default "
-          + "can be seen in accumulo/server/monitor/src/main/resources/templates/default.ftl"),
+      "A JSON Map of Strings. Each String should be an HTML tag of an external"
+          + " resource (JS or CSS) to be imported by the Monitor. Be sure to wrap"
+          + " with CDATA tags. If this value is set, all of the external resources"
+          + " in the <head> tag of the Monitor will be replaced with the tags set here."
+          + " Be sure the jquery tag is first since other scripts will depend on it."
+          + " The resources that are used by default can be seen in"
+          + " accumulo/server/monitor/src/main/resources/templates/default.ftl"),
 
   TRACE_PREFIX("trace.", null, PropertyType.PREFIX,
       "Properties in this category affect the behavior of distributed tracing."),
@@ -611,7 +658,8 @@ public enum Property {
       "The password for the user used to store distributed traces"),
   @Sensitive
   TRACE_TOKEN_PROPERTY_PREFIX("trace.token.property.", null, PropertyType.PREFIX,
-      "The prefix used to create a token for storing distributed traces. For each property required by trace.token.type, place this prefix in front of it."),
+      "The prefix used to create a token for storing distributed traces. For"
+          + " each property required by trace.token.type, place this prefix in front of it."),
   TRACE_TOKEN_TYPE("trace.token.type", PasswordToken.class.getName(), PropertyType.CLASSNAME,
       "An AuthenticationToken type supported by the authorizer"),
 
@@ -629,14 +677,17 @@ public enum Property {
   TABLE_ARBITRARY_PROP_PREFIX("table.custom.", null, PropertyType.PREFIX,
       "Prefix to be used for user defined arbitrary properties."),
   TABLE_MAJC_RATIO("table.compaction.major.ratio", "3", PropertyType.FRACTION,
-      "Minimum ratio of total input size to maximum input RFile size for running a major compaction. When adjusting this property you may want to also "
-          + "adjust table.file.max. Want to avoid the situation where only merging minor compactions occur."),
+      "Minimum ratio of total input size to maximum input RFile size for"
+          + " running a major compaction. When adjusting this property you may want to"
+          + " also adjust table.file.max. Want to avoid the situation where only"
+          + " merging minor compactions occur."),
   TABLE_MAJC_COMPACTALL_IDLETIME("table.compaction.major.everything.idle", "1h",
       PropertyType.TIMEDURATION,
-      "After a tablet has been idle (no mutations) for this time period it may have all "
-          + "of its RFiles compacted into one. There is no guarantee an idle tablet will be compacted. "
-          + "Compactions of idle tablets are only started when regular compactions are not running. Idle "
-          + "compactions only take place for tablets that have one or more RFiles."),
+      "After a tablet has been idle (no mutations) for this time period it may"
+          + " have all of its RFiles compacted into one. There is no guarantee an idle"
+          + " tablet will be compacted. Compactions of idle tablets are only started"
+          + " when regular compactions are not running. Idle compactions only take"
+          + " place for tablets that have one or more RFiles."),
   TABLE_SPLIT_THRESHOLD("table.split.threshold", "1G", PropertyType.BYTES,
       "A tablet is split when the combined size of RFiles exceeds this amount."),
   TABLE_MAX_END_ROW_SIZE("table.split.endrow.size.max", "10K", PropertyType.BYTES,
@@ -650,7 +701,8 @@ public enum Property {
           + "tablet will be compacted."),
   TABLE_MINC_MAX_MERGE_FILE_SIZE("table.compaction.minor.merge.file.size.max", "0",
       PropertyType.BYTES,
-      "The max RFile size used for a merging minor compaction. The default value of 0 disables a max file size."),
+      "The max RFile size used for a merging minor compaction. The default"
+          + " value of 0 disables a max file size."),
   TABLE_SCAN_MAXMEM("table.scan.max.memory", "512K", PropertyType.BYTES,
       "The maximum amount of memory that will be used to cache results of a client query/scan. "
           + "Once this limit is reached, the buffered data is sent to the client."),
@@ -661,32 +713,41 @@ public enum Property {
       "This property can be set to allow the LoadBalanceByTable load balancer"
           + " to change the called Load Balancer for this table"),
   TABLE_FILE_COMPRESSION_TYPE("table.file.compress.type", "gz", PropertyType.STRING,
-      "Compression algorithm used on index and data blocks before they are written. Possible values: gz, snappy, lzo, none"),
+      "Compression algorithm used on index and data blocks before they are"
+          + " written. Possible values: gz, snappy, lzo, none"),
   TABLE_FILE_COMPRESSED_BLOCK_SIZE("table.file.compress.blocksize", "100K", PropertyType.BYTES,
       "The maximum size of data blocks in RFiles before they are compressed and written."),
   TABLE_FILE_COMPRESSED_BLOCK_SIZE_INDEX("table.file.compress.blocksize.index", "128K",
       PropertyType.BYTES,
       "The maximum size of index blocks in RFiles before they are compressed and written."),
   TABLE_FILE_BLOCK_SIZE("table.file.blocksize", "0B", PropertyType.BYTES,
-      "The HDFS block size used when writing RFiles. When set to 0B, the value/defaults of HDFS property 'dfs.block.size' will be used."),
+      "The HDFS block size used when writing RFiles. When set to 0B, the"
+          + " value/defaults of HDFS property 'dfs.block.size' will be used."),
   TABLE_FILE_REPLICATION("table.file.replication", "0", PropertyType.COUNT,
-      "The number of replicas for a table's RFiles in HDFS. When set to 0, HDFS defaults are used."),
+      "The number of replicas for a table's RFiles in HDFS. When set to 0, HDFS"
+          + " defaults are used."),
   TABLE_FILE_MAX("table.file.max", "15", PropertyType.COUNT,
-      "The maximum number of RFiles each tablet in a table can have. When adjusting this property you may want to consider adjusting"
-          + " table.compaction.major.ratio also. Setting this property to 0 will make it default to tserver.scan.files.open.max-1, this will prevent a"
-          + " tablet from having more RFiles than can be opened. Setting this property low may throttle ingest and increase query performance."),
+      "The maximum number of RFiles each tablet in a table can have. When"
+          + " adjusting this property you may want to consider adjusting"
+          + " table.compaction.major.ratio also. Setting this property to 0 will make"
+          + " it default to tserver.scan.files.open.max-1, this will prevent a tablet"
+          + " from having more RFiles than can be opened. Setting this property low may"
+          + " throttle ingest and increase query performance."),
   TABLE_FILE_SUMMARY_MAX_SIZE("table.file.summary.maxSize", "256K", PropertyType.BYTES,
-      "The maximum size summary that will be stored. The number of"
-          + " RFiles that had summary data exceeding this threshold is reported by Summary.getFileStatistics().getLarge().  When adjusting this"
-          + " consider the expected number RFiles with summaries on each tablet server and the summary cache size."),
+      "The maximum size summary that will be stored. The number of RFiles that"
+          + " had summary data exceeding this threshold is reported by"
+          + " Summary.getFileStatistics().getLarge(). When adjusting this consider the"
+          + " expected number RFiles with summaries on each tablet server and the"
+          + " summary cache size."),
   @Deprecated
   TABLE_WALOG_ENABLED("table.walog.enabled", "true", PropertyType.BOOLEAN,
       "This setting is deprecated.  Use table.durability=none instead."),
   TABLE_BLOOM_ENABLED("table.bloom.enabled", "false", PropertyType.BOOLEAN,
       "Use bloom filters on this table."),
   TABLE_BLOOM_LOAD_THRESHOLD("table.bloom.load.threshold", "1", PropertyType.COUNT,
-      "This number of seeks that would actually use a bloom filter must occur before a RFile's bloom filter is loaded."
-          + " Set this to zero to initiate loading of bloom filters when a RFile is opened."),
+      "This number of seeks that would actually use a bloom filter must occur"
+          + " before a RFile's bloom filter is loaded. Set this to zero to initiate"
+          + " loading of bloom filters when a RFile is opened."),
   TABLE_BLOOM_SIZE("table.bloom.size", "1048576", PropertyType.COUNT,
       "Bloom filter size, as number of keys."),
   TABLE_BLOOM_ERRORRATE("table.bloom.error.rate", "0.5%", PropertyType.FRACTION,
@@ -780,25 +841,34 @@ public enum Property {
   TABLE_REPLICATION("table.replication", "false", PropertyType.BOOLEAN,
       "Is replication enabled for the given table"),
   TABLE_REPLICATION_TARGET("table.replication.target.", null, PropertyType.PREFIX,
-      "Enumerate a mapping of other systems which this table should "
-          + "replicate their data to. The key suffix is the identifying cluster name and the value is an identifier for a location on the target system, "
-          + "e.g. the ID of the table on the target to replicate to"),
+      "Enumerate a mapping of other systems which this table should replicate"
+          + " their data to. The key suffix is the identifying cluster name and the"
+          + " value is an identifier for a location on the target system, e.g. the ID"
+          + " of the table on the target to replicate to"),
   TABLE_SAMPLER("table.sampler", "", PropertyType.CLASSNAME,
-      "The name of a class that implements org.apache.accumulo.core.Sampler.  Setting this option enables storing a sample of data which can be scanned."
-          + "  Always having a current sample can useful for query optimization and data comprehension.   After enabling sampling for an existing table, a compaction "
-          + "is needed to compute the sample for existing data.  The compact command in the shell has an option to only compact RFiles without sample data."),
+      "The name of a class that implements org.apache.accumulo.core.Sampler."
+          + " Setting this option enables storing a sample of data which can be"
+          + " scanned. Always having a current sample can useful for query optimization"
+          + " and data comprehension. After enabling sampling for an existing table,"
+          + " a compaction is needed to compute the sample for existing data. The"
+          + " compact command in the shell has an option to only compact RFiles without"
+          + " sample data."),
   TABLE_SAMPLER_OPTS("table.sampler.opt.", null, PropertyType.PREFIX,
       "The property is used to set options for a sampler. If a sample had two"
           + " options like hasher and modulous, then the two properties"
           + " table.sampler.opt.hasher=${hash algorithm} and"
           + " table.sampler.opt.modulous=${mod} would be set."),
   TABLE_SUSPEND_DURATION("table.suspend.duration", "0s", PropertyType.TIMEDURATION,
-      "For tablets belonging to this table: When a tablet server dies, allow the tablet server this duration to revive before reassigning its tablets"
-          + "to other tablet servers."),
+      "For tablets belonging to this table: When a tablet server dies, allow"
+          + " the tablet server this duration to revive before reassigning its tablets"
+          + " to other tablet servers."),
   TABLE_SUMMARIZER_PREFIX("table.summarizer.", null, PropertyType.PREFIX,
-      "Prefix for configuring summarizers for a table.  Using this prefix multiple summarizers can be configured with options for each one. Each summarizer configured "
-          + "should have a unique id, this id can be anything. To add a summarizer set table.summarizer.<unique id>=<summarizer class name>.  If the summarizer has options, "
-          + "then for each option set table.summarizer.<unique id>.opt.<key>=<value>."),
+      "Prefix for configuring summarizers for a table. Using this prefix"
+          + " multiple summarizers can be configured with options for each one. Each"
+          + " summarizer configured should have a unique id, this id can be anything."
+          + " To add a summarizer set table.summarizer.<unique id>=<summarizer class"
+          + " name>. If the summarizer has options, then for each option set"
+          + " table.summarizer.<unique id>.opt.<key>=<value>."),
 
   // VFS ClassLoader properties
   VFS_CLASSLOADER_SYSTEM_CLASSPATH_PROPERTY(
diff --git a/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java b/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java
index e448ef8..ff6d5e8 100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java
@@ -51,18 +51,24 @@ public enum PropertyType {
 
   BYTES("bytes", boundedUnits(0, Long.MAX_VALUE, false, "", "B", "K", "M", "G"),
       "A positive integer optionally followed by a unit of memory (whitespace disallowed).\n"
-          + "If no unit is specified, bytes are assumed. Valid units are 'B', 'K', 'M' or 'G' for bytes, kilobytes, megabytes, gigabytes.\n"
+          + "If no unit is specified, bytes are assumed. Valid units are 'B',"
+          + " 'K', 'M' or 'G' for bytes, kilobytes, megabytes, gigabytes.\n"
           + "Examples of valid memories are '1024', '20B', '100K', '1500M', '2G', '20%'.\n"
-          + "Examples of invalid memories are '1M500K', '1M 2K', '1MB', '1.5G', '1,024K', '', and 'a'.\n"
+          + "Examples of invalid memories are '1M500K', '1M 2K', '1MB', '1.5G',"
+          + " '1,024K', '', and 'a'.\n"
           + "Unless otherwise stated, the max value for the memory represented in bytes is "
           + Long.MAX_VALUE),
 
   MEMORY("memory", boundedUnits(0, Long.MAX_VALUE, false, "", "B", "K", "M", "G", "%"),
-      "A positive integer optionally followed by a unit of memory or a percentage (whitespace disallowed).\n"
-          + "If a percentage is specified, memory will be a percentage of the max memory allocated to a Java process (set by the JVM option -Xmx).\n"
-          + "If no unit is specified, bytes are assumed. Valid units are 'B', 'K', 'M', 'G', '%' for bytes, kilobytes, megabytes, gigabytes, and percentage.\n"
+      "A positive integer optionally followed by a unit of memory or a"
+          + " percentage (whitespace disallowed).\n"
+          + "If a percentage is specified, memory will be a percentage of the"
+          + " max memory allocated to a Java process (set by the JVM option -Xmx).\n"
+          + "If no unit is specified, bytes are assumed. Valid units are 'B',"
+          + " 'K', 'M', 'G', '%' for bytes, kilobytes, megabytes, gigabytes, and" + " percentage.\n"
           + "Examples of valid memories are '1024', '20B', '100K', '1500M', '2G', '20%'.\n"
-          + "Examples of invalid memories are '1M500K', '1M 2K', '1MB', '1.5G', '1,024K', '', and 'a'.\n"
+          + "Examples of invalid memories are '1M500K', '1M 2K', '1MB', '1.5G',"
+          + " '1,024K', '', and 'a'.\n"
           + "Unless otherwise stated, the max value for the memory represented in bytes is "
           + Long.MAX_VALUE),
 
@@ -76,8 +82,10 @@ public enum PropertyType {
 
   @SuppressWarnings("unchecked")
   PORT("port", or(new Bounds(1024, 65535), in(true, "0"), new PortRange("\\d{4,5}-\\d{4,5}")),
-      "An positive integer in the range 1024-65535 (not already in use or specified elsewhere in the configuration),\n"
-          + "zero to indicate any open ephemeral port, or a range of positive integers specified as M-N"),
+      "An positive integer in the range 1024-65535 (not already in use or"
+          + " specified elsewhere in the configuration),\n"
+          + "zero to indicate any open ephemeral port, or a range of positive"
+          + " integers specified as M-N"),
 
   COUNT("count", new Bounds(0, Integer.MAX_VALUE),
       "A non-negative integer in the range of 0-" + Integer.MAX_VALUE),
@@ -90,13 +98,15 @@ public enum PropertyType {
           + "Examples of invalid fractions/percentages are '', '10 percent'," + " 'Hulk Hogan'"),
 
   PATH("path", x -> true,
-      "A string that represents a filesystem path, which can be either relative or absolute to some directory. The filesystem depends on the property. The "
-          + "following environment variables will be substituted: "
+      "A string that represents a filesystem path, which can be either relative"
+          + " or absolute to some directory. The filesystem depends on the property."
+          + " The following environment variables will be substituted: "
           + Constants.PATH_PROPERTY_ENV_VARS),
 
   ABSOLUTEPATH("absolute path",
       x -> x == null || x.trim().isEmpty() || new Path(x.trim()).isAbsolute(),
-      "An absolute filesystem path. The filesystem depends on the property. This is the same as path, but enforces that its root is explicitly specified."),
+      "An absolute filesystem path. The filesystem depends on the property."
+          + " This is the same as path, but enforces that its root is explicitly" + " specified."),
 
   CLASSNAME("java class", new Matches("[\\w$.]*"),
       "A fully qualified java class name representing a class on the classpath.\n"
@@ -110,7 +120,8 @@ public enum PropertyType {
       "One of 'none', 'log', 'flush' or 'sync'."),
 
   STRING("string", x -> true,
-      "An arbitrary string of characters whose format is unspecified and interpreted based on the context of the property to which it applies."),
+      "An arbitrary string of characters whose format is unspecified and"
+          + " interpreted based on the context of the property to which it applies."),
 
   BOOLEAN("boolean", in(false, null, "true", "false"),
       "Has a value of either 'true' or 'false' (case-insensitive)"),
diff --git a/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java b/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
index 5d8381b..419c4fd 100644
--- a/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
+++ b/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
@@ -570,8 +570,10 @@ public class LruBlockCache extends SynchronousLoadingBlockCache implements Block
     float freeMB = ((float) freeSize) / ((float) (1024 * 1024));
     float maxMB = ((float) this.conf.getMaxSize()) / ((float) (1024 * 1024));
     log.debug(
-        "Cache Stats: Sizes: Total={}MB ({}), Free={}MB ({}), Max={}MB ({}), Counts: Blocks={}, Access={}, Hit={}, Miss={}, Evictions={}, Evicted={},"
-            + "Ratios: Hit Ratio={}%, Miss Ratio={}%, Evicted/Run={}, Duplicate Reads={}",
+        "Cache Stats: Sizes: Total={}MB ({}), Free={}MB ({}), Max={}MB"
+            + " ({}), Counts: Blocks={}, Access={}, Hit={}, Miss={}, Evictions={},"
+            + " Evicted={},Ratios: Hit Ratio={}%, Miss Ratio={}%, Evicted/Run={},"
+            + " Duplicate Reads={}",
         sizeMB, totalSize, freeMB, freeSize, maxMB, this.conf.getMaxSize(), size(),
         stats.requestCount(), stats.hitCount(), stats.getMissCount(), stats.getEvictionCount(),
         stats.getEvictedCount(), stats.getHitRatio() * 100, stats.getMissRatio() * 100,
diff --git a/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java b/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java
index 1c2119b..ada3936 100644
--- a/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java
@@ -242,30 +242,39 @@ public class IteratorUtil {
     }
   }
 
-  public static <K extends WritableComparable<?>,V extends Writable> SortedKeyValueIterator<K,V> loadIterators(
-      IteratorScope scope, SortedKeyValueIterator<K,V> source, KeyExtent extent,
-      AccumuloConfiguration conf, List<IterInfo> ssiList, Map<String,Map<String,String>> ssio,
-      IteratorEnvironment env, boolean useAccumuloClassLoader) throws IOException {
+  // @formatter:off
+  public static <K extends WritableComparable<?>,V extends Writable> SortedKeyValueIterator<K,V>
+    loadIterators(
+  // @formatter:on
+          IteratorScope scope, SortedKeyValueIterator<K,V> source, KeyExtent extent,
+          AccumuloConfiguration conf, List<IterInfo> ssiList, Map<String,Map<String,String>> ssio,
+          IteratorEnvironment env, boolean useAccumuloClassLoader) throws IOException {
 
     return loadIteratorsHelper(scope, source, extent, conf, ssiList, ssio, env,
         useAccumuloClassLoader, conf.get(Property.TABLE_CLASSPATH));
   }
 
-  public static <K extends WritableComparable<?>,V extends Writable> SortedKeyValueIterator<K,V> loadIterators(
-      IteratorScope scope, SortedKeyValueIterator<K,V> source, KeyExtent extent,
-      AccumuloConfiguration conf, List<IterInfo> ssiList, Map<String,Map<String,String>> ssio,
-      IteratorEnvironment env, boolean useAccumuloClassLoader, String classLoaderContext)
-      throws IOException {
+  // @formatter:off
+  public static <K extends WritableComparable<?>,V extends Writable> SortedKeyValueIterator<K,V>
+    loadIterators(
+  // @formatter:on
+          IteratorScope scope, SortedKeyValueIterator<K,V> source, KeyExtent extent,
+          AccumuloConfiguration conf, List<IterInfo> ssiList, Map<String,Map<String,String>> ssio,
+          IteratorEnvironment env, boolean useAccumuloClassLoader, String classLoaderContext)
+          throws IOException {
 
     return loadIteratorsHelper(scope, source, extent, conf, ssiList, ssio, env,
         useAccumuloClassLoader, classLoaderContext);
   }
 
-  private static <K extends WritableComparable<?>,V extends Writable> SortedKeyValueIterator<K,V> loadIteratorsHelper(
-      IteratorScope scope, SortedKeyValueIterator<K,V> source, KeyExtent extent,
-      AccumuloConfiguration conf, List<IterInfo> ssiList, Map<String,Map<String,String>> ssio,
-      IteratorEnvironment env, boolean useAccumuloClassLoader, String classLoaderContext)
-      throws IOException {
+  // @formatter:off
+  private static <K extends WritableComparable<?>,V extends Writable> SortedKeyValueIterator<K,V>
+    loadIteratorsHelper(
+  // @formatter:on
+          IteratorScope scope, SortedKeyValueIterator<K,V> source, KeyExtent extent,
+          AccumuloConfiguration conf, List<IterInfo> ssiList, Map<String,Map<String,String>> ssio,
+          IteratorEnvironment env, boolean useAccumuloClassLoader, String classLoaderContext)
+          throws IOException {
 
     List<IterInfo> iters = new ArrayList<>(ssiList);
     Map<String,Map<String,String>> allOptions = new HashMap<>();
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 5f3c8d7..6bdc2e3 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
@@ -165,14 +165,13 @@ public class CachingHDFSSecretKeyEncryptionStrategy implements SecretKeyEncrypti
             "Could not initialize key encryption cache, malformed key encryption key file", e);
       } catch (IOException e) {
         if (invalidFile) {
-          throw new IOException(
-              "Could not initialize key encryption cache, malformed key encryption key file. Expected key of lengh "
-                  + keyEncryptionKeyLength + " but file contained "
-                  + (fs.getFileStatus(pathToKey).getLen() - 4) + "bytes for key encryption key.");
+          throw new IOException("Could not initialize key encryption cache,"
+              + " malformed key encryption key file. Expected key of lengh "
+              + keyEncryptionKeyLength + " but file contained "
+              + (fs.getFileStatus(pathToKey).getLen() - 4) + "bytes for key encryption key.");
         } else {
-          throw new IOException(
-              "Could not initialize key encryption cache, unable to access or find key encryption key file",
-              e);
+          throw new IOException("Could not initialize key encryption cache,"
+              + " unable to access or find key encryption key file", e);
         }
       } finally {
         IOUtils.closeQuietly(in);
diff --git a/core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModule.java b/core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModule.java
index ebbd8fe..aadfd40 100644
--- a/core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModule.java
+++ b/core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModule.java
@@ -74,7 +74,8 @@ public class DefaultCryptoModule implements CryptoModule {
   public CryptoModuleParameters initializeCipher(CryptoModuleParameters params) {
 
     log.trace(String.format(
-        "Using cipher suite \"%s\" with key length %d with RNG \"%s\" and RNG provider \"%s\" and key encryption strategy \"%s\"",
+        "Using cipher suite \"%s\" with key length %d with"
+            + " RNG \"%s\" and RNG provider \"%s\" and key encryption strategy" + " \"%s\"",
         params.getCipherSuite(), params.getKeyLength(), params.getRandomNumberGenerator(),
         params.getRandomNumberGeneratorProvider(), params.getKeyEncryptionStrategyClass()));
 
@@ -98,12 +99,12 @@ public class DefaultCryptoModule implements CryptoModule {
     try {
       initCipher(params, cipher, Cipher.ENCRYPT_MODE);
     } catch (InvalidKeyException e) {
-      log.error(
-          "Accumulo encountered an unknown error in generating the secret key object (SecretKeySpec) for an encrypted stream");
+      log.error("Accumulo encountered an unknown error in generating the secret"
+          + " key object (SecretKeySpec) for an encrypted stream");
       throw new RuntimeException(e);
     } catch (InvalidAlgorithmParameterException e) {
-      log.error(
-          "Accumulo encountered an unknown error in setting up the initialization vector for an encrypted stream");
+      log.error("Accumulo encountered an unknown error in setting up the"
+          + " initialization vector for an encrypted stream");
       throw new RuntimeException(e);
     }
 
diff --git a/core/src/main/java/org/apache/accumulo/core/summary/Gatherer.java b/core/src/main/java/org/apache/accumulo/core/summary/Gatherer.java
index 56e9d51..8163cd1 100644
--- a/core/src/main/java/org/apache/accumulo/core/summary/Gatherer.java
+++ b/core/src/main/java/org/apache/accumulo/core/summary/Gatherer.java
@@ -209,10 +209,9 @@ public class Gatherer {
         location = tservers.get(idx);
       }
 
+      // merge contiguous ranges
       List<Range> merged = Range
-          .mergeOverlapping(Lists.transform(entry.getValue(), tm -> tm.getExtent().toDataRange())); // merge
-                                                                                                    // contiguous
-                                                                                                    // ranges
+          .mergeOverlapping(Lists.transform(entry.getValue(), tm -> tm.getExtent().toDataRange()));
       List<TRowRange> ranges = merged.stream().map(r -> toClippedExtent(r).toThrift())
           .collect(Collectors.toList()); // clip ranges to queried range
 
diff --git a/core/src/main/java/org/apache/accumulo/core/summary/SummaryReader.java b/core/src/main/java/org/apache/accumulo/core/summary/SummaryReader.java
index e87bc22..74e1c35 100644
--- a/core/src/main/java/org/apache/accumulo/core/summary/SummaryReader.java
+++ b/core/src/main/java/org/apache/accumulo/core/summary/SummaryReader.java
@@ -174,8 +174,10 @@ public class SummaryReader {
   public static SummaryReader load(Configuration conf, AccumuloConfiguration aConf,
       InputStream inputStream, long length, Predicate<SummarizerConfiguration> summarySelector,
       SummarizerFactory factory) throws IOException {
-    org.apache.accumulo.core.file.blockfile.impl.CachableBlockFile.Reader bcReader = new CachableBlockFile.Reader(
-        (InputStream & Seekable) inputStream, length, conf, aConf);
+    // @formatter:off
+    org.apache.accumulo.core.file.blockfile.impl.CachableBlockFile.Reader bcReader =
+      new CachableBlockFile.Reader((InputStream & Seekable) inputStream, length, conf, aConf);
+    // @formatter:on
     return load(bcReader, summarySelector, factory);
   }
 
@@ -242,8 +244,10 @@ public class SummaryReader {
     // read summarizer configuration
     String summarizerClazz = in.readUTF();
     String configId = in.readUTF();
-    org.apache.accumulo.core.client.summary.SummarizerConfiguration.Builder scb = SummarizerConfiguration
-        .builder(summarizerClazz).setPropertyId(configId);
+    // @formatter:off
+    org.apache.accumulo.core.client.summary.SummarizerConfiguration.Builder scb =
+      SummarizerConfiguration.builder(summarizerClazz).setPropertyId(configId);
+    // @formatter:on
     int numOpts = WritableUtils.readVInt(in);
     for (int i = 0; i < numOpts; i++) {
       String k = in.readUTF();
diff --git a/core/src/test/java/org/apache/accumulo/core/conf/ConfigSanityCheckTest.java b/core/src/test/java/org/apache/accumulo/core/conf/ConfigSanityCheckTest.java
index 6403593..1841d80 100644
--- a/core/src/test/java/org/apache/accumulo/core/conf/ConfigSanityCheckTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/conf/ConfigSanityCheckTest.java
@@ -26,8 +26,10 @@ public class ConfigSanityCheckTest {
   private Map<String,String> m;
 
   // These are used when a valid class is needed for testing
-  private static final String DEFAULT_CRYPTO_MODULE = "org.apache.accumulo.core.security.crypto.DefaultCryptoModule";
-  private static final String DEFAULT_SECRET_KEY_ENCRYPTION_STRATEGY = "org.apache.accumulo.core.security.crypto.NonCachingSecretKeyEncryptionStrategy";
+  private static final String PROPS_PREFIX = "org.apache.accumulo.core.security.crypto.";
+  private static final String DEFAULT_CRYPTO_MODULE = PROPS_PREFIX + "DefaultCryptoModule";
+  private static final String DEFAULT_SECRET_KEY_ENCRYPTION_STRATEGY = PROPS_PREFIX
+      + "NonCachingSecretKeyEncryptionStrategy";
 
   @Before
   public void setUp() {
diff --git a/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java b/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
index 2f24f30..30a696b 100644
--- a/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
+++ b/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
@@ -137,8 +137,8 @@ public class Proxy implements KeywordExecutable {
         if (is != null) {
           props.load(is);
         } else {
-          System.err.println(
-              "proxy.properties needs to be specified as argument (using -p) or on the classpath (by putting the file in conf/)");
+          System.err.println("proxy.properties needs to be specified as"
+              + " argument (using -p) or on the classpath (by putting the file in conf/)");
           System.exit(-1);
         }
       }
diff --git a/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java b/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
index 44b18a8..aaff32c 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
@@ -182,10 +182,10 @@ public class Accumulo {
               String setting = new String(buffer, 0, bytes, UTF_8);
               setting = setting.trim();
               if (bytes > 0 && Integer.parseInt(setting) > 10) {
-                log.warn(
-                    "System swappiness setting is greater than ten ({}) which can cause time-sensitive operations to be delayed. "
-                        + " Accumulo is time sensitive because it needs to maintain distributed lock agreement.",
-                    setting);
+                log.warn("System swappiness setting is greater than ten ({})"
+                    + " which can cause time-sensitive operations to be delayed."
+                    + " Accumulo is time sensitive because it needs to maintain"
+                    + " distributed lock agreement.", setting);
               }
             }
           }
diff --git a/server/base/src/main/java/org/apache/accumulo/server/ServerOpts.java b/server/base/src/main/java/org/apache/accumulo/server/ServerOpts.java
index b173ae3..c49f6a1 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/ServerOpts.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/ServerOpts.java
@@ -40,7 +40,8 @@ public class ServerOpts extends Help {
   }
 
   @Parameter(names = "-o", splitter = NullSplitter.class,
-      description = "Overrides configuration set in accumulo-site.xml (but NOT system-wide config set in Zookeeper). Expected format: -o <key>=<value>")
+      description = "Overrides configuration set in accumulo-site.xml (but NOT system-wide config"
+          + " set in Zookeeper). Expected format: -o <key>=<value>")
   private List<String> properties = new ArrayList<>();
 
   public String getAddress() {
diff --git a/server/base/src/main/java/org/apache/accumulo/server/client/BulkImporter.java b/server/base/src/main/java/org/apache/accumulo/server/client/BulkImporter.java
index 3b5aebf..93646c4 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/client/BulkImporter.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/client/BulkImporter.java
@@ -628,8 +628,10 @@ public class BulkImporter {
           files.put(entry.getKey(), tabletFiles);
 
           for (PathSize pathSize : entry.getValue()) {
-            org.apache.accumulo.core.data.thrift.MapFileInfo mfi = new org.apache.accumulo.core.data.thrift.MapFileInfo(
-                pathSize.estSize);
+            // @formatter:off
+            org.apache.accumulo.core.data.thrift.MapFileInfo mfi =
+              new org.apache.accumulo.core.data.thrift.MapFileInfo(pathSize.estSize);
+            // @formatter:on
             tabletFiles.put(pathSize.path.toString(), mfi);
           }
         }
diff --git a/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java b/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java
index 2409f30..05df085 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java
@@ -239,9 +239,8 @@ public class VolumeManagerImpl implements VolumeManager {
           synchronized (WARNED_ABOUT_SYNCONCLOSE) {
             if (!WARNED_ABOUT_SYNCONCLOSE.contains(entry.getKey())) {
               WARNED_ABOUT_SYNCONCLOSE.add(entry.getKey());
-              log.warn(
-                  "{} set to false in hdfs-site.xml: data loss is possible on hard system reset or power loss",
-                  DFS_DATANODE_SYNCONCLOSE);
+              log.warn("{} set to false in hdfs-site.xml: data loss is possible"
+                  + " on hard system reset or power loss", DFS_DATANODE_SYNCONCLOSE);
             }
           }
         }
diff --git a/server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java b/server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java
index 3fb3953..6f97106 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/init/Initialize.java
@@ -252,8 +252,8 @@ public class Initialize implements KeywordExecutable {
     log.info("Accumulo data dirs are {}",
         Arrays.asList(VolumeConfiguration.getVolumeUris(SiteConfiguration.getInstance())));
     log.info("Zookeeper server is {}", sconf.get(Property.INSTANCE_ZK_HOST));
-    log.info(
-        "Checking if Zookeeper is available. If this hangs, then you need to make sure zookeeper is running");
+    log.info("Checking if Zookeeper is available. If this hangs, then you need"
+        + " to make sure zookeeper is running");
     if (!zookeeperAvailable()) {
       // ACCUMULO-3651 Changed level to error and added FATAL to message for slf4j compatibility
       log.error("FATAL Zookeeper needs to be up and running in order to init. Exiting ...");
@@ -270,9 +270,9 @@ public class Initialize implements KeywordExecutable {
       c.println();
       c.println("You can change the instance secret in accumulo by using:");
       c.println("   bin/accumulo " + org.apache.accumulo.server.util.ChangeSecret.class.getName());
-      c.println(
-          "You will also need to edit your secret in your configuration file by adding the property instance.secret to your accumulo-site.xml. "
-              + "Without this accumulo will not operate correctly");
+      c.println("You will also need to edit your secret in your configuration"
+          + " file by adding the property instance.secret to your"
+          + " accumulo-site.xml. Without this accumulo will not operate" + " correctly");
     }
     try {
       if (isInitialized(fs)) {
@@ -307,9 +307,8 @@ public class Initialize implements KeywordExecutable {
     } else if (!instanceDfsDir.isEmpty()) {
       log.error("FATAL: Change the property {} to use a different filesystem,", INSTANCE_DFS_URI);
     } else {
-      log.error(
-          "FATAL: You are using the default URI for the filesystem. Set the property {} to use a different filesystem,",
-          Property.INSTANCE_VOLUMES);
+      log.error("FATAL: You are using the default URI for the filesystem. Set"
+          + " the property {} to use a different filesystem,", Property.INSTANCE_VOLUMES);
     }
     log.error("FATAL: or change the property {} to use a different directory.", INSTANCE_DFS_DIR);
     log.error("FATAL: The current value of {} is |{}|", INSTANCE_DFS_URI, instanceDfsUri);
@@ -384,10 +383,11 @@ public class Initialize implements KeywordExecutable {
         // Try to determine when we couldn't find an appropriate core-site.xml on the classpath
         if (defaultFsUri.equals(fsDefaultName) && defaultFsUri.equals(fsDefaultFS)) {
           log.error(
-              "FATAL: Default filesystem value ('fs.defaultFS' or 'fs.default.name') of '{}' was found in the Hadoop configuration",
+              "FATAL: Default filesystem value ('fs.defaultFS' or"
+                  + " 'fs.default.name') of '{}' was found in the Hadoop configuration",
               defaultFsUri);
-          log.error(
-              "FATAL: Please ensure that the Hadoop core-site.xml is on the classpath using 'general.classpaths' in accumulo-site.xml");
+          log.error("FATAL: Please ensure that the Hadoop core-site.xml is on"
+              + " the classpath using 'general.classpaths' in accumulo-site.xml");
         }
       }
 
@@ -439,8 +439,8 @@ public class Initialize implements KeywordExecutable {
 
     if (opts.uploadAccumuloSite) {
       try {
-        log.info(
-            "Uploading properties in accumulo-site.xml to Zookeeper. Properties that cannot be set in Zookeeper will be skipped:");
+        log.info("Uploading properties in accumulo-site.xml to Zookeeper."
+            + " Properties that cannot be set in Zookeeper will be skipped:");
         Map<String,String> entries = new TreeMap<>();
         SiteConfiguration.getInstance().getProperties(entries, x -> true, false);
         for (Map.Entry<String,String> entry : entries.entrySet()) {
@@ -858,8 +858,10 @@ public class Initialize implements KeywordExecutable {
         .fromString(ZooUtil.getInstanceIDFromHdfs(iidPath, SiteConfiguration.getInstance()));
     for (Pair<Path,Path> replacementVolume : ServerConstants.getVolumeReplacements()) {
       if (aBasePath.equals(replacementVolume.getFirst()))
-        log.error("{} is set to be replaced in {} and should not appear in {}"
-            + ". It is highly recommended that this property be removed as data could still be written to this volume.",
+        log.error(
+            "{} is set to be replaced in {} and should not appear in {}."
+                + " It is highly recommended that this property be removed as data"
+                + " could still be written to this volume.",
             aBasePath, Property.INSTANCE_VOLUMES_REPLACEMENTS, Property.INSTANCE_VOLUMES);
     }
 
@@ -936,8 +938,8 @@ public class Initialize implements KeywordExecutable {
         if (isInitialized(fs)) {
           if (!opts.forceResetSecurity) {
             ConsoleReader c = getConsoleReader();
-            String userEnteredName = c.readLine(
-                "WARNING: This will remove all users from Accumulo! If you wish to proceed enter the instance name: ");
+            String userEnteredName = c.readLine("WARNING: This will remove all"
+                + " users from Accumulo! If you wish to proceed enter the instance" + " name: ");
             if (userEnteredName != null && !instance.getInstanceName().equals(userEnteredName)) {
               log.error("Aborted reset security: Instance name did not match current instance.");
               return;
diff --git a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
index 0b2ffa3..4c8be24 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
@@ -89,10 +89,10 @@ public class HostRegexTableLoadBalancer extends TableLoadBalancer implements Con
   public static final String HOST_BALANCER_OOB_CHECK_KEY = PROP_PREFIX
       + "balancer.host.regex.oob.period";
   private static final String HOST_BALANCER_OOB_DEFAULT = "5m";
-  public static final String HOST_BALANCER_REGEX_USING_IPS_KEY = Property.TABLE_ARBITRARY_PROP_PREFIX
-      .getKey() + "balancer.host.regex.is.ip";
-  public static final String HOST_BALANCER_REGEX_MAX_MIGRATIONS_KEY = Property.TABLE_ARBITRARY_PROP_PREFIX
-      .getKey() + "balancer.host.regex.concurrent.migrations";
+  public static final String HOST_BALANCER_REGEX_USING_IPS_KEY = PROP_PREFIX
+      + "balancer.host.regex.is.ip";
+  public static final String HOST_BALANCER_REGEX_MAX_MIGRATIONS_KEY = PROP_PREFIX
+      + "balancer.host.regex.concurrent.migrations";
   private static final int HOST_BALANCER_REGEX_MAX_MIGRATIONS_DEFAULT = 250;
   protected static final String DEFAULT_POOL = "HostTableLoadBalancer.ALL";
   private static final int DEFAULT_OUTSTANDING_MIGRATIONS = 0;
diff --git a/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsConfiguration.java b/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsConfiguration.java
index ac5f7aa..01ca214 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsConfiguration.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/metrics/MetricsConfiguration.java
@@ -154,8 +154,8 @@ public class MetricsConfiguration {
         .getResource("accumulo-metrics.xml");
     if (metricsUrl == null) {
       if (!alreadyWarned)
-        log.warn(
-            "accumulo-metrics.xml was not found on classpath. Metrics collection will be disabled.");
+        log.warn("accumulo-metrics.xml was not found on classpath. Metrics"
+            + " collection will be disabled.");
       alreadyWarned = true;
       notFound = true;
       return;
diff --git a/server/base/src/main/java/org/apache/accumulo/server/rpc/TCredentialsUpdatingInvocationHandler.java b/server/base/src/main/java/org/apache/accumulo/server/rpc/TCredentialsUpdatingInvocationHandler.java
index 563131b..f2d4f6b 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/rpc/TCredentialsUpdatingInvocationHandler.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/rpc/TCredentialsUpdatingInvocationHandler.java
@@ -111,9 +111,8 @@ public class TCredentialsUpdatingInvocationHandler<I> implements InvocationHandl
     if (!KerberosToken.class.isAssignableFrom(tokenClass)
         && !SystemToken.class.isAssignableFrom(tokenClass)) {
       // Don't include messages about SystemToken since it's internal
-      log.debug(
-          "Will not update principal on authentication tokens other than KerberosToken. Received {}",
-          tokenClass);
+      log.debug("Will not update principal on authentication tokens other than"
+          + " KerberosToken. Received {}", tokenClass);
       throw new ThriftSecurityException("Did not receive a valid token",
           SecurityErrorCode.BAD_CREDENTIALS);
     }
diff --git a/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java b/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
index 2aa07e1..959dfff 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
@@ -457,9 +457,9 @@ public class TServerUtils {
     // this host, fail quickly and inform them to update
     // their configuration.
     if (!hostname.equals(fqdn)) {
-      log.error(
-          "Expected hostname of '{}' but got '{}'. Ensure the entries in the Accumulo hosts files (e.g. masters, tservers) are the FQDN for each host when using SASL.",
-          fqdn, hostname);
+      log.error("Expected hostname of '{}' but got '{}'. Ensure the entries in"
+          + " the Accumulo hosts files (e.g. masters, tservers) are the FQDN for"
+          + " each host when using SASL.", fqdn, hostname);
       transport.close();
       throw new RuntimeException("SASL requires that the address the thrift"
           + " server listens on is the same as the FQDN for this host");
diff --git a/server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java b/server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java
index 6a92eb3..b169294 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/security/SecurityOperation.java
@@ -187,9 +187,8 @@ public class SecurityOperation {
         }
       } else {
         if (!(context.getCredentials().equals(creds))) {
-          log.debug(
-              "Provided credentials did not match server's expected credentials. Expected {} but got {}",
-              context.getCredentials(), creds);
+          log.debug("Provided credentials did not match server's expected"
+              + " credentials. Expected {} but got {}", context.getCredentials(), creds);
           throw new ThriftSecurityException(creds.getPrincipal(),
               SecurityErrorCode.BAD_CREDENTIALS);
         }
@@ -793,9 +792,8 @@ public class SecurityOperation {
 
     try {
       permHandle.grantNamespacePermission(user, namespace, permission);
-      log.info(
-          "Granted namespace permission {} for user {} on the namespace {} at the request of user {}",
-          permission, user, namespace, c.getPrincipal());
+      log.info("Granted namespace permission {} for user {} on the namespace {}"
+          + " at the request of user {}", permission, user, namespace, c.getPrincipal());
     } catch (AccumuloSecurityException e) {
       throw e.asThriftException();
     } catch (NamespaceNotFoundException e) {
@@ -849,9 +847,8 @@ public class SecurityOperation {
 
     try {
       permHandle.revokeNamespacePermission(user, namespace, permission);
-      log.info(
-          "Revoked namespace permission {} for user {} on the namespace {} at the request of user {}",
-          permission, user, namespace, c.getPrincipal());
+      log.info("Revoked namespace permission {} for user {} on the namespace {}"
+          + " at the request of user {}", permission, user, namespace, c.getPrincipal());
 
     } catch (AccumuloSecurityException e) {
       throw e.asThriftException();
diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/FileUtil.java b/server/base/src/main/java/org/apache/accumulo/server/util/FileUtil.java
index 8dba100..9be303b 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/util/FileUtil.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/util/FileUtil.java
@@ -319,7 +319,8 @@ public class FileUtil {
       if (numKeys == 0) {
         if (useIndex) {
           log.warn(
-              "Failed to find mid point using indexes, falling back to data files which is slower. No entries between {} and {} for {}",
+              "Failed to find mid point using indexes, falling back to"
+                  + " data files which is slower. No entries between {} and {} for {}",
               prevEndRow, endRow, mapFiles);
           // need to pass original map files, not possibly reduced indexes
           return findMidPoint(fs, tabletDirectory, acuConf, prevEndRow, endRow, origMapFiles,
diff --git a/server/master/src/main/java/org/apache/accumulo/master/Master.java b/server/master/src/main/java/org/apache/accumulo/master/Master.java
index 6db190b..c006b7e 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/Master.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/Master.java
@@ -1235,8 +1235,10 @@ public class Master extends AccumuloServerContext
     MasterReplicationCoordinator impl = new MasterReplicationCoordinator(this);
     ReplicationCoordinator.Iface haReplicationProxy = HighlyAvailableServiceWrapper.service(impl,
         this);
-    ReplicationCoordinator.Processor<ReplicationCoordinator.Iface> replicationCoordinatorProcessor = new ReplicationCoordinator.Processor<>(
-        RpcWrapper.service(haReplicationProxy));
+    // @formatter:off
+    ReplicationCoordinator.Processor<ReplicationCoordinator.Iface> replicationCoordinatorProcessor =
+      new ReplicationCoordinator.Processor<>(RpcWrapper.service(haReplicationProxy));
+    // @formatter:on
     ServerAddress replAddress = TServerUtils.startServer(this, hostname,
         Property.MASTER_REPLICATION_COORDINATOR_PORT, replicationCoordinatorProcessor,
         "Master Replication Coordinator", "Replication Coordinator", null,
diff --git a/server/monitor/src/test/java/org/apache/accumulo/monitor/util/AccumuloMonitorAppenderTest.java b/server/monitor/src/test/java/org/apache/accumulo/monitor/util/AccumuloMonitorAppenderTest.java
index 2c97056..91f9b96 100644
--- a/server/monitor/src/test/java/org/apache/accumulo/monitor/util/AccumuloMonitorAppenderTest.java
+++ b/server/monitor/src/test/java/org/apache/accumulo/monitor/util/AccumuloMonitorAppenderTest.java
@@ -110,22 +110,26 @@ public class AccumuloMonitorAppenderTest {
       byte[] location = loc == 0 ? null : ("loc" + loc).getBytes(UTF_8);
       return new MonitorLocation(loc, location);
     };
-    Function<MonitorLocation,AppenderSkeleton> appenderFactory = newLocation -> new AppenderSkeleton() {
+    Function<MonitorLocation,AppenderSkeleton> appenderFactory = newLocation -> {
 
-      {
-        this.name = "Appender for " + newLocation.getLocation();
-      }
+      return new AppenderSkeleton() {
 
-      @Override
-      public boolean requiresLayout() {
-        return false;
-      }
+        {
+          this.name = "Appender for " + newLocation.getLocation();
+        }
+
+        @Override
+        public boolean requiresLayout() {
+          return false;
+        }
+
+        @Override
+        public void close() {}
 
-      @Override
-      public void close() {}
+        @Override
+        protected void append(LoggingEvent event) {}
 
-      @Override
-      protected void append(LoggingEvent event) {}
+      };
 
     };
 
diff --git a/server/tracer/src/main/java/org/apache/accumulo/tracer/AsyncSpanReceiver.java b/server/tracer/src/main/java/org/apache/accumulo/tracer/AsyncSpanReceiver.java
index 9d2df7c..6105e59 100644
--- a/server/tracer/src/main/java/org/apache/accumulo/tracer/AsyncSpanReceiver.java
+++ b/server/tracer/src/main/java/org/apache/accumulo/tracer/AsyncSpanReceiver.java
@@ -171,10 +171,10 @@ public abstract class AsyncSpanReceiver<SpanKey,Destination> implements SpanRece
       if (sendQueueSize.get() > maxQueueSize) {
         long now = System.currentTimeMillis();
         if (now - lastNotificationOfDroppedSpans > 60 * 1000) {
-          log.warn(
-              "Tracing spans are being dropped because there are already {} spans queued for delivery.\n"
-                  + "This does not affect performance, security or data integrity, but distributed tracing information is being lost.",
-              maxQueueSize);
+          log.warn("Tracing spans are being dropped because there are already"
+              + " {} spans queued for delivery.\n"
+              + "This does not affect performance, security or data integrity,"
+              + " but distributed tracing information is being lost.", maxQueueSize);
           lastNotificationOfDroppedSpans = now;
         }
         return;
diff --git a/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java b/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java
index af9834b..aa33da1 100644
--- a/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java
+++ b/server/tracer/src/main/java/org/apache/accumulo/tracer/TraceServer.java
@@ -319,9 +319,8 @@ public class TraceServer implements Watcher {
         }
       }
     } catch (MutationsRejectedException | RuntimeException exception) {
-      log.warn(
-          "Problem flushing traces, resetting writer. Set log level to DEBUG to see stacktrace. cause: "
-              + exception);
+      log.warn("Problem flushing traces, resetting writer. Set log level to"
+          + " DEBUG to see stacktrace. cause: " + exception);
       log.debug("flushing traces failed due to exception", exception);
       resetWriter();
       /* XXX e.g. if the writer was closed between when we grabbed it and when we called flush. */
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/NativeMap.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/NativeMap.java
index 4a2b212..caff10b 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/NativeMap.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/NativeMap.java
@@ -97,8 +97,10 @@ public class NativeMap implements Iterable<Map.Entry<Key,Value>> {
     // Exit if native libraries could not be loaded
     if (!isLoaded()) {
       log.error(
-          "FATAL! Accumulo native libraries were requested but could not be be loaded. Either set '{}' to false in accumulo-site.xml "
-              + " or make sure native libraries are created in directories set by the JVM system property 'accumulo.native.lib.path' in accumulo-env.sh!",
+          "FATAL! Accumulo native libraries were requested but could not"
+              + " be be loaded. Either set '{}' to false in accumulo-site.xml or make"
+              + " sure native libraries are created in directories set by the JVM"
+              + " system property 'accumulo.native.lib.path' in accumulo-env.sh!",
           Property.TSERV_NATIVEMAP_ENABLED);
       System.exit(1);
     }
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
index 91f5f6c..52aaf05 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
@@ -830,7 +830,8 @@ public class TabletServer extends AccumuloServerContext implements Runnable {
 
       if (log.isTraceEnabled()) {
         log.trace(String.format(
-            "MultiScanSess %s %,d entries in %.2f secs (lookup_time:%.2f secs tablets:%,d ranges:%,d) ",
+            "MultiScanSess %s %,d entries in %.2f secs"
+                + " (lookup_time:%.2f secs tablets:%,d ranges:%,d) ",
             TServerUtils.clientAddress.get(), session.numEntries, (t2 - session.startTime) / 1000.0,
             session.totalLookupTime / 1000.0, session.numTablets, session.numRanges));
       }
@@ -2648,8 +2649,10 @@ public class TabletServer extends AccumuloServerContext implements Runnable {
     ReplicationServicer.Iface rpcProxy = RpcWrapper.service(handler);
     ReplicationServicer.Iface repl = TCredentialsUpdatingWrapper.service(rpcProxy,
         handler.getClass(), getConfiguration());
-    ReplicationServicer.Processor<ReplicationServicer.Iface> processor = new ReplicationServicer.Processor<>(
-        repl);
+    // @formatter:off
+    ReplicationServicer.Processor<ReplicationServicer.Iface> processor =
+      new ReplicationServicer.Processor<>(repl);
+    // @formatter:on
     AccumuloConfiguration conf = getServerConfigurationFactory().getSystemConfiguration();
     Property maxMessageSizeProperty = (conf.get(Property.TSERV_MAX_MESSAGE_SIZE) != null
         ? Property.TSERV_MAX_MESSAGE_SIZE
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServerResourceManager.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServerResourceManager.java
index e6dd44f..224cf31 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServerResourceManager.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServerResourceManager.java
@@ -202,13 +202,16 @@ public class TabletServerResourceManager {
       // Still check block cache sizes when using native maps.
       if (dCacheSize + iCacheSize + sCacheSize + totalQueueSize > runtime.maxMemory()) {
         throw new IllegalArgumentException(String.format(
-            "Block cache sizes %,d and mutation queue size %,d is too large for this JVM configuration %,d",
+            "Block cache sizes %,d" + " and mutation queue size %,d is too large for this JVM"
+                + " configuration %,d",
             dCacheSize + iCacheSize + sCacheSize, totalQueueSize, runtime.maxMemory()));
       }
     } else if (maxMemory + dCacheSize + iCacheSize + sCacheSize + totalQueueSize > runtime
         .maxMemory()) {
       throw new IllegalArgumentException(String.format(
-          "Maximum tablet server map memory %,d block cache sizes %,d and mutation queue size %,d is too large for this JVM configuration %,d",
+          "Maximum tablet server"
+              + " map memory %,d block cache sizes %,d and mutation queue size %,d is"
+              + " too large for this JVM configuration %,d",
           maxMemory, dCacheSize + iCacheSize + sCacheSize, totalQueueSize, runtime.maxMemory()));
     }
     runtime.gc();
@@ -474,9 +477,8 @@ public class TabletServerResourceManager {
               TabletStateImpl tabletReport = tabletReportsCopy.get(keyExtent);
 
               if (tabletReport == null) {
-                log.warn(
-                    "Memory manager asked to compact nonexistent tablet {}; manager implementation might be misbehaving",
-                    keyExtent);
+                log.warn("Memory manager asked to compact nonexistent tablet"
+                    + " {}; manager implementation might be misbehaving", keyExtent);
                 continue;
               }
               Tablet tablet = tabletReport.getTablet();
@@ -494,9 +496,8 @@ public class TabletServerResourceManager {
                       }
                     }
                   }
-                  log.debug(
-                      "Ignoring memory manager recommendation: not minor compacting closed tablet {}",
-                      keyExtent);
+                  log.debug("Ignoring memory manager recommendation: not minor"
+                      + " compacting closed tablet {}", keyExtent);
                 } else {
                   log.info("Ignoring memory manager recommendation: not minor compacting {}",
                       keyExtent);
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/compaction/MajorCompactionRequest.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/compaction/MajorCompactionRequest.java
index 5655098..8876cac 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/compaction/MajorCompactionRequest.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/compaction/MajorCompactionRequest.java
@@ -146,7 +146,8 @@ public class MajorCompactionRequest implements Cloneable {
   public List<Summary> getSummaries(Collection<FileRef> files,
       Predicate<SummarizerConfiguration> summarySelector) throws IOException {
     Preconditions.checkState(volumeManager != null,
-        "Getting summaries is not supported at this time.  Its only supported when CompactionStrategy.gatherInformation() is called.");
+        "Getting summaries is not" + " supported at this time. It's only supported when"
+            + " CompactionStrategy.gatherInformation() is called.");
     SummaryCollection sc = new SummaryCollection();
     SummarizerFactory factory = new SummarizerFactory(tableConfig);
     for (FileRef file : files) {
@@ -167,7 +168,8 @@ public class MajorCompactionRequest implements Cloneable {
 
   public FileSKVIterator openReader(FileRef ref) throws IOException {
     Preconditions.checkState(volumeManager != null,
-        "Opening files is not supported at this time.  Its only supported when CompactionStrategy.gatherInformation() is called.");
+        "Opening files is not" + " supported at this time. It's only supported when"
+            + " CompactionStrategy.gatherInformation() is called.");
     // @TODO verify the file isn't some random file in HDFS
     // @TODO ensure these files are always closed?
     FileOperations fileFactory = FileOperations.getInstance();
diff --git a/server/tserver/src/test/java/org/apache/accumulo/tserver/LargestFirstMemoryManagerTest.java b/server/tserver/src/test/java/org/apache/accumulo/tserver/LargestFirstMemoryManagerTest.java
index 179b24e..f5f4721 100644
--- a/server/tserver/src/test/java/org/apache/accumulo/tserver/LargestFirstMemoryManagerTest.java
+++ b/server/tserver/src/test/java/org/apache/accumulo/tserver/LargestFirstMemoryManagerTest.java
@@ -195,8 +195,10 @@ public class LargestFirstMemoryManagerTest {
     final String deletedTableId = "1";
     Function<Table.ID,Boolean> existenceCheck = tableId -> !deletedTableId
         .contentEquals(tableId.canonicalID());
-    LargestFirstMemoryManagerWithExistenceCheck mgr = new LargestFirstMemoryManagerWithExistenceCheck(
-        existenceCheck);
+    // @formatter:off
+    LargestFirstMemoryManagerWithExistenceCheck mgr =
+      new LargestFirstMemoryManagerWithExistenceCheck(existenceCheck);
+    // @formatter:on
     ServerConfiguration config = new ServerConfiguration() {
       ServerConfigurationFactory delegate = new ServerConfigurationFactory(inst);
 
diff --git a/shell/src/main/java/org/apache/accumulo/shell/Shell.java b/shell/src/main/java/org/apache/accumulo/shell/Shell.java
index ee4c465..2707fef 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/Shell.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/Shell.java
@@ -512,12 +512,12 @@ public class Shell extends ShellOptions implements KeywordExecutable {
     String keepers = getZooKeepers(keepersOption, properties);
 
     if (keepers == null) {
-      throw new IllegalArgumentException(
-          "ZooKeepers must be set using -z or -zh on command line or in accumulo-client.properties");
+      throw new IllegalArgumentException("ZooKeepers must be set using -z or"
+          + " -zh on command line or in accumulo-client.properties");
     }
     if (instanceName == null) {
-      throw new IllegalArgumentException(
-          "Instance name must be set using -z or -zi on command line or in accumulo-client.properties");
+      throw new IllegalArgumentException("Instance name must be set using -z or"
+          + " -zi on command line or in accumulo-client.properties");
     }
     return new ZooKeeperInstance(instanceName, keepers);
   }
diff --git a/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java b/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
index 5278c76..f36e70b 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
@@ -189,8 +189,11 @@ public class ShellOptionsJC {
   private boolean useSasl = false;
 
   @Parameter(names = "--config-file",
-      description = "Read the given accumulo-client.properties file. If omitted, the following locations will be searched "
-          + "~/.accumulo/accumulo-client.properties:$ACCUMULO_CONF_DIR/accumulo-client.properties:/etc/accumulo/accumulo-client.properties")
+      description = "Read the given"
+          + " accumulo-client.properties file. If omitted, the following locations will be"
+          + " searched ~/.accumulo/accumulo-client.properties:"
+          + "$ACCUMULO_CONF_DIR/accumulo-client.properties:"
+          + "/etc/accumulo/accumulo-client.properties")
   private String clientConfigFile = null;
 
   @Parameter(names = {"-zi", "--zooKeeperInstanceName"},
@@ -221,13 +224,14 @@ public class ShellOptionsJC {
         if (ClientProperty.SASL_ENABLED.getBoolean(getClientProperties())) {
           if (!UserGroupInformation.isSecurityEnabled()) {
             throw new IllegalArgumentException(
-                "Kerberos security is not enabled. Run with --sasl or set 'sasl.enabled' in accumulo-client.properties");
+                "Kerberos security is not" + " enabled. Run with --sasl or set 'sasl.enabled' in"
+                    + " accumulo-client.properties");
           }
           UserGroupInformation ugi = UserGroupInformation.getCurrentUser();
           username = ugi.getUserName();
         } else {
-          throw new IllegalArgumentException(
-              "Username is not set. Run with '-u myuser' or set 'auth.username' in accumulo-client.properties");
+          throw new IllegalArgumentException("Username is not set. Run with '-u"
+              + " myuser' or set 'auth.username' in accumulo-client.properties");
         }
       }
     }
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/CreateTableCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/CreateTableCommand.java
index 23e7606..596196c 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/CreateTableCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/CreateTableCommand.java
@@ -226,9 +226,8 @@ public class CreateTableCommand extends Command {
       try {
         iteratorSetting = shellState.iteratorProfiles.get(profileName).get(0);
       } catch (NullPointerException ex) {
-        throw new IllegalArgumentException(
-            "invalid iterator argument. Either profile does not exist or unexpected spaces in argument list.",
-            ex);
+        throw new IllegalArgumentException("invalid iterator argument. Either"
+            + " profile does not exist or unexpected spaces in argument list.", ex);
       }
       // handle case where only the profile is supplied. Use all scopes by default if no scope args
       // are provided.
@@ -280,7 +279,8 @@ public class CreateTableCommand extends Command {
 
   @Override
   public String description() {
-    return "creates a new table, with optional aggregators, iterators, locality groups and optionally pre-split";
+    return "creates a new table, with optional aggregators, iterators, locality"
+        + " groups and optionally pre-split";
   }
 
   @Override
@@ -320,7 +320,8 @@ public class CreateTableCommand extends Command {
     createTableOptLocalityProps.setArgs(Option.UNLIMITED_VALUES);
 
     createTableOptIteratorProps = new Option("i", "iter", true,
-        "initialize iterator at table creation using profile. If no scope supplied, all scopes are activated.");
+        "initialize" + " iterator at table creation using profile. If no scope supplied, all"
+            + " scopes are activated.");
     createTableOptIteratorProps.setArgName("profile[:[all]|[scan[,]][minc[,]][majc]]");
     createTableOptIteratorProps.setArgs(Option.UNLIMITED_VALUES);
 
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/HiddenCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/HiddenCommand.java
index ab0190c..79ff0fe 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/HiddenCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/HiddenCommand.java
@@ -42,11 +42,14 @@ public class HiddenCommand extends Command {
     if (rand.nextInt(10) == 0) {
       shellState.getReader().beep();
       shellState.getReader().println();
-      shellState.getReader().println(new String(Base64.getDecoder().decode(
-          "ICAgICAgIC4tLS4KICAgICAgLyAvXCBcCiAgICAgKCAvLS1cICkKICAgICAuPl8gIF88LgogICAgLyB8ICd8ICcgXAog"
-              + "ICAvICB8Xy58Xy4gIFwKICAvIC98ICAgICAgfFwgXAogfCB8IHwgfFwvfCB8IHwgfAogfF98IHwgfCAgfCB8IHxffAogICAgIC8gIF9fICBcCiAgICAvICAv"
-              + "ICBcICBcCiAgIC8gIC8gICAgXCAgXF8KIHwvICAvICAgICAgXCB8IHwKIHxfXy8gICAgICAgIFx8X3wK"),
-          UTF_8));
+      shellState.getReader()
+          .println(new String(Base64.getDecoder()
+              .decode("ICAgICAgIC4tLS4KICAgICAgLyAvXCBcCiAgICAgKCAvLS1cICkKICAgICAuPl8g"
+                  + "IF88LgogICAgLyB8ICd8ICcgXAogICAvICB8Xy58Xy4gIFwKICAvIC98ICAgIC"
+                  + "AgfFwgXAogfCB8IHwgfFwvfCB8IHwgfAogfF98IHwgfCAgfCB8IHxffAogICAg"
+                  + "IC8gIF9fICBcCiAgICAvICAvICBcICBcCiAgIC8gIC8gICAgXCAgXF8KIHwvIC"
+                  + "AvICAgICAgXCB8IHwKIHxfXy8gICAgICAgIFx8X3wK"),
+              UTF_8));
     } else {
       throw new ShellCommandException(ErrorCode.UNRECOGNIZED_COMMAND, getName());
     }
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/SummariesCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/SummariesCommand.java
index e39bdc1..77e665a 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/SummariesCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/SummariesCommand.java
@@ -107,7 +107,8 @@ public class SummariesCommand extends TableOperation {
     final Options opts = super.getOptions();
     disablePaginationOpt = new Option("np", "no-pagination", false, "disable pagination of output");
     summarySelectionOpt = new Option("sr", "select-regex", true,
-        "regex to select summaries. Matches against class name and options used to generate summaries.");
+        "regex to" + " select summaries. Matches against class name and options used to"
+            + " generate summaries.");
     opts.addOption(disablePaginationOpt);
     opts.addOption(summarySelectionOpt);
     opts.addOption(OptUtil.startRowOpt());
diff --git a/start/src/main/java/org/apache/accumulo/start/Main.java b/start/src/main/java/org/apache/accumulo/start/Main.java
index ca976e8..a30c4b4 100644
--- a/start/src/main/java/org/apache/accumulo/start/Main.java
+++ b/start/src/main/java/org/apache/accumulo/start/Main.java
@@ -216,8 +216,8 @@ public class Main {
         Comparator.comparing(KeywordExecutable::keyword));
     executables.addAll(getExecutables(getClassLoader()).values());
 
-    System.out.println(
-        "\nUsage: accumulo <command> [--help] (<argument> ...)\n\n  --help   Prints usage for specified command");
+    System.out.println("\nUsage: accumulo <command> [--help] (<argument> ...)\n\n"
+        + "  --help   Prints usage for specified command");
     System.out.println("\nCore Commands:");
     printCommands(executables, UsageGroup.CORE);
 
diff --git a/test/src/main/java/org/apache/accumulo/harness/AccumuloClusterHarness.java b/test/src/main/java/org/apache/accumulo/harness/AccumuloClusterHarness.java
index 7820364..3939af6 100644
--- a/test/src/main/java/org/apache/accumulo/harness/AccumuloClusterHarness.java
+++ b/test/src/main/java/org/apache/accumulo/harness/AccumuloClusterHarness.java
@@ -131,7 +131,10 @@ public abstract class AccumuloClusterHarness extends AccumuloITBase
         }
         break;
       case STANDALONE:
-        StandaloneAccumuloClusterConfiguration conf = (StandaloneAccumuloClusterConfiguration) clusterConf;
+        // @formatter:off
+        StandaloneAccumuloClusterConfiguration conf =
+          (StandaloneAccumuloClusterConfiguration) clusterConf;
+        // @formatter:on
         StandaloneAccumuloCluster standaloneCluster = new StandaloneAccumuloCluster(
             cluster.getConnectionInfo(), conf.getTmpDirectory(), conf.getUsers());
         // If these are provided in the configuration, pass them into the cluster
diff --git a/test/src/main/java/org/apache/accumulo/test/ConditionalWriterIT.java b/test/src/main/java/org/apache/accumulo/test/ConditionalWriterIT.java
index 729077b..dcce508 100644
--- a/test/src/main/java/org/apache/accumulo/test/ConditionalWriterIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/ConditionalWriterIT.java
@@ -1557,9 +1557,10 @@ public class ConditionalWriterIT extends AccumuloClusterHarness {
         String traceOutput = finalBuffer.toString();
         log.info("Trace output:" + traceOutput);
         if (traceCount > 0) {
+          String[] parts = ("traceTest, startScan,startConditionalUpdate,conditionalUpdate"
+              + ",Check conditions,apply conditional mutations").split(",");
           int lastPos = 0;
-          for (String part : "traceTest, startScan,startConditionalUpdate,conditionalUpdate,Check conditions,apply conditional mutations"
-              .split(",")) {
+          for (String part : parts) {
             log.info("Looking in trace output for '" + part + "'");
             int pos = traceOutput.indexOf(part);
             if (-1 == pos) {
diff --git a/test/src/main/java/org/apache/accumulo/test/ShellConfigIT.java b/test/src/main/java/org/apache/accumulo/test/ShellConfigIT.java
index 4deee38..acd39be 100644
--- a/test/src/main/java/org/apache/accumulo/test/ShellConfigIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/ShellConfigIT.java
@@ -79,7 +79,10 @@ public class ShellConfigIT extends AccumuloClusterHarness {
         clientPropsFile = mac.getConfig().getClientPropsFile();
         break;
       case STANDALONE:
-        StandaloneAccumuloClusterConfiguration standaloneConf = (StandaloneAccumuloClusterConfiguration) getClusterConfiguration();
+        // @formatter:off
+        StandaloneAccumuloClusterConfiguration standaloneConf =
+          (StandaloneAccumuloClusterConfiguration) getClusterConfiguration();
+        // @formatter:on
         clientPropsFile = standaloneConf.getClientPropsFile();
         break;
       default:
diff --git a/test/src/main/java/org/apache/accumulo/test/VerifyIngest.java b/test/src/main/java/org/apache/accumulo/test/VerifyIngest.java
index 996555c..c025226 100644
--- a/test/src/main/java/org/apache/accumulo/test/VerifyIngest.java
+++ b/test/src/main/java/org/apache/accumulo/test/VerifyIngest.java
@@ -185,7 +185,8 @@ public class VerifyIngest {
 
             if (expectedRow >= (opts.rows + opts.startRow)) {
               log.error(
-                  "expectedRow ({}) >= (ingestArgs.rows + ingestArgs.startRow)  ({}), get batch returned data passed end key",
+                  "expectedRow ({}) >= (ingestArgs.rows + ingestArgs.startRow)  ({}), get"
+                      + " batch returned data passed end key",
                   expectedRow, (opts.rows + opts.startRow));
               errors++;
               break;
diff --git a/test/src/main/java/org/apache/accumulo/test/VolumeChooserIT.java b/test/src/main/java/org/apache/accumulo/test/VolumeChooserIT.java
index 40b1fda..fb85930 100644
--- a/test/src/main/java/org/apache/accumulo/test/VolumeChooserIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/VolumeChooserIT.java
@@ -105,8 +105,8 @@ public class VolumeChooserIT extends ConfigurableMacBase {
     v4 = new Path("file://" + v4f.getAbsolutePath());
 
     systemPreferredVolumes = v1.toString() + "," + v2.toString();
-    siteConfig.put(PreferredVolumeChooser.TABLE_PREFERRED_VOLUMES, systemPreferredVolumes); // exclude
-                                                                                            // v4
+    // exclude v4
+    siteConfig.put(PreferredVolumeChooser.TABLE_PREFERRED_VOLUMES, systemPreferredVolumes);
     cfg.setSiteConfig(siteConfig);
 
     siteConfig.put(PerTableVolumeChooser.getPropertyNameForScope(ChooserScope.LOGGER),
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/RegexGroupBalanceIT.java b/test/src/main/java/org/apache/accumulo/test/functional/RegexGroupBalanceIT.java
index 1c52ae6..0ce7e9f 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/RegexGroupBalanceIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/RegexGroupBalanceIT.java
@@ -27,6 +27,7 @@ import java.util.TreeSet;
 import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.TableNotFoundException;
+import org.apache.accumulo.core.client.impl.Table.ID;
 import org.apache.accumulo.core.conf.Property;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
@@ -169,8 +170,7 @@ public class RegexGroupBalanceIT extends ConfigurableMacBase {
       throws TableNotFoundException {
     try (Scanner s = conn.createScanner(MetadataTable.NAME, Authorizations.EMPTY)) {
       s.fetchColumnFamily(MetadataSchema.TabletsSection.CurrentLocationColumnFamily.NAME);
-      org.apache.accumulo.core.client.impl.Table.ID tableId = org.apache.accumulo.core.client.impl.Table.ID
-          .of(conn.tableOperations().tableIdMap().get(tablename));
+      ID tableId = ID.of(conn.tableOperations().tableIdMap().get(tablename));
       s.setRange(MetadataSchema.TabletsSection.getRange(tableId));
 
       Table<String,String,MutableInt> groupLocationCounts = HashBasedTable.create();
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/SessionBlockVerifyIT.java b/test/src/main/java/org/apache/accumulo/test/functional/SessionBlockVerifyIT.java
index 2b343db..a9b9e82 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/SessionBlockVerifyIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/SessionBlockVerifyIT.java
@@ -168,9 +168,8 @@ public class SessionBlockVerifyIT extends ScanSessionTimeOutIT {
        * AND we will orphan the sessionsToCleanup in the sweep, leading to an inaccurate count
        * within sessionsFound.
        */
-      assertEquals(
-          "Must have ten sessions. Failure indicates a synchronization block within the sweep mechanism",
-          10, sessionsFound);
+      assertEquals("Must have ten sessions. Failure indicates a synchronization"
+          + " block within the sweep mechanism", 10, sessionsFound);
       for (Future<Boolean> callable : callables) {
         callable.cancel(true);
       }

-- 
To stop receiving notification emails like this one, please contact
ctubbsii@apache.org.

[accumulo] 03/04: Merge branch '1.8'

Posted by ct...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ddfe3b933669f7b0dd4d63b43c4603a6df157357
Merge: e113e2f b8c19f8
Author: Christopher Tubbs <ct...@apache.org>
AuthorDate: Fri Apr 6 02:14:36 2018 -0400

    Merge branch '1.8'

 .../accumulo/core/bloomfilter/BloomFilter.java     |   3 +-
 .../core/bloomfilter/DynamicBloomFilter.java       |   3 +-
 .../org/apache/accumulo/core/cli/ClientOpts.java   |   8 +-
 .../core/cli/MapReduceClientOnRequiredTable.java   |   2 +-
 .../accumulo/core/cli/MapReduceClientOpts.java     |   6 +-
 .../core/client/AccumuloSecurityException.java     |   3 +-
 .../accumulo/core/client/ClientConfiguration.java  |   3 +-
 .../core/client/ClientSideIteratorScanner.java     |  18 +-
 .../apache/accumulo/core/client/ScannerBase.java   |   3 +-
 .../accumulo/core/client/ZooKeeperInstance.java    |   5 +-
 .../core/client/admin/CompactionConfig.java        |   4 +-
 .../accumulo/core/client/impl/ClientContext.java   |  21 +-
 .../accumulo/core/client/impl/ConnectorImpl.java   |   3 +-
 .../core/client/impl/SecurityOperationsImpl.java   |  10 +-
 .../core/client/impl/TableOperationsImpl.java      |   5 +-
 .../core/client/impl/TabletServerBatchWriter.java  |  15 +-
 .../core/client/lexicoder/PairLexicoder.java       |  21 +-
 .../core/client/mapred/AbstractInputFormat.java    |   9 +-
 .../core/client/mapred/AccumuloInputFormat.java    |   5 +-
 .../mapred/AccumuloMultiTableInputFormat.java      |   3 +-
 .../core/client/mapred/AccumuloOutputFormat.java   |   5 +-
 .../core/client/mapred/AccumuloRowInputFormat.java |  54 ++--
 .../core/client/mapreduce/AbstractInputFormat.java |   9 +-
 .../core/client/mapreduce/AccumuloInputFormat.java |   5 +-
 .../client/mapreduce/AccumuloOutputFormat.java     |   5 +-
 .../mapreduce/lib/impl/InputConfigurator.java      |   4 +-
 .../accumulo/core/client/rfile/RFileWriter.java    |  16 +-
 .../core/client/sample/RowColumnSampler.java       |   8 +-
 .../accumulo/core/client/sample/RowSampler.java    |   8 +-
 .../security/tokens/AuthenticationToken.java       |   6 +-
 .../core/client/security/tokens/KerberosToken.java |   4 +-
 .../accumulo/core/conf/AccumuloConfiguration.java  |   4 +-
 .../core/conf/CredentialProviderFactoryShim.java   |  22 +-
 .../org/apache/accumulo/core/conf/Property.java    | 331 +++++++++++++--------
 .../apache/accumulo/core/conf/PropertyType.java    |  25 +-
 .../accumulo/core/conf/SiteConfiguration.java      |   5 +-
 .../core/data/ConstraintViolationSummary.java      |   3 +-
 .../apache/accumulo/core/file/FileOperations.java  |  10 +-
 .../file/blockfile/cache/lru/LruBlockCache.java    |   3 +-
 .../accumulo/core/file/rfile/CreateEmpty.java      |   8 +-
 .../accumulo/core/file/rfile/KeyShortener.java     |   5 +-
 .../org/apache/accumulo/core/file/rfile/RFile.java |   5 +-
 .../accumulo/core/file/rfile/bcfile/BCFile.java    |   9 +-
 .../core/iterators/AggregatingIterator.java        |   5 +-
 .../apache/accumulo/core/iterators/Combiner.java   |  11 +-
 .../org/apache/accumulo/core/iterators/Filter.java |   4 +-
 .../core/iterators/IteratorEnvironment.java        |   3 +-
 .../accumulo/core/iterators/IteratorUtil.java      |  65 ++--
 .../accumulo/core/iterators/LongCombiner.java      |   4 +-
 .../accumulo/core/iterators/OptionDescriber.java   |   5 +-
 .../core/iterators/TypedValueCombiner.java         |   4 +-
 .../accumulo/core/iterators/user/AgeOffFilter.java |   4 +-
 .../core/iterators/user/CfCqSliceOpts.java         |  40 +--
 .../core/iterators/user/ColumnAgeOffFilter.java    |   4 +-
 .../core/iterators/user/ColumnSliceFilter.java     |   4 +-
 .../core/iterators/user/LargeRowFilter.java        |   3 +-
 .../accumulo/core/iterators/user/MaxCombiner.java  |   5 +-
 .../accumulo/core/iterators/user/MinCombiner.java  |   5 +-
 .../accumulo/core/iterators/user/RegExFilter.java  |   4 +-
 .../core/iterators/user/RowEncodingIterator.java   |   6 +-
 .../core/iterators/user/SummingArrayCombiner.java  |   6 +-
 .../core/iterators/user/SummingCombiner.java       |   5 +-
 .../core/iterators/user/TransformingIterator.java  |  12 +-
 .../core/iterators/user/VisibilityFilter.java      |  10 +-
 .../core/metadata/schema/MetadataSchema.java       |   8 +-
 .../core/replication/ReplicationSchema.java        |  27 +-
 .../apache/accumulo/core/rpc/FilterTransport.java  |   2 +-
 .../org/apache/accumulo/core/rpc/ThriftUtil.java   |  16 +-
 .../accumulo/core/rpc/UGIAssumingTransport.java    |   2 +-
 .../accumulo/core/security/ColumnVisibility.java   |   5 +-
 .../core/security/crypto/BlockedOutputStream.java  |   7 +-
 .../core/security/crypto/CryptoModuleFactory.java  |   2 -
 .../core/security/crypto/DefaultCryptoModule.java  |  18 +-
 .../security/crypto/DefaultCryptoModuleUtils.java  |  18 +-
 .../NonCachingSecretKeyEncryptionStrategy.java     |   6 +-
 .../org/apache/accumulo/core/util/CreateToken.java |   5 +-
 .../java/org/apache/accumulo/core/util/Merge.java  |   3 +-
 .../accumulo/core/volume/NonConfiguredVolume.java  |   4 +-
 .../client/security/SecurityErrorCodeTest.java     |   5 +-
 .../accumulo/core/conf/PropertyTypeTest.java       |   3 +-
 .../core/data/ConstraintViolationSummaryTest.java  |   9 +-
 .../apache/accumulo/core/data/MutationTest.java    |  14 +-
 .../conf/AggregatorConfigurationTest.java          |  19 +-
 .../core/iterators/user/VisibilityFilterTest.java  |   3 +-
 .../accumulo/core/security/crypto/CryptoTest.java  |   5 +-
 .../org/apache/accumulo/fate/util/AddressUtil.java |  19 +-
 .../apache/accumulo/fate/util/AddressUtilTest.java |  16 +-
 .../testcases/MultipleHasTopCalls.java             |   6 +-
 .../accumulo/minicluster/MiniAccumuloRunner.java   |   4 +-
 .../minicluster/impl/MiniAccumuloConfigImpl.java   |   4 +-
 .../main/java/org/apache/accumulo/proxy/Proxy.java |   4 +-
 .../org/apache/accumulo/proxy/ProxyServer.java     |  38 ++-
 .../java/org/apache/accumulo/server/Accumulo.java  |   7 +-
 .../accumulo/server/GarbageCollectionLogger.java   |   4 +-
 .../apache/accumulo/server/init/Initialize.java    |   8 +-
 .../accumulo/server/log/WalStateManager.java       |  38 ++-
 .../server/master/balancer/GroupBalancer.java      |   5 +-
 .../balancer/HostRegexTableLoadBalancer.java       |  34 +--
 .../server/metrics/MetricsConfiguration.java       |   3 +-
 .../rpc/TCredentialsUpdatingInvocationHandler.java |  13 +-
 .../apache/accumulo/server/rpc/TServerUtils.java   |   4 +-
 .../server/security/AuditedSecurityOperation.java  |  95 ++++--
 .../server/security/SecurityOperation.java         |   3 +-
 .../server/security/UserImpersonation.java         |  14 +-
 .../server/security/handler/ZKAuthenticator.java   |   5 +-
 .../accumulo/server/util/SendLogToChainsaw.java    |   6 +-
 .../server/util/FileSystemMonitorTest.java         |   6 +-
 .../apache/accumulo/gc/SimpleGarbageCollector.java |   4 +-
 .../java/org/apache/accumulo/master/Master.java    |  36 +--
 .../DistributedWorkQueueWorkAssigner.java          |   5 +-
 .../master/replication/FinishedWorkUpdater.java    |  10 +-
 .../RemoveCompleteReplicationRecords.java          |   9 +-
 .../org/apache/accumulo/master/util/FateAdmin.java |   5 +-
 .../org/apache/accumulo/tracer/TraceServer.java    |  15 +-
 .../org/apache/accumulo/tserver/InMemoryMap.java   |   6 +-
 .../org/apache/accumulo/tserver/TabletServer.java  |  33 +-
 .../org/apache/accumulo/tserver/log/DfsLogger.java |  18 +-
 .../accumulo/tserver/log/SortedLogRecovery.java    |   8 +-
 .../tserver/metrics/TabletServerUpdateMetrics.java |   5 +-
 .../tserver/replication/AccumuloReplicaSystem.java |  22 +-
 .../apache/accumulo/tserver/tablet/Compactor.java  |   3 +-
 .../accumulo/tserver/tablet/DatafileManager.java   |   5 +-
 .../org/apache/accumulo/tserver/tablet/Tablet.java |   6 +-
 .../accumulo/tserver/tablet/TabletCommitter.java   |   5 +-
 .../main/java/org/apache/accumulo/shell/Shell.java |  12 +-
 .../org/apache/accumulo/shell/ShellOptionsJC.java  |  14 +-
 .../shell/commands/ActiveScanIterator.java         |   3 +-
 .../accumulo/shell/commands/CloneTableCommand.java |   4 +-
 .../accumulo/shell/commands/CompactCommand.java    |  42 ++-
 .../shell/commands/CreateTableCommand.java         |   3 +-
 .../apache/accumulo/shell/commands/DUCommand.java  |   5 +-
 .../accumulo/shell/commands/DeleteCommand.java     |   3 +-
 .../accumulo/shell/commands/DeleteRowsCommand.java |   3 +-
 .../shell/commands/DeleteScanIterCommand.java      |   3 +-
 .../accumulo/shell/commands/EGrepCommand.java      |   8 +-
 .../accumulo/shell/commands/FateCommand.java       |   3 +-
 .../accumulo/shell/commands/GrepCommand.java       |   3 +-
 .../shell/commands/ImportDirectoryCommand.java     |   3 +-
 .../accumulo/shell/commands/InsertCommand.java     |   3 +-
 .../shell/commands/ListCompactionsCommand.java     |   4 +-
 .../accumulo/shell/commands/ListScansCommand.java  |   3 +-
 .../accumulo/shell/commands/MergeCommand.java      |   3 +-
 .../shell/commands/QuotedStringTokenizer.java      |   5 +-
 .../accumulo/shell/commands/ScanCommand.java       |   3 +-
 .../accumulo/shell/commands/SetIterCommand.java    |  20 +-
 .../shell/commands/SetShellIterCommand.java        |   4 -
 .../java/org/apache/accumulo/shell/ShellTest.java  |   3 +-
 .../shell/commands/SetIterCommandTest.java         |   3 +-
 .../classloader/vfs/AccumuloVFSClassLoader.java    |  19 +-
 .../accumulo/harness/MiniClusterHarness.java       |   9 +-
 .../apache/accumulo/test/ConditionalWriterIT.java  |  10 +-
 .../org/apache/accumulo/test/InMemoryMapIT.java    |   6 +-
 .../java/org/apache/accumulo/test/MetaSplitIT.java |   4 +-
 .../org/apache/accumulo/test/NamespacesIT.java     |   5 +-
 .../accumulo/test/NativeMapPerformanceTest.java    |   3 +-
 .../org/apache/accumulo/test/ShellServerIT.java    |  36 +--
 .../org/apache/accumulo/test/TestBinaryRows.java   |   3 +-
 .../java/org/apache/accumulo/test/TestIngest.java  |   7 +-
 .../org/apache/accumulo/test/VerifyIngest.java     |   3 +-
 .../test/functional/GarbageCollectorIT.java        |   4 +-
 .../accumulo/test/functional/PermissionsIT.java    |   6 +-
 .../test/functional/RecoveryWithEmptyRFileIT.java  |   4 +-
 .../test/functional/WatchTheWatchCountIT.java      |   5 +-
 .../test/mapreduce/AccumuloInputFormatIT.java      |  10 +-
 .../accumulo/test/proxy/SimpleProxyBase.java       |   4 +-
 .../accumulo/test/proxy/TestProxyReadWrite.java    |  18 +-
 .../test/replication/FinishedWorkUpdaterIT.java    |  34 ++-
 ...GarbageCollectorCommunicatesWithTServersIT.java |   4 +-
 .../org/apache/accumulo/test/util/CertUtils.java   |  12 +-
 169 files changed, 1165 insertions(+), 826 deletions(-)

diff --cc core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloMultiTableInputFormat.java
index a105c70,6604bf0..871efa8
--- a/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloMultiTableInputFormat.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloMultiTableInputFormat.java
@@@ -20,7 -20,7 +20,8 @@@ import java.io.IOException
  import java.util.Map;
  
  import org.apache.accumulo.core.client.ClientConfiguration;
 +import org.apache.accumulo.core.client.ConnectionInfo;
+ import org.apache.accumulo.core.client.mapred.InputFormatBase.RecordReaderBase;
  import org.apache.accumulo.core.client.mapreduce.InputTableConfig;
  import org.apache.accumulo.core.client.mapreduce.lib.impl.InputConfigurator;
  import org.apache.accumulo.core.data.Key;
diff --cc core/src/main/java/org/apache/accumulo/core/conf/Property.java
index 6fc25fc,eea039f..8298abd
--- a/core/src/main/java/org/apache/accumulo/core/conf/Property.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/Property.java
@@@ -45,39 -46,34 +45,42 @@@ public enum Property 
    // Crypto-related properties
    @Experimental
    CRYPTO_PREFIX("crypto.", null, PropertyType.PREFIX,
-       "Properties in this category related to the configuration of both default and custom crypto modules."),
+       "Properties in this category related to the configuration of both default and custom crypto"
+           + " modules."),
    @Experimental
    CRYPTO_MODULE_CLASS("crypto.module.class", "NullCryptoModule", PropertyType.STRING,
-       "Fully qualified class name of the class that implements the CryptoModule interface, to be used in setting up encryption at rest for the WAL and "
-           + "(future) other parts of the code."),
+       "Fully qualified class name of the class that implements the CryptoModule"
+           + " interface, to be used in setting up encryption at rest for the WAL and"
+           + " (future) other parts of the code."),
    @Experimental
    CRYPTO_CIPHER_SUITE("crypto.cipher.suite", "NullCipher", PropertyType.STRING,
 -      "Describes the cipher suite to use for the write-ahead log"),
 +      "Describes the cipher suite to use for rfile encryption. The value must be either NullCipher or in the form of algorithm/mode/padding, "
 +          + "e.g. AES/CBC/NoPadding"),
    @Experimental
 -  CRYPTO_CIPHER_ALGORITHM_NAME("crypto.cipher.algorithm.name", "NullCipher", PropertyType.STRING,
 -      "States the name of the algorithm used in the corresponding cipher suite. "
 -          + "Do not make these different, unless you enjoy mysterious exceptions and bugs."),
 +  CRYPTO_WAL_CIPHER_SUITE("crypto.wal.cipher.suite", "", PropertyType.STRING,
 +      "Describes the cipher suite to use for the write-ahead log. Defaults to 'cyrpto.cipher.suite' "
 +          + "and will use that value for WAL encryption unless otherwise specified. Valid suite values include: an empty string, NullCipher, or a string the "
 +          + "form of algorithm/mode/padding, e.g. AES/CBC/NOPadding"),
    @Experimental
 -  CRYPTO_BLOCK_STREAM_SIZE("crypto.block.stream.size", "1K", PropertyType.MEMORY,
 -      "The size of the buffer above the cipher stream."
 -          + " Used for reading files and padding walog entries."),
 +  CRYPTO_CIPHER_KEY_ALGORITHM_NAME("crypto.cipher.key.algorithm.name", "NullCipher",
 +      PropertyType.STRING,
 +      "States the name of the algorithm used for the key for the corresponding cipher suite. The key type must be compatible with the cipher suite."),
 +  @Experimental
 +  CRYPTO_BLOCK_STREAM_SIZE("crypto.block.stream.size", "1K", PropertyType.BYTES,
 +      "The size of the buffer above the cipher stream. Used for reading files and padding walog entries."),
    @Experimental
    CRYPTO_CIPHER_KEY_LENGTH("crypto.cipher.key.length", "128", PropertyType.STRING,
-       "Specifies the key length *in bits* to use for the symmetric key, should probably be 128 or 256 unless you really know what you're doing"),
+       "Specifies the key length *in bits* to use for the symmetric key, "
+           + "should probably be 128 or 256 unless you really know what you're doing"),
    @Experimental
 +  CRYPTO_SECURITY_PROVIDER("crypto.security.provider", "", PropertyType.STRING,
 +      "States the security provider to use, and defaults to the system configured provider"),
 +  @Experimental
    CRYPTO_SECURE_RNG("crypto.secure.rng", "SHA1PRNG", PropertyType.STRING,
-       "States the secure random number generator to use, and defaults to the built-in Sun SHA1PRNG"),
+       "States the secure random number generator to use, and defaults to the built-in SHA1PRNG"),
    @Experimental
    CRYPTO_SECURE_RNG_PROVIDER("crypto.secure.rng.provider", "SUN", PropertyType.STRING,
-       "States the secure random number generator provider to use, and defaults to the built-in SUN provider"),
+       "States the secure random number generator provider to use."),
    @Experimental
    CRYPTO_SECRET_KEY_ENCRYPTION_STRATEGY_CLASS("crypto.secret.key.encryption.strategy.class",
        "NullSecretKeyEncryptionStrategy", PropertyType.STRING,
@@@ -105,16 -108,18 +115,17 @@@
    // SSL properties local to each node (see also instance.ssl.enabled which must be consistent
    // across all nodes in an instance)
    RPC_PREFIX("rpc.", null, PropertyType.PREFIX,
 -      "Properties in this category related to the configuration of SSL keys for RPC."
 -          + " See also instance.ssl.enabled"),
 -  RPC_SSL_KEYSTORE_PATH("rpc.javax.net.ssl.keyStore", "$ACCUMULO_CONF_DIR/ssl/keystore.jks",
 -      PropertyType.PATH, "Path of the keystore file for the servers' private SSL key"),
 +      "Properties in this category related to the configuration of SSL keys for RPC. See also instance.ssl.enabled"),
 +  RPC_SSL_KEYSTORE_PATH("rpc.javax.net.ssl.keyStore", "", PropertyType.PATH,
 +      "Path of the keystore file for the server's private SSL key"),
    @Sensitive
    RPC_SSL_KEYSTORE_PASSWORD("rpc.javax.net.ssl.keyStorePassword", "", PropertyType.STRING,
-       "Password used to encrypt the SSL private keystore. Leave blank to use the Accumulo instance secret"),
+       "Password used to encrypt the SSL private keystore. "
+           + "Leave blank to use the Accumulo instance secret"),
    RPC_SSL_KEYSTORE_TYPE("rpc.javax.net.ssl.keyStoreType", "jks", PropertyType.STRING,
        "Type of SSL keystore"),
 -  RPC_SSL_TRUSTSTORE_PATH("rpc.javax.net.ssl.trustStore", "$ACCUMULO_CONF_DIR/ssl/truststore.jks",
 -      PropertyType.PATH, "Path of the truststore file for the root cert"),
 +  RPC_SSL_TRUSTSTORE_PATH("rpc.javax.net.ssl.trustStore", "", PropertyType.PATH,
 +      "Path of the truststore file for the root cert"),
    @Sensitive
    RPC_SSL_TRUSTSTORE_PASSWORD("rpc.javax.net.ssl.trustStorePassword", "", PropertyType.STRING,
        "Password used to encrypt the SSL truststore. Leave blank to use no password"),
@@@ -147,44 -156,64 +162,61 @@@
            + Integer.MAX_VALUE),
    @Deprecated
    INSTANCE_DFS_URI("instance.dfs.uri", "", PropertyType.URI,
-       "A url accumulo should use to connect to DFS. If this is empty, accumulo will obtain this information from the hadoop configuration. This property "
-           + "will only be used when creating new files if instance.volumes is empty. After an upgrade to 1.6.0 Accumulo will start using absolute paths to "
-           + "reference files. Files created before a 1.6.0 upgrade are referenced via relative paths. Relative paths will always be resolved using this "
-           + "config (if empty using the hadoop config)."),
+       "A url accumulo should use to connect to DFS. If this is empty, accumulo"
+           + " will obtain this information from the hadoop configuration. This property"
+           + " will only be used when creating new files if instance.volumes is empty."
+           + " After an upgrade to 1.6.0 Accumulo will start using absolute paths to"
+           + " reference files. Files created before a 1.6.0 upgrade are referenced via"
+           + " relative paths. Relative paths will always be resolved using this config"
+           + " (if empty using the hadoop config)."),
    @Deprecated
    INSTANCE_DFS_DIR("instance.dfs.dir", "/accumulo", PropertyType.ABSOLUTEPATH,
-       "HDFS directory in which accumulo instance will run. Do not change after accumulo is initialized."),
+       "HDFS directory in which accumulo instance will run. "
+           + "Do not change after accumulo is initialized."),
    @Sensitive
    INSTANCE_SECRET("instance.secret", "DEFAULT", PropertyType.STRING,
 -      "A secret unique to a given instance that all servers must know in order"
 -          + " to communicate with one another. It should be changed prior to the"
 -          + " initialization of Accumulo. To change it after Accumulo has been"
 -          + " initialized, use the ChangeSecret tool and then update"
 -          + " conf/accumulo-site.xml everywhere. Before using the ChangeSecret tool,"
 -          + " make sure Accumulo is not running and you are logged in as the user that"
 -          + " controls Accumulo files in HDFS. To use the ChangeSecret tool, run the"
 -          + " command: ./bin/accumulo org.apache.accumulo.server.util.ChangeSecret"),
 +      "A secret unique to a given instance that all servers must know in order to communicate with one another."
 +          + "It should be changed prior to the initialization of Accumulo. To change it after Accumulo has been initialized, use the ChangeSecret tool "
 +          + "and then update accumulo-site.xml everywhere. Before using the ChangeSecret tool, make sure Accumulo is not running and you are logged "
 +          + "in as the user that controls Accumulo files in HDFS.  To use the ChangeSecret tool, run the command: "
 +          + "./bin/accumulo org.apache.accumulo.server.util.ChangeSecret"),
    INSTANCE_VOLUMES("instance.volumes", "", PropertyType.STRING,
-       "A comma seperated list of dfs uris to use. Files will be stored across these filesystems. If this is empty, then instance.dfs.uri will be used. "
-           + "After adding uris to this list, run 'accumulo init --add-volume' and then restart tservers. If entries are removed from this list then tservers "
-           + "will need to be restarted. After a uri is removed from the list Accumulo will not create new files in that location, however Accumulo can still "
-           + "reference files created at that location before the config change. To use a comma or other reserved characters in a URI use standard URI hex "
-           + "encoding. For example replace commas with %2C."),
+       "A comma seperated list of dfs uris to use. Files will be stored across"
+           + " these filesystems. If this is empty, then instance.dfs.uri will be used."
+           + " After adding uris to this list, run 'accumulo init --add-volume' and then"
+           + " restart tservers. If entries are removed from this list then tservers"
+           + " will need to be restarted. After a uri is removed from the list Accumulo"
+           + " will not create new files in that location, however Accumulo can still"
+           + " reference files created at that location before the config change. To use"
+           + " a comma or other reserved characters in a URI use standard URI hex"
+           + " encoding. For example replace commas with %2C."),
    INSTANCE_VOLUMES_REPLACEMENTS("instance.volumes.replacements", "", PropertyType.STRING,
-       "Since accumulo stores absolute URIs changing the location of a namenode could prevent Accumulo from starting. The property helps deal with that "
-           + "situation. Provide a comma separated list of uri replacement pairs here if a namenode location changes. Each pair shold be separated with a "
-           + "space. For example, if hdfs://nn1 was replaced with hdfs://nnA and hdfs://nn2 was replaced with hdfs://nnB, then set this property to "
-           + "'hdfs://nn1 hdfs://nnA,hdfs://nn2 hdfs://nnB' Replacements must be configured for use. To see which volumes are currently in use, run "
-           + "'accumulo admin volumes -l'. To use a comma or other reserved characters in a URI use standard URI hex encoding. For example replace commas with "
-           + "%2C."),
+       "Since accumulo stores absolute URIs changing the location of a namenode "
+           + "could prevent Accumulo from starting. The property helps deal with "
+           + "that situation. Provide a comma separated list of uri replacement "
+           + "pairs here if a namenode location changes. Each pair shold be separated "
+           + "with a space. For example, if hdfs://nn1 was replaced with "
+           + "hdfs://nnA and hdfs://nn2 was replaced with hdfs://nnB, then set this "
+           + "property to 'hdfs://nn1 hdfs://nnA,hdfs://nn2 hdfs://nnB' "
+           + "Replacements must be configured for use. To see which volumes are "
+           + "currently in use, run 'accumulo admin volumes -l'. To use a comma or "
+           + "other reserved characters in a URI use standard URI hex encoding. For "
+           + "example replace commas with %2C."),
    INSTANCE_SECURITY_AUTHENTICATOR("instance.security.authenticator",
        "org.apache.accumulo.server.security.handler.ZKAuthenticator", PropertyType.CLASSNAME,
-       "The authenticator class that accumulo will use to determine if a user has privilege to perform an action"),
+       "The authenticator class that accumulo will use to determine if a user "
+           + "has privilege to perform an action"),
    INSTANCE_SECURITY_AUTHORIZOR("instance.security.authorizor",
        "org.apache.accumulo.server.security.handler.ZKAuthorizor", PropertyType.CLASSNAME,
-       "The authorizor class that accumulo will use to determine what labels a user has privilege to see"),
+       "The authorizor class that accumulo will use to determine what labels a "
+           + "user has privilege to see"),
    INSTANCE_SECURITY_PERMISSION_HANDLER("instance.security.permissionHandler",
        "org.apache.accumulo.server.security.handler.ZKPermHandler", PropertyType.CLASSNAME,
-       "The permission handler class that accumulo will use to determine if a user has privilege to perform an action"),
+       "The permission handler class that accumulo will use to determine if a "
+           + "user has privilege to perform an action"),
    INSTANCE_RPC_SSL_ENABLED("instance.rpc.ssl.enabled", "false", PropertyType.BOOLEAN,
-       "Use SSL for socket connections from clients and among accumulo services. Mutually exclusive with SASL RPC configuration."),
+       "Use SSL for socket connections from clients and among accumulo services. "
+           + "Mutually exclusive with SASL RPC configuration."),
    INSTANCE_RPC_SSL_CLIENT_AUTH("instance.rpc.ssl.clientAuth", "false", PropertyType.BOOLEAN,
        "Require clients to present certs signed by a trusted root"),
    /**
@@@ -204,15 -236,21 +239,16 @@@
  
    // general properties
    GENERAL_PREFIX("general.", null, PropertyType.PREFIX,
 -      "Properties in this category affect the behavior of accumulo overall, but "
 -          + "do not have to be consistent throughout a cloud."),
 -  GENERAL_CLASSPATHS(AccumuloClassLoader.CLASSPATH_PROPERTY_NAME,
 -      AccumuloClassLoader.ACCUMULO_CLASSPATH_VALUE, PropertyType.STRING,
 -      "A list of all of the places to look for a class. Order does matter, as "
 -          + "it will look for the jar starting in the first location to the last. "
 -          + "Please note, hadoop conf and hadoop lib directories NEED to be here, "
 -          + "along with accumulo lib and zookeeper directory. Supports full regex on "
 -          + " filename alone."),
 -
 -  // needs special treatment in accumulo start jar
 +      "Properties in this category affect the behavior of accumulo overall, but do not have to be consistent throughout a cloud."),
 +  @Deprecated
 +  GENERAL_CLASSPATHS(AccumuloClassLoader.GENERAL_CLASSPATHS, "", PropertyType.STRING,
 +      "This property is deprecated. The class path should instead be configured by the launch environment (for example, accumulo-env.sh). "
 +          + "A list of all of the places to look for a class. Order does matter, as it will look for the jar "
 +          + "starting in the first location to the last. Supports full regex on filename alone."),
    GENERAL_DYNAMIC_CLASSPATHS(AccumuloVFSClassLoader.DYNAMIC_CLASSPATH_PROPERTY_NAME,
        AccumuloVFSClassLoader.DEFAULT_DYNAMIC_CLASSPATH_VALUE, PropertyType.STRING,
-       "A list of all of the places where changes in jars or classes will force a reload of the classloader."),
+       "A list of all of the places where changes in jars or classes will force "
+           + "a reload of the classloader."),
    GENERAL_RPC_TIMEOUT("general.rpc.timeout", "120s", PropertyType.TIMEDURATION,
        "Time to wait on I/O for simple, short RPC calls"),
    @Experimental
@@@ -222,12 -262,14 +260,13 @@@
        "Path to the kerberos keytab to use. Leave blank if not using kerberoized hdfs"),
    GENERAL_KERBEROS_PRINCIPAL("general.kerberos.principal", "", PropertyType.STRING,
        "Name of the kerberos principal to use. _HOST will automatically be "
-           + "replaced by the machines hostname in the hostname portion of the principal. Leave blank if not using kerberoized hdfs"),
+           + "replaced by the machines hostname in the hostname portion of the "
+           + "principal. Leave blank if not using kerberoized hdfs"),
    GENERAL_KERBEROS_RENEWAL_PERIOD("general.kerberos.renewal.period", "30s",
        PropertyType.TIMEDURATION,
 -      "The amount of time between attempts to perform Kerberos ticket renewals. "
 -          + "This does not equate to how often tickets are actually renewed (which is "
 -          + "performed at 80% of the ticket lifetime)."),
 -  GENERAL_MAX_MESSAGE_SIZE("general.server.message.size.max", "1G", PropertyType.MEMORY,
 +      "The amount of time between attempts to perform "
 +          + "Kerberos ticket renewals. This does not equate to how often tickets are actually renewed (which is performed at 80% of the ticket lifetime)."),
 +  GENERAL_MAX_MESSAGE_SIZE("general.server.message.size.max", "1G", PropertyType.BYTES,
        "The maximum size of a message that can be sent to a server."),
    GENERAL_SIMPLETIMER_THREADPOOL_SIZE("general.server.simpletimer.threadpool.size", "1",
        PropertyType.COUNT, "The number of threads to use for " + "server-internal scheduled tasks"),
@@@ -273,26 -313,28 +313,29 @@@
    MASTER_BULK_TIMEOUT("master.bulk.timeout", "5m", PropertyType.TIMEDURATION,
        "The time to wait for a tablet server to process a bulk import request"),
    MASTER_BULK_RENAME_THREADS("master.bulk.rename.threadpool.size", "20", PropertyType.COUNT,
-       "The number of threads to use when moving user files to bulk ingest directories under accumulo control"),
+       "The number of threads to use when moving user files to bulk ingest "
+           + "directories under accumulo control"),
 +  MASTER_BULK_TSERVER_REGEX("master.bulk.tserver.regex", "", PropertyType.STRING,
 +      "Regular expression that defines the set of Tablet Servers that will perform bulk imports"),
    MASTER_MINTHREADS("master.server.threads.minimum", "20", PropertyType.COUNT,
        "The minimum number of threads to use to handle incoming requests."),
    MASTER_THREADCHECK("master.server.threadcheck.time", "1s", PropertyType.TIMEDURATION,
        "The time between adjustments of the server thread pool."),
    MASTER_RECOVERY_DELAY("master.recovery.delay", "10s", PropertyType.TIMEDURATION,
-       "When a tablet server's lock is deleted, it takes time for it to completely quit. This delay gives it time before log recoveries begin."),
+       "When a tablet server's lock is deleted, it takes time for it to "
+           + "completely quit. This delay gives it time before log recoveries begin."),
    MASTER_LEASE_RECOVERY_WAITING_PERIOD("master.lease.recovery.interval", "5s",
        PropertyType.TIMEDURATION,
 -      "The amount of time to wait after requesting a WAL file to be recovered"),
 +      "The amount of time to wait after requesting a write-ahead log to be recovered"),
    MASTER_WALOG_CLOSER_IMPLEMETATION("master.walog.closer.implementation",
        "org.apache.accumulo.server.master.recovery.HadoopLogCloser", PropertyType.CLASSNAME,
 -      "A class that implements a mechansim to steal write access to a file"),
 +      "A class that implements a mechanism to steal write access to a write-ahead log"),
    MASTER_FATE_THREADPOOL_SIZE("master.fate.threadpool.size", "4", PropertyType.COUNT,
 -      "The number of threads used to run FAult-Tolerant Executions. These are "
 -          + "primarily table operations like merge."),
 +      "The number of threads used to run fault-tolerant executions (FATE). These are primarily table operations like merge."),
    MASTER_REPLICATION_SCAN_INTERVAL("master.replication.status.scan.interval", "30s",
        PropertyType.TIMEDURATION,
-       "Amount of time to sleep before scanning the status section of the replication table for new data"),
+       "Amount of time to sleep before scanning the status section of the "
+           + "replication table for new data"),
    MASTER_REPLICATION_COORDINATOR_PORT("master.replication.coordinator.port", "10001",
        PropertyType.PORT, "Port for the replication coordinator service"),
    MASTER_REPLICATION_COORDINATOR_MINTHREADS("master.replication.coordinator.minthreads", "4",
@@@ -404,46 -453,59 +449,51 @@@
        "The number of concurrent threads that will load bloom filters in the background. "
            + "Setting this to zero will make bloom filters load in the foreground."),
    TSERV_MONITOR_FS("tserver.monitor.fs", "true", PropertyType.BOOLEAN,
-       "When enabled the tserver will monitor file systems and kill itself when one switches from rw to ro. This is usually and indication that Linux has"
+       "When enabled the tserver will monitor file systems and kill itself when"
+           + " one switches from rw to ro. This is usually and indication that Linux has"
            + " detected a bad disk."),
    TSERV_MEMDUMP_DIR("tserver.dir.memdump", "/tmp", PropertyType.PATH,
-       "A long running scan could possibly hold memory that has been minor compacted. To prevent this, the in memory map is dumped to a local file and the "
-           + "scan is switched to that local file. We can not switch to the minor compacted file because it may have been modified by iterators. The file "
-           + "dumped to the local dir is an exact copy of what was in memory."),
+       "A long running scan could possibly hold memory that has been minor"
+           + " compacted. To prevent this, the in memory map is dumped to a local file"
+           + " and the scan is switched to that local file. We can not switch to the"
+           + " minor compacted file because it may have been modified by iterators. The"
+           + " file dumped to the local dir is an exact copy of what was in memory."),
    TSERV_BULK_PROCESS_THREADS("tserver.bulk.process.threads", "1", PropertyType.COUNT,
 -      "The master will task a tablet server with pre-processing a bulk file"
 -          + " prior to assigning it to the appropriate tablet servers. This"
 -          + " configuration value controls the number of threads used to process the" + " files."),
 +      "The master will task a tablet server with pre-processing a bulk import RFile prior to assigning it to the appropriate tablet servers. This configuration"
 +          + " value controls the number of threads used to process the files."),
    TSERV_BULK_ASSIGNMENT_THREADS("tserver.bulk.assign.threads", "1", PropertyType.COUNT,
 -      "The master delegates bulk file processing and assignment to tablet"
 -          + " servers. After the bulk file has been processed, the tablet server will"
 -          + " assign the file to the appropriate tablets on all servers. This property"
 -          + " controls the number of threads used to communicate to the other servers."),
 +      "The master delegates bulk import RFile processing and assignment to tablet servers. After file has been processed, the tablet server will assign"
 +          + " the file to the appropriate tablets on all servers. This property controls the number of threads used to communicate to the other servers."),
    TSERV_BULK_RETRY("tserver.bulk.retry.max", "5", PropertyType.COUNT,
 -      "The number of times the tablet server will attempt to assign a file to a"
 -          + " tablet as it migrates and splits."),
 +      "The number of times the tablet server will attempt to assign a RFile to a tablet as it migrates and splits."),
    TSERV_BULK_TIMEOUT("tserver.bulk.timeout", "5m", PropertyType.TIMEDURATION,
        "The time to wait for a tablet server to process a bulk import request."),
    TSERV_MINTHREADS("tserver.server.threads.minimum", "20", PropertyType.COUNT,
        "The minimum number of threads to use to handle incoming requests."),
    TSERV_THREADCHECK("tserver.server.threadcheck.time", "1s", PropertyType.TIMEDURATION,
        "The time between adjustments of the server thread pool."),
 -  TSERV_MAX_MESSAGE_SIZE("tserver.server.message.size.max", "1G", PropertyType.MEMORY,
 +  TSERV_MAX_MESSAGE_SIZE("tserver.server.message.size.max", "1G", PropertyType.BYTES,
        "The maximum size of a message that can be sent to a tablet server."),
    TSERV_HOLD_TIME_SUICIDE("tserver.hold.time.max", "5m", PropertyType.TIMEDURATION,
 -      "The maximum time for a tablet server to be in the \"memory full\" state."
 -          + " If the tablet server cannot write out memory in this much time, it will"
 -          + " assume there is some failure local to its node, and quit. A value of zero"
 -          + " is equivalent to forever."),
 -  TSERV_WAL_BLOCKSIZE("tserver.wal.blocksize", "0", PropertyType.MEMORY,
 -      "The size of the HDFS blocks used to write to the Write-Ahead log. If"
 -          + " zero, it will be 110% of tserver.walog.max.size (that is, try to use"
 -          + " just one block)"),
 +      "The maximum time for a tablet server to be in the \"memory full\" state. If the tablet server cannot write out memory"
 +          + " in this much time, it will assume there is some failure local to its node, and quit. A value of zero is equivalent to forever."),
 +  TSERV_WAL_BLOCKSIZE("tserver.wal.blocksize", "0", PropertyType.BYTES,
 +      "The size of the HDFS blocks used to write to the Write-Ahead log. If zero, it will be 110% of tserver.walog.max.size (that is, try to use just one"
 +          + " block)"),
    TSERV_WAL_REPLICATION("tserver.wal.replication", "0", PropertyType.COUNT,
-       "The replication to use when writing the Write-Ahead log to HDFS. If zero, it will use the HDFS default replication setting."),
+       "The replication to use when writing the Write-Ahead log to HDFS. If"
+           + " zero, it will use the HDFS default replication setting."),
    TSERV_RECOVERY_MAX_CONCURRENT("tserver.recovery.concurrent.max", "2", PropertyType.COUNT,
        "The maximum number of threads to use to sort logs during" + " recovery"),
 -  TSERV_SORT_BUFFER_SIZE("tserver.sort.buffer.size", "200M", PropertyType.MEMORY,
 +  TSERV_SORT_BUFFER_SIZE("tserver.sort.buffer.size", "10%", PropertyType.MEMORY,
        "The amount of memory to use when sorting logs during recovery."),
    TSERV_ARCHIVE_WALOGS("tserver.archive.walogs", "false", PropertyType.BOOLEAN,
        "Keep copies of the WALOGs for debugging purposes"),
    TSERV_WORKQ_THREADS("tserver.workq.threads", "2", PropertyType.COUNT,
 -      "The number of threads for the distributed work queue. These threads are"
 -          + " used for copying failed bulk files."),
 +      "The number of threads for the distributed work queue. These threads are used for copying failed bulk import RFiles."),
    TSERV_WAL_SYNC("tserver.wal.sync", "true", PropertyType.BOOLEAN,
-       "Use the SYNC_BLOCK create flag to sync WAL writes to disk. Prevents problems recovering from sudden system resets."),
+       "Use the SYNC_BLOCK create flag to sync WAL writes to disk. Prevents"
+           + " problems recovering from sudden system resets."),
    @Deprecated
    TSERV_WAL_SYNC_METHOD("tserver.wal.sync.method", "hsync", PropertyType.STRING,
        "This property is deprecated. Use table.durability instead."),
@@@ -574,20 -627,24 +629,21 @@@
    TABLE_ARBITRARY_PROP_PREFIX("table.custom.", null, PropertyType.PREFIX,
        "Prefix to be used for user defined arbitrary properties."),
    TABLE_MAJC_RATIO("table.compaction.major.ratio", "3", PropertyType.FRACTION,
 -      "minimum ratio of total input size to maximum input file size for running"
 -          + " a major compactionWhen adjusting this property you may want to also"
 -          + " adjust table.file.max. Want to avoid the situation where only merging"
 -          + " minor compactions occur."),
 +      "Minimum ratio of total input size to maximum input RFile size for running a major compaction. When adjusting this property you may want to also "
 +          + "adjust table.file.max. Want to avoid the situation where only merging minor compactions occur."),
    TABLE_MAJC_COMPACTALL_IDLETIME("table.compaction.major.everything.idle", "1h",
        PropertyType.TIMEDURATION,
 -      "After a tablet has been idle (no mutations) for this time period it may"
 -          + " have all of its files compacted into one. There is no guarantee an idle"
 -          + " tablet will be compacted. Compactions of idle tablets are only started"
 -          + " when regular compactions are not running. Idle compactions only take"
 -          + " place for tablets that have one or more files."),
 -  TABLE_SPLIT_THRESHOLD("table.split.threshold", "1G", PropertyType.MEMORY,
 -      "When combined size of files exceeds this amount a tablet is split."),
 -  TABLE_MAX_END_ROW_SIZE("table.split.endrow.size.max", "10K", PropertyType.MEMORY,
 +      "After a tablet has been idle (no mutations) for this time period it may have all "
 +          + "of its RFiles compacted into one. There is no guarantee an idle tablet will be compacted. "
 +          + "Compactions of idle tablets are only started when regular compactions are not running. Idle "
 +          + "compactions only take place for tablets that have one or more RFiles."),
 +  TABLE_SPLIT_THRESHOLD("table.split.threshold", "1G", PropertyType.BYTES,
 +      "A tablet is split when the combined size of RFiles exceeds this amount."),
 +  TABLE_MAX_END_ROW_SIZE("table.split.endrow.size.max", "10K", PropertyType.BYTES,
        "Maximum size of end row"),
    TABLE_MINC_LOGS_MAX("table.compaction.minor.logs.threshold", "3", PropertyType.COUNT,
-       "When there are more than this many write-ahead logs against a tablet, it will be minor compacted. See comment for property tserver.memory.maps.max"),
+       "When there are more than this many write-ahead logs against a tablet, it"
+           + " will be minor compacted. See comment for property" + " tserver.memory.maps.max"),
    TABLE_MINC_COMPACT_IDLETIME("table.compaction.minor.idle", "5m", PropertyType.TIMEDURATION,
        "After a tablet has been idle (no mutations) for this time period it may have its "
            + "in-memory map flushed to disk in a minor compaction. There is no guarantee an idle "
@@@ -602,26 -660,34 +658,27 @@@
        "Change the type of file a table writes"),
    TABLE_LOAD_BALANCER("table.balancer",
        "org.apache.accumulo.server.master.balancer.DefaultLoadBalancer", PropertyType.STRING,
-       "This property can be set to allow the LoadBalanceByTable load balancer to change the called Load Balancer for this table"),
+       "This property can be set to allow the LoadBalanceByTable load balancer"
+           + " to change the called Load Balancer for this table"),
    TABLE_FILE_COMPRESSION_TYPE("table.file.compress.type", "gz", PropertyType.STRING,
 -      "One of gz,snappy,lzo,none"),
 -  TABLE_FILE_COMPRESSED_BLOCK_SIZE("table.file.compress.blocksize", "100K", PropertyType.MEMORY,
 -      "Similar to the hadoop io.seqfile.compress.blocksize setting, so that"
 -          + " files have better query performance. The maximum value for this is "
 -          + Integer.MAX_VALUE + ". (This setting is the size threshold prior to"
 -          + " compression, and applies even compression is disabled.)"),
 +      "Compression algorithm used on index and data blocks before they are written. Possible values: gz, snappy, lzo, none"),
 +  TABLE_FILE_COMPRESSED_BLOCK_SIZE("table.file.compress.blocksize", "100K", PropertyType.BYTES,
 +      "The maximum size of data blocks in RFiles before they are compressed and written."),
    TABLE_FILE_COMPRESSED_BLOCK_SIZE_INDEX("table.file.compress.blocksize.index", "128K",
 -      PropertyType.MEMORY,
 -      "Determines how large index blocks can be in files that support"
 -          + " multilevel indexes. The maximum value for this is " + Integer.MAX_VALUE
 -          + ". (This setting is the size threshold prior to compression, and applies"
 -          + " even compression is disabled.)"),
 -  TABLE_FILE_BLOCK_SIZE("table.file.blocksize", "0B", PropertyType.MEMORY,
 -      "Overrides the hadoop dfs.block.size setting so that files have better"
 -          + " query performance. The maximum value for this is " + Integer.MAX_VALUE),
 +      PropertyType.BYTES,
 +      "The maximum size of index blocks in RFiles before they are compressed and written."),
 +  TABLE_FILE_BLOCK_SIZE("table.file.blocksize", "0B", PropertyType.BYTES,
 +      "The HDFS block size used when writing RFiles. When set to 0B, the value/defaults of HDFS property 'dfs.block.size' will be used."),
    TABLE_FILE_REPLICATION("table.file.replication", "0", PropertyType.COUNT,
 -      "Determines how many replicas to keep of a tables' files in HDFS. "
 -          + "When this value is LTE 0, HDFS defaults are used."),
 +      "The number of replicas for a table's RFiles in HDFS. When set to 0, HDFS defaults are used."),
    TABLE_FILE_MAX("table.file.max", "15", PropertyType.COUNT,
 -      "Determines the max # of files each tablet in a table can have. When"
 -          + " adjusting this property you may want to consider adjusting"
 -          + " table.compaction.major.ratio also. Setting this property to 0 will make"
 -          + " it default to tserver.scan.files.open.max-1, this will prevent a tablet"
 -          + " from having more files than can be opened. Setting this property low may"
 -          + " throttle ingest and increase query performance."),
 +      "The maximum number of RFiles each tablet in a table can have. When adjusting this property you may want to consider adjusting"
 +          + " table.compaction.major.ratio also. Setting this property to 0 will make it default to tserver.scan.files.open.max-1, this will prevent a"
 +          + " tablet from having more RFiles than can be opened. Setting this property low may throttle ingest and increase query performance."),
 +  TABLE_FILE_SUMMARY_MAX_SIZE("table.file.summary.maxSize", "256K", PropertyType.BYTES,
 +      "The maximum size summary that will be stored. The number of"
 +          + " RFiles that had summary data exceeding this threshold is reported by Summary.getFileStatistics().getLarge().  When adjusting this"
 +          + " consider the expected number RFiles with summaries on each tablet server and the summary cache size."),
    @Deprecated
    TABLE_WALOG_ENABLED("table.walog.enabled", "true", PropertyType.BOOLEAN,
        "This setting is deprecated.  Use table.durability=none instead."),
@@@ -662,23 -736,28 +726,28 @@@
    TABLE_LOCALITY_GROUPS("table.groups.enabled", "", PropertyType.STRING,
        "A comma separated list of locality group names to enable for this table."),
    TABLE_CONSTRAINT_PREFIX("table.constraint.", null, PropertyType.PREFIX,
-       "Properties in this category are per-table properties that add constraints to a table. "
-           + "These properties start with the category prefix, followed by a number, and their values "
-           + "correspond to a fully qualified Java class that implements the Constraint interface.\n"
-           + "For example:\ntable.constraint.1 = org.apache.accumulo.core.constraints.MyCustomConstraint\n"
-           + "and:\ntable.constraint.2 = my.package.constraints.MySecondConstraint"),
+       "Properties in this category are per-table properties that add"
+           + " constraints to a table. These properties start with the category"
+           + " prefix, followed by a number, and their values correspond to a fully"
+           + " qualified Java class that implements the Constraint interface.\n" + "For example:\n"
+           + "table.constraint.1 = org.apache.accumulo.core.constraints.MyCustomConstraint\n"
+           + "and:\n" + " table.constraint.2 = my.package.constraints.MySecondConstraint"),
    TABLE_INDEXCACHE_ENABLED("table.cache.index.enable", "true", PropertyType.BOOLEAN,
 -      "Determines whether index cache is enabled."),
 +      "Determines whether index block cache is enabled for a table."),
    TABLE_BLOCKCACHE_ENABLED("table.cache.block.enable", "false", PropertyType.BOOLEAN,
 -      "Determines whether file block cache is enabled."),
 +      "Determines whether data block cache is enabled for a table."),
    TABLE_ITERATOR_PREFIX("table.iterator.", null, PropertyType.PREFIX,
-       "Properties in this category specify iterators that are applied at various stages (scopes) of interaction "
-           + "with a table. These properties start with the category prefix, followed by a scope (minc, majc, scan, etc.), "
-           + "followed by a period, followed by a name, as in table.iterator.scan.vers, or table.iterator.scan.custom. "
-           + "The values for these properties are a number indicating the ordering in which it is applied, and a class name "
-           + "such as:\n table.iterator.scan.vers = 10,org.apache.accumulo.core.iterators.VersioningIterator\n "
-           + "These iterators can take options if additional properties are set that look like this property, "
-           + "but are suffixed with a period, followed by 'opt' followed by another period, and a property name.\n"
+       "Properties in this category specify iterators that are applied at"
+           + " various stages (scopes) of interaction with a table. These properties"
+           + " start with the category prefix, followed by a scope (minc, majc, scan,"
+           + " etc.), followed by a period, followed by a name, as in"
+           + " table.iterator.scan.vers, or table.iterator.scan.custom. The values for"
+           + " these properties are a number indicating the ordering in which it is"
+           + " applied, and a class name such as:\n"
+           + "table.iterator.scan.vers = 10,org.apache.accumulo.core.iterators.VersioningIterator\n"
+           + "These iterators can take options if additional properties are set that"
+           + " look like this property, but are suffixed with a period, followed by 'opt'"
+           + " followed by another period, and a property name.\n"
            + "For example, table.iterator.minc.vers.opt.maxVersions = 3"),
    TABLE_ITERATOR_SCAN_PREFIX(TABLE_ITERATOR_PREFIX.getKey() + IteratorScope.scan.name() + ".", null,
        PropertyType.PREFIX, "Convenience prefix to find options for the scan iterator scope"),
@@@ -708,23 -790,32 +780,25 @@@
    TABLE_REPLICATION("table.replication", "false", PropertyType.BOOLEAN,
        "Is replication enabled for the given table"),
    TABLE_REPLICATION_TARGET("table.replication.target.", null, PropertyType.PREFIX,
 -      "Enumerate a mapping of other systems which this table should replicate"
 -          + " their data to. The key suffix is the identifying cluster name and the"
 -          + " value is an identifier for a location on the target system,"
 -          + " e.g. the ID of the table on the target to replicate to"),
 -  @Experimental
 -  TABLE_VOLUME_CHOOSER("table.volume.chooser", "org.apache.accumulo.server.fs.RandomVolumeChooser",
 -      PropertyType.CLASSNAME,
 -      "The class that will be used to select which volume will be used to"
 -          + " create new files for this table."),
 +      "Enumerate a mapping of other systems which this table should "
 +          + "replicate their data to. The key suffix is the identifying cluster name and the value is an identifier for a location on the target system, "
 +          + "e.g. the ID of the table on the target to replicate to"),
    TABLE_SAMPLER("table.sampler", "", PropertyType.CLASSNAME,
 -      "The name of a class that implements org.apache.accumulo.core.Sampler."
 -          + " Setting this option enables storing a sample of data which can be"
 -          + " scanned. Always having a current sample can useful for query optimization"
 -          + " and data comprehension. After enabling sampling for an existing table,"
 -          + " a compaction is needed to compute the sample for existing data. The"
 -          + " compact command in the shell has an option to only compact files without"
 -          + " sample data."),
 +      "The name of a class that implements org.apache.accumulo.core.Sampler.  Setting this option enables storing a sample of data which can be scanned."
 +          + "  Always having a current sample can useful for query optimization and data comprehension.   After enabling sampling for an existing table, a compaction "
 +          + "is needed to compute the sample for existing data.  The compact command in the shell has an option to only compact RFiles without sample data."),
    TABLE_SAMPLER_OPTS("table.sampler.opt.", null, PropertyType.PREFIX,
-       "The property is used to set options for a sampler.  If a sample had two options like hasher and modulous, then the two properties "
-           + "table.sampler.opt.hasher=${hash algorithm} and table.sampler.opt.modulous=${mod} would be set."),
+       "The property is used to set options for a sampler. If a sample had two"
+           + " options like hasher and modulous, then the two properties"
+           + " table.sampler.opt.hasher=${hash algorithm} and"
+           + " table.sampler.opt.modulous=${mod} would be set."),
    TABLE_SUSPEND_DURATION("table.suspend.duration", "0s", PropertyType.TIMEDURATION,
 -      "For tablets belonging to this table: When a tablet server dies, allow"
 -          + " the tablet server this duration to revive before reassigning its tablets"
 -          + " to other tablet servers."),
 +      "For tablets belonging to this table: When a tablet server dies, allow the tablet server this duration to revive before reassigning its tablets"
 +          + "to other tablet servers."),
 +  TABLE_SUMMARIZER_PREFIX("table.summarizer.", null, PropertyType.PREFIX,
 +      "Prefix for configuring summarizers for a table.  Using this prefix multiple summarizers can be configured with options for each one. Each summarizer configured "
 +          + "should have a unique id, this id can be anything. To add a summarizer set table.summarizer.<unique id>=<summarizer class name>.  If the summarizer has options, "
 +          + "then for each option set table.summarizer.<unique id>.opt.<key>=<value>."),
  
    // VFS ClassLoader properties
    VFS_CLASSLOADER_SYSTEM_CLASSPATH_PROPERTY(
diff --cc core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java
index 0a3b520,0fc500a..e448ef8
--- a/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/PropertyType.java
@@@ -37,31 -38,27 +37,33 @@@ import com.google.common.base.Precondit
   * valid values match. All of these fields are optional.
   */
  public enum PropertyType {
 -  PREFIX(null, Predicates.<String> alwaysFalse(), null),
 +  PREFIX(null, x -> false, null),
  
    TIMEDURATION("duration", boundedUnits(0, Long.MAX_VALUE, true, "", "ms", "s", "m", "h", "d"),
-       "A non-negative integer optionally followed by a unit of time (whitespace disallowed), as in 30s.\n"
-           + "If no unit of time is specified, seconds are assumed. Valid units are 'ms', 's', 'm', 'h' for milliseconds, seconds, minutes, and hours.\n"
-           + "Examples of valid durations are '600', '30s', '45m', '30000ms', '3d', and '1h'.\n"
-           + "Examples of invalid durations are '1w', '1h30m', '1s 200ms', 'ms', '', and 'a'.\n"
-           + "Unless otherwise stated, the max value for the duration represented in milliseconds is "
-           + Long.MAX_VALUE),
+       "A non-negative integer optionally followed by a unit of time (whitespace"
+           + " disallowed), as in 30s.\n"
+           + "If no unit of time is specified, seconds are assumed. Valid units"
+           + " are 'ms', 's', 'm', 'h' for milliseconds, seconds," + " minutes, and" + " hours.\n"
+           + "Examples of valid durations are '600', '30s', '45m', '30000ms'," + " '3d', and '1h'.\n"
+           + "Examples of invalid durations are '1w', '1h30m', '1s 200ms', 'ms', '',"
+           + " and 'a'.\nUnless otherwise stated, the max value for the duration"
+           + " represented in milliseconds is " + Long.MAX_VALUE),
  
 -  MEMORY("memory", boundedUnits(0, Long.MAX_VALUE, false, "", "B", "K", "M", "G"),
 -      "A positive integer optionally followed by a unit of memory (whitespace"
 -          + " disallowed), as in 2G.\n"
 -          + "If no unit is specified, bytes are assumed. Valid units are 'B', 'K',"
 -          + " 'M', 'G', for bytes, kilobytes, megabytes, and gigabytes.\n"
 -          + "Examples of valid memories are '1024', '20B', '100K', '1500M', '2G'.\n"
 -          + "Examples of invalid memories are '1M500K', '1M 2K', '1MB', '1.5G',"
 -          + " '1,024K', '', and 'a'.\n"
 -          + "Unless otherwise stated, the max value for the memory represented in" + " bytes is "
 +  BYTES("bytes", boundedUnits(0, Long.MAX_VALUE, false, "", "B", "K", "M", "G"),
 +      "A positive integer optionally followed by a unit of memory (whitespace disallowed).\n"
 +          + "If no unit is specified, bytes are assumed. Valid units are 'B', 'K', 'M' or 'G' for bytes, kilobytes, megabytes, gigabytes.\n"
 +          + "Examples of valid memories are '1024', '20B', '100K', '1500M', '2G', '20%'.\n"
 +          + "Examples of invalid memories are '1M500K', '1M 2K', '1MB', '1.5G', '1,024K', '', and 'a'.\n"
 +          + "Unless otherwise stated, the max value for the memory represented in bytes is "
 +          + Long.MAX_VALUE),
 +
 +  MEMORY("memory", boundedUnits(0, Long.MAX_VALUE, false, "", "B", "K", "M", "G", "%"),
 +      "A positive integer optionally followed by a unit of memory or a percentage (whitespace disallowed).\n"
 +          + "If a percentage is specified, memory will be a percentage of the max memory allocated to a Java process (set by the JVM option -Xmx).\n"
 +          + "If no unit is specified, bytes are assumed. Valid units are 'B', 'K', 'M', 'G', '%' for bytes, kilobytes, megabytes, gigabytes, and percentage.\n"
 +          + "Examples of valid memories are '1024', '20B', '100K', '1500M', '2G', '20%'.\n"
 +          + "Examples of invalid memories are '1M500K', '1M 2K', '1MB', '1.5G', '1,024K', '', and 'a'.\n"
 +          + "Unless otherwise stated, the max value for the memory represented in bytes is "
            + Long.MAX_VALUE),
  
    HOSTLIST("host list",
@@@ -80,18 -81,25 +83,20 @@@
        "A non-negative integer in the range of 0-" + Integer.MAX_VALUE),
  
    FRACTION("fraction/percentage", new FractionPredicate(),
-       "A floating point number that represents either a fraction or, if suffixed with the '%' character, a percentage.\n"
-           + "Examples of valid fractions/percentages are '10', '1000%', '0.05', '5%', '0.2%', '0.0005'.\n"
-           + "Examples of invalid fractions/percentages are '', '10 percent', 'Hulk Hogan'"),
+       "A floating point number that represents either a fraction or, if"
+           + " suffixed with the '%' character, a percentage.\n"
+           + "Examples of valid fractions/percentages are '10', '1000%', '0.05',"
+           + " '5%', '0.2%', '0.0005'.\n"
+           + "Examples of invalid fractions/percentages are '', '10 percent'," + " 'Hulk Hogan'"),
  
 -  PATH("path", Predicates.<String> alwaysTrue(),
 -      "A string that represents a filesystem path, which can be either relative"
 -          + " or absolute to some directory. The filesystem depends on the property."
 -          + " The following environment variables will be substituted: "
 +  PATH("path", x -> true,
 +      "A string that represents a filesystem path, which can be either relative or absolute to some directory. The filesystem depends on the property. The "
 +          + "following environment variables will be substituted: "
            + Constants.PATH_PROPERTY_ENV_VARS),
  
 -  ABSOLUTEPATH("absolute path", new Predicate<String>() {
 -    @Override
 -    public boolean apply(final String input) {
 -      return input == null || input.trim().isEmpty() || new Path(input.trim()).isAbsolute();
 -    }
 -  }, "An absolute filesystem path. The filesystem depends on the property."
 -      + " This is the same as path, but enforces that its root is explicitly" + " specified."),
 +  ABSOLUTEPATH("absolute path",
 +      x -> x == null || x.trim().isEmpty() || new Path(x.trim()).isAbsolute(),
 +      "An absolute filesystem path. The filesystem depends on the property. This is the same as path, but enforces that its root is explicitly specified."),
  
    CLASSNAME("java class", new Matches("[\\w$.]*"),
        "A fully qualified java class name representing a class on the classpath.\n"
diff --cc core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java
index dc10e57,14c5183..001b1db
--- a/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/SiteConfiguration.java
@@@ -197,12 -164,10 +197,11 @@@ public class SiteConfiguration extends 
            }
          }
        } catch (IOException e) {
-         log.warn(
-             "Failed to extract sensitive properties from Hadoop CredentialProvider, falling back to accumulo-site.xml",
-             e);
+         log.warn("Failed to extract sensitive properties from Hadoop"
+             + " CredentialProvider, falling back to accumulo-site.xml", e);
        }
      }
 +    CliConfiguration.getProperties(props, filter);
    }
  
    protected Configuration getHadoopConfiguration() {
diff --cc core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
index 24d5055,0000000..5d8381b
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
+++ b/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/lru/LruBlockCache.java
@@@ -1,704 -1,0 +1,705 @@@
 +/*
 + * 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.file.blockfile.cache.lru;
 +
 +import java.lang.ref.WeakReference;
 +import java.util.Objects;
 +import java.util.PriorityQueue;
 +import java.util.concurrent.ConcurrentHashMap;
 +import java.util.concurrent.Executors;
 +import java.util.concurrent.ScheduledExecutorService;
 +import java.util.concurrent.TimeUnit;
 +import java.util.concurrent.atomic.AtomicLong;
 +import java.util.concurrent.locks.ReentrantLock;
 +import java.util.function.Supplier;
 +
 +import org.apache.accumulo.core.file.blockfile.cache.BlockCache;
 +import org.apache.accumulo.core.file.blockfile.cache.CacheEntry;
 +import org.apache.accumulo.core.file.blockfile.cache.impl.ClassSize;
 +import org.apache.accumulo.core.file.blockfile.cache.impl.SizeConstants;
 +import org.apache.accumulo.core.util.NamingThreadFactory;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +
 +/**
 + * A block cache implementation that is memory-aware using {@link HeapSize}, memory-bound using an
 + * LRU eviction algorithm, and concurrent: backed by a {@link ConcurrentHashMap} and with a
 + * non-blocking eviction thread giving constant-time {@link #cacheBlock} and {@link #getBlock}
 + * operations.
 + *
 + * <p>
 + * Contains three levels of block priority to allow for scan-resistance and in-memory families. A
 + * block is added with an inMemory flag if necessary, otherwise a block becomes a single access
 + * priority. Once a blocked is accessed again, it changes to multiple access. This is used to
 + * prevent scans from thrashing the cache, adding a least-frequently-used element to the eviction
 + * algorithm.
 + *
 + * <p>
 + * Each priority is given its own chunk of the total cache to ensure fairness during eviction. Each
 + * priority will retain close to its maximum size, however, if any priority is not using its entire
 + * chunk the others are able to grow beyond their chunk size.
 + *
 + * <p>
 + * Instantiated at a minimum with the total size and average block size. All sizes are in bytes. The
 + * block size is not especially important as this cache is fully dynamic in its sizing of blocks. It
 + * is only used for pre-allocating data structures and in initial heap estimation of the map.
 + *
 + * <p>
 + * The detailed constructor defines the sizes for the three priorities (they should total to the
 + * maximum size defined). It also sets the levels that trigger and control the eviction thread.
 + *
 + * <p>
 + * The acceptable size is the cache size level which triggers the eviction process to start. It
 + * evicts enough blocks to get the size below the minimum size specified.
 + *
 + * <p>
 + * Eviction happens in a separate thread and involves a single full-scan of the map. It determines
 + * how many bytes must be freed to reach the minimum size, and then while scanning determines the
 + * fewest least-recently-used blocks necessary from each of the three priorities (would be 3 times
 + * bytes to free). It then uses the priority chunk sizes to evict fairly according to the relative
 + * sizes and usage.
 + */
 +public class LruBlockCache extends SynchronousLoadingBlockCache implements BlockCache, HeapSize {
 +
 +  private static final Logger log = LoggerFactory.getLogger(LruBlockCache.class);
 +
 +  /** Statistics thread */
 +  static final int statThreadPeriod = 60;
 +
 +  /** Concurrent map (the cache) */
 +  private final ConcurrentHashMap<String,CachedBlock> map;
 +
 +  /** Eviction lock (locked when eviction in process) */
 +  private final ReentrantLock evictionLock = new ReentrantLock(true);
 +
 +  /** Volatile boolean to track if we are in an eviction process or not */
 +  private volatile boolean evictionInProgress = false;
 +
 +  /** Eviction thread */
 +  private final EvictionThread evictionThread;
 +
 +  /** Statistics thread schedule pool (for heavy debugging, could remove) */
 +  private final ScheduledExecutorService scheduleThreadPool = Executors.newScheduledThreadPool(1,
 +      new NamingThreadFactory("LRUBlockCacheStats"));
 +
 +  /** Current size of cache */
 +  private final AtomicLong size;
 +
 +  /** Current number of cached elements */
 +  private final AtomicLong elements;
 +
 +  /** Cache access count (sequential ID) */
 +  private final AtomicLong count;
 +
 +  /** Cache statistics */
 +  private final CacheStats stats;
 +
 +  /** Overhead of the structure itself */
 +  private final long overhead;
 +
 +  private final LruBlockCacheConfiguration conf;
 +
 +  /**
 +   * Default constructor. Specify maximum size and expected average block size (approximation is
 +   * fine).
 +   *
 +   * <p>
 +   * All other factors will be calculated based on defaults specified in this class.
 +   *
 +   * @param conf
 +   *          block cache configuration
 +   */
 +  public LruBlockCache(final LruBlockCacheConfiguration conf) {
 +    super();
 +    this.conf = conf;
 +
 +    int mapInitialSize = (int) Math.ceil(1.2 * conf.getMaxSize() / conf.getBlockSize());
 +
 +    map = new ConcurrentHashMap<>(mapInitialSize, conf.getMapLoadFactor(),
 +        conf.getMapConcurrencyLevel());
 +    this.stats = new CacheStats();
 +    this.count = new AtomicLong(0);
 +    this.elements = new AtomicLong(0);
 +    this.overhead = calculateOverhead(conf.getMaxSize(), conf.getBlockSize(),
 +        conf.getMapConcurrencyLevel());
 +    this.size = new AtomicLong(this.overhead);
 +
 +    if (conf.isUseEvictionThread()) {
 +      this.evictionThread = new EvictionThread(this);
 +      this.evictionThread.start();
 +      while (!this.evictionThread.running()) {
 +        try {
 +          Thread.sleep(10);
 +        } catch (InterruptedException ex) {
 +          throw new RuntimeException(ex);
 +        }
 +      }
 +    } else {
 +      this.evictionThread = null;
 +    }
 +    this.scheduleThreadPool.scheduleAtFixedRate(new StatisticsThread(this), statThreadPeriod,
 +        statThreadPeriod, TimeUnit.SECONDS);
 +  }
 +
 +  public long getOverhead() {
 +    return overhead;
 +  }
 +
 +  /*
 +   * This class exists so that every cache entry does not have a reference to the cache.
 +   */
 +  private class LruCacheEntry implements CacheEntry {
 +    private final CachedBlock block;
 +
 +    LruCacheEntry(CachedBlock block) {
 +      this.block = block;
 +    }
 +
 +    @Override
 +    public byte[] getBuffer() {
 +      return block.getBuffer();
 +    }
 +
 +    @Override
 +    public <T extends Weighbable> T getIndex(Supplier<T> supplier) {
 +      return block.getIndex(supplier);
 +    }
 +
 +    @Override
 +    public void indexWeightChanged() {
 +      long newSize = block.recordSize(size);
 +      if (newSize > acceptableSize() && !evictionInProgress) {
 +        runEviction();
 +      }
 +    }
 +  }
 +
 +  private CacheEntry wrap(CachedBlock cb) {
 +    if (cb == null) {
 +      return null;
 +    }
 +
 +    return new LruCacheEntry(cb);
 +  }
 +
 +  // BlockCache implementation
 +
 +  /**
 +   * Cache the block with the specified name and buffer.
 +   * <p>
 +   * It is assumed this will NEVER be called on an already cached block. If that is done, it is
 +   * assumed that you are reinserting the same exact block due to a race condition and will update
 +   * the buffer but not modify the size of the cache.
 +   *
 +   * @param blockName
 +   *          block name
 +   * @param buf
 +   *          block buffer
 +   * @param inMemory
 +   *          if block is in-memory
 +   */
 +  public CacheEntry cacheBlock(String blockName, byte buf[], boolean inMemory) {
 +    CachedBlock cb = map.get(blockName);
 +    if (cb != null) {
 +      stats.duplicateReads();
 +      cb.access(count.incrementAndGet());
 +    } else {
 +      cb = new CachedBlock(blockName, buf, count.incrementAndGet(), inMemory);
 +      CachedBlock currCb = map.putIfAbsent(blockName, cb);
 +      if (currCb != null) {
 +        stats.duplicateReads();
 +        cb = currCb;
 +        cb.access(count.incrementAndGet());
 +      } else {
 +        // Actually added block to cache
 +        long newSize = cb.recordSize(size);
 +        elements.incrementAndGet();
 +        if (newSize > acceptableSize() && !evictionInProgress) {
 +          runEviction();
 +        }
 +      }
 +    }
 +
 +    return wrap(cb);
 +  }
 +
 +  /**
 +   * Cache the block with the specified name and buffer.
 +   * <p>
 +   * It is assumed this will NEVER be called on an already cached block. If that is done, it is
 +   * assumed that you are reinserting the same exact block due to a race condition and will update
 +   * the buffer but not modify the size of the cache.
 +   *
 +   * @param blockName
 +   *          block name
 +   * @param buf
 +   *          block buffer
 +   */
 +  @Override
 +  public CacheEntry cacheBlock(String blockName, byte buf[]) {
 +    return cacheBlock(blockName, buf, false);
 +  }
 +
 +  /**
 +   * Get the buffer of the block with the specified name.
 +   *
 +   * @param blockName
 +   *          block name
 +   * @return buffer of specified block name, or null if not in cache
 +   */
 +  @Override
 +  public CacheEntry getBlock(String blockName) {
 +    CachedBlock cb = map.get(blockName);
 +    if (cb == null) {
 +      stats.miss();
 +      return null;
 +    }
 +    stats.hit();
 +    cb.access(count.incrementAndGet());
 +    return wrap(cb);
 +  }
 +
 +  @Override
 +  protected CacheEntry getBlockNoStats(String blockName) {
 +    CachedBlock cb = map.get(blockName);
 +    if (cb != null) {
 +      cb.access(count.incrementAndGet());
 +    }
 +    return wrap(cb);
 +  }
 +
 +  protected long evictBlock(CachedBlock block) {
 +    if (map.remove(block.getName()) != null) {
 +      elements.decrementAndGet();
 +      stats.evicted();
 +      return block.evicted(size);
 +    }
 +    return 0;
 +  }
 +
 +  /**
 +   * Multi-threaded call to run the eviction process.
 +   */
 +  private void runEviction() {
 +    if (evictionThread == null) {
 +      evict();
 +    } else {
 +      evictionThread.evict();
 +    }
 +  }
 +
 +  /**
 +   * Eviction method.
 +   */
 +  void evict() {
 +
 +    // Ensure only one eviction at a time
 +    if (!evictionLock.tryLock())
 +      return;
 +
 +    try {
 +      evictionInProgress = true;
 +
 +      long bytesToFree = size.get() - minSize();
 +
 +      log.trace("Block cache LRU eviction started.  Attempting to free {} bytes", bytesToFree);
 +
 +      if (bytesToFree <= 0)
 +        return;
 +
 +      // Instantiate priority buckets
 +      BlockBucket bucketSingle = new BlockBucket(bytesToFree, conf.getBlockSize(), singleSize());
 +      BlockBucket bucketMulti = new BlockBucket(bytesToFree, conf.getBlockSize(), multiSize());
 +      BlockBucket bucketMemory = new BlockBucket(bytesToFree, conf.getBlockSize(), memorySize());
 +
 +      // Scan entire map putting into appropriate buckets
 +      for (CachedBlock cachedBlock : map.values()) {
 +        switch (cachedBlock.getPriority()) {
 +          case SINGLE: {
 +            bucketSingle.add(cachedBlock);
 +            break;
 +          }
 +          case MULTI: {
 +            bucketMulti.add(cachedBlock);
 +            break;
 +          }
 +          case MEMORY: {
 +            bucketMemory.add(cachedBlock);
 +            break;
 +          }
 +        }
 +      }
 +
 +      PriorityQueue<BlockBucket> bucketQueue = new PriorityQueue<>(3);
 +
 +      bucketQueue.add(bucketSingle);
 +      bucketQueue.add(bucketMulti);
 +      bucketQueue.add(bucketMemory);
 +
 +      int remainingBuckets = 3;
 +      long bytesFreed = 0;
 +
 +      BlockBucket bucket;
 +      while ((bucket = bucketQueue.poll()) != null) {
 +        long overflow = bucket.overflow();
 +        if (overflow > 0) {
 +          long bucketBytesToFree = Math.min(overflow,
 +              (long) Math.ceil((bytesToFree - bytesFreed) / (double) remainingBuckets));
 +          bytesFreed += bucket.free(bucketBytesToFree);
 +        }
 +        remainingBuckets--;
 +      }
 +
 +      float singleMB = ((float) bucketSingle.totalSize()) / ((float) (1024 * 1024));
 +      float multiMB = ((float) bucketMulti.totalSize()) / ((float) (1024 * 1024));
 +      float memoryMB = ((float) bucketMemory.totalSize()) / ((float) (1024 * 1024));
 +
 +      log.trace(
-           "Block cache LRU eviction completed. Freed {} bytes. Priority Sizes: Single={}MB ({}), Multi={}MB ({}), Memory={}MB ({})",
++          "Block cache LRU eviction completed. Freed {} bytes. Priority Sizes:"
++              + " Single={}MB ({}), Multi={}MB ({}), Memory={}MB ({})",
 +          bytesFreed, singleMB, bucketSingle.totalSize(), multiMB, bucketMulti.totalSize(),
 +          memoryMB, bucketMemory.totalSize());
 +
 +    } finally {
 +      stats.evict();
 +      evictionInProgress = false;
 +      evictionLock.unlock();
 +    }
 +  }
 +
 +  /**
 +   * Used to group blocks into priority buckets. There will be a BlockBucket for each priority
 +   * (single, multi, memory). Once bucketed, the eviction algorithm takes the appropriate number of
 +   * elements out of each according to configuration parameters and their relatives sizes.
 +   */
 +  private class BlockBucket implements Comparable<BlockBucket> {
 +
 +    private CachedBlockQueue queue;
 +    private long totalSize = 0;
 +    private long bucketSize;
 +
 +    public BlockBucket(long bytesToFree, long blockSize, long bucketSize) {
 +      this.bucketSize = bucketSize;
 +      queue = new CachedBlockQueue(bytesToFree, blockSize);
 +      totalSize = 0;
 +    }
 +
 +    public void add(CachedBlock block) {
 +      totalSize += block.heapSize();
 +      queue.add(block);
 +    }
 +
 +    public long free(long toFree) {
 +      CachedBlock[] blocks = queue.get();
 +      long freedBytes = 0;
 +      for (CachedBlock block : blocks) {
 +        freedBytes += evictBlock(block);
 +        if (freedBytes >= toFree) {
 +          return freedBytes;
 +        }
 +      }
 +      return freedBytes;
 +    }
 +
 +    public long overflow() {
 +      return totalSize - bucketSize;
 +    }
 +
 +    public long totalSize() {
 +      return totalSize;
 +    }
 +
 +    @Override
 +    public int compareTo(BlockBucket that) {
 +      if (this.overflow() == that.overflow())
 +        return 0;
 +      return this.overflow() > that.overflow() ? 1 : -1;
 +    }
 +
 +    @Override
 +    public int hashCode() {
 +      return Objects.hashCode(overflow());
 +    }
 +
 +    @Override
 +    public boolean equals(Object that) {
 +      if (that instanceof BlockBucket)
 +        return compareTo((BlockBucket) that) == 0;
 +      return false;
 +    }
 +  }
 +
 +  @Override
 +  public long getMaxHeapSize() {
 +    return getMaxSize();
 +  }
 +
 +  @Override
 +  public long getMaxSize() {
 +    return this.conf.getMaxSize();
 +  }
 +
 +  @Override
 +  public int getMaxEntrySize() {
 +    return (int) Math.min(Integer.MAX_VALUE, getMaxSize());
 +  }
 +
 +  /**
 +   * Get the current size of this cache.
 +   *
 +   * @return current size in bytes
 +   */
 +  public long getCurrentSize() {
 +    return this.size.get();
 +  }
 +
 +  /**
 +   * Get the current size of this cache.
 +   *
 +   * @return current size in bytes
 +   */
 +  public long getFreeSize() {
 +    return getMaxSize() - getCurrentSize();
 +  }
 +
 +  /**
 +   * Get the size of this cache (number of cached blocks)
 +   *
 +   * @return number of cached blocks
 +   */
 +  public long size() {
 +    return this.elements.get();
 +  }
 +
 +  /**
 +   * Get the number of eviction runs that have occurred
 +   */
 +  public long getEvictionCount() {
 +    return this.stats.getEvictionCount();
 +  }
 +
 +  /**
 +   * Get the number of blocks that have been evicted during the lifetime of this cache.
 +   */
 +  public long getEvictedCount() {
 +    return this.stats.getEvictedCount();
 +  }
 +
 +  /**
 +   * Eviction thread. Sits in waiting state until an eviction is triggered when the cache size grows
 +   * above the acceptable level.
 +   *
 +   * <p>
 +   * Thread is triggered into action by {@link LruBlockCache#runEviction()}
 +   */
 +  private static class EvictionThread extends Thread {
 +    private WeakReference<LruBlockCache> cache;
 +    private boolean running = false;
 +
 +    public EvictionThread(LruBlockCache cache) {
 +      super("LruBlockCache.EvictionThread");
 +      setDaemon(true);
 +      this.cache = new WeakReference<>(cache);
 +    }
 +
 +    public synchronized boolean running() {
 +      return running;
 +    }
 +
 +    @Override
 +    public void run() {
 +      while (true) {
 +        synchronized (this) {
 +          running = true;
 +          try {
 +            this.wait();
 +          } catch (InterruptedException e) {}
 +        }
 +        LruBlockCache cache = this.cache.get();
 +        if (cache == null)
 +          break;
 +        cache.evict();
 +      }
 +    }
 +
 +    public void evict() {
 +      synchronized (this) {
 +        this.notify();
 +      }
 +    }
 +  }
 +
 +  /*
 +   * Statistics thread. Periodically prints the cache statistics to the log.
 +   */
 +  private static class StatisticsThread extends Thread {
 +    LruBlockCache lru;
 +
 +    public StatisticsThread(LruBlockCache lru) {
 +      super("LruBlockCache.StatisticsThread");
 +      setDaemon(true);
 +      this.lru = lru;
 +    }
 +
 +    @Override
 +    public void run() {
 +      lru.logStats();
 +    }
 +  }
 +
 +  public void logStats() {
 +    // Log size
 +    long totalSize = heapSize();
 +    long freeSize = this.conf.getMaxSize() - totalSize;
 +    float sizeMB = ((float) totalSize) / ((float) (1024 * 1024));
 +    float freeMB = ((float) freeSize) / ((float) (1024 * 1024));
 +    float maxMB = ((float) this.conf.getMaxSize()) / ((float) (1024 * 1024));
 +    log.debug(
 +        "Cache Stats: Sizes: Total={}MB ({}), Free={}MB ({}), Max={}MB ({}), Counts: Blocks={}, Access={}, Hit={}, Miss={}, Evictions={}, Evicted={},"
 +            + "Ratios: Hit Ratio={}%, Miss Ratio={}%, Evicted/Run={}, Duplicate Reads={}",
 +        sizeMB, totalSize, freeMB, freeSize, maxMB, this.conf.getMaxSize(), size(),
 +        stats.requestCount(), stats.hitCount(), stats.getMissCount(), stats.getEvictionCount(),
 +        stats.getEvictedCount(), stats.getHitRatio() * 100, stats.getMissRatio() * 100,
 +        stats.evictedPerEviction(), stats.getDuplicateReads());
 +  }
 +
 +  /**
 +   * Get counter statistics for this cache.
 +   *
 +   * <p>
 +   * Includes: total accesses, hits, misses, evicted blocks, and runs of the eviction processes.
 +   */
 +  @Override
 +  public CacheStats getStats() {
 +    return this.stats;
 +  }
 +
 +  public static class CacheStats implements BlockCache.Stats {
 +    private final AtomicLong accessCount = new AtomicLong(0);
 +    private final AtomicLong hitCount = new AtomicLong(0);
 +    private final AtomicLong missCount = new AtomicLong(0);
 +    private final AtomicLong evictionCount = new AtomicLong(0);
 +    private final AtomicLong evictedCount = new AtomicLong(0);
 +    private final AtomicLong duplicateReads = new AtomicLong(0);
 +
 +    public void miss() {
 +      missCount.incrementAndGet();
 +      accessCount.incrementAndGet();
 +    }
 +
 +    public void hit() {
 +      hitCount.incrementAndGet();
 +      accessCount.incrementAndGet();
 +    }
 +
 +    public void evict() {
 +      evictionCount.incrementAndGet();
 +    }
 +
 +    public void duplicateReads() {
 +      duplicateReads.incrementAndGet();
 +    }
 +
 +    public void evicted() {
 +      evictedCount.incrementAndGet();
 +    }
 +
 +    @Override
 +    public long requestCount() {
 +      return accessCount.get();
 +    }
 +
 +    public long getMissCount() {
 +      return missCount.get();
 +    }
 +
 +    @Override
 +    public long hitCount() {
 +      return hitCount.get();
 +    }
 +
 +    public long getEvictionCount() {
 +      return evictionCount.get();
 +    }
 +
 +    public long getDuplicateReads() {
 +      return duplicateReads.get();
 +    }
 +
 +    public long getEvictedCount() {
 +      return evictedCount.get();
 +    }
 +
 +    public double getHitRatio() {
 +      return ((float) hitCount() / (float) requestCount());
 +    }
 +
 +    public double getMissRatio() {
 +      return ((float) getMissCount() / (float) requestCount());
 +    }
 +
 +    public double evictedPerEviction() {
 +      return (float) getEvictedCount() / (float) getEvictionCount();
 +    }
 +  }
 +
 +  public final static long CACHE_FIXED_OVERHEAD = ClassSize
 +      .align((3 * SizeConstants.SIZEOF_LONG) + (8 * ClassSize.REFERENCE)
 +          + (5 * SizeConstants.SIZEOF_FLOAT) + SizeConstants.SIZEOF_BOOLEAN + ClassSize.OBJECT);
 +
 +  // HeapSize implementation
 +  @Override
 +  public long heapSize() {
 +    return getCurrentSize();
 +  }
 +
 +  public static long calculateOverhead(long maxSize, long blockSize, int concurrency) {
 +    return CACHE_FIXED_OVERHEAD + ClassSize.CONCURRENT_HASHMAP
 +        + ((int) Math.ceil(maxSize * 1.2 / blockSize) * ClassSize.CONCURRENT_HASHMAP_ENTRY)
 +        + (concurrency * ClassSize.CONCURRENT_HASHMAP_SEGMENT);
 +  }
 +
 +  // Simple calculators of sizes given factors and maxSize
 +
 +  private long acceptableSize() {
 +    return (long) Math.floor(this.conf.getMaxSize() * this.conf.getAcceptableFactor());
 +  }
 +
 +  private long minSize() {
 +    return (long) Math.floor(this.conf.getMaxSize() * this.conf.getMinFactor());
 +  }
 +
 +  private long singleSize() {
 +    return (long) Math
 +        .floor(this.conf.getMaxSize() * this.conf.getSingleFactor() * this.conf.getMinFactor());
 +  }
 +
 +  private long multiSize() {
 +    return (long) Math
 +        .floor(this.conf.getMaxSize() * this.conf.getMultiFactor() * this.conf.getMinFactor());
 +  }
 +
 +  private long memorySize() {
 +    return (long) Math
 +        .floor(this.conf.getMaxSize() * this.conf.getMemoryFactor() * this.conf.getMinFactor());
 +  }
 +
 +  public void shutdown() {
 +    this.scheduleThreadPool.shutdown();
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/BCFile.java
index 38ea80a,778be3b..25462db
--- a/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/BCFile.java
+++ b/core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/BCFile.java
@@@ -17,7 -17,8 +17,9 @@@
  
  package org.apache.accumulo.core.file.rfile.bcfile;
  
+ import static java.nio.charset.StandardCharsets.UTF_8;
+ 
 +import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.Closeable;
  import java.io.DataInput;
@@@ -27,8 -28,6 +29,7 @@@ import java.io.DataOutputStream
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
 +import java.io.UncheckedIOException;
- import java.nio.charset.StandardCharsets;
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.Collections;
diff --cc core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java
index 942dc19,ce603d3..1c2119b
--- a/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java
+++ b/core/src/main/java/org/apache/accumulo/core/iterators/IteratorUtil.java
@@@ -272,14 -294,17 +284,17 @@@ public class IteratorUtil 
      return loadIterators(source, iters, iterOpts, env, useAccumuloClassLoader, context, null);
    }
  
-   public static <K extends WritableComparable<?>,V extends Writable> SortedKeyValueIterator<K,V> loadIterators(
-       SortedKeyValueIterator<K,V> source, Collection<IterInfo> iters,
-       Map<String,Map<String,String>> iterOpts, IteratorEnvironment env,
-       boolean useAccumuloClassLoader, String context,
-       Map<String,Class<? extends SortedKeyValueIterator<K,V>>> classCache) throws IOException {
+   // @formatter:off
+   public static <K extends WritableComparable<?>,V extends Writable> SortedKeyValueIterator<K,V>
+     loadIterators(
+   // @formatter:on
+           SortedKeyValueIterator<K,V> source, Collection<IterInfo> iters,
+           Map<String,Map<String,String>> iterOpts, IteratorEnvironment env,
+           boolean useAccumuloClassLoader, String context,
+           Map<String,Class<? extends SortedKeyValueIterator<K,V>>> classCache) throws IOException {
      // wrap the source in a SynchronizedIterator in case any of the additional configured iterators
      // want to use threading
 -    SortedKeyValueIterator<K,V> prev = new SynchronizedIterator<>(source);
 +    SortedKeyValueIterator<K,V> prev = source;
  
      try {
        for (IterInfo iterInfo : iters) {
@@@ -315,12 -345,16 +330,16 @@@
    }
  
    @SuppressWarnings("unchecked")
-   private static <K extends WritableComparable<?>,V extends Writable> Class<? extends SortedKeyValueIterator<K,V>> loadClass(
-       boolean useAccumuloClassLoader, String context, IterInfo iterInfo)
-       throws ClassNotFoundException, IOException {
+   // @formatter:off
+   private static
+   <K extends WritableComparable<?>,V extends Writable> Class<? extends SortedKeyValueIterator<K,V>>
+     loadClass(
+   // @formatter:on
+           boolean useAccumuloClassLoader, String context, IterInfo iterInfo)
+           throws ClassNotFoundException, IOException {
      Class<? extends SortedKeyValueIterator<K,V>> clazz;
      if (useAccumuloClassLoader) {
 -      if (context != null && !context.equals(""))
 +      if (context != null && !context.equals("")) {
          clazz = (Class<? extends SortedKeyValueIterator<K,V>>) AccumuloVFSClassLoader
              .getContextManager()
              .loadClass(context, iterInfo.className, SortedKeyValueIterator.class);
diff --cc core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModule.java
index b5bcf9d,b7ba44f..ebbd8fe
--- a/core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModule.java
+++ b/core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModule.java
@@@ -150,14 -158,15 +150,15 @@@ public class DefaultCryptoModule implem
  
      if (cipherMode == Cipher.ENCRYPT_MODE) {
  
-       StringBuilder errorBuf = new StringBuilder(
-           "The following problems were found with the CryptoModuleParameters object you provided for an encrypt operation:\n");
+       StringBuilder errorBuf = new StringBuilder("The following problems were"
+           + " found with the CryptoModuleParameters object you provided for an"
+           + " encrypt operation:\n");
        boolean allIsWell = true;
  
 -      allIsWell = validateNotEmpty(params.getAlgorithmName(), allIsWell, errorBuf,
 -          "No algorithm name was specified.");
 +      allIsWell = validateNotEmpty(params.getCipherSuite(), allIsWell, errorBuf,
 +          "No cipher suite was specified.");
  
 -      if (allIsWell && params.getAlgorithmName().equals("NullCipher")) {
 +      if (allIsWell && params.getCipherSuite().equals("NullCipher")) {
          return true;
        }
  
@@@ -181,12 -192,17 +182,13 @@@
        return allIsWell;
  
      } else if (cipherMode == Cipher.DECRYPT_MODE) {
-       StringBuilder errorBuf = new StringBuilder(
-           "The following problems were found with the CryptoModuleParameters object you provided for a decrypt operation:\n");
+       StringBuilder errorBuf = new StringBuilder("The following problems were"
+           + " found with the CryptoModuleParameters object you provided for a"
+           + " decrypt operation:\n");
        boolean allIsWell = true;
  
 -      allIsWell = validateNotEmpty(params.getPadding(), allIsWell, errorBuf,
 -          "No padding was specified.");
        allIsWell = validateNotZero(params.getKeyLength(), allIsWell, errorBuf,
            "No key length was specified.");
 -      allIsWell = validateNotEmpty(params.getEncryptionMode(), allIsWell, errorBuf,
 -          "No encryption mode was specified.");
        allIsWell = validateNotEmpty(params.getRandomNumberGenerator(), allIsWell, errorBuf,
            "No random number generator was specified.");
        allIsWell = validateNotEmpty(params.getRandomNumberGeneratorProvider(), allIsWell, errorBuf,
diff --cc core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModuleUtils.java
index 3bd4de3,d32cdf9..079c579
--- a/core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModuleUtils.java
+++ b/core/src/main/java/org/apache/accumulo/core/security/crypto/DefaultCryptoModuleUtils.java
@@@ -61,26 -59,17 +59,26 @@@ public class DefaultCryptoModuleUtils 
        cipher = new NullCipher();
      } else {
        try {
 -        cipher = Cipher.getInstance(cipherSuite);
 +        if (securityProvider == null || securityProvider.equals("")) {
 +          cipher = Cipher.getInstance(cipherSuite);
 +        } else {
 +          cipher = Cipher.getInstance(cipherSuite, securityProvider);
 +        }
        } catch (NoSuchAlgorithmException e) {
-         log.error(String.format(
-             "Accumulo configuration file contained a cipher suite \"%s\" that was not recognized by any providers",
-             cipherSuite));
+         log.error(String.format("Accumulo configuration file contained a cipher"
+             + " suite \"%s\" that was not recognized by any providers", cipherSuite));
          throw new RuntimeException(e);
        } catch (NoSuchPaddingException e) {
          log.error(String.format(
-             "Accumulo configuration file contained a cipher, \"%s\" with a padding that was not recognized by any providers",
+             "Accumulo configuration file contained a"
+                 + " cipher, \"%s\" with a padding that was not recognized by any" + " providers",
              cipherSuite));
          throw new RuntimeException(e);
 +      } catch (NoSuchProviderException e) {
 +        log.error(String.format(
 +            "Accumulo configuration file contained a provider, \"%s\" an unrecognized provider",
 +            securityProvider));
 +        throw new RuntimeException(e);
        }
      }
      return cipher;
diff --cc core/src/test/java/org/apache/accumulo/core/data/MutationTest.java
index d18f523,5bbd2b5..a190c17
--- a/core/src/test/java/org/apache/accumulo/core/data/MutationTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/data/MutationTest.java
@@@ -687,16 -687,8 +687,16 @@@ public class MutationTest 
        m.put("cf", "cq", "v");
        m2.put("cf", "cq", "v");
      } catch (IllegalStateException e) {
-       fail(
-           "Calling Mutation#equals then Mutation#put should not result in an IllegalStateException.");
+       fail("Calling Mutation#equals then Mutation#put should not result in an"
+           + " IllegalStateException.");
      }
    }
 +
 +  @Test(expected = IllegalArgumentException.class)
 +  public void testSanityCheck() {
 +    Mutation m = new Mutation("too big mutation");
 +    m.put("cf", "cq1", "v");
 +    m.estRowAndLargeValSize += (Long.MAX_VALUE / 2);
 +    m.put("cf", "cq2", "v");
 +  }
  }
diff --cc core/src/test/java/org/apache/accumulo/core/security/crypto/CryptoTest.java
index a0954f8,b3045ce..e49dbef
--- a/core/src/test/java/org/apache/accumulo/core/security/crypto/CryptoTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/security/crypto/CryptoTest.java
@@@ -63,15 -56,14 +63,18 @@@ public class CryptoTest 
  
    private static final int MARKER_INT = 0xCADEFEDD;
    private static final String MARKER_STRING = "1 2 3 a b c";
 -  public static final String CONFIG_FILE_SYSTEM_PROP = "org.apache.accumulo.config.file";
    public static final String CRYPTO_ON_CONF = "crypto-on-accumulo-site.xml";
    public static final String CRYPTO_OFF_CONF = "crypto-off-accumulo-site.xml";
-   public static final String CRYPTO_ON_KEK_OFF_CONF = "crypto-on-no-key-encryption-accumulo-site.xml";
+   // @formatter:off
+   public static final String CRYPTO_ON_KEK_OFF_CONF =
+     "crypto-on-no-key-encryption-accumulo-site.xml";
+   // @formatter:on
  
 +  // Used for kek file testing
 +  private static File kekWorks;
 +  private static File kekTooLong;
 +  private static File kekTooShort;
 +
    @Rule
    public ExpectedException exception = ExpectedException.none();
  
diff --cc proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
index ee1a76b,89c755d..2f24f30
--- a/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
+++ b/proxy/src/main/java/org/apache/accumulo/proxy/Proxy.java
@@@ -128,32 -118,16 +128,32 @@@ public class Proxy implements KeywordEx
      Opts opts = new Opts();
      opts.parseArgs(Proxy.class.getName(), args);
  
 +    Properties props = new Properties();
 +    if (opts.prop != null) {
 +      props = opts.prop;
 +    } else {
 +      try (InputStream is = this.getClass().getClassLoader()
 +          .getResourceAsStream("proxy.properties")) {
 +        if (is != null) {
 +          props.load(is);
 +        } else {
 +          System.err.println(
 +              "proxy.properties needs to be specified as argument (using -p) or on the classpath (by putting the file in conf/)");
 +          System.exit(-1);
 +        }
 +      }
 +    }
 +
      boolean useMini = Boolean
 -        .parseBoolean(opts.prop.getProperty(USE_MINI_ACCUMULO_KEY, USE_MINI_ACCUMULO_DEFAULT));
 +        .parseBoolean(props.getProperty(USE_MINI_ACCUMULO_KEY, USE_MINI_ACCUMULO_DEFAULT));
      boolean useMock = Boolean
 -        .parseBoolean(opts.prop.getProperty(USE_MOCK_INSTANCE_KEY, USE_MOCK_INSTANCE_DEFAULT));
 -    String instance = opts.prop.getProperty(ACCUMULO_INSTANCE_NAME_KEY);
 -    String zookeepers = opts.prop.getProperty(ZOOKEEPERS_KEY);
 +        .parseBoolean(props.getProperty(USE_MOCK_INSTANCE_KEY, USE_MOCK_INSTANCE_DEFAULT));
 +    String instance = props.getProperty(ACCUMULO_INSTANCE_NAME_KEY);
 +    String zookeepers = props.getProperty(ZOOKEEPERS_KEY);
  
      if (!useMini && !useMock && instance == null) {
-       System.err.println(
-           "Properties file must contain one of : useMiniAccumulo=true, useMockInstance=true, or instance=<instance name>");
+       System.err.println("Properties file must contain one of : useMiniAccumulo=true,"
+           + " useMockInstance=true, or instance=<instance name>");
        System.exit(1);
      }
  
diff --cc server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
index dc2dead,2f98fdd..44b18a8
--- a/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/Accumulo.java
@@@ -270,12 -341,13 +270,13 @@@ public class Accumulo 
            new ZooStore<Accumulo>(ZooUtil.getRoot(HdfsZooInstance.getInstance()) + Constants.ZFATE,
                ZooReaderWriter.getInstance()));
        if (!(fate.list().isEmpty())) {
-         throw new AccumuloException(
-             "Aborting upgrade because there are outstanding FATE transactions from a previous Accumulo version. "
-                 + "Please see the README document for instructions on what to do under your previous version.");
+         throw new AccumuloException("Aborting upgrade because there are"
+             + " outstanding FATE transactions from a previous Accumulo version."
+             + " Please see the README document for instructions on what to do under"
+             + " your previous version.");
        }
      } catch (Exception exception) {
 -      log.fatal("Problem verifying Fate readiness", exception);
 +      log.error("Problem verifying Fate readiness", exception);
        System.exit(1);
      }
    }
diff --cc server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
index 5cfb756,b2beaa5..0b2ffa3
--- a/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java
@@@ -82,24 -86,27 +82,25 @@@ import com.google.common.collect.Multim
   */
  public class HostRegexTableLoadBalancer extends TableLoadBalancer implements ConfigurationObserver {
  
+   private static final String PROP_PREFIX = Property.TABLE_ARBITRARY_PROP_PREFIX.getKey();
+ 
    private static final Logger LOG = LoggerFactory.getLogger(HostRegexTableLoadBalancer.class);
-   public static final String HOST_BALANCER_PREFIX = Property.TABLE_ARBITRARY_PROP_PREFIX.getKey()
-       + "balancer.host.regex.";
-   public static final String HOST_BALANCER_OOB_CHECK_KEY = Property.TABLE_ARBITRARY_PROP_PREFIX
-       .getKey() + "balancer.host.regex.oob.period";
+   public static final String HOST_BALANCER_PREFIX = PROP_PREFIX + "balancer.host.regex.";
+   public static final String HOST_BALANCER_OOB_CHECK_KEY = PROP_PREFIX
+       + "balancer.host.regex.oob.period";
    private static final String HOST_BALANCER_OOB_DEFAULT = "5m";
 -  @Deprecated
 -  public static final String HOST_BALANCER_POOL_RECHECK_KEY = PROP_PREFIX
 -      + "balancer.host.regex.pool.check";
 -  public static final String HOST_BALANCER_REGEX_USING_IPS_KEY = PROP_PREFIX
 -      + "balancer.host.regex.is.ip";
 -  public static final String HOST_BALANCER_REGEX_MAX_MIGRATIONS_KEY = PROP_PREFIX
 -      + "balancer.host.regex.concurrent.migrations";
 +  public static final String HOST_BALANCER_REGEX_USING_IPS_KEY = Property.TABLE_ARBITRARY_PROP_PREFIX
 +      .getKey() + "balancer.host.regex.is.ip";
 +  public static final String HOST_BALANCER_REGEX_MAX_MIGRATIONS_KEY = Property.TABLE_ARBITRARY_PROP_PREFIX
 +      .getKey() + "balancer.host.regex.concurrent.migrations";
    private static final int HOST_BALANCER_REGEX_MAX_MIGRATIONS_DEFAULT = 250;
    protected static final String DEFAULT_POOL = "HostTableLoadBalancer.ALL";
    private static final int DEFAULT_OUTSTANDING_MIGRATIONS = 0;
-   public static final String HOST_BALANCER_OUTSTANDING_MIGRATIONS_KEY = Property.TABLE_ARBITRARY_PROP_PREFIX
-       .getKey() + "balancer.host.regex.max.outstanding.migrations";
+   public static final String HOST_BALANCER_OUTSTANDING_MIGRATIONS_KEY = PROP_PREFIX
+       + "balancer.host.regex.max.outstanding.migrations";
  
 -  protected long oobCheckMillis = AccumuloConfiguration.getTimeInMillis(HOST_BALANCER_OOB_DEFAULT);
 +  protected long oobCheckMillis = ConfigurationTypeHelper
 +      .getTimeInMillis(HOST_BALANCER_OOB_DEFAULT);
  
    private static final long ONE_HOUR = 60 * 60 * 1000;
    private static final Set<KeyExtent> EMPTY_MIGRATIONS = Collections.emptySet();
diff --cc server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
index b7b6264,f2a4bd9..2aa07e1
--- a/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
@@@ -457,12 -457,12 +457,12 @@@ public class TServerUtils 
      // this host, fail quickly and inform them to update
      // their configuration.
      if (!hostname.equals(fqdn)) {
 -      log.error("Expected hostname of '{}' but got '{}'. Ensure the entries in"
 -          + " the Accumulo hosts files (e.g. masters, slaves) are the FQDN for each"
 -          + " host when using SASL.", fqdn, hostname);
 +      log.error(
 +          "Expected hostname of '{}' but got '{}'. Ensure the entries in the Accumulo hosts files (e.g. masters, tservers) are the FQDN for each host when using SASL.",
 +          fqdn, hostname);
        transport.close();
-       throw new RuntimeException(
-           "SASL requires that the address the thrift server listens on is the same as the FQDN for this host");
+       throw new RuntimeException("SASL requires that the address the thrift"
+           + " server listens on is the same as the FQDN for this host");
      }
  
      final UserGroupInformation serverUser;
diff --cc server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
index 6610fa6,321dd93..183725e
--- a/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
@@@ -180,10 -179,12 +182,12 @@@ public class AuditedSecurityOperation e
      }
    }
  
-   public static final String CAN_SCAN_BATCH_AUDIT_TEMPLATE = "action: scan; targetTable: %s; authorizations: %s; range: %s; columns: %s; iterators: %s; iteratorOptions: %s;";
+   public static final String CAN_SCAN_BATCH_AUDIT_TEMPLATE = "action: scan;"
+       + " targetTable: %s; authorizations: %s; range: %s; columns: %s;"
+       + " iterators: %s; iteratorOptions: %s;";
  
    @Override
 -  public boolean canScan(TCredentials credentials, String tableId, String namespaceId,
 +  public boolean canScan(TCredentials credentials, Table.ID tableId, Namespace.ID namespaceId,
        Map<TKeyExtent,List<TRange>> tbatch, List<TColumn> tcolumns, List<IterInfo> ssiList,
        Map<String,Map<String,String>> ssio, List<ByteBuffer> authorizations)
        throws ThriftSecurityException {
@@@ -258,10 -262,11 +265,11 @@@
      }
    }
  
-   public static final String CAN_CREATE_TABLE_AUDIT_TEMPLATE = "action: createTable; targetTable: %s;";
+   public static final String CAN_CREATE_TABLE_AUDIT_TEMPLATE = "action:"
+       + " createTable; targetTable: %s;";
  
    @Override
 -  public boolean canCreateTable(TCredentials c, String tableName, String namespaceId)
 +  public boolean canCreateTable(TCredentials c, String tableName, Namespace.ID namespaceId)
        throws ThriftSecurityException {
      try {
        boolean result = super.canCreateTable(c, tableName, namespaceId);
@@@ -273,10 -278,11 +281,11 @@@
      }
    }
  
-   public static final String CAN_DELETE_TABLE_AUDIT_TEMPLATE = "action: deleteTable; targetTable: %s;";
+   public static final String CAN_DELETE_TABLE_AUDIT_TEMPLATE = "action:"
+       + " deleteTable; targetTable: %s;";
  
    @Override
 -  public boolean canDeleteTable(TCredentials c, String tableId, String namespaceId)
 +  public boolean canDeleteTable(TCredentials c, Table.ID tableId, Namespace.ID namespaceId)
        throws ThriftSecurityException {
      String tableName = getTableName(tableId);
      try {
@@@ -289,11 -295,12 +298,12 @@@
      }
    }
  
-   public static final String CAN_RENAME_TABLE_AUDIT_TEMPLATE = "action: renameTable; targetTable: %s; newTableName: %s;";
+   public static final String CAN_RENAME_TABLE_AUDIT_TEMPLATE = "action:"
+       + " renameTable; targetTable: %s; newTableName: %s;";
  
    @Override
 -  public boolean canRenameTable(TCredentials c, String tableId, String oldTableName,
 -      String newTableName, String namespaceId) throws ThriftSecurityException {
 +  public boolean canRenameTable(TCredentials c, Table.ID tableId, String oldTableName,
 +      String newTableName, Namespace.ID namespaceId) throws ThriftSecurityException {
      try {
        boolean result = super.canRenameTable(c, tableId, oldTableName, newTableName, namespaceId);
        audit(c, result, CAN_RENAME_TABLE_AUDIT_TEMPLATE, oldTableName, newTableName);
@@@ -304,10 -311,11 +314,11 @@@
      }
    }
  
-   public static final String CAN_SPLIT_TABLE_AUDIT_TEMPLATE = "action: splitTable; targetTable: %s; targetNamespace: %s;";
+   public static final String CAN_SPLIT_TABLE_AUDIT_TEMPLATE = "action:"
+       + " splitTable; targetTable: %s; targetNamespace: %s;";
  
    @Override
 -  public boolean canSplitTablet(TCredentials credentials, String table, String namespaceId)
 +  public boolean canSplitTablet(TCredentials credentials, Table.ID table, Namespace.ID namespaceId)
        throws ThriftSecurityException {
      try {
        boolean result = super.canSplitTablet(credentials, table, namespaceId);
@@@ -334,10 -343,11 +346,11 @@@
      }
    }
  
-   public static final String CAN_FLUSH_TABLE_AUDIT_TEMPLATE = "action: flushTable; targetTable: %s; targetNamespace: %s;";
+   public static final String CAN_FLUSH_TABLE_AUDIT_TEMPLATE = "action:"
+       + " flushTable; targetTable: %s; targetNamespace: %s;";
  
    @Override
 -  public boolean canFlush(TCredentials c, String tableId, String namespaceId)
 +  public boolean canFlush(TCredentials c, Table.ID tableId, Namespace.ID namespaceId)
        throws ThriftSecurityException {
      try {
        boolean result = super.canFlush(c, tableId, namespaceId);
@@@ -349,10 -359,11 +362,11 @@@
      }
    }
  
-   public static final String CAN_ALTER_TABLE_AUDIT_TEMPLATE = "action: alterTable; targetTable: %s; targetNamespace: %s;";
+   public static final String CAN_ALTER_TABLE_AUDIT_TEMPLATE = "action:"
+       + " alterTable; targetTable: %s; targetNamespace: %s;";
  
    @Override
 -  public boolean canAlterTable(TCredentials c, String tableId, String namespaceId)
 +  public boolean canAlterTable(TCredentials c, Table.ID tableId, Namespace.ID namespaceId)
        throws ThriftSecurityException {
      try {
        boolean result = super.canAlterTable(c, tableId, namespaceId);
@@@ -364,12 -375,12 +378,13 @@@
      }
    }
  
-   public static final String CAN_CLONE_TABLE_AUDIT_TEMPLATE = "action: cloneTable; targetTable: %s; newTableName: %s";
+   public static final String CAN_CLONE_TABLE_AUDIT_TEMPLATE = "action:"
+       + " cloneTable; targetTable: %s; newTableName: %s";
  
    @Override
 -  public boolean canCloneTable(TCredentials c, String tableId, String tableName,
 -      String destinationNamespaceId, String sourceNamespaceId) throws ThriftSecurityException {
 +  public boolean canCloneTable(TCredentials c, Table.ID tableId, String tableName,
 +      Namespace.ID destinationNamespaceId, Namespace.ID sourceNamespaceId)
 +      throws ThriftSecurityException {
      String oldTableName = getTableName(tableId);
      try {
        boolean result = super.canCloneTable(c, tableId, tableName, destinationNamespaceId,
@@@ -382,11 -393,12 +397,12 @@@
      }
    }
  
-   public static final String CAN_DELETE_RANGE_AUDIT_TEMPLATE = "action: deleteData; targetTable: %s; startRange: %s; endRange: %s;";
+   public static final String CAN_DELETE_RANGE_AUDIT_TEMPLATE = "action:"
+       + " deleteData; targetTable: %s; startRange: %s; endRange: %s;";
  
    @Override
 -  public boolean canDeleteRange(TCredentials c, String tableId, String tableName, Text startRow,
 -      Text endRow, String namespaceId) throws ThriftSecurityException {
 +  public boolean canDeleteRange(TCredentials c, Table.ID tableId, String tableName, Text startRow,
 +      Text endRow, Namespace.ID namespaceId) throws ThriftSecurityException {
      try {
        boolean result = super.canDeleteRange(c, tableId, tableName, startRow, endRow, namespaceId);
        audit(c, result, CAN_DELETE_RANGE_AUDIT_TEMPLATE, tableName, startRow.toString(),
@@@ -399,11 -411,12 +415,12 @@@
      }
    }
  
-   public static final String CAN_BULK_IMPORT_AUDIT_TEMPLATE = "action: bulkImport; targetTable: %s; dataDir: %s; failDir: %s;";
+   public static final String CAN_BULK_IMPORT_AUDIT_TEMPLATE = "action:"
+       + " bulkImport; targetTable: %s; dataDir: %s; failDir: %s;";
  
    @Override
 -  public boolean canBulkImport(TCredentials c, String tableId, String tableName, String dir,
 -      String failDir, String namespaceId) throws ThriftSecurityException {
 +  public boolean canBulkImport(TCredentials c, Table.ID tableId, String tableName, String dir,
 +      String failDir, Namespace.ID namespaceId) throws ThriftSecurityException {
      try {
        boolean result = super.canBulkImport(c, tableId, namespaceId);
        audit(c, result, CAN_BULK_IMPORT_AUDIT_TEMPLATE, tableName, dir, failDir);
@@@ -414,10 -427,11 +431,11 @@@
      }
    }
  
-   public static final String CAN_COMPACT_TABLE_AUDIT_TEMPLATE = "action: compactTable; targetTable: %s; targetNamespace: %s;";
+   public static final String CAN_COMPACT_TABLE_AUDIT_TEMPLATE = "action:"
+       + " compactTable; targetTable: %s; targetNamespace: %s;";
  
    @Override
 -  public boolean canCompact(TCredentials c, String tableId, String namespaceId)
 +  public boolean canCompact(TCredentials c, Table.ID tableId, Namespace.ID namespaceId)
        throws ThriftSecurityException {
      try {
        boolean result = super.canCompact(c, tableId, namespaceId);
@@@ -504,11 -521,12 +525,12 @@@
      }
    }
  
-   public static final String CAN_GRANT_TABLE_AUDIT_TEMPLATE = "action: grantTable; targetUser: %s; targetTable: %s; targetNamespace: %s;";
+   public static final String CAN_GRANT_TABLE_AUDIT_TEMPLATE = "action:"
+       + " grantTable; targetUser: %s; targetTable: %s; targetNamespace: %s;";
  
    @Override
 -  public boolean canGrantTable(TCredentials c, String user, String table, String namespaceId)
 -      throws ThriftSecurityException {
 +  public boolean canGrantTable(TCredentials c, String user, Table.ID table,
 +      Namespace.ID namespaceId) throws ThriftSecurityException {
      try {
        boolean result = super.canGrantTable(c, user, table, namespaceId);
        audit(c, result, CAN_GRANT_TABLE_AUDIT_TEMPLATE, user, table, namespaceId);
@@@ -534,11 -553,12 +557,12 @@@
      }
    }
  
-   public static final String CAN_REVOKE_TABLE_AUDIT_TEMPLATE = "action: revokeTable; targetUser: %s; targetTable %s; targetNamespace: %s;";
+   public static final String CAN_REVOKE_TABLE_AUDIT_TEMPLATE = "action:"
+       + " revokeTable; targetUser: %s; targetTable %s; targetNamespace: %s;";
  
    @Override
 -  public boolean canRevokeTable(TCredentials c, String user, String table, String namespaceId)
 -      throws ThriftSecurityException {
 +  public boolean canRevokeTable(TCredentials c, String user, Table.ID table,
 +      Namespace.ID namespaceId) throws ThriftSecurityException {
      try {
        boolean result = super.canRevokeTable(c, user, table, namespaceId);
        audit(c, result, CAN_REVOKE_TABLE_AUDIT_TEMPLATE, user, table, namespaceId);
@@@ -565,11 -586,12 +590,12 @@@
      }
    }
  
-   public static final String CAN_EXPORT_AUDIT_TEMPLATE = "action: export; targetTable: %s; dataDir: %s;";
+   public static final String CAN_EXPORT_AUDIT_TEMPLATE = "action: export;"
+       + " targetTable: %s; dataDir: %s;";
  
    @Override
 -  public boolean canExport(TCredentials credentials, String tableId, String tableName,
 -      String exportDir, String namespaceId) throws ThriftSecurityException {
 +  public boolean canExport(TCredentials credentials, Table.ID tableId, String tableName,
 +      String exportDir, Namespace.ID namespaceId) throws ThriftSecurityException {
  
      try {
        boolean result = super.canExport(credentials, tableId, tableName, exportDir, namespaceId);
@@@ -608,11 -631,12 +635,12 @@@
      }
    }
  
-   public static final String GRANT_TABLE_PERMISSION_AUDIT_TEMPLATE = "action: grantTablePermission; permission: %s; targetTable: %s; targetUser: %s;";
+   public static final String GRANT_TABLE_PERMISSION_AUDIT_TEMPLATE = "action:"
+       + " grantTablePermission; permission: %s; targetTable: %s; targetUser: %s;";
  
    @Override
 -  public void grantTablePermission(TCredentials credentials, String user, String tableId,
 -      TablePermission permission, String namespaceId) throws ThriftSecurityException {
 +  public void grantTablePermission(TCredentials credentials, String user, Table.ID tableId,
 +      TablePermission permission, Namespace.ID namespaceId) throws ThriftSecurityException {
      String tableName = getTableName(tableId);
      try {
        super.grantTablePermission(credentials, user, tableId, permission, namespaceId);
@@@ -638,11 -663,12 +667,12 @@@
      }
    }
  
-   public static final String REVOKE_TABLE_PERMISSION_AUDIT_TEMPLATE = "action: revokeTablePermission; permission: %s; targetTable: %s; targetUser: %s;";
+   public static final String REVOKE_TABLE_PERMISSION_AUDIT_TEMPLATE = "action:"
+       + " revokeTablePermission; permission: %s; targetTable: %s; targetUser: %s;";
  
    @Override
 -  public void revokeTablePermission(TCredentials credentials, String user, String tableId,
 -      TablePermission permission, String namespaceId) throws ThriftSecurityException {
 +  public void revokeTablePermission(TCredentials credentials, String user, Table.ID tableId,
 +      TablePermission permission, Namespace.ID namespaceId) throws ThriftSecurityException {
      String tableName = getTableName(tableId);
      try {
        super.revokeTablePermission(credentials, user, tableId, permission, namespaceId);
@@@ -668,11 -695,12 +699,12 @@@
      }
    }
  
-   public static final String CAN_ONLINE_OFFLINE_TABLE_AUDIT_TEMPLATE = "action: %s; targetTable: %s;";
+   public static final String CAN_ONLINE_OFFLINE_TABLE_AUDIT_TEMPLATE = "action:"
+       + " %s; targetTable: %s;";
  
    @Override
 -  public boolean canOnlineOfflineTable(TCredentials credentials, String tableId, FateOperation op,
 -      String namespaceId) throws ThriftSecurityException {
 +  public boolean canOnlineOfflineTable(TCredentials credentials, Table.ID tableId, FateOperation op,
 +      Namespace.ID namespaceId) throws ThriftSecurityException {
      String tableName = getTableName(tableId);
      String operation = null;
      if (op == FateOperation.TABLE_ONLINE)
@@@ -691,10 -719,11 +723,11 @@@
      }
    }
  
-   public static final String CAN_MERGE_TABLE_AUDIT_TEMPLATE = "action: mergeTable; targetTable: %s; targetNamespace: %s;";
+   public static final String CAN_MERGE_TABLE_AUDIT_TEMPLATE = "action:"
+       + " mergeTable; targetTable: %s; targetNamespace: %s;";
  
    @Override
 -  public boolean canMerge(TCredentials c, String tableId, String namespaceId)
 +  public boolean canMerge(TCredentials c, Table.ID tableId, Namespace.ID namespaceId)
        throws ThriftSecurityException {
      try {
        boolean result = super.canMerge(c, tableId, namespaceId);
diff --cc server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
index 4905205,472b414..91f5f6c
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
@@@ -1048,12 -1033,13 +1049,11 @@@ public class TabletServer extends Accum
                us.walogTimes.addStat(t2 - t1);
                updateWalogWriteTime((t2 - t1));
                break;
 -            } catch (IOException ex) {
 -              log.warn("logging mutations failed, retrying");
 -            } catch (FSError ex) { // happens when DFS is localFS
 +            } catch (IOException | FSError ex) {
                log.warn("logging mutations failed, retrying");
              } catch (Throwable t) {
-               log.error(
-                   "Unknown exception logging mutations, counts for mutations in flight not decremented!",
-                   t);
+               log.error("Unknown exception logging mutations, counts"
+                   + " for mutations in flight not decremented!", t);
                throw new RuntimeException(t);
              }
            }
@@@ -1370,12 -1356,13 +1370,11 @@@
              long t2 = System.currentTimeMillis();
              updateWalogWriteTime(t2 - t1);
              break;
 -          } catch (IOException ex) {
 -            log.warn("logging mutations failed, retrying");
 -          } catch (FSError ex) { // happens when DFS is localFS
 +          } catch (IOException | FSError ex) {
              log.warn("logging mutations failed, retrying");
            } catch (Throwable t) {
-             log.error(
-                 "Unknown exception logging mutations, counts for mutations in flight not decremented!",
-                 t);
+             log.error("Unknown exception logging mutations, counts for"
+                 + " mutations in flight not decremented!", t);
              throw new RuntimeException(t);
            }
          }
@@@ -1617,12 -1603,11 +1616,11 @@@
                SecurityErrorCode.PERMISSION_DENIED);
          }
        } catch (ThriftSecurityException e) {
 -        log.warn("Got " + request + " message from unauthenticatable user: " + e.getUser());
 +        log.warn("Got {} message from unauthenticatable user: {}", request, e.getUser());
          if (getCredentials().getToken().getClass().getName()
              .equals(credentials.getTokenClassName())) {
-           log.error(
-               "Got message from a service with a mismatched configuration. Please ensure a compatible configuration.",
-               e);
+           log.error("Got message from a service with a mismatched configuration."
+               + " Please ensure a compatible configuration.", e);
          }
          throw e;
        }
@@@ -1965,129 -1951,10 +1963,129 @@@
      public void removeLogs(TInfo tinfo, TCredentials credentials, List<String> filenames)
          throws TException {
        log.warn("Garbage collector is attempting to remove logs through the tablet server");
-       log.warn(
-           "This is probably because your file Garbage Collector is an older version than your tablet servers.\n"
-               + "Restart your file Garbage Collector.");
+       log.warn("This is probably because your file"
+           + " Garbage Collector is an older version than your tablet servers.\n"
+           + "Restart your file Garbage Collector.");
      }
 +
 +    private TSummaries getSummaries(Future<SummaryCollection> future) throws TimeoutException {
 +      try {
 +        SummaryCollection sc = future.get(MAX_TIME_TO_WAIT_FOR_SCAN_RESULT_MILLIS,
 +            TimeUnit.MILLISECONDS);
 +        return sc.toThrift();
 +      } catch (InterruptedException e) {
 +        Thread.currentThread().interrupt();
 +        throw new RuntimeException(e);
 +      } catch (ExecutionException e) {
 +        throw new RuntimeException(e);
 +      }
 +    }
 +
 +    private TSummaries handleTimeout(long sessionId) {
 +      long timeout = TabletServer.this.getConfiguration()
 +          .getTimeInMillis(Property.TSERV_CLIENT_TIMEOUT);
 +      sessionManager.removeIfNotAccessed(sessionId, timeout);
 +      return new TSummaries(false, sessionId, -1, -1, null);
 +    }
 +
 +    private TSummaries startSummaryOperation(TCredentials credentials,
 +        Future<SummaryCollection> future) {
 +      try {
 +        return getSummaries(future);
 +      } catch (TimeoutException e) {
 +        long sid = sessionManager.createSession(new SummarySession(credentials, future), false);
 +        while (sid == 0) {
 +          sessionManager.removeSession(sid);
 +          sid = sessionManager.createSession(new SummarySession(credentials, future), false);
 +        }
 +        return handleTimeout(sid);
 +      }
 +    }
 +
 +    @Override
 +    public TSummaries startGetSummaries(TInfo tinfo, TCredentials credentials,
 +        TSummaryRequest request) throws ThriftSecurityException, ThriftTableOperationException,
 +        NoSuchScanIDException, TException {
 +      Namespace.ID namespaceId;
 +      Table.ID tableId = Table.ID.of(request.getTableId());
 +      try {
 +        namespaceId = Tables.getNamespaceId(TabletServer.this.getInstance(), tableId);
 +      } catch (TableNotFoundException e1) {
 +        throw new ThriftTableOperationException(tableId.canonicalID(), null, null,
 +            TableOperationExceptionType.NOTFOUND, null);
 +      }
 +
 +      if (!security.canGetSummaries(credentials, tableId, namespaceId)) {
 +        throw new AccumuloSecurityException(credentials.getPrincipal(),
 +            SecurityErrorCode.PERMISSION_DENIED).asThriftException();
 +      }
 +
 +      ServerConfigurationFactory factory = TabletServer.this.getServerConfigurationFactory();
 +      ExecutorService es = resourceManager.getSummaryPartitionExecutor();
 +      Future<SummaryCollection> future = new Gatherer(TabletServer.this, request,
 +          factory.getTableConfiguration(tableId)).gather(es);
 +
 +      return startSummaryOperation(credentials, future);
 +    }
 +
 +    @Override
 +    public TSummaries startGetSummariesForPartition(TInfo tinfo, TCredentials credentials,
 +        TSummaryRequest request, int modulus, int remainder)
 +        throws ThriftSecurityException, NoSuchScanIDException, TException {
 +      // do not expect users to call this directly, expect other tservers to call this method
 +      if (!security.canPerformSystemActions(credentials)) {
 +        throw new AccumuloSecurityException(credentials.getPrincipal(),
 +            SecurityErrorCode.PERMISSION_DENIED).asThriftException();
 +      }
 +
 +      ServerConfigurationFactory factory = TabletServer.this.getServerConfigurationFactory();
 +      ExecutorService spe = resourceManager.getSummaryRemoteExecutor();
 +      Future<SummaryCollection> future = new Gatherer(TabletServer.this, request,
 +          factory.getTableConfiguration(Table.ID.of(request.getTableId()))).processPartition(spe,
 +              modulus, remainder);
 +
 +      return startSummaryOperation(credentials, future);
 +    }
 +
 +    @Override
 +    public TSummaries startGetSummariesFromFiles(TInfo tinfo, TCredentials credentials,
 +        TSummaryRequest request, Map<String,List<TRowRange>> files)
 +        throws ThriftSecurityException, NoSuchScanIDException, TException {
 +      // do not expect users to call this directly, expect other tservers to call this method
 +      if (!security.canPerformSystemActions(credentials)) {
 +        throw new AccumuloSecurityException(credentials.getPrincipal(),
 +            SecurityErrorCode.PERMISSION_DENIED).asThriftException();
 +      }
 +
 +      ExecutorService srp = resourceManager.getSummaryRetrievalExecutor();
 +      TableConfiguration tableCfg = confFactory
 +          .getTableConfiguration(Table.ID.of(request.getTableId()));
 +      BlockCache summaryCache = resourceManager.getSummaryCache();
 +      BlockCache indexCache = resourceManager.getIndexCache();
 +      FileSystemResolver volMgr = p -> fs.getVolumeByPath(p).getFileSystem();
 +      Future<SummaryCollection> future = new Gatherer(TabletServer.this, request, tableCfg)
 +          .processFiles(volMgr, files, summaryCache, indexCache, srp);
 +
 +      return startSummaryOperation(credentials, future);
 +    }
 +
 +    @Override
 +    public TSummaries contiuneGetSummaries(TInfo tinfo, long sessionId)
 +        throws NoSuchScanIDException, TException {
 +      SummarySession session = (SummarySession) sessionManager.getSession(sessionId);
 +      if (session == null) {
 +        throw new NoSuchScanIDException();
 +      }
 +
 +      Future<SummaryCollection> future = session.getFuture();
 +      try {
 +        TSummaries tsums = getSummaries(future);
 +        sessionManager.removeSession(sessionId);
 +        return tsums;
 +      } catch (TimeoutException e) {
 +        return handleTimeout(sessionId);
 +      }
 +    }
    }
  
    private class SplitRunner implements Runnable {
@@@ -3509,10 -3392,10 +3506,10 @@@
  
    private static final String MAJC_READ_LIMITER_KEY = "tserv_majc_read";
    private static final String MAJC_WRITE_LIMITER_KEY = "tserv_majc_write";
-   private final SharedRateLimiterFactory.RateProvider rateProvider = new SharedRateLimiterFactory.RateProvider() {
+   private final RateProvider rateProvider = new RateProvider() {
      @Override
      public long getDesiredRate() {
 -      return getConfiguration().getMemoryInBytes(Property.TSERV_MAJC_THROUGHPUT);
 +      return getConfiguration().getAsBytes(Property.TSERV_MAJC_THROUGHPUT);
      }
    };
  
diff --cc server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java
index aeea1e8,af822ef..63397ff
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/DatafileManager.java
@@@ -492,17 -492,17 +492,16 @@@ class DatafileManager 
      removeFilesAfterScan(filesInUseByScans);
  
      if (absMergeFile != null)
 -      log.log(TLevel.TABLET_HIST,
 -          tablet.getExtent() + " MinC [" + absMergeFile + ",memory] -> " + newDatafile);
 +      log.debug("TABLET_HIST {} MinC [{},memory] -> {}", tablet.getExtent(), absMergeFile,
 +          newDatafile);
      else
 -      log.log(TLevel.TABLET_HIST, tablet.getExtent() + " MinC [memory] -> " + newDatafile);
 +      log.debug("TABLET_HIST {} MinC [memory] -> {}", tablet.getExtent(), newDatafile);
      log.debug(String.format("MinC finish lock %.2f secs %s", (t2 - t1) / 1000.0,
          tablet.getExtent().toString()));
 -    long splitSize = tablet.getTableConfiguration()
 -        .getMemoryInBytes(Property.TABLE_SPLIT_THRESHOLD);
 +    long splitSize = tablet.getTableConfiguration().getAsBytes(Property.TABLE_SPLIT_THRESHOLD);
      if (dfv.getSize() > splitSize) {
-       log.debug(String.format(
-           "Minor Compaction wrote out file larger than split threshold.  split threshold = %,d  file size = %,d",
-           splitSize, dfv.getSize()));
+       log.debug(String.format("Minor Compaction wrote out file larger than split threshold."
+           + " split threshold = %,d  file size = %,d", splitSize, dfv.getSize()));
      }
    }
  
diff --cc shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
index aa8bbd8,2fab019..5278c76
--- a/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/ShellOptionsJC.java
@@@ -174,9 -175,13 +175,10 @@@ public class ShellOptionsJC 
        converter = FileConverter.class)
    private File execFileVerbose;
  
 -  @Parameter(names = {"-h", "--hdfsZooInstance"}, description = "use hdfs zoo instance")
 -  private boolean hdfsZooInstance;
 -
    @Parameter(names = {"-z", "--zooKeeperInstance"},
-       description = "use a zookeeper instance with the given instance name and list of zoo hosts. "
-           + "Syntax: -z <zoo-instance-name> <zoo-hosts>. Where <zoo-hosts> is a comma separated list of zookeeper servers.",
+       description = "use a zookeeper instance with the given instance name and"
+           + " list of zoo hosts. Syntax: -z <zoo-instance-name> <zoo-hosts>. Where"
+           + " <zoo-hosts> is a comma separated list of zookeeper servers.",
        arity = 2)
    private List<String> zooKeeperInstance = new ArrayList<>();
  
diff --cc shell/src/main/java/org/apache/accumulo/shell/commands/CompactCommand.java
index d65ecc4,da782fa..dfb21e9
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/CompactCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/CompactCommand.java
@@@ -205,44 -206,49 +208,55 @@@ public class CompactCommand extends Tab
      cancelOpt = new Option(null, "cancel", false, "cancel user initiated compactions");
      opts.addOption(cancelOpt);
  
 +    enoSummaryOption = new Option(null, "sf-no-summary", false,
 +        "Select files that do not have the summaries specified in the table configuration.");
 +    opts.addOption(enoSummaryOption);
 +    extraSummaryOption = new Option(null, "sf-extra-summary", false,
 +        "Select files that have summary information which exceeds the tablets boundries.");
 +    opts.addOption(extraSummaryOption);
      enoSampleOption = new Option(null, "sf-no-sample", false,
-         "Select files that have no sample data or sample data that differes from the table configuration.");
+         "Select files that have no sample data or sample data that differes"
+             + " from the table configuration.");
      opts.addOption(enoSampleOption);
      enameOption = newLAO("sf-ename",
-         "Select files using regular expression to match file names. Only matches against last part of path.");
+         "Select files using regular expression to match file names. Only"
+             + " matches against last part of path.");
      opts.addOption(enameOption);
      epathOption = newLAO("sf-epath",
-         "Select files using regular expression to match file paths to compact. Matches against full path.");
+         "Select files using regular expression to match file paths to compact."
+             + " Matches against full path.");
      opts.addOption(epathOption);
      sizeLtOption = newLAO("sf-lt-esize",
-         "Selects files less than specified size.  Uses the estimated size of file in metadata table.  Can use K,M, and G suffixes");
+         "Selects files less than specified size.  Uses the estimated size of"
+             + " file in metadata table. Can use K,M, and G suffixes");
      opts.addOption(sizeLtOption);
      sizeGtOption = newLAO("sf-gt-esize",
-         "Selects files greater than specified size.  Uses the estimated size of file in metadata table.  Can use K,M, and G suffixes");
+         "Selects files greater than specified size. Uses the estimated size of"
+             + " file in metadata table. Can use K,M, and G suffixes");
      opts.addOption(sizeGtOption);
      minFilesOption = newLAO("min-files",
-         "Only compacts if at least the specified number of files are selected.  When no file selection criteria are given, all files are selected.");
+         "Only compacts if at least the specified number of files are selected."
+             + " When no file selection criteria are given, all files are selected.");
      opts.addOption(minFilesOption);
      outBlockSizeOpt = newLAO("out-data-bs",
-         "Rfile data block size to use for compaction output file.  Can use K,M, and G suffixes. Uses table settings if not specified.");
+         "Rfile data block size to use for compaction output file. Can use K,M,"
+             + " and G suffixes. Uses table settings if not specified.");
      opts.addOption(outBlockSizeOpt);
      outHdfsBlockSizeOpt = newLAO("out-hdfs-bs",
-         "HDFS block size to use for compaction output file.  Can use K,M, and G suffixes. Uses table settings if not specified.");
+         "HDFS block size to use for compaction output file. Can use K,M, and G"
+             + " suffixes. Uses table settings if not specified.");
      opts.addOption(outHdfsBlockSizeOpt);
      outIndexBlockSizeOpt = newLAO("out-index-bs",
-         "Rfile index block size to use for compaction output file.  Can use K,M, and G suffixes. Uses table settings if not specified.");
+         "Rfile index block size to use for compaction output file. Can use"
+             + " K,M, and G suffixes. Uses table settings if not specified.");
      opts.addOption(outIndexBlockSizeOpt);
      outCompressionOpt = newLAO("out-compress",
-         "Compression to use for compaction output file. Either snappy, gz, lzo, or none. Uses table settings if not specified.");
+         "Compression to use for compaction output file. Either snappy, gz, lzo,"
+             + " or none. Uses table settings if not specified.");
      opts.addOption(outCompressionOpt);
      outReplication = newLAO("out-replication",
-         "HDFS replication to use for compaction output file. Uses table settings if not specified.");
+         "HDFS replication to use for compaction output file. Uses table"
+             + " settings if not specified.");
      opts.addOption(outReplication);
  
      return opts;
diff --cc test/src/main/java/org/apache/accumulo/test/InMemoryMapIT.java
index 983e022,82b8ae9..c4c76d3
--- a/test/src/main/java/org/apache/accumulo/test/InMemoryMapIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/InMemoryMapIT.java
@@@ -94,11 -95,11 +94,9 @@@ public class InMemoryMapIT 
      if (!NativeMap.isLoaded()) {
        fail("Missing the native library from " + nativeMapLocation.getAbsolutePath()
            + "\nYou need to build the libaccumulo binary first. "
-           + "\nTry running 'mvn clean install -Dit.test=InMemoryMapIT -Dtest=foo -DfailIfNoTests=false -Dfindbugs.skip -Dcheckstyle.skip'");
-       // afterwards, you can run the following
-       // mvn clean verify -Dit.test=InMemoryMapIT -Dtest=foo -DfailIfNoTests=false -Dfindbugs.skip
-       // -Dcheckstyle.skip -pl :accumulo-test
+           + "\nTry running 'mvn clean verify -Dit.test=InMemoryMapIT -Dtest=foo"
+           + " -DfailIfNoTests=false -Dfindbugs.skip -Dcheckstyle.skip'");
      }
 -    log.debug("Native map loaded");
 -
    }
  
    @Test
diff --cc test/src/main/java/org/apache/accumulo/test/functional/RecoveryWithEmptyRFileIT.java
index 0bbcbc2,1533392..9c5b57f
--- a/test/src/main/java/org/apache/accumulo/test/functional/RecoveryWithEmptyRFileIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/RecoveryWithEmptyRFileIT.java
@@@ -67,12 -67,12 +67,12 @@@ public class RecoveryWithEmptyRFileIT e
  
    @Test
    public void replaceMissingRFile() throws Exception {
-     log.info(
-         "Ingest some data, verify it was stored properly, replace an underlying rfile with an empty one and verify we can scan.");
+     log.info("Ingest some data, verify it was stored properly, replace an"
+         + " underlying rfile with an empty one and verify we can scan.");
      Connector connector = getConnector();
      String tableName = getUniqueNames(1)[0];
 -    ReadWriteIT.ingest(connector, cluster.getClientConfig(), "root", ROWS, COLS, 50, 0, tableName);
 -    ReadWriteIT.verify(connector, cluster.getClientConfig(), "root", ROWS, COLS, 50, 0, tableName);
 +    ReadWriteIT.ingest(connector, "root", ROWS, COLS, 50, 0, tableName);
 +    ReadWriteIT.verify(connector, "root", ROWS, COLS, 50, 0, tableName);
  
      connector.tableOperations().flush(tableName, null, null, true);
      connector.tableOperations().offline(tableName, true);
diff --cc test/src/main/java/org/apache/accumulo/test/functional/WatchTheWatchCountIT.java
index 01814bc,90dcb6e..476e061
--- a/test/src/main/java/org/apache/accumulo/test/functional/WatchTheWatchCountIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/WatchTheWatchCountIT.java
@@@ -65,10 -66,11 +65,9 @@@ public class WatchTheWatchCountIT exten
          if (total > MIN && total < MAX) {
            break;
          }
-         log.debug(
-             "Expected number of watchers to be contained in ({}, {}), but actually was {}. Sleeping and retrying",
-             MIN, MAX, total);
+         log.debug("Expected number of watchers to be contained in ({}, {}), but"
+             + " actually was {}. Sleeping and retrying", MIN, MAX, total);
          Thread.sleep(5000);
 -      } finally {
 -        socket.close();
        }
      }
  
diff --cc test/src/main/java/org/apache/accumulo/test/replication/FinishedWorkUpdaterIT.java
index 03d3db5,2cdc853..8172bc2
--- a/test/src/main/java/org/apache/accumulo/test/replication/FinishedWorkUpdaterIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/replication/FinishedWorkUpdaterIT.java
@@@ -104,14 -101,15 +104,15 @@@ public class FinishedWorkUpdaterIT exte
      ReplicationTable.setOnline(conn);
  
      String file = "/accumulo/wals/tserver+port/" + UUID.randomUUID();
-     // @formatter:off
-     Status stat1 = Status.newBuilder().setBegin(100).setEnd(1000).setClosed(true).setInfiniteEnd(false).build(),
-         stat2 = Status.newBuilder().setBegin(500).setEnd(1000).setClosed(true).setInfiniteEnd(false).build(),
-         stat3 = Status.newBuilder().setBegin(1).setEnd(1000).setClosed(true).setInfiniteEnd(false).build();
-     ReplicationTarget target1 = new ReplicationTarget("peer1", "table1", Table.ID.of("1")),
-         target2 = new ReplicationTarget("peer2", "table2", Table.ID.of("1")),
-         target3 = new ReplicationTarget("peer3", "table3", Table.ID.of("1"));
-     // @formatter:on
+     Status stat1 = Status.newBuilder().setBegin(100).setEnd(1000).setClosed(true)
+         .setInfiniteEnd(false).build();
+     Status stat2 = Status.newBuilder().setBegin(500).setEnd(1000).setClosed(true)
+         .setInfiniteEnd(false).build();
+     Status stat3 = Status.newBuilder().setBegin(1).setEnd(1000).setClosed(true)
+         .setInfiniteEnd(false).build();
 -    ReplicationTarget target1 = new ReplicationTarget("peer1", "table1", "1");
 -    ReplicationTarget target2 = new ReplicationTarget("peer2", "table2", "1");
 -    ReplicationTarget target3 = new ReplicationTarget("peer3", "table3", "1");
++    ReplicationTarget target1 = new ReplicationTarget("peer1", "table1", Table.ID.of("1"));
++    ReplicationTarget target2 = new ReplicationTarget("peer2", "table2", Table.ID.of("1"));
++    ReplicationTarget target3 = new ReplicationTarget("peer3", "table3", Table.ID.of("1"));
  
      // Create a single work record for a file to some peer
      BatchWriter bw = ReplicationTable.getBatchWriter(conn);
@@@ -148,14 -144,15 +149,15 @@@
      ReplicationTable.setOnline(conn);
  
      String file = "/accumulo/wals/tserver+port/" + UUID.randomUUID();
-     // @formatter:off
-     Status stat1 = Status.newBuilder().setBegin(100).setEnd(1000).setClosed(true).setInfiniteEnd(true).build(),
-         stat2 = Status.newBuilder().setBegin(1).setEnd(1000).setClosed(true).setInfiniteEnd(true).build(),
-         stat3 = Status.newBuilder().setBegin(500).setEnd(1000).setClosed(true).setInfiniteEnd(true).build();
-     ReplicationTarget target1 = new ReplicationTarget("peer1", "table1", Table.ID.of("1")),
-         target2 = new ReplicationTarget("peer2", "table2", Table.ID.of("1")),
-         target3 = new ReplicationTarget("peer3", "table3", Table.ID.of("1"));
-     // @formatter:on
+     Status stat1 = Status.newBuilder().setBegin(100).setEnd(1000).setClosed(true)
+         .setInfiniteEnd(true).build();
+     Status stat2 = Status.newBuilder().setBegin(1).setEnd(1000).setClosed(true).setInfiniteEnd(true)
+         .build();
+     Status stat3 = Status.newBuilder().setBegin(500).setEnd(1000).setClosed(true)
+         .setInfiniteEnd(true).build();
 -    ReplicationTarget target1 = new ReplicationTarget("peer1", "table1", "1");
 -    ReplicationTarget target2 = new ReplicationTarget("peer2", "table2", "1");
 -    ReplicationTarget target3 = new ReplicationTarget("peer3", "table3", "1");
++    ReplicationTarget target1 = new ReplicationTarget("peer1", "table1", Table.ID.of("1"));
++    ReplicationTarget target2 = new ReplicationTarget("peer2", "table2", Table.ID.of("1"));
++    ReplicationTarget target3 = new ReplicationTarget("peer3", "table3", Table.ID.of("1"));
  
      // Create a single work record for a file to some peer
      BatchWriter bw = ReplicationTable.getBatchWriter(conn);

-- 
To stop receiving notification emails like this one, please contact
ctubbsii@apache.org.

[accumulo] 02/04: Merge commit 'f4f43febbc3e68013d8a1bcd46d8b44275e2e55e'

Posted by ct...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e113e2f353b4e8eb9d7ac4d4cb6c3cf4892b1836
Merge: 19dc538 f4f43fe
Author: Christopher Tubbs <ct...@apache.org>
AuthorDate: Fri Apr 6 01:19:55 2018 -0400

    Merge commit 'f4f43febbc3e68013d8a1bcd46d8b44275e2e55e'

 .../java/org/apache/accumulo/core/Constants.java   |   3 +-
 .../accumulo/core/bloomfilter/BloomFilter.java     |  33 +-
 .../core/bloomfilter/DynamicBloomFilter.java       |  46 +-
 .../apache/accumulo/core/bloomfilter/Filter.java   |   5 +-
 .../apache/accumulo/core/cli/BatchScannerOpts.java |   3 +-
 .../apache/accumulo/core/cli/BatchWriterOpts.java  |  12 +-
 .../org/apache/accumulo/core/cli/ClientOpts.java   |  38 +-
 .../core/cli/MapReduceClientOnRequiredTable.java   |   3 +-
 .../accumulo/core/cli/MapReduceClientOpts.java     |  11 +-
 .../org/apache/accumulo/core/cli/ScannerOpts.java  |   3 +-
 .../core/client/AccumuloSecurityException.java     |  12 +-
 .../apache/accumulo/core/client/BatchScanner.java  |  26 +-
 .../apache/accumulo/core/client/BatchWriter.java   |  15 +-
 .../accumulo/core/client/BatchWriterConfig.java    |  52 +-
 .../accumulo/core/client/ClientConfiguration.java  |  81 ++-
 .../core/client/ClientSideIteratorScanner.java     |  40 +-
 .../accumulo/core/client/ConditionalWriter.java    |  30 +-
 .../core/client/ConditionalWriterConfig.java       |  25 +-
 .../org/apache/accumulo/core/client/Connector.java | 141 ++--
 .../apache/accumulo/core/client/Durability.java    |   6 +-
 .../org/apache/accumulo/core/client/Instance.java  |  28 +-
 .../accumulo/core/client/IsolatedScanner.java      |  16 +-
 .../accumulo/core/client/IteratorSetting.java      |  54 +-
 .../core/client/MultiTableBatchWriter.java         |   8 +-
 .../core/client/MutationsRejectedException.java    |  11 +-
 .../core/client/NamespaceExistsException.java      |  11 +-
 .../core/client/NamespaceNotEmptyException.java    |  11 +-
 .../core/client/NamespaceNotFoundException.java    |  11 +-
 .../apache/accumulo/core/client/RowIterator.java   |  11 +-
 .../core/client/SampleNotPresentException.java     |   3 +-
 .../org/apache/accumulo/core/client/Scanner.java   |  25 +-
 .../apache/accumulo/core/client/ScannerBase.java   |  90 ++-
 .../core/client/TableDeletedException.java         |   3 +-
 .../accumulo/core/client/TableExistsException.java |   8 +-
 .../core/client/TableNotFoundException.java        |  14 +-
 .../accumulo/core/client/TimedOutException.java    |   3 +-
 .../accumulo/core/client/ZooKeeperInstance.java    |  69 +-
 .../core/client/admin/ActiveCompaction.java        |   3 +-
 .../core/client/admin/CompactionConfig.java        |  26 +-
 .../client/admin/CompactionStrategyConfig.java     |  14 +-
 .../core/client/admin/DelegationTokenConfig.java   |  10 +-
 .../apache/accumulo/core/client/admin/FindMax.java |  15 +-
 .../core/client/admin/InstanceOperations.java      |  35 +-
 .../accumulo/core/client/admin/Locations.java      |  12 +-
 .../core/client/admin/NamespaceOperations.java     |  82 ++-
 .../core/client/admin/NewTableConfiguration.java   |  48 +-
 .../core/client/admin/ReplicationOperations.java   |  34 +-
 .../core/client/admin/SecurityOperations.java      |  76 +-
 .../core/client/admin/SummaryRetriever.java        |  40 +-
 .../core/client/admin/TableOperations.java         | 316 +++++----
 .../accumulo/core/client/admin/TimeType.java       |   7 +-
 .../accumulo/core/client/impl/AbstractId.java      |   6 +-
 .../AcceptableThriftTableOperationException.java   |   6 +-
 .../core/client/impl/ActiveCompactionImpl.java     |   6 +-
 .../accumulo/core/client/impl/ActiveScanImpl.java  |   4 +-
 .../client/impl/AuthenticationTokenIdentifier.java |   3 +-
 .../core/client/impl/BaseIteratorEnvironment.java  |   8 +-
 .../core/client/impl/ClientConfConverter.java      |   9 +-
 .../accumulo/core/client/impl/ClientContext.java   |  83 ++-
 .../core/client/impl/ConditionalWriterImpl.java    |  77 +-
 .../core/client/impl/ConnectionInfoFactory.java    |   3 +-
 .../accumulo/core/client/impl/ConnectorImpl.java   |  88 ++-
 .../accumulo/core/client/impl/Credentials.java     |  67 +-
 .../core/client/impl/DelegationTokenImpl.java      |  21 +-
 .../core/client/impl/InstanceOperationsImpl.java   |  61 +-
 .../accumulo/core/client/impl/MasterClient.java    |  32 +-
 .../client/impl/MultiTableBatchWriterImpl.java     |  18 +-
 .../accumulo/core/client/impl/Namespace.java       |  13 +-
 .../client/impl/NamespaceOperationsHelper.java     |  80 ++-
 .../core/client/impl/NamespaceOperationsImpl.java  |  78 +-
 .../accumulo/core/client/impl/Namespaces.java      |  33 +-
 .../accumulo/core/client/impl/OfflineIterator.java |  66 +-
 .../accumulo/core/client/impl/OfflineScanner.java  |   3 +-
 .../core/client/impl/ReplicationClient.java        |  44 +-
 .../client/impl/ReplicationOperationsImpl.java     |  32 +-
 .../core/client/impl/RootTabletLocator.java        |  27 +-
 .../accumulo/core/client/impl/ScannerImpl.java     |  13 +-
 .../accumulo/core/client/impl/ScannerIterator.java |  17 +-
 .../accumulo/core/client/impl/ScannerOptions.java  |   3 +-
 .../core/client/impl/SecurityOperationsImpl.java   | 128 ++--
 .../accumulo/core/client/impl/ServerClient.java    |  52 +-
 .../core/client/impl/SyncingTabletLocator.java     |  17 +-
 .../apache/accumulo/core/client/impl/Table.java    |  11 +-
 .../apache/accumulo/core/client/impl/TableMap.java |   3 +-
 .../core/client/impl/TableOperationsHelper.java    |  80 ++-
 .../core/client/impl/TableOperationsImpl.java      | 471 ++++++++-----
 .../apache/accumulo/core/client/impl/Tables.java   |  65 +-
 .../accumulo/core/client/impl/TabletLocator.java   |  28 +-
 .../core/client/impl/TabletLocatorImpl.java        | 141 ++--
 .../core/client/impl/TabletServerBatchDeleter.java |   9 +-
 .../core/client/impl/TabletServerBatchReader.java  |  15 +-
 .../impl/TabletServerBatchReaderIterator.java      | 139 ++--
 .../core/client/impl/TabletServerBatchWriter.java  | 127 ++--
 .../accumulo/core/client/impl/TabletType.java      |   3 +-
 .../accumulo/core/client/impl/ThriftScanner.java   | 129 ++--
 .../core/client/impl/ThriftTransportKey.java       |   6 +-
 .../core/client/impl/ThriftTransportPool.java      |  45 +-
 .../core/client/impl/TimeoutTabletLocator.java     |  15 +-
 .../accumulo/core/client/impl/Translator.java      |  15 +-
 .../apache/accumulo/core/client/impl/Writer.java   |  12 +-
 .../core/client/lexicoder/AbstractEncoder.java     |  14 +-
 .../core/client/lexicoder/BigIntegerLexicoder.java |   6 +-
 .../core/client/lexicoder/BytesLexicoder.java      |  10 +-
 .../core/client/lexicoder/DateLexicoder.java       |   3 +-
 .../core/client/lexicoder/DoubleLexicoder.java     |   3 +-
 .../accumulo/core/client/lexicoder/Encoder.java    |   3 +-
 .../core/client/lexicoder/FloatLexicoder.java      |   3 +-
 .../core/client/lexicoder/IntegerLexicoder.java    |   7 +-
 .../accumulo/core/client/lexicoder/Lexicoder.java  |   4 +-
 .../core/client/lexicoder/ListLexicoder.java       |   6 +-
 .../core/client/lexicoder/LongLexicoder.java       |   4 +-
 .../core/client/lexicoder/PairLexicoder.java       |  35 +-
 .../core/client/lexicoder/ReverseLexicoder.java    |   7 +-
 .../core/client/lexicoder/StringLexicoder.java     |   7 +-
 .../core/client/lexicoder/TextLexicoder.java       |   7 +-
 .../core/client/lexicoder/UIntegerLexicoder.java   |   8 +-
 .../core/client/lexicoder/ULongLexicoder.java      |   8 +-
 .../core/client/lexicoder/UUIDLexicoder.java       |   7 +-
 .../lexicoder/impl/FixedByteArrayOutputStream.java |   3 +-
 .../core/client/mapred/AbstractInputFormat.java    | 131 ++--
 .../client/mapred/AccumuloFileOutputFormat.java    |  53 +-
 .../core/client/mapred/AccumuloInputFormat.java    |  10 +-
 .../mapred/AccumuloMultiTableInputFormat.java      |   8 +-
 .../core/client/mapred/AccumuloOutputFormat.java   |  83 ++-
 .../core/client/mapred/AccumuloRowInputFormat.java |  12 +-
 .../core/client/mapred/InputFormatBase.java        |  94 ++-
 .../core/client/mapred/RangeInputSplit.java        |   3 +-
 .../core/client/mapred/impl/BatchInputSplit.java   |   9 +-
 .../core/client/mapreduce/AbstractInputFormat.java | 145 ++--
 .../client/mapreduce/AccumuloFileOutputFormat.java |  47 +-
 .../core/client/mapreduce/AccumuloInputFormat.java |  10 +-
 .../mapreduce/AccumuloMultiTableInputFormat.java   |  11 +-
 .../client/mapreduce/AccumuloOutputFormat.java     |  89 ++-
 .../client/mapreduce/AccumuloRowInputFormat.java   |  13 +-
 .../core/client/mapreduce/InputFormatBase.java     |  97 ++-
 .../core/client/mapreduce/InputTableConfig.java    |  58 +-
 .../core/client/mapreduce/RangeInputSplit.java     |  21 +-
 .../client/mapreduce/impl/BatchInputSplit.java     |  30 +-
 .../client/mapreduce/impl/DelegationTokenStub.java |   3 +-
 .../core/client/mapreduce/impl/SplitUtils.java     |  16 +-
 .../mapreduce/lib/impl/ConfiguratorBase.java       | 136 ++--
 .../mapreduce/lib/impl/FileOutputConfigurator.java |  86 ++-
 .../mapreduce/lib/impl/InputConfigurator.java      | 231 ++++--
 .../mapreduce/lib/impl/OutputConfigurator.java     |  36 +-
 .../client/mapreduce/lib/impl/package-info.java    |  27 +-
 .../lib/partition/KeyRangePartitioner.java         |   3 +-
 .../mapreduce/lib/partition/RangePartitioner.java  |   9 +-
 .../accumulo/core/client/mock/MockAccumulo.java    |  15 +-
 .../core/client/mock/MockBatchDeleter.java         |   9 +-
 .../accumulo/core/client/mock/MockConnector.java   |  49 +-
 .../accumulo/core/client/mock/MockInstance.java    |  25 +-
 .../core/client/mock/MockInstanceOperations.java   |  18 +-
 .../client/mock/MockMultiTableBatchWriter.java     |   3 +-
 .../core/client/mock/MockNamespaceOperations.java  |  25 +-
 .../accumulo/core/client/mock/MockScannerBase.java |  14 +-
 .../core/client/mock/MockSecurityOperations.java   |  54 +-
 .../accumulo/core/client/mock/MockTable.java       |  14 +-
 .../core/client/mock/MockTableOperations.java      | 160 +++--
 .../core/client/mock/impl/MockTabletLocator.java   |  12 +-
 .../accumulo/core/client/mock/package-info.java    |   1 -
 .../client/replication/PeerExistsException.java    |   3 +-
 .../apache/accumulo/core/client/rfile/RFile.java   | 129 ++--
 .../accumulo/core/client/rfile/RFileScanner.java   |  35 +-
 .../core/client/rfile/RFileScannerBuilder.java     |   6 +-
 .../accumulo/core/client/rfile/RFileSource.java    |   4 +-
 .../core/client/rfile/RFileSummariesRetriever.java |   6 +-
 .../accumulo/core/client/rfile/RFileWriter.java    |  40 +-
 .../core/client/rfile/RFileWriterBuilder.java      |  19 +-
 .../core/client/sample/AbstractHashSampler.java    |  13 +-
 .../core/client/sample/RowColumnSampler.java       |  15 +-
 .../accumulo/core/client/sample/RowSampler.java    |  10 +-
 .../accumulo/core/client/sample/Sampler.java       |  30 +-
 .../security/tokens/AuthenticationToken.java       |  24 +-
 .../security/tokens/CredentialProviderToken.java   |  24 +-
 .../client/security/tokens/DelegationToken.java    |  13 +-
 .../core/client/security/tokens/KerberosToken.java |  28 +-
 .../core/client/security/tokens/PasswordToken.java |  21 +-
 .../core/client/summary/CounterSummary.java        |  24 +-
 .../core/client/summary/CountingSummarizer.java    |  75 +-
 .../accumulo/core/client/summary/Summarizer.java   |  43 +-
 .../client/summary/SummarizerConfiguration.java    |  36 +-
 .../accumulo/core/client/summary/Summary.java      |  55 +-
 .../summary/summarizers/DeletesSummarizer.java     |   8 +-
 .../summary/summarizers/EntryLengthSummarizer.java |  22 +-
 .../summary/summarizers/FamilySummarizer.java      |   8 +-
 .../summary/summarizers/VisibilitySummarizer.java  |   8 +-
 .../accumulo/core/conf/AccumuloConfiguration.java  |  45 +-
 .../accumulo/core/conf/CliConfiguration.java       |   3 +-
 .../accumulo/core/conf/ClientConfigGenerate.java   |  29 +-
 .../apache/accumulo/core/conf/ClientProperty.java  |  43 +-
 .../accumulo/core/conf/ConfigSanityCheck.java      |  55 +-
 .../accumulo/core/conf/ConfigurationCopy.java      |   3 +-
 .../accumulo/core/conf/ConfigurationDocGen.java    |  33 +-
 .../core/conf/ConfigurationTypeHelper.java         |  46 +-
 .../core/conf/CredentialProviderFactoryShim.java   | 100 ++-
 .../accumulo/core/conf/DefaultConfiguration.java   |   9 +-
 .../apache/accumulo/core/conf/Interpolated.java    |   9 +-
 .../core/conf/ObservableConfiguration.java         |   6 +-
 .../org/apache/accumulo/core/conf/Property.java    | 729 ++++++++++++-------
 .../apache/accumulo/core/conf/PropertyType.java    |  77 +-
 .../org/apache/accumulo/core/conf/Sensitive.java   |   3 +-
 .../accumulo/core/conf/SiteConfiguration.java      |  51 +-
 .../accumulo/core/constraints/Constraint.java      |  14 +-
 .../core/constraints/VisibilityConstraint.java     |   3 +-
 .../accumulo/core/data/ArrayByteSequence.java      |  24 +-
 .../apache/accumulo/core/data/ByteSequence.java    |  17 +-
 .../java/org/apache/accumulo/core/data/Column.java |  10 +-
 .../apache/accumulo/core/data/ColumnUpdate.java    |  20 +-
 .../org/apache/accumulo/core/data/Condition.java   |  55 +-
 .../accumulo/core/data/ConditionalMutation.java    |   6 +-
 .../core/data/ConstraintViolationSummary.java      |  12 +-
 .../java/org/apache/accumulo/core/data/Key.java    | 322 +++++----
 .../org/apache/accumulo/core/data/KeyBuilder.java  |  47 +-
 .../org/apache/accumulo/core/data/Mutation.java    | 237 ++++---
 .../org/apache/accumulo/core/data/PartialKey.java  |   6 +-
 .../java/org/apache/accumulo/core/data/Range.java  | 180 +++--
 .../org/apache/accumulo/core/data/TabletId.java    |   3 +-
 .../java/org/apache/accumulo/core/data/Value.java  |  32 +-
 .../accumulo/core/data/impl/ComparableBytes.java   |   3 +-
 .../apache/accumulo/core/data/impl/KeyExtent.java  |  82 ++-
 .../accumulo/core/file/BloomFilterLayer.java       |  71 +-
 .../accumulo/core/file/DispatchingFileFactory.java |  14 +-
 .../apache/accumulo/core/file/FileOperations.java  | 129 ++--
 .../accumulo/core/file/blockfile/ABlockReader.java |   3 +-
 .../core/file/blockfile/BlockFileReader.java       |   3 +-
 .../core/file/blockfile/BlockFileWriter.java       |   3 +-
 .../core/file/blockfile/cache/BlockCache.java      |  13 +-
 .../file/blockfile/cache/BlockCacheManager.java    |  39 +-
 .../core/file/blockfile/cache/CacheEntry.java      |   7 +-
 .../cache/impl/BlockCacheConfiguration.java        |   3 +-
 .../cache/impl/BlockCacheManagerFactory.java       |  21 +-
 .../core/file/blockfile/cache/impl/ClassSize.java  |  18 +-
 .../core/file/blockfile/cache/lru/CachedBlock.java |  16 +-
 .../file/blockfile/cache/lru/CachedBlockQueue.java |  15 +-
 .../core/file/blockfile/cache/lru/HeapSize.java    |   9 +-
 .../file/blockfile/cache/lru/LruBlockCache.java    | 110 +--
 .../cache/lru/LruBlockCacheConfiguration.java      |  32 +-
 .../cache/lru/SynchronousLoadingBlockCache.java    |   3 +-
 .../blockfile/cache/tinylfu/TinyLfuBlockCache.java |  29 +-
 .../file/blockfile/impl/CachableBlockFile.java     |  96 ++-
 .../impl/SeekableByteArrayInputStream.java         |   9 +-
 .../file/keyfunctor/ColumnQualifierFunctor.java    |   3 +-
 .../accumulo/core/file/keyfunctor/RowFunctor.java  |   3 +-
 .../accumulo/core/file/map/MapFileOperations.java  |  19 +-
 .../apache/accumulo/core/file/map/MapFileUtil.java |   6 +-
 .../accumulo/core/file/rfile/BlockIndex.java       |  21 +-
 .../accumulo/core/file/rfile/CreateEmpty.java      |  15 +-
 .../accumulo/core/file/rfile/IndexIterator.java    |   6 +-
 .../accumulo/core/file/rfile/KeyShortener.java     |  22 +-
 .../accumulo/core/file/rfile/MetricsGatherer.java  |  10 +-
 .../core/file/rfile/MultiIndexIterator.java        |   6 +-
 .../accumulo/core/file/rfile/MultiLevelIndex.java  |  58 +-
 .../apache/accumulo/core/file/rfile/PrintInfo.java |  28 +-
 .../org/apache/accumulo/core/file/rfile/RFile.java | 233 ++++--
 .../accumulo/core/file/rfile/RFileOperations.java  |  22 +-
 .../accumulo/core/file/rfile/RelativeKey.java      |  33 +-
 .../accumulo/core/file/rfile/RollingStats.java     |  15 +-
 .../accumulo/core/file/rfile/SplitLarge.java       |  15 +-
 .../core/file/rfile/VisMetricsGatherer.java        |  19 +-
 .../accumulo/core/file/rfile/VisibilityMetric.java |  10 +-
 .../accumulo/core/file/rfile/bcfile/BCFile.java    | 183 +++--
 .../core/file/rfile/bcfile/Compression.java        | 134 ++--
 .../accumulo/core/file/rfile/bcfile/PrintInfo.java |  15 +-
 .../core/file/rfile/bcfile/RawComparable.java      |  10 +-
 .../rfile/bcfile/SimpleBufferedOutputStream.java   |   3 +-
 .../accumulo/core/file/rfile/bcfile/Utils.java     |  67 +-
 .../file/streams/BoundedRangeFileInputStream.java  |  11 +-
 .../file/streams/PositionedDataOutputStream.java   |   6 +-
 .../core/file/streams/PositionedOutput.java        |   3 +-
 .../core/file/streams/PositionedOutputs.java       |   8 +-
 .../core/file/streams/RateLimitedInputStream.java  |   3 +-
 .../core/file/streams/SeekableDataInputStream.java |   3 +-
 .../core/iterators/AggregatingIterator.java        |  30 +-
 .../core/iterators/ColumnFamilyCounter.java        |   9 +-
 .../apache/accumulo/core/iterators/Combiner.java   | 125 ++--
 .../accumulo/core/iterators/DebugIterator.java     |  10 +-
 .../apache/accumulo/core/iterators/DevNull.java    |  10 +-
 .../core/iterators/FamilyIntersectingIterator.java |   3 +-
 .../org/apache/accumulo/core/iterators/Filter.java |  25 +-
 .../core/iterators/FirstEntryInRowIterator.java    |  16 +-
 .../core/iterators/IntersectingIterator.java       |   6 +-
 .../accumulo/core/iterators/IteratorAdapter.java   |   3 +-
 .../core/iterators/IteratorEnvironment.java        |  14 +-
 .../accumulo/core/iterators/IteratorUtil.java      | 126 ++--
 .../accumulo/core/iterators/LongCombiner.java      |  61 +-
 .../accumulo/core/iterators/OptionDescriber.java   |  36 +-
 .../apache/accumulo/core/iterators/OrIterator.java |  52 +-
 .../core/iterators/RowDeletingIterator.java        |   6 +-
 .../accumulo/core/iterators/ServerFilter.java      |  15 +-
 .../core/iterators/ServerSkippingIterator.java     |  10 +-
 .../core/iterators/ServerWrappingIterator.java     |  17 +-
 .../accumulo/core/iterators/SkippingIterator.java  |  10 +-
 .../accumulo/core/iterators/SortedKeyIterator.java |   4 +-
 .../core/iterators/SortedKeyValueIterator.java     |  89 ++-
 .../accumulo/core/iterators/SortedMapIterator.java |  13 +-
 .../core/iterators/SynchronizedServerFilter.java   |  12 +-
 .../core/iterators/TypedValueCombiner.java         |  38 +-
 .../core/iterators/VersioningIterator.java         |   3 +-
 .../accumulo/core/iterators/WholeRowIterator.java  |   3 +-
 .../accumulo/core/iterators/WrappingIterator.java  |  22 +-
 .../accumulo/core/iterators/YieldCallback.java     |   5 +-
 .../core/iterators/YieldingKeyValueIterator.java   |  12 +-
 .../core/iterators/aggregation/LongSummation.java  |  15 +-
 .../iterators/aggregation/NumArraySummation.java   |   3 +-
 .../core/iterators/aggregation/NumSummation.java   |   3 +-
 .../core/iterators/aggregation/StringMax.java      |   4 +-
 .../core/iterators/aggregation/StringMin.java      |   4 +-
 .../iterators/aggregation/StringSummation.java     |   3 +-
 .../aggregation/conf/AggregatorConfiguration.java  |   3 +-
 .../iterators/aggregation/conf/AggregatorSet.java  |   6 +-
 .../accumulo/core/iterators/conf/ColumnSet.java    |   6 +-
 .../core/iterators/conf/ColumnToClassMapping.java  |  12 +-
 .../accumulo/core/iterators/conf/ColumnUtil.java   |   9 +-
 .../iterators/conf/PerColumnIteratorConfig.java    |   6 +-
 .../system/ColumnFamilySkippingIterator.java       |  12 +-
 .../iterators/system/ColumnQualifierFilter.java    |   6 +-
 .../core/iterators/system/CountingIterator.java    |   3 +-
 .../core/iterators/system/DeletingIterator.java    |  15 +-
 .../core/iterators/system/EmptyIterator.java       |   6 +-
 .../core/iterators/system/HeapIterator.java        |   4 +-
 .../iterators/system/LocalityGroupIterator.java    |  43 +-
 .../core/iterators/system/MapFileIterator.java     |   9 +-
 .../core/iterators/system/MultiIterator.java       |   9 +-
 .../iterators/system/SequenceFileIterator.java     |   6 +-
 .../iterators/system/SourceSwitchingIterator.java  |  50 +-
 .../core/iterators/system/StatsIterator.java       |   6 +-
 .../iterators/system/SynchronizedIterator.java     |  14 +-
 .../core/iterators/system/TimeSettingIterator.java |   6 +-
 .../core/iterators/system/VisibilityFilter.java    |  16 +-
 .../accumulo/core/iterators/user/AgeOffFilter.java |  18 +-
 .../core/iterators/user/BigDecimalCombiner.java    |  12 +-
 .../core/iterators/user/CfCqSliceFilter.java       |  13 +-
 .../core/iterators/user/CfCqSliceOpts.java         |  18 +-
 .../iterators/user/CfCqSliceSeekingFilter.java     |  27 +-
 .../core/iterators/user/ColumnAgeOffFilter.java    |  17 +-
 .../core/iterators/user/ColumnSliceFilter.java     |  22 +-
 .../accumulo/core/iterators/user/GrepIterator.java |   9 +-
 .../core/iterators/user/IndexedDocIterator.java    |  35 +-
 .../core/iterators/user/IntersectingIterator.java  | 100 ++-
 .../core/iterators/user/LargeRowFilter.java        |  46 +-
 .../accumulo/core/iterators/user/MaxCombiner.java  |   3 +-
 .../accumulo/core/iterators/user/MinCombiner.java  |   3 +-
 .../accumulo/core/iterators/user/RegExFilter.java  |  26 +-
 .../core/iterators/user/RowDeletingIterator.java   |  45 +-
 .../core/iterators/user/RowEncodingIterator.java   |  58 +-
 .../accumulo/core/iterators/user/RowFilter.java    |  44 +-
 .../core/iterators/user/SeekingFilter.java         |  47 +-
 .../core/iterators/user/SummingArrayCombiner.java  |  26 +-
 .../core/iterators/user/SummingCombiner.java       |   3 +-
 .../core/iterators/user/TimestampFilter.java       |  15 +-
 .../core/iterators/user/TransformingIterator.java  | 222 +++---
 .../core/iterators/user/VersioningIterator.java    |  19 +-
 .../core/iterators/user/VisibilityFilter.java      |  12 +-
 .../iterators/user/WholeColumnFamilyIterator.java  |  52 +-
 .../core/iterators/user/WholeRowIterator.java      |  27 +-
 .../core/metadata/MetadataLocationObtainer.java    |  54 +-
 .../accumulo/core/metadata/MetadataServicer.java   |   9 +-
 .../apache/accumulo/core/metadata/RootTable.java   |   3 +-
 .../core/metadata/ServicerForRootTable.java        |   3 +-
 .../core/metadata/TableMetadataServicer.java       |  26 +-
 .../core/metadata/schema/MetadataScanner.java      |  12 +-
 .../core/metadata/schema/MetadataSchema.java       |  42 +-
 .../core/metadata/schema/TabletMetadata.java       |  36 +-
 .../replication/AccumuloReplicationReplayer.java   |   7 +-
 .../core/replication/ReplicationSchema.java        |  26 +-
 .../core/replication/ReplicationTable.java         |   9 +-
 .../core/replication/ReplicationTarget.java        |  10 +-
 .../apache/accumulo/core/rpc/FilterTransport.java  |   3 +-
 .../rpc/ProtocolOverridingSSLSocketFactory.java    |  24 +-
 .../core/rpc/SaslClientDigestCallbackHandler.java  |   5 +-
 .../accumulo/core/rpc/SaslConnectionParams.java    |  15 +-
 .../core/rpc/SaslDigestCallbackHandler.java        |   6 +-
 .../accumulo/core/rpc/SslConnectionParams.java     |  19 +-
 .../apache/accumulo/core/rpc/TBufferedSocket.java  |   3 +-
 .../accumulo/core/rpc/TServiceClientWrapper.java   |   5 +-
 .../accumulo/core/rpc/TTimeoutTransport.java       |  21 +-
 .../org/apache/accumulo/core/rpc/ThriftUtil.java   | 142 ++--
 .../accumulo/core/rpc/TraceProtocolFactory.java    |   3 +-
 .../accumulo/core/rpc/UGIAssumingTransport.java    |   6 +-
 .../core/sample/impl/SamplerConfigurationImpl.java |   9 +-
 .../accumulo/core/sample/impl/SamplerFactory.java  |  12 +-
 .../accumulo/core/security/Authorizations.java     |  24 +-
 .../accumulo/core/security/ColumnVisibility.java   |  86 ++-
 .../core/security/NamespacePermission.java         |   3 +-
 .../accumulo/core/security/SystemPermission.java   |   3 +-
 .../accumulo/core/security/TablePermission.java    |   3 +-
 .../core/security/VisibilityEvaluator.java         |  29 +-
 .../core/security/VisibilityParseException.java    |   3 +-
 .../core/security/crypto/BlockedInputStream.java   |  10 +-
 .../core/security/crypto/BlockedOutputStream.java  |  12 +-
 .../CachingHDFSSecretKeyEncryptionStrategy.java    |  46 +-
 .../core/security/crypto/CryptoModule.java         |  90 ++-
 .../core/security/crypto/CryptoModuleFactory.java  |  70 +-
 .../security/crypto/CryptoModuleParameters.java    | 255 ++++---
 .../core/security/crypto/DefaultCryptoModule.java  | 164 +++--
 .../security/crypto/DefaultCryptoModuleUtils.java  |  20 +-
 .../NonCachingSecretKeyEncryptionStrategy.java     |  32 +-
 .../security/crypto/RFileCipherOutputStream.java   |  25 +-
 .../org/apache/accumulo/core/summary/Gatherer.java | 118 +++-
 .../core/summary/SummarizerConfigurationUtil.java  |   6 +-
 .../accumulo/core/summary/SummarizerFactory.java   |   9 +-
 .../accumulo/core/summary/SummaryCollection.java   |  12 +-
 .../accumulo/core/summary/SummaryReader.java       |  41 +-
 .../accumulo/core/summary/SummarySerializer.java   |  39 +-
 .../accumulo/core/summary/SummaryWriter.java       |  21 +-
 .../apache/accumulo/core/trace/CountSampler.java   |   3 +-
 .../accumulo/core/trace/DistributedTrace.java      |  39 +-
 .../accumulo/core/trace/ProbabilitySampler.java    |   3 +-
 .../java/org/apache/accumulo/core/trace/Span.java  |   3 +-
 .../java/org/apache/accumulo/core/trace/Trace.java |   3 +-
 .../accumulo/core/trace/wrappers/TraceWrap.java    |  11 +-
 .../org/apache/accumulo/core/util/AddressUtil.java |   6 +-
 .../apache/accumulo/core/util/ByteBufferUtil.java  |  12 +-
 .../accumulo/core/util/CancelFlagFuture.java       |   6 +-
 .../org/apache/accumulo/core/util/Classpath.java   |   3 +-
 .../org/apache/accumulo/core/util/CleanUp.java     |  11 +-
 .../apache/accumulo/core/util/ComparablePair.java  |   3 +-
 .../accumulo/core/util/CompletableFutureUtil.java  |   6 +-
 .../org/apache/accumulo/core/util/CreateToken.java |  23 +-
 .../apache/accumulo/core/util/DeprecationUtil.java |  13 +-
 .../org/apache/accumulo/core/util/FastFormat.java  |   6 +-
 .../org/apache/accumulo/core/util/HostAndPort.java |  46 +-
 .../accumulo/core/util/LocalityGroupUtil.java      |  41 +-
 .../java/org/apache/accumulo/core/util/Merge.java  |  33 +-
 .../org/apache/accumulo/core/util/OpTimer.java     |  14 +-
 .../apache/accumulo/core/util/PeekingIterator.java |   3 +-
 .../accumulo/core/util/PreAllocatedArray.java      |   5 +-
 .../apache/accumulo/core/util/ServerServices.java  |   3 +-
 .../accumulo/core/util/SimpleThreadPool.java       |   3 +-
 .../accumulo/core/util/ThriftMessageUtil.java      |  13 +-
 .../accumulo/core/util/UnsynchronizedBuffer.java   |  26 +-
 .../org/apache/accumulo/core/util/Validator.java   |  15 +-
 .../accumulo/core/util/format/BinaryFormatter.java |  12 +-
 .../core/util/format/DateFormatSupplier.java       |  19 +-
 .../core/util/format/DateStringFormatter.java      |  17 +-
 .../core/util/format/DefaultFormatter.java         |   9 +-
 .../accumulo/core/util/format/FormatterConfig.java |   5 +-
 .../core/util/format/FormatterFactory.java         |   6 +-
 .../accumulo/core/util/format/HexFormatter.java    |   3 +-
 .../format/ShardedTableDistributionFormatter.java  |   7 +-
 .../util/format/StatisticsDisplayFormatter.java    |   5 +-
 .../core/util/interpret/HexScanInterpreter.java    |   5 +-
 .../core/util/interpret/ScanInterpreter.java       |   3 +-
 .../core/util/ratelimit/GuavaRateLimiter.java      |   9 +-
 .../util/ratelimit/SharedRateLimiterFactory.java   |  22 +-
 .../accumulo/core/volume/NonConfiguredVolume.java  |  21 +-
 .../org/apache/accumulo/core/volume/Volume.java    |   6 +-
 .../accumulo/core/volume/VolumeConfiguration.java  |  21 +-
 .../apache/accumulo/core/volume/VolumeImpl.java    |  12 +-
 .../apache/accumulo/core/zookeeper/ZooUtil.java    |  16 +-
 .../core/client/BatchWriterConfigTest.java         |   6 +-
 .../core/client/ClientConfigurationTest.java       |   9 +-
 .../accumulo/core/client/IteratorSettingTest.java  |   6 +-
 .../core/client/ZooKeeperInstanceTest.java         |  21 +-
 .../client/admin/DelegationTokenConfigTest.java    |   6 +-
 .../core/client/impl/ClientContextTest.java        |  15 +-
 .../accumulo/core/client/impl/NamespaceTest.java   |   3 +-
 .../core/client/impl/ScannerOptionsTest.java       |   3 +-
 .../client/impl/TableOperationsHelperTest.java     | 157 +++--
 .../core/client/impl/TableOperationsImplTest.java  |   3 +-
 .../accumulo/core/client/impl/TableTest.java       |   3 +-
 .../core/client/impl/TabletLocatorImplTest.java    | 264 ++++---
 .../core/client/impl/ThriftScannerTest.java        |   6 +-
 .../core/client/impl/ThriftTransportKeyTest.java   |  89 +--
 .../client/lexicoder/BigIntegerLexicoderTest.java  |  19 +-
 .../core/client/lexicoder/DoubleLexicoderTest.java |  10 +-
 .../core/client/lexicoder/FloatLexicoderTest.java  |   9 +-
 .../client/lexicoder/IntegerLexicoderTest.java     |   4 +-
 .../core/client/lexicoder/LexicoderTest.java       |   3 +-
 .../core/client/lexicoder/LongLexicoderTest.java   |   8 +-
 .../core/client/lexicoder/PairLexicoderTest.java   |  21 +-
 .../client/lexicoder/ReverseLexicoderTest.java     |  11 +-
 .../core/client/lexicoder/ULongLexicoderTest.java  |  31 +-
 .../core/client/lexicoder/UUIDLexicoderTest.java   |   4 +-
 .../lexicoder/impl/AbstractLexicoderTest.java      |   5 +-
 .../mapred/AccumuloFileOutputFormatTest.java       |  18 +-
 .../client/mapred/AccumuloInputFormatTest.java     |  38 +-
 .../mapred/AccumuloMultiTableInputFormatTest.java  |   9 +-
 .../client/mapred/AccumuloOutputFormatTest.java    |   6 +-
 .../core/client/mapred/RangeInputSplitTest.java    |   9 +-
 .../mapreduce/AccumuloFileOutputFormatTest.java    |  21 +-
 .../client/mapreduce/AccumuloInputFormatTest.java  |  38 +-
 .../AccumuloMultiTableInputFormatTest.java         |   3 +-
 .../client/mapreduce/AccumuloOutputFormatTest.java |   6 +-
 .../core/client/mapreduce/RangeInputSplitTest.java |   9 +-
 .../client/mapreduce/impl/BatchInputSplitTest.java |   9 +-
 .../mapreduce/lib/impl/ConfiguratorBaseTest.java   |  42 +-
 .../lib/partition/RangePartitionerTest.java        |   9 +-
 .../core/client/mock/MockConnectorTest.java        |  26 +-
 .../core/client/mock/MockNamespacesTest.java       |  25 +-
 .../accumulo/core/client/mock/MockScannerTest.java |   6 +-
 .../core/client/mock/MockTableOperationsTest.java  |  34 +-
 .../core/client/mock/TestBatchScanner821.java      |   3 +-
 .../accumulo/core/client/rfile/RFileTest.java      | 134 ++--
 .../client/security/SecurityErrorCodeTest.java     |   3 +-
 .../security/tokens/DelegationTokenImplTest.java   |  21 +-
 .../client/security/tokens/KerberosTokenTest.java  |   3 +-
 .../client/summary/CountingSummarizerTest.java     |  13 +-
 .../summarizers/EntryLengthSummarizersTest.java    |  91 ++-
 .../core/conf/AccumuloConfigurationTest.java       |   6 +-
 .../accumulo/core/conf/ConfigSanityCheckTest.java  |  30 +-
 .../core/conf/ConfigurationTypeHelperTest.java     |  10 +-
 .../conf/CredentialProviderFactoryShimTest.java    |  38 +-
 .../core/conf/DefaultConfigurationTest.java        |   3 +-
 .../apache/accumulo/core/conf/PropertyTest.java    |  35 +-
 .../accumulo/core/conf/PropertyTypeTest.java       |  37 +-
 .../accumulo/core/conf/SiteConfigurationTest.java  |  15 +-
 .../constraints/DefaultKeySizeConstraintTest.java  |  16 +-
 .../accumulo/core/data/ArrayByteSequenceTest.java  |   3 +-
 .../apache/accumulo/core/data/ConditionTest.java   |  12 +-
 .../core/data/ConstraintViolationSummaryTest.java  |  10 +-
 .../apache/accumulo/core/data/KeyBuilderTest.java  |  47 +-
 .../apache/accumulo/core/data/KeyExtentTest.java   |   3 +-
 .../org/apache/accumulo/core/data/KeyTest.java     |  12 +-
 .../apache/accumulo/core/data/MutationTest.java    |  39 +-
 .../org/apache/accumulo/core/data/OldMutation.java |  84 ++-
 .../org/apache/accumulo/core/data/RangeTest.java   | 123 ++--
 .../core/file/BloomFilterLayerLookupTest.java      |  12 +-
 .../accumulo/core/file/FileOperationsTest.java     |   3 +-
 .../blockfile/cache/BlockCacheManagerTest.java     |  12 +-
 .../file/blockfile/cache/TestCachedBlockQueue.java |  16 +-
 .../file/blockfile/cache/TestLruBlockCache.java    |  63 +-
 .../accumulo/core/file/rfile/BlockIndexTest.java   |  15 +-
 .../core/file/rfile/CreateCompatTestFile.java      |  22 +-
 .../accumulo/core/file/rfile/KeyShortenerTest.java |  78 +-
 .../core/file/rfile/MultiLevelIndexTest.java       |   6 +-
 .../core/file/rfile/MultiThreadedRFileTest.java    |  56 +-
 .../accumulo/core/file/rfile/RFileMetricsTest.java |   9 +-
 .../apache/accumulo/core/file/rfile/RFileTest.java | 295 +++++---
 .../accumulo/core/file/rfile/RelativeKeyTest.java  |  24 +-
 .../core/file/rfile/RolllingStatsTest.java         |   4 +-
 .../core/file/rfile/bcfile/CompressionTest.java    |  21 +-
 .../file/streams/RateLimitedInputStreamTest.java   |  12 +-
 .../file/streams/RateLimitedOutputStreamTest.java  |   3 +-
 .../core/iterators/AggregatingIteratorTest.java    |   9 +-
 .../core/iterators/DefaultIteratorEnvironment.java |   3 +-
 .../iterators/FirstEntryInRowIteratorTest.java     |  15 +-
 .../core/iterators/FirstEntryInRowTest.java        |   9 +-
 .../accumulo/core/iterators/IteratorUtilTest.java  |  74 +-
 .../conf/AggregatorConfigurationTest.java          |  16 +-
 .../system/ColumnFamilySkippingIteratorTest.java   |  16 +-
 .../core/iterators/system/ColumnFilterTest.java    |   6 +-
 .../iterators/system/DeletingIteratorTest.java     |   3 +-
 .../core/iterators/system/MultiIteratorTest.java   |  20 +-
 .../system/SourceSwitchingIteratorTest.java        |  28 +-
 .../iterators/system/TimeSettingIteratorTest.java  |  21 +-
 .../iterators/system/VisibilityFilterTest.java     |   6 +-
 .../core/iterators/user/ColumnSliceFilterTest.java |   3 +-
 .../accumulo/core/iterators/user/CombinerTest.java |  59 +-
 .../accumulo/core/iterators/user/FilterTest.java   |  27 +-
 .../core/iterators/user/GrepIteratorTest.java      |   3 +-
 .../iterators/user/IndexedDocIteratorTest.java     |  39 +-
 .../iterators/user/IntersectingIteratorTest.java   |  39 +-
 .../core/iterators/user/LargeRowFilterTest.java    |  27 +-
 .../iterators/user/RowDeletingIteratorTest.java    |   6 +-
 .../iterators/user/RowEncodingIteratorTest.java    |   9 +-
 .../core/iterators/user/RowFilterTest.java         |  12 +-
 .../core/iterators/user/TestCfCqSlice.java         |  81 ++-
 .../iterators/user/TransformingIteratorTest.java   | 102 ++-
 .../iterators/user/VersioningIteratorTest.java     |   3 +-
 .../core/iterators/user/VisibilityFilterTest.java  |  14 +-
 .../user/WholeColumnFamilyIteratorTest.java        |  51 +-
 .../core/iterators/user/WholeRowIteratorTest.java  |  42 +-
 .../core/metadata/MetadataServicerTest.java        |   3 +-
 .../ReplicationConfigurationUtilTest.java          |  18 +-
 .../rpc/SaslClientDigestCallbackHandlerTest.java   |   5 +-
 .../core/rpc/SaslConnectionParamsTest.java         | 121 ++--
 .../accumulo/core/rpc/TTimeoutTransportTest.java   |  10 +-
 .../AuthenticationTokenIdentifierTest.java         |   6 +-
 .../core/security/AuthenticationTokenTest.java     |   6 +-
 .../accumulo/core/security/AuthorizationsTest.java |   3 +-
 .../core/security/ColumnVisibilityTest.java        |   6 +-
 .../accumulo/core/security/CredentialsTest.java    |  19 +-
 .../core/security/NamespacePermissionsTest.java    |   3 +-
 .../core/security/VisibilityConstraintTest.java    |   3 +-
 .../core/security/VisibilityEvaluatorTest.java     |  33 +-
 .../core/security/crypto/BlockedIOStreamTest.java  |   3 +-
 .../accumulo/core/security/crypto/CryptoTest.java  |  94 ++-
 .../accumulo/core/util/ByteBufferUtilTest.java     |   6 +-
 .../core/util/CompletableFutureUtilTest.java       |   6 +-
 .../accumulo/core/util/LocalityGroupUtilTest.java  |   3 +-
 .../org/apache/accumulo/core/util/MergeTest.java   |  12 +-
 .../org/apache/accumulo/core/util/OpTimerTest.java |  15 +-
 .../org/apache/accumulo/core/util/PairTest.java    |   3 +-
 .../apache/accumulo/core/util/PartitionerTest.java |   3 +-
 .../accumulo/core/util/PreAllocatedArrayTest.java  |   3 +-
 .../core/util/format/DateFormatSupplierTest.java   |   6 +-
 .../core/util/format/DefaultFormatterTest.java     |   9 +-
 .../core/util/format/FormatterFactoryTest.java     |   3 +-
 .../apache/accumulo/fate/AcceptableException.java  |  12 +-
 .../java/org/apache/accumulo/fate/AdminUtil.java   |  56 +-
 .../java/org/apache/accumulo/fate/AgeOffStore.java |   6 +-
 .../main/java/org/apache/accumulo/fate/Fate.java   |  21 +-
 .../org/apache/accumulo/fate/ReadOnlyRepo.java     |   4 +-
 .../org/apache/accumulo/fate/ReadOnlyStore.java    |   6 +-
 .../org/apache/accumulo/fate/ReadOnlyTStore.java   |  19 +-
 .../main/java/org/apache/accumulo/fate/TStore.java |   7 +-
 .../java/org/apache/accumulo/fate/ZooStore.java    |  27 +-
 .../org/apache/accumulo/fate/util/AddressUtil.java |  24 +-
 .../apache/accumulo/fate/util/LoggingRunnable.java |   9 +-
 .../java/org/apache/accumulo/fate/util/Retry.java  |  47 +-
 .../apache/accumulo/fate/util/UtilWaitThread.java  |   8 +-
 .../fate/zookeeper/DistributedReadWriteLock.java   |  20 +-
 .../apache/accumulo/fate/zookeeper/IZooReader.java |   9 +-
 .../accumulo/fate/zookeeper/IZooReaderWriter.java  |  24 +-
 .../apache/accumulo/fate/zookeeper/ZooCache.java   |  63 +-
 .../accumulo/fate/zookeeper/ZooCacheFactory.java   |   7 +-
 .../apache/accumulo/fate/zookeeper/ZooLock.java    |  49 +-
 .../accumulo/fate/zookeeper/ZooQueueLock.java      |   3 +-
 .../apache/accumulo/fate/zookeeper/ZooReader.java  |  42 +-
 .../accumulo/fate/zookeeper/ZooReaderWriter.java   |  43 +-
 .../accumulo/fate/zookeeper/ZooReservation.java    |  12 +-
 .../apache/accumulo/fate/zookeeper/ZooSession.java |  18 +-
 .../apache/accumulo/fate/zookeeper/ZooUtil.java    |  72 +-
 .../org/apache/accumulo/fate/AgeOffStoreTest.java  |  12 +-
 .../apache/accumulo/fate/ReadOnlyStoreTest.java    |   6 +-
 .../java/org/apache/accumulo/fate/SimpleStore.java |   6 +-
 .../apache/accumulo/fate/util/AddressUtilTest.java |  15 +-
 .../org/apache/accumulo/fate/util/RetryTest.java   |  29 +-
 .../accumulo/fate/zookeeper/ZooCacheTest.java      |  24 +-
 .../zookeeper/ZooKeeperConnectionInfoTest.java     |   7 +-
 .../fate/zookeeper/ZooReaderWriterTest.java        |  17 +-
 .../iteratortest/IteratorTestCaseFinder.java       |   9 +-
 .../accumulo/iteratortest/IteratorTestInput.java   |  26 +-
 .../accumulo/iteratortest/IteratorTestOutput.java  |  11 +-
 .../accumulo/iteratortest/IteratorTestReport.java  |   6 +-
 .../accumulo/iteratortest/IteratorTestRunner.java  |  14 +-
 .../accumulo/iteratortest/IteratorTestUtil.java    |   3 +-
 .../iteratortest/SimpleKVReusingIterator.java      |   9 +-
 .../environments/SimpleIteratorEnvironment.java    |   3 +-
 .../junit4/BaseJUnit4IteratorTest.java             |  12 +-
 .../testcases/InstantiationTestCase.java           |   3 +-
 .../testcases/IsolatedDeepCopiesTestCase.java      |  24 +-
 .../iteratortest/testcases/IteratorTestCase.java   |   7 +-
 .../testcases/MultipleHasTopCalls.java             |  13 +-
 .../testcases/OutputVerifyingTestCase.java         |   3 +-
 .../iteratortest/testcases/ReSeekTestCase.java     |  20 +-
 .../iteratortest/testcases/YieldingTestCase.java   |  24 +-
 .../iteratortest/framework/JUnitFrameworkTest.java |   3 +-
 .../maven/plugin/AbstractAccumuloMojo.java         |   6 +-
 .../apache/accumulo/maven/plugin/StartMojo.java    |  24 +-
 .../org/apache/accumulo/maven/plugin/StopMojo.java |   6 +-
 .../apache/accumulo/cluster/AccumuloCluster.java   |   6 +-
 .../apache/accumulo/cluster/ClusterControl.java    |   9 +-
 .../org/apache/accumulo/cluster/ClusterUser.java   |   6 +-
 .../org/apache/accumulo/cluster/ClusterUsers.java  |   3 +-
 .../org/apache/accumulo/cluster/RemoteShell.java   |  12 +-
 .../accumulo/cluster/RemoteShellOptions.java       |   5 +-
 .../standalone/StandaloneAccumuloCluster.java      |  23 +-
 .../standalone/StandaloneClusterControl.java       |  54 +-
 .../apache/accumulo/minicluster/MemoryUnit.java    |   5 +-
 .../accumulo/minicluster/MiniAccumuloCluster.java  |  18 +-
 .../accumulo/minicluster/MiniAccumuloConfig.java   |  18 +-
 .../accumulo/minicluster/MiniAccumuloInstance.java |   7 +-
 .../accumulo/minicluster/MiniAccumuloRunner.java   |  64 +-
 .../apache/accumulo/minicluster/ServerType.java    |   7 +-
 .../impl/MiniAccumuloClusterControl.java           |  16 +-
 .../minicluster/impl/MiniAccumuloClusterImpl.java  | 128 ++--
 .../minicluster/impl/MiniAccumuloConfigImpl.java   |  76 +-
 .../minicluster/impl/ProcessReference.java         |   3 +-
 .../minicluster/impl/ZooKeeperBindException.java   |   3 +-
 .../standalone/StandaloneAccumuloClusterTest.java  |   6 +-
 .../standalone/StandaloneClusterControlTest.java   |  15 +-
 .../MiniAccumuloClusterExistingZooKeepersTest.java |  13 +-
 .../MiniAccumuloClusterStartStopTest.java          |   3 +-
 .../minicluster/MiniAccumuloClusterTest.java       |  20 +-
 .../minicluster/impl/CleanShutdownMacTest.java     |   6 +-
 .../impl/MiniAccumuloClusterImplTest.java          |  18 +-
 .../impl/MiniAccumuloConfigImplTest.java           |  15 +-
 .../main/java/org/apache/accumulo/proxy/Proxy.java |  59 +-
 .../org/apache/accumulo/proxy/ProxyServer.java     | 769 +++++++++++++-------
 .../main/java/org/apache/accumulo/proxy/Util.java  |  15 +-
 .../org/apache/accumulo/proxy/ProxyServerTest.java |   6 +-
 .../java/org/apache/accumulo/server/Accumulo.java  |  67 +-
 .../accumulo/server/AccumuloServerContext.java     |  27 +-
 .../accumulo/server/GarbageCollectionLogger.java   |   9 +-
 .../accumulo/server/HighlyAvailableService.java    |   4 +-
 .../apache/accumulo/server/ServerConstants.java    |  44 +-
 .../accumulo/server/client/BulkImporter.java       | 170 +++--
 .../server/client/ClientServiceHandler.java        | 181 +++--
 .../accumulo/server/client/HdfsZooInstance.java    |  27 +-
 .../accumulo/server/conf/NamespaceConfWatcher.java |  13 +-
 .../server/conf/NamespaceConfiguration.java        |  12 +-
 .../server/conf/ServerConfigurationFactory.java    |  18 +-
 .../accumulo/server/conf/TableConfWatcher.java     |  13 +-
 .../accumulo/server/conf/TableConfiguration.java   |  15 +-
 .../server/conf/ZooCachePropertyAccessor.java      |  15 +-
 .../accumulo/server/conf/ZooConfiguration.java     |   6 +-
 .../server/conf/ZooConfigurationFactory.java       |  15 +-
 .../server/constraints/MetadataConstraints.java    |  60 +-
 .../accumulo/server/data/ServerColumnUpdate.java   |   3 +-
 .../accumulo/server/data/ServerMutation.java       |   6 +-
 .../org/apache/accumulo/server/fs/FileRef.java     |   8 +-
 .../accumulo/server/fs/PerTableVolumeChooser.java  |  66 +-
 .../accumulo/server/fs/PreferredVolumeChooser.java |  61 +-
 .../accumulo/server/fs/RandomVolumeChooser.java    |   3 +-
 .../org/apache/accumulo/server/fs/ViewFSUtils.java |   6 +-
 .../apache/accumulo/server/fs/VolumeChooser.java   |  12 +-
 .../apache/accumulo/server/fs/VolumeManager.java   |  18 +-
 .../accumulo/server/fs/VolumeManagerImpl.java      |  64 +-
 .../org/apache/accumulo/server/fs/VolumeUtil.java  |  56 +-
 .../apache/accumulo/server/init/Initialize.java    | 346 +++++----
 .../server/iterators/MetadataBulkLoadFilter.java   |   3 +-
 .../apache/accumulo/server/log/SortedLogState.java |   5 +-
 .../accumulo/server/log/WalStateManager.java       |   6 +-
 .../accumulo/server/master/LiveTServerSet.java     |  81 ++-
 .../master/balancer/ChaoticLoadBalancer.java       |  22 +-
 .../master/balancer/DefaultLoadBalancer.java       |  33 +-
 .../server/master/balancer/GroupBalancer.java      |  93 ++-
 .../balancer/HostRegexTableLoadBalancer.java       | 130 ++--
 .../server/master/balancer/RegexGroupBalancer.java |  35 +-
 .../server/master/balancer/TableLoadBalancer.java  |  25 +-
 .../server/master/balancer/TabletBalancer.java     |  86 ++-
 .../server/master/recovery/HadoopLogCloser.java    |   3 +-
 .../accumulo/server/master/state/CurrentState.java |   3 +-
 .../accumulo/server/master/state/MergeInfo.java    |   3 +-
 .../accumulo/server/master/state/MergeState.java   |   6 +-
 .../server/master/state/MetaDataStateStore.java    |  21 +-
 .../server/master/state/MetaDataTableScanner.java  |  20 +-
 .../server/master/state/RootTabletStateStore.java  |   3 +-
 .../server/master/state/TServerInstance.java       |   6 +-
 .../server/master/state/TabletLocationState.java   |  26 +-
 .../master/state/TabletStateChangeIterator.java    |  15 +-
 .../server/master/state/TabletStateStore.java      |  46 +-
 .../server/master/state/ZooTabletStateStore.java   |  21 +-
 .../master/tableOps/UserCompactionConfig.java      |   3 +-
 .../server/metrics/AbstractMetricsImpl.java        |  16 +-
 .../server/metrics/MetricsConfiguration.java       |  15 +-
 .../server/metrics/MetricsSystemHelper.java        |   3 +-
 .../accumulo/server/metrics/ThriftMetrics.java     |   3 +-
 .../accumulo/server/monitor/DedupedLogEvent.java   |   6 +-
 .../apache/accumulo/server/monitor/LogService.java |   6 +-
 .../accumulo/server/problems/ProblemReport.java    |  27 +-
 .../server/problems/ProblemReportingIterator.java  |  19 +-
 .../accumulo/server/problems/ProblemReports.java   |  33 +-
 .../DistributedWorkQueueWorkAssignerHelper.java    |  22 +-
 .../replication/PrintReplicationRecords.java       |   6 +-
 .../accumulo/server/replication/ReplicaSystem.java |   6 +-
 .../server/replication/ReplicaSystemFactory.java   |  15 +-
 .../server/replication/ReplicaSystemHelper.java    |  10 +-
 .../server/replication/ReplicationUtil.java        |  33 +-
 .../server/replication/StatusCombiner.java         |  20 +-
 .../server/replication/StatusFormatter.java        |  10 +-
 .../accumulo/server/replication/StatusUtil.java    |  15 +-
 .../replication/ZooKeeperInitialization.java       |   6 +-
 .../server/rpc/ClientInfoProcessorFactory.java     |   3 +-
 .../server/rpc/CustomNonBlockingServer.java        |  25 +-
 .../HighlyAvailableServiceInvocationHandler.java   |   8 +-
 .../server/rpc/HighlyAvailableServiceWrapper.java  |  11 +-
 .../org/apache/accumulo/server/rpc/RpcWrapper.java |  30 +-
 .../server/rpc/SaslServerConnectionParams.java     |   9 +-
 .../rpc/SaslServerDigestCallbackHandler.java       |  12 +-
 .../rpc/TCredentialsUpdatingInvocationHandler.java |  67 +-
 .../server/rpc/TCredentialsUpdatingWrapper.java    |  13 +-
 .../apache/accumulo/server/rpc/TServerUtils.java   | 275 +++++---
 .../accumulo/server/rpc/ThriftServerType.java      |  10 +-
 .../apache/accumulo/server/rpc/TimedProcessor.java |   6 +-
 .../accumulo/server/rpc/UGIAssumingProcessor.java  |   6 +-
 .../server/security/AuditedSecurityOperation.java  | 177 +++--
 .../server/security/SecurityOperation.java         | 391 ++++++----
 .../accumulo/server/security/SecurityUtil.java     |  36 +-
 .../server/security/SystemCredentials.java         |  15 +-
 .../server/security/UserImpersonation.java         |  27 +-
 .../security/delegation/AuthenticationKey.java     |  12 +-
 .../delegation/AuthenticationTokenKeyManager.java  |  21 +-
 .../AuthenticationTokenSecretManager.java          |  36 +-
 .../ZooAuthenticationKeyDistributor.java           |  36 +-
 .../delegation/ZooAuthenticationKeyWatcher.java    |  24 +-
 .../server/security/handler/Authenticator.java     |  11 +-
 .../server/security/handler/Authorizor.java        |  14 +-
 .../security/handler/InsecureAuthenticator.java    |  14 +-
 .../security/handler/InsecurePermHandler.java      |  54 +-
 .../security/handler/KerberosAuthenticator.java    |  30 +-
 .../security/handler/KerberosAuthorizor.java       |  24 +-
 .../handler/KerberosPermissionHandler.java         |  91 ++-
 .../server/security/handler/PermissionHandler.java |  62 +-
 .../server/security/handler/ZKAuthenticator.java   |  29 +-
 .../server/security/handler/ZKAuthorizor.java      |  19 +-
 .../server/security/handler/ZKPermHandler.java     | 135 ++--
 .../server/security/handler/ZKSecurityTool.java    |  16 +-
 .../accumulo/server/tables/TableManager.java       | 160 +++--
 .../server/tablets/UniqueNameAllocator.java        |  26 +-
 .../tabletserver/LargestFirstMemoryManager.java    |  37 +-
 .../server/tabletserver/MemoryManager.java         |  14 +-
 .../accumulo/server/util/AccumuloStatus.java       |   3 +-
 .../org/apache/accumulo/server/util/Admin.java     |  96 ++-
 .../apache/accumulo/server/util/ChangeSecret.java  |  28 +-
 .../server/util/CheckForMetadataProblems.java      |  21 +-
 .../accumulo/server/util/CleanZookeeper.java       |  10 +-
 .../apache/accumulo/server/util/DefaultMap.java    |   3 +-
 .../apache/accumulo/server/util/DumpZookeeper.java |  12 +-
 .../accumulo/server/util/FileSystemMonitor.java    |   6 +-
 .../org/apache/accumulo/server/util/FileUtil.java  | 146 ++--
 .../accumulo/server/util/FindOfflineTablets.java   |  21 +-
 .../apache/accumulo/server/util/ListInstances.java |  23 +-
 .../accumulo/server/util/ListVolumesUsed.java      |  15 +-
 .../apache/accumulo/server/util/LocalityCheck.java |   9 +-
 .../accumulo/server/util/LoginProperties.java      |  12 +-
 .../accumulo/server/util/MasterMetadataUtil.java   |  95 ++-
 .../accumulo/server/util/MetadataTableUtil.java    | 285 +++++---
 .../accumulo/server/util/NamespacePropUtil.java    |  21 +-
 .../apache/accumulo/server/util/RandomWriter.java  |   6 +-
 .../accumulo/server/util/RandomizeVolumes.java     |  14 +-
 .../server/util/RemoveEntriesForMissingFiles.java  |  17 +-
 .../accumulo/server/util/ReplicationTableUtil.java |  30 +-
 .../accumulo/server/util/RestoreZookeeper.java     |   6 +-
 .../accumulo/server/util/SendLogToChainsaw.java    |  30 +-
 .../accumulo/server/util/SystemPropUtil.java       |  27 +-
 .../accumulo/server/util/TableDiskUsage.java       |  14 +-
 .../apache/accumulo/server/util/TableInfoUtil.java |   3 +-
 .../apache/accumulo/server/util/TablePropUtil.java |  18 +-
 .../accumulo/server/util/TabletIterator.java       |  32 +-
 .../accumulo/server/util/TabletServerLocks.java    |   3 +-
 .../server/util/VerifyTabletAssignments.java       |  22 +-
 .../apache/accumulo/server/util/ZooKeeperMain.java |  12 +-
 .../org/apache/accumulo/server/util/ZooZap.java    |   6 +-
 .../server/util/time/BaseRelativeTime.java         |   3 +-
 .../accumulo/server/util/time/SimpleTimer.java     |  21 +-
 .../server/zookeeper/DistributedWorkQueue.java     |  21 +-
 .../server/zookeeper/TransactionWatcher.java       |  21 +-
 .../apache/accumulo/server/zookeeper/ZooLock.java  |   3 +-
 .../accumulo/server/zookeeper/ZooQueueLock.java    |   3 +-
 .../accumulo/server/zookeeper/ZooReaderWriter.java |   3 +-
 .../server/zookeeper/ZooReaderWriterFactory.java   |   6 +-
 .../accumulo/server/AccumuloServerContextTest.java |  42 +-
 .../org/apache/accumulo/server/AccumuloTest.java   |   6 +-
 .../accumulo/server/ServerConstantsTest.java       |  51 +-
 .../org/apache/accumulo/server/ServerOptsTest.java |   3 +-
 .../accumulo/server/client/BulkImporterTest.java   |  52 +-
 .../server/conf/NamespaceConfigurationTest.java    |  27 +-
 .../conf/ServerConfigurationFactoryTest.java       |   3 +-
 .../server/conf/TableConfigurationTest.java        |  24 +-
 .../constraints/MetadataConstraintsTest.java       |  72 +-
 .../org/apache/accumulo/server/fs/FileRefTest.java |  72 +-
 .../apache/accumulo/server/fs/FileTypeTest.java    |  75 +-
 .../server/fs/PerTableVolumeChooserTest.java       |  33 +-
 .../server/fs/PreferredVolumeChooserTest.java      |  33 +-
 .../apache/accumulo/server/fs/ViewFSUtilsTest.java |  41 +-
 .../accumulo/server/fs/VolumeManagerImplTest.java  |  12 +-
 .../apache/accumulo/server/fs/VolumeUtilTest.java  | 153 ++--
 .../accumulo/server/init/InitializeTest.java       |  12 +-
 .../iterators/MetadataBulkLoadFilterTest.java      |   6 +-
 .../accumulo/server/master/LiveTServerSetTest.java |   6 +-
 .../BaseHostRegexTableLoadBalancerTest.java        |  96 ++-
 .../master/balancer/ChaoticLoadBalancerTest.java   |  18 +-
 .../master/balancer/DefaultLoadBalancerTest.java   |  29 +-
 .../server/master/balancer/GroupBalancerTest.java  |  45 +-
 ...tRegexTableLoadBalancerReconfigurationTest.java |  24 +-
 .../balancer/HostRegexTableLoadBalancerTest.java   |  80 ++-
 .../master/balancer/TableLoadBalancerTest.java     |  29 +-
 .../server/master/state/MergeInfoTest.java         |   3 +-
 .../server/problems/ProblemReportTest.java         |  36 +-
 .../server/replication/ReplicationUtilTest.java    |   6 +-
 .../server/replication/StatusCombinerTest.java     | 114 ++-
 .../server/replication/StatusUtilTest.java         |  15 +-
 .../replication/ZooKeeperInitializationTest.java   |  12 +-
 .../server/rpc/SaslDigestCallbackHandlerTest.java  |  15 +-
 .../server/rpc/SaslServerConnectionParamsTest.java |   3 +-
 .../TCredentialsUpdatingInvocationHandlerTest.java |  63 +-
 .../accumulo/server/rpc/ThriftServerTypeTest.java  |   3 +-
 .../server/security/SystemCredentialsTest.java     |  27 +-
 .../server/security/UserImpersonationTest.java     |  18 +-
 .../security/delegation/AuthenticationKeyTest.java |   9 +-
 .../AuthenticationTokenKeyManagerTest.java         |  32 +-
 .../AuthenticationTokenSecretManagerTest.java      |  99 ++-
 .../ZooAuthenticationKeyDistributorTest.java       |  70 +-
 .../ZooAuthenticationKeyWatcherTest.java           |  68 +-
 .../security/handler/ZKAuthenticatorTest.java      |   6 +-
 .../IllegalTableTransitionExceptionTest.java       |   6 +-
 .../org/apache/accumulo/server/util/AdminTest.java |  23 +-
 .../accumulo/server/util/DefaultMapTest.java       |   3 +-
 .../server/util/FileSystemMonitorTest.java         |  33 +-
 .../apache/accumulo/server/util/FileUtilTest.java  |  15 +-
 .../server/util/ReplicationTableUtilTest.java      |  21 +-
 .../accumulo/server/util/TServerUtilsTest.java     |  47 +-
 .../server/util/time/BaseRelativeTimeTest.java     |   3 +-
 .../accumulo/gc/GarbageCollectWriteAheadLogs.java  |  43 +-
 .../accumulo/gc/GarbageCollectionAlgorithm.java    |  60 +-
 .../accumulo/gc/GarbageCollectionEnvironment.java  |  37 +-
 .../apache/accumulo/gc/SimpleGarbageCollector.java | 108 ++-
 .../replication/CloseWriteAheadLogReferences.java  |  30 +-
 .../gc/GarbageCollectWriteAheadLogsTest.java       |  60 +-
 .../apache/accumulo/gc/GarbageCollectionTest.java  |  47 +-
 .../accumulo/gc/SimpleGarbageCollectorTest.java    |  30 +-
 .../apache/accumulo/master/FateServiceHandler.java | 248 ++++---
 .../java/org/apache/accumulo/master/Master.java    | 298 +++++---
 .../master/MasterClientServiceHandler.java         | 150 ++--
 .../org/apache/accumulo/master/MasterTime.java     |  21 +-
 .../apache/accumulo/master/TabletGroupWatcher.java | 145 ++--
 .../master/metrics/Metrics2ReplicationMetrics.java |  23 +-
 .../master/metrics/ReplicationMetrics.java         |   4 +-
 .../master/metrics/ReplicationMetricsMBean.java    |  14 +-
 .../accumulo/master/recovery/RecoveryManager.java  |  35 +-
 .../DistributedWorkQueueWorkAssigner.java          |  31 +-
 .../master/replication/FinishedWorkUpdater.java    |  32 +-
 .../replication/MasterReplicationCoordinator.java  |  23 +-
 .../RemoveCompleteReplicationRecords.java          |  30 +-
 .../master/replication/ReplicationDriver.java      |   6 +-
 .../master/replication/SequentialWorkAssigner.java |  30 +-
 .../accumulo/master/replication/StatusMaker.java   |  34 +-
 .../master/replication/UnorderedWorkAssigner.java  |  26 +-
 .../accumulo/master/replication/WorkMaker.java     |   9 +-
 .../apache/accumulo/master/state/MergeStats.java   |  51 +-
 .../apache/accumulo/master/state/SetGoalState.java |   8 +-
 .../accumulo/master/tableOps/BulkImport.java       |  35 +-
 .../master/tableOps/CancelCompactions.java         |   7 +-
 .../accumulo/master/tableOps/ChangeTableState.java |   6 +-
 .../apache/accumulo/master/tableOps/ChooseDir.java |   6 +-
 .../apache/accumulo/master/tableOps/CleanUp.java   |  27 +-
 .../master/tableOps/CleanUpBulkImport.java         |   3 +-
 .../accumulo/master/tableOps/CloneMetadata.java    |  14 +-
 .../accumulo/master/tableOps/ClonePermissions.java |   9 +-
 .../accumulo/master/tableOps/CloneTable.java       |  10 +-
 .../accumulo/master/tableOps/CloneZookeeper.java   |   9 +-
 .../accumulo/master/tableOps/CompactRange.java     |  35 +-
 .../accumulo/master/tableOps/CompactionDriver.java |  26 +-
 .../accumulo/master/tableOps/CopyFailed.java       |  16 +-
 .../accumulo/master/tableOps/CreateImportDir.java  |   3 +-
 .../accumulo/master/tableOps/CreateNamespace.java  |   3 +-
 .../accumulo/master/tableOps/CreateTable.java      |   3 +-
 .../accumulo/master/tableOps/DeleteTable.java      |   3 +-
 .../accumulo/master/tableOps/ExportTable.java      |   3 +-
 .../accumulo/master/tableOps/FinishCloneTable.java |   9 +-
 .../master/tableOps/FinishCreateNamespace.java     |   3 +-
 .../master/tableOps/FinishCreateTable.java         |   3 +-
 .../master/tableOps/FinishImportTable.java         |   3 +-
 .../master/tableOps/ImportPopulateZookeeper.java   |  16 +-
 .../master/tableOps/ImportSetupPermissions.java    |   6 +-
 .../accumulo/master/tableOps/ImportTable.java      |   9 +-
 .../apache/accumulo/master/tableOps/LoadFiles.java |  23 +-
 .../master/tableOps/MapImportFileNames.java        |   5 +-
 .../master/tableOps/MoveExportedFiles.java         |  10 +-
 .../accumulo/master/tableOps/PopulateMetadata.java |   6 +-
 .../master/tableOps/PopulateMetadataTable.java     |  48 +-
 .../master/tableOps/PopulateZookeeper.java         |   6 +-
 .../tableOps/PopulateZookeeperWithNamespace.java   |  12 +-
 .../accumulo/master/tableOps/RenameNamespace.java  |  10 +-
 .../accumulo/master/tableOps/RenameTable.java      |  21 +-
 .../master/tableOps/SetupNamespacePermissions.java |   3 +-
 .../accumulo/master/tableOps/SetupPermissions.java |   6 +-
 .../accumulo/master/tableOps/TableRangeOp.java     |  13 +-
 .../accumulo/master/tableOps/TableRangeOpWait.java |  18 +-
 .../org/apache/accumulo/master/tableOps/Utils.java |  65 +-
 .../accumulo/master/tableOps/WriteExportFiles.java |  64 +-
 .../master/tserverOps/ShutdownTServer.java         |   6 +-
 .../org/apache/accumulo/master/util/FateAdmin.java |   4 +-
 .../accumulo/master/util/TableValidators.java      |  11 +-
 .../metrics/Metrics2ReplicationMetricsTest.java    |   3 +-
 ...DistributedWorkQueueWorkAssignerHelperTest.java |   3 +-
 .../replication/SequentialWorkAssignerTest.java    |  26 +-
 .../replication/UnorderedWorkAssignerTest.java     |  20 +-
 .../accumulo/master/replication/WorkMakerTest.java |   6 +-
 .../master/state/RootTabletStateStoreTest.java     |   3 +-
 .../accumulo/master/tableOps/ImportTableTest.java  |   9 +-
 .../apache/accumulo/monitor/EmbeddedWebServer.java |   9 +-
 .../java/org/apache/accumulo/monitor/Monitor.java  | 100 ++-
 .../apache/accumulo/monitor/ZooKeeperStatus.java   |   6 +-
 .../apache/accumulo/monitor/rest/XMLResource.java  |   3 +-
 .../rest/bulkImports/BulkImportResource.java       |  10 +-
 .../TabletServerBulkImportInformation.java         |   3 +-
 .../accumulo/monitor/rest/logs/LogResource.java    |   7 +-
 .../monitor/rest/master/MasterInformation.java     |  11 +-
 .../monitor/rest/master/MasterResource.java        |  23 +-
 .../rest/problems/ProblemDetailInformation.java    |   3 +-
 .../rest/problems/ProblemSummaryInformation.java   |   3 +-
 .../monitor/rest/problems/ProblemsResource.java    |  43 +-
 .../rest/replication/ReplicationInformation.java   |   3 +-
 .../rest/replication/ReplicationResource.java      |  18 +-
 .../rest/statistics/StatisticsResource.java        |   3 +-
 .../monitor/rest/status/StatusInformation.java     |   3 +-
 .../monitor/rest/status/StatusResource.java        |   8 +-
 .../monitor/rest/tables/TableInformation.java      |   3 +-
 .../monitor/rest/tables/TablesResource.java        |  18 +-
 .../monitor/rest/trace/TraceInformation.java       |   3 +-
 .../monitor/rest/trace/TracesResource.java         |  31 +-
 .../rest/tservers/AllTimeTabletResults.java        |   4 +-
 .../monitor/rest/tservers/CurrentOperations.java   |   5 +-
 .../rest/tservers/CurrentTabletResults.java        |   3 +-
 .../accumulo/monitor/rest/tservers/ServerStat.java |   6 +-
 .../tservers/TabletServerDetailInformation.java    |   3 +-
 .../rest/tservers/TabletServerResource.java        |  89 ++-
 .../monitor/rest/tservers/TabletServerSummary.java |   3 +-
 .../tservers/TabletServerWithTableInformation.java |   3 +-
 .../monitor/util/AccumuloMonitorAppender.java      |  21 +-
 .../org/apache/accumulo/monitor/view/WebViews.java |  36 +-
 .../accumulo/monitor/ShowTraceLinkTypeTest.java    |   3 +-
 .../accumulo/monitor/ZooKeeperStatusTest.java      |   3 +-
 .../org/apache/accumulo/monitor/it/WebViewsIT.java |  32 +-
 .../rest/tservers/TabletServerInformationTest.java |   6 +-
 .../monitor/util/AccumuloMonitorAppenderTest.java  |  15 +-
 .../monitor/util/ParameterValidatorTest.java       |   9 +-
 .../apache/accumulo/tracer/AsyncSpanReceiver.java  |   9 +-
 .../apache/accumulo/tracer/SendSpansViaThrift.java |   3 +-
 .../java/org/apache/accumulo/tracer/SpanTree.java  |   3 +-
 .../java/org/apache/accumulo/tracer/TraceDump.java |  19 +-
 .../org/apache/accumulo/tracer/TraceFormatter.java |   6 +-
 .../org/apache/accumulo/tracer/TraceServer.java    |  85 ++-
 .../apache/accumulo/tracer/TraceTableStats.java    |  17 +-
 .../org/apache/accumulo/tracer/ZooTraceClient.java |   6 +-
 .../accumulo/tracer/AsyncSpanReceiverTest.java     |   9 +-
 .../org/apache/accumulo/tracer/TracerTest.java     |  16 +-
 .../apache/accumulo/tracer/ZooTraceClientTest.java |  12 +-
 .../accumulo/tserver/ActiveAssignmentRunnable.java |   9 +-
 .../apache/accumulo/tserver/CompactionQueue.java   |   6 +-
 .../accumulo/tserver/ConditionCheckerContext.java  |  30 +-
 .../accumulo/tserver/ConditionalMutationSet.java   |  15 +-
 .../org/apache/accumulo/tserver/FileManager.java   |  60 +-
 .../org/apache/accumulo/tserver/InMemoryMap.java   |  69 +-
 .../java/org/apache/accumulo/tserver/MemKey.java   |   3 +-
 .../accumulo/tserver/MemKeyConversionIterator.java |   3 +-
 .../java/org/apache/accumulo/tserver/MemValue.java |   3 +-
 .../org/apache/accumulo/tserver/NativeMap.java     |  92 ++-
 .../java/org/apache/accumulo/tserver/RowLocks.java |   6 +-
 .../tserver/TConstraintViolationException.java     |   3 +-
 .../tserver/TabletIteratorEnvironment.java         |  29 +-
 .../org/apache/accumulo/tserver/TabletServer.java  | 785 ++++++++++++++-------
 .../tserver/TabletServerResourceManager.java       | 119 ++--
 .../accumulo/tserver/TservConstraintEnv.java       |   4 +-
 .../org/apache/accumulo/tserver/WriteTracker.java  |   7 +-
 .../tserver/compaction/CompactionPlan.java         |   7 +-
 .../tserver/compaction/CompactionStrategy.java     |  49 +-
 .../compaction/DefaultCompactionStrategy.java      |   3 +-
 .../compaction/EverythingCompactionStrategy.java   |   3 +-
 .../tserver/compaction/MajorCompactionReason.java  |   5 +-
 .../tserver/compaction/MajorCompactionRequest.java |  62 +-
 .../compaction/TwoTierCompactionStrategy.java      |  27 +-
 .../strategies/ConfigurableCompactionStrategy.java |  46 +-
 .../TooManyDeletesCompactionStrategy.java          |  69 +-
 .../tserver/constraints/ConstraintChecker.java     |  15 +-
 .../tserver/data/ServerConditionalMutation.java    |   3 +-
 .../org/apache/accumulo/tserver/log/DfsLogger.java |  95 ++-
 .../org/apache/accumulo/tserver/log/LogSorter.java |  18 +-
 .../apache/accumulo/tserver/log/MultiReader.java   |   8 +-
 .../accumulo/tserver/log/SortedLogRecovery.java    |  38 +-
 .../accumulo/tserver/log/TabletServerLogger.java   |  69 +-
 .../apache/accumulo/tserver/logger/LogEvents.java  |   7 +-
 .../apache/accumulo/tserver/logger/LogFileKey.java |   6 +-
 .../accumulo/tserver/logger/LogFileValue.java      |   8 +-
 .../apache/accumulo/tserver/logger/LogReader.java  |   6 +-
 .../tserver/mastermessage/MasterMessage.java       |   3 +-
 .../tserver/mastermessage/SplitReportMessage.java  |   6 +-
 .../tserver/mastermessage/TabletStatusMessage.java |   3 +-
 .../metrics/Metrics2TabletServerMetrics.java       |  46 +-
 .../metrics/Metrics2TabletServerMinCMetrics.java   |   6 +-
 .../metrics/Metrics2TabletServerScanMetrics.java   |   6 +-
 .../metrics/Metrics2TabletServerUpdateMetrics.java |  30 +-
 .../tserver/metrics/TabletServerMBeanImpl.java     |   4 +-
 .../metrics/TabletServerMetricsFactory.java        |   3 +-
 .../tserver/metrics/TabletServerMinCMetrics.java   |  10 +-
 .../tserver/metrics/TabletServerScanMetrics.java   |  10 +-
 .../tserver/metrics/TabletServerUpdateMetrics.java |  11 +-
 .../tserver/replication/AccumuloReplicaSystem.java | 211 ++++--
 .../BatchWriterReplicationReplayer.java            |  41 +-
 .../tserver/replication/ReplicationProcessor.java  |  21 +-
 .../replication/ReplicationServicerHandler.java    |  23 +-
 .../tserver/replication/ReplicationWorker.java     |   9 +-
 .../apache/accumulo/tserver/scan/LookupTask.java   |  24 +-
 .../accumulo/tserver/scan/NextBatchTask.java       |  17 +-
 .../org/apache/accumulo/tserver/scan/ScanTask.java |   9 +-
 .../tserver/session/ConditionalSession.java        |   3 +-
 .../accumulo/tserver/session/MultiScanSession.java |   6 +-
 .../accumulo/tserver/session/ScanSession.java      |   5 +-
 .../accumulo/tserver/session/SessionManager.java   |  32 +-
 .../tserver/tablet/BulkImportCacheCleaner.java     |   3 +-
 .../accumulo/tserver/tablet/CompactionInfo.java    |   9 +-
 .../accumulo/tserver/tablet/CompactionRunner.java  |   3 +-
 .../accumulo/tserver/tablet/CompactionWatcher.java |  14 +-
 .../apache/accumulo/tserver/tablet/Compactor.java  |  50 +-
 .../accumulo/tserver/tablet/CountingIterator.java  |   3 +-
 .../accumulo/tserver/tablet/DatafileManager.java   | 115 ++-
 .../tserver/tablet/MinorCompactionTask.java        |  23 +-
 .../accumulo/tserver/tablet/MinorCompactor.java    |  68 +-
 .../apache/accumulo/tserver/tablet/RootFiles.java  |  30 +-
 .../accumulo/tserver/tablet/ScanDataSource.java    |  70 +-
 .../accumulo/tserver/tablet/ScanOptions.java       |   6 +-
 .../apache/accumulo/tserver/tablet/Scanner.java    |  22 +-
 .../org/apache/accumulo/tserver/tablet/Tablet.java | 549 ++++++++------
 .../apache/accumulo/tserver/tablet/TabletData.java |  13 +-
 .../accumulo/tserver/tablet/TabletMemory.java      |   3 +-
 .../accumulo/tserver/CheckTabletMetadataTest.java  |  24 +-
 .../apache/accumulo/tserver/InMemoryMapTest.java   |  55 +-
 .../tserver/LargestFirstMemoryManagerTest.java     |  85 ++-
 .../tserver/TabletServerSyncCheckTest.java         |  12 +-
 .../accumulo/tserver/TservConstraintEnvTest.java   |   9 +-
 .../compaction/DefaultCompactionStrategyTest.java  |  24 +-
 .../SizeLimitCompactionStrategyTest.java           |  12 +-
 .../compaction/TwoTierCompactionStrategyTest.java  |  19 +-
 .../ConfigurableCompactionStrategyTest.java        |  15 +-
 .../accumulo/tserver/log/MultiReaderTest.java      |   8 +-
 .../tserver/log/SortedLogRecoveryTest.java         | 215 ++++--
 .../tserver/log/TestUpgradePathForWALogs.java      |  16 +-
 .../accumulo/tserver/logger/LogFileTest.java       |  11 +-
 .../replication/AccumuloReplicaSystemTest.java     |  74 +-
 .../BatchWriterReplicationReplayerTest.java        |   6 +-
 .../replication/ReplicationProcessorTest.java      |   6 +-
 .../tserver/tablet/DatafileManagerTest.java        |  27 +-
 .../accumulo/tserver/tablet/RootFilesTest.java     |  12 +-
 .../apache/accumulo/tserver/tablet/TabletTest.java |   9 +-
 .../main/java/org/apache/accumulo/shell/Shell.java | 249 ++++---
 .../org/apache/accumulo/shell/ShellCompletor.java  |   3 +-
 .../org/apache/accumulo/shell/ShellOptionsJC.java  |  64 +-
 .../java/org/apache/accumulo/shell/ShellUtil.java  |   5 +-
 .../accumulo/shell/commands/AboutCommand.java      |   3 +-
 .../shell/commands/ActiveCompactionIterator.java   |  15 +-
 .../shell/commands/ActiveScanIterator.java         |  15 +-
 .../accumulo/shell/commands/AddAuthsCommand.java   |  12 +-
 .../accumulo/shell/commands/AddSplitsCommand.java  |   9 +-
 .../shell/commands/AuthenticateCommand.java        |   9 +-
 .../shell/commands/BulkImportListIterator.java     |   3 +-
 .../accumulo/shell/commands/ClearCommand.java      |   3 +-
 .../accumulo/shell/commands/CloneTableCommand.java |  20 +-
 .../accumulo/shell/commands/CompactCommand.java    |  53 +-
 .../accumulo/shell/commands/ConfigCommand.java     |  76 +-
 .../accumulo/shell/commands/ConstraintCommand.java |  40 +-
 .../shell/commands/CreateNamespaceCommand.java     |  12 +-
 .../shell/commands/CreateTableCommand.java         |  79 ++-
 .../accumulo/shell/commands/CreateUserCommand.java |  11 +-
 .../apache/accumulo/shell/commands/DUCommand.java  |  19 +-
 .../accumulo/shell/commands/DebugCommand.java      |  12 +-
 .../shell/commands/DeleteAuthsCommand.java         |   9 +-
 .../accumulo/shell/commands/DeleteCommand.java     |   8 +-
 .../accumulo/shell/commands/DeleteIterCommand.java |  27 +-
 .../accumulo/shell/commands/DeleteManyCommand.java |  14 +-
 .../shell/commands/DeleteNamespaceCommand.java     |  12 +-
 .../accumulo/shell/commands/DeleteRowsCommand.java |   9 +-
 .../shell/commands/DeleteScanIterCommand.java      |  15 +-
 .../shell/commands/DeleteShellIterCommand.java     |   6 +-
 .../shell/commands/DeleteTableCommand.java         |   3 +-
 .../accumulo/shell/commands/DropUserCommand.java   |  12 +-
 .../accumulo/shell/commands/EGrepCommand.java      |   9 +-
 .../accumulo/shell/commands/ExecfileCommand.java   |   6 +-
 .../shell/commands/ExportTableCommand.java         |   8 +-
 .../accumulo/shell/commands/FateCommand.java       |  28 +-
 .../accumulo/shell/commands/FlushCommand.java      |   6 +-
 .../accumulo/shell/commands/FormatterCommand.java  |  19 +-
 .../accumulo/shell/commands/GetAuthsCommand.java   |   6 +-
 .../accumulo/shell/commands/GetGroupsCommand.java  |   9 +-
 .../accumulo/shell/commands/GetSplitsCommand.java  |  33 +-
 .../accumulo/shell/commands/GrantCommand.java      |  37 +-
 .../accumulo/shell/commands/GrepCommand.java       |  12 +-
 .../accumulo/shell/commands/HelpCommand.java       |  21 +-
 .../accumulo/shell/commands/HiddenCommand.java     |  13 +-
 .../accumulo/shell/commands/HistoryCommand.java    |   6 +-
 .../shell/commands/ImportDirectoryCommand.java     |   7 +-
 .../shell/commands/ImportTableCommand.java         |   5 +-
 .../accumulo/shell/commands/InsertCommand.java     |  17 +-
 .../shell/commands/InterpreterCommand.java         |   6 +-
 .../accumulo/shell/commands/ListBulkCommand.java   |   6 +-
 .../shell/commands/ListCompactionsCommand.java     |   3 +-
 .../accumulo/shell/commands/ListIterCommand.java   |  39 +-
 .../accumulo/shell/commands/ListScansCommand.java  |   3 +-
 .../shell/commands/ListShellIterCommand.java       |  12 +-
 .../accumulo/shell/commands/MaxRowCommand.java     |   7 +-
 .../accumulo/shell/commands/MergeCommand.java      |  15 +-
 .../commands/NamespacePermissionsCommand.java      |   3 +-
 .../accumulo/shell/commands/NamespacesCommand.java |   9 +-
 .../accumulo/shell/commands/NoTableCommand.java    |   3 +-
 .../accumulo/shell/commands/OfflineCommand.java    |   6 +-
 .../accumulo/shell/commands/OnlineCommand.java     |   6 +-
 .../apache/accumulo/shell/commands/OptUtil.java    |  16 +-
 .../accumulo/shell/commands/PasswdCommand.java     |  15 +-
 .../accumulo/shell/commands/PingCommand.java       |   3 +-
 .../shell/commands/QuotedStringTokenizer.java      |  13 +-
 .../shell/commands/RenameNamespaceCommand.java     |   8 +-
 .../shell/commands/RenameTableCommand.java         |   8 +-
 .../accumulo/shell/commands/RevokeCommand.java     |  37 +-
 .../accumulo/shell/commands/ScanCommand.java       | 130 ++--
 .../accumulo/shell/commands/ScriptCommand.java     |   6 +-
 .../accumulo/shell/commands/SetAuthsCommand.java   |  12 +-
 .../accumulo/shell/commands/SetGroupsCommand.java  |   3 +-
 .../accumulo/shell/commands/SetIterCommand.java    |  98 ++-
 .../shell/commands/SetScanIterCommand.java         |  18 +-
 .../shell/commands/SetShellIterCommand.java        |  11 +-
 .../commands/ShellPluginConfigurationCommand.java  |  40 +-
 .../accumulo/shell/commands/SleepCommand.java      |   3 +-
 .../accumulo/shell/commands/SummariesCommand.java  |  10 +-
 .../shell/commands/SystemPermissionsCommand.java   |   3 +-
 .../accumulo/shell/commands/TableCommand.java      |   7 +-
 .../accumulo/shell/commands/TableOperation.java    |  21 +-
 .../shell/commands/TablePermissionsCommand.java    |   3 +-
 .../accumulo/shell/commands/TablesCommand.java     |  14 +-
 .../accumulo/shell/commands/TraceCommand.java      |  15 +-
 .../accumulo/shell/commands/UserCommand.java       |   6 +-
 .../shell/commands/UserPermissionsCommand.java     |  12 +-
 .../accumulo/shell/commands/UsersCommand.java      |   3 +-
 .../accumulo/shell/commands/WhoAmICommand.java     |   3 +-
 .../accumulo/shell/format/DeleterFormatter.java    |   9 +-
 .../org/apache/accumulo/shell/mock/MockShell.java  |   8 +-
 .../org/apache/accumulo/shell/ShellConfigTest.java |   6 +-
 .../accumulo/shell/ShellSetInstanceTest.java       |  18 +-
 .../java/org/apache/accumulo/shell/ShellTest.java  |  43 +-
 .../org/apache/accumulo/shell/ShellUtilTest.java   |   6 +-
 .../shell/commands/CompactCommandTest.java         |   3 +-
 .../shell/commands/DeleteAuthsCommandTest.java     |   9 +-
 .../shell/commands/DeleteManyCommandTest.java      |   3 +-
 .../shell/commands/DeleteRowsCommandTest.java      |   3 +-
 .../shell/commands/DeleteTableCommandTest.java     |   3 +-
 .../accumulo/shell/commands/FlushCommandTest.java  |   3 +-
 .../shell/commands/HistoryCommandTest.java         |   6 +-
 .../accumulo/shell/commands/MergeCommandTest.java  |   3 +-
 .../accumulo/shell/commands/ScanCommandTest.java   |   3 +-
 .../shell/commands/SetIterCommandTest.java         |  24 +-
 .../shell/format/DeleterFormatterTest.java         |  18 +-
 .../main/java/org/apache/accumulo/start/Main.java  |  57 +-
 .../java/org/apache/accumulo/start/TestMain.java   |   5 +-
 .../start/classloader/AccumuloClassLoader.java     |  38 +-
 .../vfs/AccumuloReloadingVFSClassLoader.java       |  17 +-
 .../classloader/vfs/AccumuloVFSClassLoader.java    |  54 +-
 .../start/classloader/vfs/ContextManager.java      |   9 +-
 .../vfs/PostDelegatingVFSClassLoader.java          |   6 +-
 .../classloader/vfs/UniqueFileReplicator.java      |   3 +-
 .../accumulo/start/spi/KeywordExecutable.java      |  18 +-
 .../test/categories/MiniClusterOnlyTests.java      |   3 +-
 .../accumulo/test/categories/MonitorTests.java     |   3 +-
 .../accumulo/test/categories/PerformanceTests.java |   8 +-
 .../categories/StandaloneCapableClusterTests.java  |   4 +-
 .../accumulo/test/categories/SunnyDayTests.java    |   4 +-
 .../accumulo/test/categories/package-info.java     |   1 -
 .../classloader/vfs/AccumuloClasspathTest.java     |   6 +-
 .../vfs/AccumuloReloadingVFSClassLoaderTest.java   |  76 +-
 .../vfs/AccumuloVFSClassLoaderTest.java            |  33 +-
 .../start/classloader/vfs/ContextManagerTest.java  |  12 +-
 .../accumulo/start/test/AccumuloDFSBase.java       |  10 +-
 .../accumulo/harness/AccumuloClusterHarness.java   |  74 +-
 .../apache/accumulo/harness/AccumuloITBase.java    |  28 +-
 .../harness/MiniClusterConfigurationCallback.java  |   3 +-
 .../accumulo/harness/MiniClusterHarness.java       | 108 ++-
 .../accumulo/harness/SharedMiniClusterBase.java    |  55 +-
 .../org/apache/accumulo/harness/TestingKdc.java    |   9 +-
 .../conf/AccumuloClusterPropertyConfiguration.java |  18 +-
 .../conf/AccumuloMiniClusterConfiguration.java     |   6 +-
 .../StandaloneAccumuloClusterConfiguration.java    |  54 +-
 .../accumulo/test/ArbitraryTablePropertiesIT.java  |  12 +-
 .../org/apache/accumulo/test/AuditMessageIT.java   | 234 +++---
 .../accumulo/test/BadDeleteMarkersCreatedIT.java   |   6 +-
 .../accumulo/test/BatchWriterInTabletServerIT.java |  19 +-
 .../apache/accumulo/test/BatchWriterIterator.java  |  50 +-
 .../accumulo/test/BulkImportMonitoringIT.java      |  10 +-
 .../accumulo/test/BulkImportSequentialRowsIT.java  |  12 +-
 .../java/org/apache/accumulo/test/CleanWalIT.java  |   6 +-
 .../apache/accumulo/test/ClientSideIteratorIT.java |   9 +-
 .../java/org/apache/accumulo/test/CloneIT.java     |  30 +-
 .../accumulo/test/CompactionRateLimitingIT.java    |  10 +-
 .../apache/accumulo/test/ConditionalWriterIT.java  | 311 +++++---
 .../test/ConfigurableMajorCompactionIT.java        |   3 +-
 .../org/apache/accumulo/test/CreateRFiles.java     |  11 +-
 .../apache/accumulo/test/CreateRandomRFile.java    |   3 +-
 .../accumulo/test/DetectDeadTabletServersIT.java   |   3 +-
 .../org/apache/accumulo/test/DumpConfigIT.java     |  10 +-
 .../accumulo/test/EstimateInMemMapOverhead.java    |   6 +-
 .../org/apache/accumulo/test/ExistingMacIT.java    |  22 +-
 .../accumulo/test/FaultyConditionalWriter.java     |   6 +-
 .../org/apache/accumulo/test/FileArchiveIT.java    |  33 +-
 .../java/org/apache/accumulo/test/FindMaxIT.java   |  30 +-
 .../apache/accumulo/test/GarbageCollectWALIT.java  |   3 +-
 .../accumulo/test/GenerateSequentialRFile.java     |   6 +-
 .../apache/accumulo/test/GetFileInfoBulkIT.java    |   7 +-
 .../org/apache/accumulo/test/GetMasterStats.java   |   3 +-
 .../org/apache/accumulo/test/HardListIterator.java |  30 +-
 .../org/apache/accumulo/test/IMMLGBenchmark.java   |  19 +-
 .../org/apache/accumulo/test/ImportExportIT.java   |  30 +-
 .../org/apache/accumulo/test/InMemoryMapIT.java    |  81 ++-
 .../accumulo/test/InMemoryMapMemoryUsageTest.java  |   3 +-
 .../accumulo/test/InterruptibleScannersIT.java     |   6 +-
 .../accumulo/test/IsolationAndDeepCopyIT.java      |   9 +-
 .../apache/accumulo/test/KeyValueEqualityIT.java   |  10 +-
 .../org/apache/accumulo/test/LargeSplitRowIT.java  |  48 +-
 .../java/org/apache/accumulo/test/LocatorIT.java   |  16 +-
 .../java/org/apache/accumulo/test/ManySplitIT.java |   3 +-
 .../test/MasterRepairsDualAssignmentIT.java        |   6 +-
 .../org/apache/accumulo/test/MemoryUsageTest.java  |   8 +-
 .../accumulo/test/MetaConstraintRetryIT.java       |   3 +-
 .../apache/accumulo/test/MetaGetsReadersIT.java    |   3 +-
 .../java/org/apache/accumulo/test/MetaSplitIT.java |   9 +-
 .../test/MissingWalHeaderCompletesRecoveryIT.java  |  33 +-
 .../accumulo/test/MultiTableBatchWriterIT.java     |  12 +-
 .../apache/accumulo/test/MultiTableRecoveryIT.java |   3 +-
 .../org/apache/accumulo/test/NamespacesIT.java     | 155 ++--
 .../accumulo/test/NativeMapConcurrencyTest.java    |   9 +-
 .../accumulo/test/NativeMapPerformanceTest.java    |  18 +-
 .../apache/accumulo/test/NativeMapStressTest.java  |  29 +-
 .../accumulo/test/NewTableConfigurationIT.java     | 217 ++++--
 .../org/apache/accumulo/test/NullBatchWriter.java  |   3 +-
 .../org/apache/accumulo/test/OrIteratorIT.java     |  21 +-
 .../apache/accumulo/test/QueryMetadataTable.java   |   6 +-
 .../accumulo/test/RewriteTabletDirectoriesIT.java  |  24 +-
 .../java/org/apache/accumulo/test/SampleIT.java    |  56 +-
 .../org/apache/accumulo/test/ShellConfigIT.java    |  21 +-
 .../org/apache/accumulo/test/ShellServerIT.java    | 235 +++---
 .../org/apache/accumulo/test/SplitRecoveryIT.java  |   9 +-
 .../accumulo/test/TableConfigurationUpdateIT.java  |  13 +-
 .../apache/accumulo/test/TableOperationsIT.java    |  50 +-
 .../org/apache/accumulo/test/TestBinaryRows.java   |  37 +-
 .../java/org/apache/accumulo/test/TestIngest.java  |  43 +-
 .../apache/accumulo/test/TestMultiTableIngest.java |   9 +-
 .../apache/accumulo/test/TestRandomDeletes.java    |  19 +-
 .../apache/accumulo/test/TextMemoryUsageTest.java  |   4 +-
 .../ThriftServerBindsBeforeZooKeeperLockIT.java    |  30 +-
 .../org/apache/accumulo/test/TotalQueuedIT.java    |  17 +-
 .../test/TracerRecoversAfterOfflineTableIT.java    |   3 +-
 .../apache/accumulo/test/TransportCachingIT.java   |   9 +-
 .../java/org/apache/accumulo/test/UnusedWALIT.java |   9 +-
 .../accumulo/test/UserCompactionStrategyIT.java    |  57 +-
 .../java/org/apache/accumulo/test/UsersIT.java     |   9 +-
 .../org/apache/accumulo/test/VerifyIngest.java     |  39 +-
 .../accumulo/test/VerifySerialRecoveryIT.java      |   3 +-
 .../accumulo/test/VolumeChooserFailureIT.java      |  27 +-
 .../org/apache/accumulo/test/VolumeChooserIT.java  | 105 ++-
 .../java/org/apache/accumulo/test/VolumeIT.java    |  71 +-
 .../org/apache/accumulo/test/WaitForBalanceIT.java |   9 +-
 .../org/apache/accumulo/test/WrongTabletTest.java  |   5 +-
 .../org/apache/accumulo/test/YieldScannersIT.java  |  30 +-
 .../test/constraints/NumericValueConstraint.java   |   3 +-
 .../accumulo/test/functional/AddSplitIT.java       |   3 +-
 .../accumulo/test/functional/AuthsIterator.java    |   3 +-
 .../accumulo/test/functional/BackupMasterIT.java   |   3 +-
 .../test/functional/BadIteratorMincIT.java         |   3 +-
 .../functional/BalanceAfterCommsFailureIT.java     |  16 +-
 .../BalanceInPresenceOfOfflineTableIT.java         |  19 +-
 .../accumulo/test/functional/BatchScanSplitIT.java |   9 +-
 .../test/functional/BatchWriterFlushIT.java        |  15 +-
 .../accumulo/test/functional/BigRootTabletIT.java  |   9 +-
 .../accumulo/test/functional/BloomFilterIT.java    |  30 +-
 .../accumulo/test/functional/BulkFileIT.java       |  18 +-
 .../apache/accumulo/test/functional/BulkIT.java    |  11 +-
 .../test/functional/BulkSplitOptimizationIT.java   |   9 +-
 .../test/functional/ChaoticBalancerIT.java         |   6 +-
 .../accumulo/test/functional/ClassLoaderIT.java    |   9 +-
 .../apache/accumulo/test/functional/CleanUpIT.java |  14 +-
 .../accumulo/test/functional/CloneTestIT.java      |  26 +-
 .../accumulo/test/functional/CombinerIT.java       |   3 +-
 .../accumulo/test/functional/CompactionIT.java     |   3 +-
 .../accumulo/test/functional/ConcurrencyIT.java    |   8 +-
 .../test/functional/ConcurrentDeleteTableIT.java   |   3 +-
 .../test/functional/ConfigurableCompactionIT.java  |  21 +-
 .../test/functional/ConfigurableMacBase.java       |  39 +-
 .../accumulo/test/functional/ConnectorIT.java      |   6 +-
 .../accumulo/test/functional/ConstraintIT.java     |  63 +-
 .../accumulo/test/functional/CreateAndUseIT.java   |   3 +-
 .../accumulo/test/functional/CredentialsIT.java    |   6 +-
 .../test/functional/DeleteEverythingIT.java        |   6 +-
 .../apache/accumulo/test/functional/DeleteIT.java  |  15 +-
 .../accumulo/test/functional/DeleteRowsIT.java     |  10 +-
 .../accumulo/test/functional/DropModIter.java      |   6 +-
 .../accumulo/test/functional/DurabilityIT.java     |   3 +-
 .../test/functional/DynamicThreadPoolsIT.java      |   3 +-
 .../test/functional/FunctionalTestUtils.java       |  36 +-
 .../test/functional/GarbageCollectorIT.java        |  18 +-
 .../test/functional/HalfDeadTServerIT.java         |  16 +-
 .../accumulo/test/functional/KerberosIT.java       | 222 +++---
 .../accumulo/test/functional/KerberosProxyIT.java  | 172 +++--
 .../test/functional/KerberosRenewalIT.java         |  44 +-
 .../accumulo/test/functional/LargeRowIT.java       |  18 +-
 .../test/functional/LateLastContactIT.java         |   3 +-
 .../accumulo/test/functional/LogicalTimeIT.java    |  62 +-
 .../accumulo/test/functional/MapReduceIT.java      |  13 +-
 .../test/functional/MasterAssignmentIT.java        |   6 +-
 .../apache/accumulo/test/functional/MaxOpenIT.java |   9 +-
 .../apache/accumulo/test/functional/MergeIT.java   |  64 +-
 .../test/functional/MetadataMaxFilesIT.java        |   3 +-
 .../accumulo/test/functional/MetadataSplitIT.java  |   3 +-
 .../accumulo/test/functional/MonitorSslIT.java     |  30 +-
 .../accumulo/test/functional/NativeMapIT.java      |  47 +-
 .../accumulo/test/functional/PermissionsIT.java    | 188 +++--
 .../accumulo/test/functional/ReadWriteIT.java      |  96 ++-
 .../test/functional/RecoveryWithEmptyRFileIT.java  |  14 +-
 .../test/functional/RegexGroupBalanceIT.java       |  23 +-
 .../apache/accumulo/test/functional/RestartIT.java |  37 +-
 .../accumulo/test/functional/RestartStressIT.java  |   8 +-
 .../apache/accumulo/test/functional/ScanIdIT.java  |  53 +-
 .../accumulo/test/functional/ScanIteratorIT.java   |  40 +-
 .../accumulo/test/functional/ScanRangeIT.java      |  18 +-
 .../test/functional/ScanSessionTimeOutIT.java      |   3 +-
 .../accumulo/test/functional/ScannerContextIT.java |  27 +-
 .../apache/accumulo/test/functional/ScannerIT.java |   6 +-
 .../test/functional/SessionBlockVerifyIT.java      |  18 +-
 .../test/functional/SessionDurabilityIT.java       |   3 +-
 .../accumulo/test/functional/ShutdownIT.java       |  28 +-
 .../test/functional/SimpleBalancerFairnessIT.java  |  10 +-
 .../accumulo/test/functional/SlowIterator.java     |   6 +-
 .../test/functional/SparseColumnFamilyIT.java      |   3 +-
 .../apache/accumulo/test/functional/SplitIT.java   |  16 +-
 .../accumulo/test/functional/SplitRecoveryIT.java  |  76 +-
 .../org/apache/accumulo/test/functional/SslIT.java |  13 +-
 .../apache/accumulo/test/functional/SummaryIT.java | 166 +++--
 .../test/functional/TableChangeStateIT.java        |  93 ++-
 .../apache/accumulo/test/functional/TabletIT.java  |   6 +-
 .../functional/TabletStateChangeIteratorIT.java    |  76 +-
 .../apache/accumulo/test/functional/TimeoutIT.java |   3 +-
 .../accumulo/test/functional/TooManyDeletesIT.java |  15 +-
 .../accumulo/test/functional/VisibilityIT.java     |  33 +-
 .../accumulo/test/functional/WALSunnyDayIT.java    |  24 +-
 .../test/functional/WatchTheWatchCountIT.java      |   7 +-
 .../accumulo/test/functional/WriteLotsIT.java      |   3 +-
 .../accumulo/test/functional/YieldingIterator.java |  27 +-
 .../accumulo/test/functional/ZombieTServer.java    |  26 +-
 .../accumulo/test/functional/ZooCacheIT.java       |   6 +-
 .../CloseWriteAheadLogReferencesIT.java            |  45 +-
 .../test/mapred/AccumuloFileOutputFormatIT.java    |  21 +-
 .../test/mapred/AccumuloInputFormatIT.java         |  19 +-
 .../mapred/AccumuloMultiTableInputFormatIT.java    |   9 +-
 .../test/mapred/AccumuloOutputFormatIT.java        |  15 +-
 .../test/mapred/AccumuloRowInputFormatIT.java      |  18 +-
 .../apache/accumulo/test/mapred/TokenFileIT.java   |  12 +-
 .../test/mapreduce/AccumuloFileOutputFormatIT.java |  33 +-
 .../test/mapreduce/AccumuloInputFormatIT.java      |  81 ++-
 .../mapreduce/AccumuloMultiTableInputFormatIT.java |  12 +-
 .../test/mapreduce/AccumuloOutputFormatIT.java     |   9 +-
 .../test/mapreduce/AccumuloRowInputFormatIT.java   |  21 +-
 .../apache/accumulo/test/mapreduce/RowHash.java    |   3 +-
 .../accumulo/test/mapreduce/TokenFileIT.java       |  12 +-
 .../apache/accumulo/test/master/MergeStateIT.java  |  32 +-
 .../accumulo/test/master/SuspendedTabletsIT.java   |  47 +-
 .../test/mrit/IntegrationTestMapReduce.java        |  19 +-
 .../test/performance/ContinuousIngest.java         |  41 +-
 .../accumulo/test/performance/ContinuousOpts.java  |  15 +-
 .../accumulo/test/performance/NullTserver.java     | 110 ++-
 .../test/performance/RollWALPerformanceIT.java     |   5 +-
 .../performance/metadata/FastBulkImportIT.java     |   3 +-
 .../metadata/MetadataBatchScanTest.java            |  19 +-
 .../test/performance/scan/CollectTabletStats.java  |  84 ++-
 .../accumulo/test/proxy/ProxyDurabilityIT.java     |   9 +-
 .../accumulo/test/proxy/SimpleProxyBase.java       | 525 +++++++++-----
 .../accumulo/test/proxy/TestProxyClient.java       |  17 +-
 .../test/proxy/TestProxyInstanceOperations.java    |  10 +-
 .../test/proxy/TestProxyNamespaceOperations.java   |  39 +-
 .../accumulo/test/proxy/TestProxyReadWrite.java    |  54 +-
 .../test/proxy/TestProxySecurityOperations.java    |  26 +-
 .../test/proxy/TestProxyTableOperations.java       |  24 +-
 .../test/replication/CyclicReplicationIT.java      |  88 ++-
 .../test/replication/FinishedWorkUpdaterIT.java    |  30 +-
 ...GarbageCollectorCommunicatesWithTServersIT.java |  82 ++-
 .../test/replication/KerberosReplicationIT.java    |  32 +-
 .../test/replication/MockReplicaSystem.java        |  19 +-
 .../replication/MultiInstanceReplicationIT.java    | 194 +++--
 .../replication/MultiTserverReplicationIT.java     |   9 +-
 .../RemoveCompleteReplicationRecordsIT.java        |  45 +-
 .../accumulo/test/replication/ReplicationIT.java   | 255 ++++---
 .../replication/ReplicationOperationsImplIT.java   |  45 +-
 .../test/replication/SequentialWorkAssignerIT.java |  75 +-
 .../test/replication/StatusCombinerMacIT.java      |  15 +-
 .../accumulo/test/replication/StatusMakerIT.java   |  47 +-
 .../test/replication/UnorderedWorkAssignerIT.java  |  38 +-
 .../UnorderedWorkAssignerReplicationIT.java        | 194 +++--
 .../UnusedWalDoesntCloseReplicationStatusIT.java   |  27 +-
 .../accumulo/test/replication/WorkMakerIT.java     |  39 +-
 .../java/org/apache/accumulo/test/rpc/Mocket.java  |   5 +-
 .../test/rpc/SimpleThriftServiceRunner.java        |   3 +-
 .../apache/accumulo/test/rpc/ThriftBehaviorIT.java |  15 +-
 .../test/server/security/SystemCredentialsIT.java  |  39 +-
 .../apache/accumulo/test/start/KeywordStartIT.java |  18 +-
 .../org/apache/accumulo/test/util/CertUtils.java   |  99 ++-
 .../accumulo/test/util/SerializationUtil.java      |  17 +-
 .../constraints/AlphaNumKeyConstraintTest.java     |  13 +-
 .../constraints/NumericValueConstraintTest.java    |   6 +-
 .../accumulo/test/fate/zookeeper/ZooLockTest.java  |  36 +-
 .../test/functional/ValueReversingIterator.java    |   6 +-
 .../accumulo/test/iterator/AgeOffFilterTest.java   |   9 +-
 .../test/iterator/CfCqSliceFilterTest.java         |   6 +-
 .../apache/accumulo/test/iterator/RegExTest.java   |   9 +-
 .../test/iterator/SummingCombinerTest.java         |   6 +-
 .../test/iterator/WholeRowIteratorTest.java        |   6 +-
 .../apache/accumulo/test/util/CertUtilsTest.java   |  24 +-
 1463 files changed, 29363 insertions(+), 16189 deletions(-)

diff --cc core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java
index f256a92,b1d3150..046552f
--- a/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java
+++ b/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java
@@@ -226,29 -231,33 +232,30 @@@ public class ClientOpts extends Help 
    }
  
    /**
-    * Automatically update the options to use a KerberosToken when SASL is enabled for RPCs. Don't overwrite the options if the user has provided something
-    * specifically.
+    * Automatically update the options to use a KerberosToken when SASL is enabled for RPCs. Don't
+    * overwrite the options if the user has provided something specifically.
     */
 -  public void updateKerberosCredentials() {
 -    ClientConfiguration clientConfig;
 -    try {
 -      if (clientConfigFile == null)
 -        clientConfig = ClientConfiguration.loadDefault();
 -      else
 -        clientConfig = ClientConfiguration.fromFile(new File(clientConfigFile));
 -    } catch (Exception e) {
 -      throw new IllegalArgumentException(e);
 +  public void updateKerberosCredentials(String clientConfigFile) {
 +    boolean saslEnabled = false;
 +    if (clientConfigFile != null) {
 +      saslEnabled = Connector.builder().usingProperties(clientConfigFile).info().saslEnabled();
      }
 -    updateKerberosCredentials(clientConfig);
 +    updateKerberosCredentials(saslEnabled);
 +  }
 +
 +  public void updateKerberosCredentials() {
 +    updateKerberosCredentials(true);
    }
  
    /**
-    * Automatically update the options to use a KerberosToken when SASL is enabled for RPCs. Don't overwrite the options if the user has provided something
-    * specifically.
+    * Automatically update the options to use a KerberosToken when SASL is enabled for RPCs. Don't
+    * overwrite the options if the user has provided something specifically.
     */
 -  public void updateKerberosCredentials(ClientConfiguration clientConfig) {
 -    final boolean clientConfSaslEnabled = Boolean
 -        .parseBoolean(clientConfig.get(ClientProperty.INSTANCE_RPC_SASL_ENABLED));
 -    if ((saslEnabled || clientConfSaslEnabled) && null == tokenClassName) {
 +  public void updateKerberosCredentials(boolean clientSaslEnabled) {
 +    if ((saslEnabled || clientSaslEnabled) && null == tokenClassName) {
        tokenClassName = KerberosToken.CLASS_NAME;
-       // ACCUMULO-3701 We need to ensure we're logged in before parseArgs returns as the MapReduce Job is going to make a copy of the current user (UGI)
+       // ACCUMULO-3701 We need to ensure we're logged in before parseArgs returns as the MapReduce
+       // Job is going to make a copy of the current user (UGI)
        // when it is instantiated.
        if (null != keytabPath) {
          File keytab = new File(keytabPath);
diff --cc core/src/main/java/org/apache/accumulo/core/client/BatchWriterConfig.java
index 3da6459,f2ec775..cc6c082
--- a/core/src/main/java/org/apache/accumulo/core/client/BatchWriterConfig.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/BatchWriterConfig.java
@@@ -50,11 -50,12 +50,13 @@@ public class BatchWriterConfig implemen
    private Integer maxWriteThreads = null;
  
    private Durability durability = Durability.DEFAULT;
 +  private boolean isDurabilitySet = false;
  
    /**
-    * Sets the maximum memory to batch before writing. The smaller this value, the more frequently the {@link BatchWriter} will write.<br>
-    * If set to a value smaller than a single mutation, then it will {@link BatchWriter#flush()} after each added mutation. Must be non-negative.
+    * Sets the maximum memory to batch before writing. The smaller this value, the more frequently
+    * the {@link BatchWriter} will write.<br>
+    * If set to a value smaller than a single mutation, then it will {@link BatchWriter#flush()}
+    * after each added mutation. Must be non-negative.
     *
     * <p>
     * <b>Default:</b> 50M
@@@ -311,34 -319,6 +321,35 @@@
      return false;
    }
  
 +  private static <T> T merge(T o1, T o2) {
 +    if (o1 != null)
 +      return o1;
 +    return o2;
 +  }
 +
 +  /**
-    * Merge this BatchWriterConfig with another. If config is set in both, preference will be given to this config.
++   * Merge this BatchWriterConfig with another. If config is set in both, preference will be given
++   * to this config.
 +   *
 +   * @param other
 +   *          Another BatchWriterConfig
 +   * @return Merged BatchWriterConfig
 +   * @since 2.0.0
 +   */
 +  public BatchWriterConfig merge(BatchWriterConfig other) {
 +    BatchWriterConfig result = new BatchWriterConfig();
 +    result.maxMemory = merge(this.maxMemory, other.maxMemory);
 +    result.maxLatency = merge(this.maxLatency, other.maxLatency);
 +    result.timeout = merge(this.timeout, other.timeout);
 +    result.maxWriteThreads = merge(this.maxWriteThreads, other.maxWriteThreads);
 +    if (this.isDurabilitySet) {
 +      result.durability = this.durability;
 +    } else if (other.isDurabilitySet) {
 +      result.durability = other.durability;
 +    }
 +    return result;
 +  }
 +
    @Override
    public int hashCode() {
      HashCodeBuilder hcb = new HashCodeBuilder();
diff --cc core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
index f3e2fb8,09c9e8b..fabe239
--- a/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/ClientConfiguration.java
@@@ -41,12 -53,12 +41,13 @@@ import org.slf4j.Logger
  import org.slf4j.LoggerFactory;
  
  /**
-  * Contains a list of property keys recognized by the Accumulo client and convenience methods for setting them.
+  * Contains a list of property keys recognized by the Accumulo client and convenience methods for
+  * setting them.
   *
   * @since 1.6.0
 + * @deprecated since 2.0.0, replaced {@link Connector#builder()}
   */
 -public class ClientConfiguration extends CompositeConfiguration {
 +public class ClientConfiguration {
    private static final Logger log = LoggerFactory.getLogger(ClientConfiguration.class);
  
    public static final String USER_ACCUMULO_DIR_NAME = ".accumulo";
@@@ -224,7 -322,7 +231,8 @@@
      }
      // We couldn't find the client configuration anywhere
      if (configs.isEmpty()) {
-       log.debug("Found no client.conf in default paths. Using default client configuration values.");
 -      log.warn("Found no client.conf in default paths. Using default client configuration values.");
++      log.debug(
++          "Found no client.conf in default paths. Using default client configuration values.");
      }
      return new ClientConfiguration(configs);
    }
@@@ -235,9 -333,10 +243,10 @@@
      try {
        propConfig.load(new StringReader(serializedConfig));
      } catch (ConfigurationException e) {
-       throw new IllegalArgumentException("Error deserializing client configuration: " + serializedConfig, e);
+       throw new IllegalArgumentException(
+           "Error deserializing client configuration: " + serializedConfig, e);
      }
 -    return new ClientConfiguration(propConfig);
 +    return new ClientConfiguration(Collections.singletonList(propConfig));
    }
  
    /**
@@@ -267,13 -367,18 +277,15 @@@
      } else {
        // if $ACCUMULO_CLIENT_CONF_PATH env isn't set, priority from top to bottom is:
        // ~/.accumulo/config
 -      // $ACCUMULO_CONF_DIR/client.conf -OR- $ACCUMULO_HOME/conf/client.conf (depending on whether
 -      // $ACCUMULO_CONF_DIR is set)
 +      // $ACCUMULO_CONF_DIR/client.conf
        // /etc/accumulo/client.conf
 +      // /etc/accumulo/conf/client.conf
        clientConfPaths = new LinkedList<>();
-       clientConfPaths.add(System.getProperty("user.home") + File.separator + USER_ACCUMULO_DIR_NAME + File.separator + USER_CONF_FILENAME);
+       clientConfPaths.add(System.getProperty("user.home") + File.separator + USER_ACCUMULO_DIR_NAME
+           + File.separator + USER_CONF_FILENAME);
        if (System.getenv("ACCUMULO_CONF_DIR") != null) {
-         clientConfPaths.add(System.getenv("ACCUMULO_CONF_DIR") + File.separator + GLOBAL_CONF_FILENAME);
+         clientConfPaths
+             .add(System.getenv("ACCUMULO_CONF_DIR") + File.separator + GLOBAL_CONF_FILENAME);
 -      } else if (System.getenv("ACCUMULO_HOME") != null) {
 -        clientConfPaths.add(System.getenv("ACCUMULO_HOME") + File.separator + "conf"
 -            + File.separator + GLOBAL_CONF_FILENAME);
        }
        clientConfPaths.add("/etc/accumulo/" + GLOBAL_CONF_FILENAME);
        clientConfPaths.add("/etc/accumulo/conf/" + GLOBAL_CONF_FILENAME);
@@@ -498,11 -611,527 +518,12 @@@
     * @since 1.7.0
     */
    public ClientConfiguration withSasl(boolean saslEnabled, String kerberosServerPrimary) {
-     return withSasl(saslEnabled).with(ClientProperty.KERBEROS_SERVER_PRIMARY, kerberosServerPrimary);
+     return withSasl(saslEnabled).with(ClientProperty.KERBEROS_SERVER_PRIMARY,
+         kerberosServerPrimary);
    }
  
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Configuration getConfiguration(int index) {
 -    return super.getConfiguration(index);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Configuration getSource(String key) {
 -    return super.getSource(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void removeConfiguration(Configuration config) {
 -    super.removeConfiguration(config);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void addConfiguration(Configuration config) {
 -    super.addConfiguration(config);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Configuration getInMemoryConfiguration() {
 -    return super.getInMemoryConfiguration();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Log getLogger() {
 -    return super.getLogger();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Configuration subset(String prefix) {
 -    return super.subset(prefix);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Configuration interpolatedConfiguration() {
 -    return super.interpolatedConfiguration();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void setLogger(Log log) {
 -    super.setLogger(log);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public ConfigurationInterpolator getInterpolator() {
 -    return super.getInterpolator();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public synchronized StrSubstitutor getSubstitutor() {
 -    return super.getSubstitutor();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void append(Configuration c) {
 -    super.append(c);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void copy(Configuration c) {
 -    super.copy(c);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void addConfigurationListener(ConfigurationListener l) {
 -    super.addConfigurationListener(l);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public boolean removeConfigurationListener(ConfigurationListener l) {
 -    return super.removeConfigurationListener(l);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public boolean removeErrorListener(ConfigurationErrorListener l) {
 -    return super.removeErrorListener(l);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void addErrorListener(ConfigurationErrorListener l) {
 -    super.addErrorListener(l);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void addErrorLogListener() {
 -    super.addErrorLogListener();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void addProperty(String key, Object value) {
 -    super.addProperty(key, value);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  protected void addPropertyDirect(String key, Object token) {
 -    super.addPropertyDirect(key, token);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void clear() {
 -    super.clear();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void clearConfigurationListeners() {
 -    super.clearConfigurationListeners();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void clearErrorListeners() {
 -    super.clearErrorListeners();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public void clearProperty(String key) {
 -    super.clearProperty(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  protected void clearPropertyDirect(String key) {
 -    super.clearPropertyDirect(key);
 -  }
 -
 -  @Override
    public boolean containsKey(String key) {
 -    return super.containsKey(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  protected ConfigurationErrorEvent createErrorEvent(int type, String propName, Object propValue,
 -      Throwable ex) {
 -    return super.createErrorEvent(type, propName, propValue, ex);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  protected ConfigurationEvent createEvent(int type, String propName, Object propValue,
 -      boolean before) {
 -    return super.createEvent(type, propName, propValue, before);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  protected ConfigurationInterpolator createInterpolator() {
 -    return super.createInterpolator();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  protected void fireError(int type, String propName, Object propValue, Throwable ex) {
 -    super.fireError(type, propName, propValue, ex);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  protected void fireEvent(int type, String propName, Object propValue, boolean before) {
 -    super.fireEvent(type, propName, propValue, before);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public BigDecimal getBigDecimal(String key) {
 -    return super.getBigDecimal(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public BigDecimal getBigDecimal(String key, BigDecimal defaultValue) {
 -    return super.getBigDecimal(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public BigInteger getBigInteger(String key) {
 -    return super.getBigInteger(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public BigInteger getBigInteger(String key, BigInteger defaultValue) {
 -    return super.getBigInteger(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public boolean getBoolean(String key) {
 -    return super.getBoolean(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public boolean getBoolean(String key, boolean defaultValue) {
 -    return super.getBoolean(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Boolean getBoolean(String key, Boolean defaultValue) {
 -    return super.getBoolean(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public byte getByte(String key) {
 -    return super.getByte(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public byte getByte(String key, byte defaultValue) {
 -    return super.getByte(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Byte getByte(String key, Byte defaultValue) {
 -    return super.getByte(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @SuppressWarnings("rawtypes")
 -  @Override
 -  public Collection getConfigurationListeners() {
 -    return super.getConfigurationListeners();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public double getDouble(String key) {
 -    return super.getDouble(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Double getDouble(String key, Double defaultValue) {
 -    return super.getDouble(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public double getDouble(String key, double defaultValue) {
 -    return super.getDouble(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @SuppressWarnings("rawtypes")
 -  @Override
 -  public Collection getErrorListeners() {
 -    return super.getErrorListeners();
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public float getFloat(String key) {
 -    return super.getFloat(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Float getFloat(String key, Float defaultValue) {
 -    return super.getFloat(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public float getFloat(String key, float defaultValue) {
 -    return super.getFloat(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public int getInt(String key) {
 -    return super.getInt(key);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public int getInt(String key, int defaultValue) {
 -    return super.getInt(key, defaultValue);
 -  }
 -
 -  /**
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API
 -   */
 -  @Deprecated
 -  @Override
 -  public Integer getInteger(String key, Integer defaultValue) {
 -    return super.getInteger(key, defaultValue);
 +    return compositeConfig.containsKey(key);
    }
  
    @SuppressWarnings("unchecked")
diff --cc core/src/main/java/org/apache/accumulo/core/client/Connector.java
index 5829ce8,585ba37..cf5661b
--- a/core/src/main/java/org/apache/accumulo/core/client/Connector.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/Connector.java
@@@ -74,14 -75,16 +79,17 @@@ public abstract class Connector 
     * @return BatchDeleter object for configuring and deleting
     * @throws TableNotFoundException
     *           when the specified table doesn't exist
-    * @deprecated since 1.5.0; Use {@link #createBatchDeleter(String, Authorizations, int, BatchWriterConfig)} instead.
+    * @deprecated since 1.5.0; Use
+    *             {@link #createBatchDeleter(String, Authorizations, int, BatchWriterConfig)}
+    *             instead.
     */
    @Deprecated
-   public abstract BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations, int numQueryThreads, long maxMemory, long maxLatency,
-       int maxWriteThreads) throws TableNotFoundException;
+   public abstract BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations,
+       int numQueryThreads, long maxMemory, long maxLatency, int maxWriteThreads)
+       throws TableNotFoundException;
  
    /**
 +   * Factory method to create BatchDeleter
     *
     * @param tableName
     *          the name of the table to query and delete from
@@@ -92,34 -96,15 +101,37 @@@
     * @param numQueryThreads
     *          the number of concurrent threads to spawn for querying
     * @param config
-    *          configuration used to create batch writer. This config takes precedence. Any unset values will be merged with config set when the Connector was
-    *          created. If no config was set during Connector creation, BatchWriterConfig defaults will be used.
 -   *          configuration used to create batch writer
++   *          configuration used to create batch writer. This config takes precedence. Any unset
++   *          values will be merged with config set when the Connector was created. If no config was
++   *          set during Connector creation, BatchWriterConfig defaults will be used.
     * @return BatchDeleter object for configuring and deleting
     * @since 1.5.0
     */
  
-   public abstract BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations, int numQueryThreads, BatchWriterConfig config)
-       throws TableNotFoundException;
+   public abstract BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations,
+       int numQueryThreads, BatchWriterConfig config) throws TableNotFoundException;
  
    /**
-    * Factory method to create BatchDeleter. This method uses BatchWriterConfig set when Connector was created. If none was set, BatchWriterConfig defaults will
-    * be used.
++   * Factory method to create BatchDeleter. This method uses BatchWriterConfig set when Connector
++   * was created. If none was set, BatchWriterConfig defaults will be used.
 +   *
 +   * @param tableName
 +   *          the name of the table to query and delete from
 +   * @param authorizations
-    *          A set of authorization labels that will be checked against the column visibility of each key in order to filter data. The authorizations passed in
-    *          must be a subset of the accumulo user's set of authorizations. If the accumulo user has authorizations (A1, A2) and authorizations (A2, A3) are
-    *          passed, then an exception will be thrown.
++   *          A set of authorization labels that will be checked against the column visibility of
++   *          each key in order to filter data. The authorizations passed in must be a subset of the
++   *          accumulo user's set of authorizations. If the accumulo user has authorizations (A1,
++   *          A2) and authorizations (A2, A3) are passed, then an exception will be thrown.
 +   * @param numQueryThreads
 +   *          the number of concurrent threads to spawn for querying
 +   * @return BatchDeleter object
 +   * @throws TableNotFoundException
 +   *           if table not found
 +   */
-   public abstract BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations, int numQueryThreads) throws TableNotFoundException;
++  public abstract BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations,
++      int numQueryThreads) throws TableNotFoundException;
 +
 +  /**
     * Factory method to create a BatchWriter connected to Accumulo.
     *
     * @param tableName
@@@ -145,30 -132,18 +159,33 @@@
     * @param tableName
     *          the name of the table to insert data into
     * @param config
-    *          configuration used to create batch writer. This config will take precedence. Any unset values will merged with config set when the Connector was
-    *          created. If no config was set during Connector creation, BatchWriterConfig defaults will be used.
 -   *          configuration used to create batch writer
++   *          configuration used to create batch writer. This config will take precedence. Any unset
++   *          values will merged with config set when the Connector was created. If no config was
++   *          set during Connector creation, BatchWriterConfig defaults will be used.
     * @return BatchWriter object for configuring and writing data to
     * @since 1.5.0
     */
  
-   public abstract BatchWriter createBatchWriter(String tableName, BatchWriterConfig config) throws TableNotFoundException;
+   public abstract BatchWriter createBatchWriter(String tableName, BatchWriterConfig config)
+       throws TableNotFoundException;
  
    /**
-    * Factory method to create a BatchWriter. This method uses BatchWriterConfig set when Connector was created. If none was set, BatchWriterConfig defaults will
-    * be used.
++   * Factory method to create a BatchWriter. This method uses BatchWriterConfig set when Connector
++   * was created. If none was set, BatchWriterConfig defaults will be used.
 +   *
 +   * @param tableName
 +   *          the name of the table to insert data into
 +   * @return BatchWriter object
 +   * @throws TableNotFoundException
 +   *           if table not found
 +   * @since 2.0.0
 +   */
 +  public abstract BatchWriter createBatchWriter(String tableName) throws TableNotFoundException;
 +
 +  /**
-    * Factory method to create a Multi-Table BatchWriter connected to Accumulo. Multi-table batch writers can queue data for multiple tables, which is good for
-    * ingesting data into multiple tables from the same source
+    * Factory method to create a Multi-Table BatchWriter connected to Accumulo. Multi-table batch
+    * writers can queue data for multiple tables, which is good for ingesting data into multiple
+    * tables from the same source
     *
     * @param maxMemory
     *          size in bytes of the maximum memory to batch before writing
@@@ -181,30 -157,24 +199,35 @@@
     * @deprecated since 1.5.0; Use {@link #createMultiTableBatchWriter(BatchWriterConfig)} instead.
     */
    @Deprecated
-   public abstract MultiTableBatchWriter createMultiTableBatchWriter(long maxMemory, long maxLatency, int maxWriteThreads);
+   public abstract MultiTableBatchWriter createMultiTableBatchWriter(long maxMemory, long maxLatency,
+       int maxWriteThreads);
  
    /**
-    * Factory method to create a Multi-Table BatchWriter connected to Accumulo. Multi-table batch writers can queue data for multiple tables. Also data for
-    * multiple tables can be sent to a server in a single batch. Its an efficient way to ingest data into multiple tables from a single process.
+    * Factory method to create a Multi-Table BatchWriter connected to Accumulo. Multi-table batch
+    * writers can queue data for multiple tables. Also data for multiple tables can be sent to a
+    * server in a single batch. Its an efficient way to ingest data into multiple tables from a
+    * single process.
     *
     * @param config
-    *          configuration used to create multi-table batch writer. This config will take precedence. Any unset values will merged with config set when the
-    *          Connector was created. If no config was set during Connector creation, BatchWriterConfig defaults will be used.
 -   *          configuration used to create multi-table batch writer
++   *          configuration used to create multi-table batch writer. This config will take
++   *          precedence. Any unset values will merged with config set when the Connector was
++   *          created. If no config was set during Connector creation, BatchWriterConfig defaults
++   *          will be used.
     * @return MultiTableBatchWriter object for configuring and writing data to
     * @since 1.5.0
     */
    public abstract MultiTableBatchWriter createMultiTableBatchWriter(BatchWriterConfig config);
  
    /**
-    * Factory method to create a Multi-Table BatchWriter. This method uses BatchWriterConfig set when Connector was created. If none was set, BatchWriterConfig
-    * defaults will be used.
++   * Factory method to create a Multi-Table BatchWriter. This method uses BatchWriterConfig set when
++   * Connector was created. If none was set, BatchWriterConfig defaults will be used.
 +   *
 +   * @return MultiTableBatchWriter object
 +   * @since 2.0.0
 +   */
 +  public abstract MultiTableBatchWriter createMultiTableBatchWriter();
 +
 +  /**
     * Factory method to create a Scanner connected to Accumulo.
     *
     * @param tableName
@@@ -284,272 -259,4 +312,275 @@@
     * @since 1.7.0
     */
    public abstract ReplicationOperations replicationOperations();
 +
 +  /**
 +   * Builds ConnectionInfo after all options have been specified
 +   *
 +   * @since 2.0.0
 +   */
 +  public interface ConnInfoFactory {
 +
 +    /**
 +     * Builds ConnectionInfo after all options have been specified
 +     *
 +     * @return ConnectionInfo
 +     */
 +    ConnectionInfo info();
 +  }
 +
 +  /**
 +   * Builds Connector
 +   *
 +   * @since 2.0.0
 +   */
 +  public interface ConnectorFactory extends ConnInfoFactory {
 +
 +    /**
 +     * Builds Connector after all options have been specified
 +     *
 +     * @return Connector
 +     */
 +    Connector build() throws AccumuloException, AccumuloSecurityException;
 +
 +  }
 +
 +  /**
 +   * Builder method for setting Accumulo instance and zookeepers
 +   *
 +   * @since 2.0.0
 +   */
 +  public interface InstanceArgs {
 +    AuthenticationArgs forInstance(String instanceName, String zookeepers);
 +  }
 +
 +  /**
 +   * Builder methods for creating Connector using properties
 +   *
 +   * @since 2.0.0
 +   */
 +  public interface PropertyOptions extends InstanceArgs {
 +
 +    /**
-      * Build using properties file. An example properties file can be found at conf/accumulo-client.properties in the Accumulo tarball distribution.
++     * Build using properties file. An example properties file can be found at
++     * conf/accumulo-client.properties in the Accumulo tarball distribution.
 +     *
 +     * @param propertiesFile
 +     *          Path to properties file
 +     * @return this builder
 +     */
 +    ConnectorFactory usingProperties(String propertiesFile);
 +
 +    /**
-      * Build using Java properties object. A list of available properties can be found in the documentation on the project website (http://accumulo.apache.org)
-      * under 'Development' -&gt; 'Client Properties'
++     * Build using Java properties object. A list of available properties can be found in the
++     * documentation on the project website (http://accumulo.apache.org) under 'Development' -&gt;
++     * 'Client Properties'
 +     *
 +     * @param properties
 +     *          Properties object
 +     * @return this builder
 +     */
 +    ConnectorFactory usingProperties(Properties properties);
 +  }
 +
 +  public interface ConnectionInfoOptions extends PropertyOptions {
 +
 +    /**
 +     * Build using connection information
 +     *
 +     * @param connectionInfo
 +     *          ConnectionInfo object
 +     * @return this builder
 +     */
 +    ConnectorFactory usingConnectionInfo(ConnectionInfo connectionInfo);
 +  }
 +
 +  /**
 +   * Build methods for authentication
 +   *
 +   * @since 2.0.0
 +   */
 +  public interface AuthenticationArgs {
 +
 +    /**
 +     * Build using password-based credentials
 +     *
 +     * @param username
 +     *          User name
 +     * @param password
 +     *          Password
 +     * @return this builder
 +     */
 +    ConnectionOptions usingPassword(String username, CharSequence password);
 +
 +    /**
 +     * Build using Kerberos credentials
 +     *
 +     * @param principal
 +     *          Principal
 +     * @param keyTabFile
 +     *          Path to keytab file
 +     * @return this builder
 +     */
 +    ConnectionOptions usingKerberos(String principal, String keyTabFile);
 +
 +    /**
 +     * Build using credentials from a CredentialProvider
 +     *
 +     * @param username
 +     *          Accumulo user name
 +     * @param name
 +     *          Alias to extract Accumulo user password from CredentialProvider
 +     * @param providerUrls
 +     *          Comma seperated list of URLs defining CredentialProvider(s)
 +     * @return this builder
 +     */
 +    ConnectionOptions usingProvider(String username, String name, String providerUrls);
 +
 +    /**
 +     * Build using specified credentials
 +     *
 +     * @param principal
 +     *          Principal/username
 +     * @param token
 +     *          Authentication token
 +     * @return this builder
 +     */
 +    ConnectionOptions usingToken(String principal, AuthenticationToken token);
 +  }
 +
 +  /**
 +   * Build methods for SSL/TLS
 +   *
 +   * @since 2.0.0
 +   */
 +  public interface SslOptions extends ConnectorFactory {
 +
 +    /**
 +     * Build with SSL trust store
 +     *
 +     * @param path
 +     *          Path to trust store
 +     * @return this builder
 +     */
 +    SslOptions withTruststore(String path);
 +
 +    /**
 +     * Build with SSL trust store
 +     *
 +     * @param path
 +     *          Path to trust store
 +     * @param password
 +     *          Password used to encrypt trust store
 +     * @param type
 +     *          Trust store type
 +     * @return this builder
 +     */
 +    SslOptions withTruststore(String path, String password, String type);
 +
 +    /**
 +     * Build with SSL key store
 +     *
 +     * @param path
 +     *          Path to SSL key store
 +     * @return this builder
 +     */
 +    SslOptions withKeystore(String path);
 +
 +    /**
 +     * Build with SSL key store
 +     *
 +     * @param path
 +     *          Path to keystore
 +     * @param password
 +     *          Password used to encyrpt key store
 +     * @param type
 +     *          Key store type
 +     * @return this builder
 +     */
 +    SslOptions withKeystore(String path, String password, String type);
 +
 +    /**
 +     * Use JSSE system properties to configure SSL
 +     *
 +     * @return this builder
 +     */
 +    SslOptions useJsse();
 +  }
 +
 +  /**
 +   * Build methods for SASL
 +   *
 +   * @since 2.0.0
 +   */
 +  public interface SaslOptions extends ConnectorFactory {
 +
 +    /**
 +     * Build with Kerberos Server Primary
 +     *
 +     * @param kerberosServerPrimary
 +     *          Kerberos server primary
 +     * @return this builder
 +     */
 +    SaslOptions withPrimary(String kerberosServerPrimary);
 +
 +    /**
 +     * Build with SASL quality of protection
 +     *
 +     * @param qualityOfProtection
 +     *          Quality of protection
 +     * @return this builder
 +     */
 +    SaslOptions withQop(String qualityOfProtection);
 +  }
 +
 +  /**
 +   * Build methods for connection options
 +   *
 +   * @since 2.0.0
 +   */
 +  public interface ConnectionOptions extends ConnectorFactory {
 +
 +    /**
 +     * Build using Zookeeper timeout
 +     *
 +     * @param timeout
 +     *          Zookeeper timeout
 +     * @return this builder
 +     */
 +    ConnectionOptions withZkTimeout(int timeout);
 +
 +    /**
 +     * Build with SSL/TLS options
 +     *
 +     * @return this builder
 +     */
 +    SslOptions withSsl();
 +
 +    /**
 +     * Build with SASL options
 +     *
 +     * @return this builder
 +     */
 +    SaslOptions withSasl();
 +
 +    /**
-      * Build with BatchWriterConfig defaults for BatchWriter, MultiTableBatchWriter &amp; BatchDeleter
++     * Build with BatchWriterConfig defaults for BatchWriter, MultiTableBatchWriter &amp;
++     * BatchDeleter
 +     *
 +     * @param batchWriterConfig
 +     *          BatchWriterConfig
 +     * @return this builder
 +     */
 +    ConnectionOptions withBatchWriterConfig(BatchWriterConfig batchWriterConfig);
 +  }
 +
 +  /**
 +   * Creates builder for Connector
 +   *
 +   * @return this builder
 +   * @since 2.0.0
 +   */
 +  public static ConnectionInfoOptions builder() {
 +    return new ConnectorImpl.ConnectorBuilderImpl();
 +  }
  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/Instance.java
index ff6375b,bbc06e7..3bc0ff4
--- a/core/src/main/java/org/apache/accumulo/core/client/Instance.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/Instance.java
@@@ -19,11 -19,14 +19,12 @@@ package org.apache.accumulo.core.client
  import java.nio.ByteBuffer;
  import java.util.List;
  
 -import org.apache.accumulo.core.client.admin.InstanceOperations;
  import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
  import org.apache.accumulo.core.client.security.tokens.PasswordToken;
 -import org.apache.accumulo.core.conf.AccumuloConfiguration;
  
  /**
-  * This class represents the information a client needs to know to connect to an instance of accumulo.
+  * This class represents the information a client needs to know to connect to an instance of
+  * accumulo.
   *
   */
  public interface Instance {
@@@ -115,12 -122,39 +120,14 @@@
     *           when a generic exception occurs
     * @throws AccumuloSecurityException
     *           when a user's credentials are invalid
-    * @deprecated since 1.5, use {@link #getConnector(String, AuthenticationToken)} with {@link PasswordToken}
+    * @deprecated since 1.5, use {@link #getConnector(String, AuthenticationToken)} with
+    *             {@link PasswordToken}
     */
    @Deprecated
-   Connector getConnector(String user, CharSequence pass) throws AccumuloException, AccumuloSecurityException;
+   Connector getConnector(String user, CharSequence pass)
+       throws AccumuloException, AccumuloSecurityException;
  
    /**
 -   * Returns the AccumuloConfiguration to use when interacting with this instance.
 -   *
 -   * @return the AccumuloConfiguration that specifies properties related to interacting with this
 -   *         instance
 -   * @deprecated since 1.6.0. This method makes very little sense in the context of the client API
 -   *             and never should have been exposed.
 -   * @see InstanceOperations#getSystemConfiguration() for client-side reading of the server-side
 -   *      configuration.
 -   */
 -  @Deprecated
 -  AccumuloConfiguration getConfiguration();
 -
 -  /**
 -   * Set the AccumuloConfiguration to use when interacting with this instance.
 -   *
 -   * @param conf
 -   *          accumulo configuration
 -   * @deprecated since 1.6.0. This method makes very little sense in the context of the client API
 -   *             and never should have been exposed.
 -   * @see InstanceOperations#setProperty(String, String)
 -   */
 -  @Deprecated
 -  void setConfiguration(AccumuloConfiguration conf);
 -
 -  /**
     * Returns a connection to this instance of accumulo.
     *
     * @param principal
diff --cc core/src/main/java/org/apache/accumulo/core/client/MutationsRejectedException.java
index 3bfc284,8bade1c..e3a767f
--- a/core/src/main/java/org/apache/accumulo/core/client/MutationsRejectedException.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/MutationsRejectedException.java
@@@ -69,14 -139,14 +71,15 @@@ public class MutationsRejectedExceptio
      Map<String,Set<SecurityErrorCode>> result = new HashMap<>();
  
      for (Entry<TabletId,Set<SecurityErrorCode>> entry : hashMap.entrySet()) {
 +      TabletId tabletId = entry.getKey();
-       String tableInfo = Tables.getPrintableTableInfoFromId(instance, Table.ID.of(tabletId.getTableId().toString()));
+       String tableInfo = Tables.getPrintableTableInfoFromId(instance,
 -          entry.getKey().getTableId().toString());
++          Table.ID.of(tabletId.getTableId().toString()));
  
        if (!result.containsKey(tableInfo)) {
 -        result.put(tableInfo, new HashSet<SecurityErrorCode>());
 +        result.put(tableInfo, new HashSet<>());
        }
  
 -      result.get(tableInfo).addAll(hashMap.get(entry.getKey()));
 +      result.get(tableInfo).addAll(hashMap.get(tabletId));
      }
  
      return result.toString();
diff --cc core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java
index 892e0bd,201de62..6319562
--- a/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java
@@@ -124,18 -136,41 +133,21 @@@ public class ZooKeeperInstance implemen
     */
    @Deprecated
    public ZooKeeperInstance(UUID instanceId, String zooKeepers, int sessionTimeout) {
-     this(ClientConfiguration.loadDefault().withInstance(instanceId).withZkHosts(zooKeepers).withZkTimeout(sessionTimeout));
+     this(ClientConfiguration.loadDefault().withInstance(instanceId).withZkHosts(zooKeepers)
+         .withZkTimeout(sessionTimeout));
    }
  
 -  /**
 -   * @param config
 -   *          Client configuration for specifying connection options. See
 -   *          {@link ClientConfiguration} which extends Configuration with convenience methods
 -   *          specific to Accumulo.
 -   * @since 1.6.0
 -   * @deprecated since 1.9.0; will be removed in 2.0.0 to eliminate commons config leakage into
 -   *             Accumulo API; use {@link #ZooKeeperInstance(ClientConfiguration)} instead.
 -   */
 -  @Deprecated
 -  public ZooKeeperInstance(Configuration config) {
 -    this(config, new ZooCacheFactory());
 -  }
 -
 -  ZooKeeperInstance(Configuration config, ZooCacheFactory zcf) {
 +  ZooKeeperInstance(ClientConfiguration config, ZooCacheFactory zcf) {
      checkArgument(config != null, "config is null");
 -    if (config instanceof ClientConfiguration) {
 -      this.clientConf = (ClientConfiguration) config;
 -    } else {
 -      @SuppressWarnings("deprecation")
 -      ClientConfiguration cliConf = new ClientConfiguration(config);
 -      this.clientConf = cliConf;
 -    }
 +    this.clientConf = config;
      this.instanceId = clientConf.get(ClientProperty.INSTANCE_ID);
      this.instanceName = clientConf.get(ClientProperty.INSTANCE_NAME);
      if ((instanceId == null) == (instanceName == null))
-       throw new IllegalArgumentException("Expected exactly one of instanceName and instanceId to be set");
+       throw new IllegalArgumentException(
+           "Expected exactly one of instanceName and instanceId to be set");
      this.zooKeepers = clientConf.get(ClientProperty.INSTANCE_ZK_HOST);
-     this.zooKeepersSessionTimeOut = (int) ConfigurationTypeHelper.getTimeInMillis(clientConf.get(ClientProperty.INSTANCE_ZK_TIMEOUT));
 -    this.zooKeepersSessionTimeOut = (int) AccumuloConfiguration
++    this.zooKeepersSessionTimeOut = (int) ConfigurationTypeHelper
+         .getTimeInMillis(clientConf.get(ClientProperty.INSTANCE_ZK_TIMEOUT));
      zooCache = zcf.getZooCache(zooKeepers, zooKeepersSessionTimeOut);
      if (null != instanceName) {
        // Validates that the provided instanceName actually exists
diff --cc core/src/main/java/org/apache/accumulo/core/client/admin/NewTableConfiguration.java
index b0dbf4e,7d25a25..aa34f2e
--- a/core/src/main/java/org/apache/accumulo/core/client/admin/NewTableConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/admin/NewTableConfiguration.java
@@@ -19,34 -19,18 +19,34 @@@ package org.apache.accumulo.core.client
  import static com.google.common.base.Preconditions.checkArgument;
  import static java.util.Objects.requireNonNull;
  
 +import java.util.Arrays;
  import java.util.Collections;
 +import java.util.EnumSet;
  import java.util.HashMap;
  import java.util.Map;
 +import java.util.Map.Entry;
 +import java.util.Objects;
 +import java.util.Set;
 +import java.util.stream.Collectors;
  
 +import org.apache.accumulo.core.client.AccumuloException;
 +import org.apache.accumulo.core.client.IteratorSetting;
 +import org.apache.accumulo.core.client.impl.TableOperationsHelper;
  import org.apache.accumulo.core.client.sample.SamplerConfiguration;
 +import org.apache.accumulo.core.client.summary.Summarizer;
 +import org.apache.accumulo.core.client.summary.SummarizerConfiguration;
 +import org.apache.accumulo.core.conf.Property;
  import org.apache.accumulo.core.iterators.IteratorUtil;
 +import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
  import org.apache.accumulo.core.iterators.user.VersioningIterator;
  import org.apache.accumulo.core.sample.impl.SamplerConfigurationImpl;
 +import org.apache.accumulo.core.summary.SummarizerConfigurationUtil;
 +import org.apache.accumulo.core.util.LocalityGroupUtil;
 +import org.apache.hadoop.io.Text;
  
  /**
-  * This object stores table creation parameters. Currently includes: {@link TimeType}, whether to include default iterators, and user-specified initial
-  * properties
+  * This object stores table creation parameters. Currently includes: {@link TimeType}, whether to
+  * include default iterators, and user-specified initial properties
   *
   * @since 1.7.0
   */
@@@ -57,15 -41,8 +57,17 @@@ public class NewTableConfiguration 
  
    private boolean limitVersion = true;
  
 -  private Map<String,String> properties = new HashMap<>();
 -  private SamplerConfiguration samplerConfiguration;
 +  private Map<String,String> properties = Collections.emptyMap();
 +  private Map<String,String> samplerProps = Collections.emptyMap();
 +  private Map<String,String> summarizerProps = Collections.emptyMap();
 +  private Map<String,String> localityProps = Collections.emptyMap();
 +  private Map<String,String> iteratorProps = new HashMap<>();
 +
-   private void checkDisjoint(Map<String,String> props, Map<String,String> derivedProps, String kind) {
-     checkArgument(Collections.disjoint(props.keySet(), derivedProps.keySet()), "Properties and derived %s properties are not disjoint", kind);
++  private void checkDisjoint(Map<String,String> props, Map<String,String> derivedProps,
++      String kind) {
++    checkArgument(Collections.disjoint(props.keySet(), derivedProps.keySet()),
++        "Properties and derived %s properties are not disjoint", kind);
 +  }
  
    /**
     * Configure logical or millisecond time for tables created with this configuration.
@@@ -101,10 -80,10 +104,10 @@@
    }
  
    /**
-    * Sets additional properties to be applied to tables created with this configuration. Additional calls to this method replace properties set by previous
-    * calls.
+    * Sets additional properties to be applied to tables created with this configuration. Additional
 -   * calls to this method replaces properties set by previous calls.
++   * calls to this method replace properties set by previous calls.
     *
 -   * @param prop
 +   * @param props
     *          additional properties to add to the table when it is created
     * @return this
     */
@@@ -145,109 -123,8 +149,117 @@@
     */
    public NewTableConfiguration enableSampling(SamplerConfiguration samplerConfiguration) {
      requireNonNull(samplerConfiguration);
-     Map<String,String> tmp = new SamplerConfigurationImpl(samplerConfiguration).toTablePropertiesMap();
 -    SamplerConfigurationImpl.checkDisjoint(properties, samplerConfiguration);
 -    this.samplerConfiguration = samplerConfiguration;
++    Map<String,String> tmp = new SamplerConfigurationImpl(samplerConfiguration)
++        .toTablePropertiesMap();
 +    checkDisjoint(properties, tmp, "sampler");
 +    this.samplerProps = tmp;
 +    return this;
 +  }
 +
 +  /**
 +   * Enables creating summary statistics using {@link Summarizer}'s for the new table.
 +   *
 +   * @since 2.0.0
 +   */
 +  public NewTableConfiguration enableSummarization(SummarizerConfiguration... configs) {
 +    requireNonNull(configs);
-     Map<String,String> tmp = SummarizerConfigurationUtil.toTablePropertiesMap(Arrays.asList(configs));
++    Map<String,String> tmp = SummarizerConfigurationUtil
++        .toTablePropertiesMap(Arrays.asList(configs));
 +    checkDisjoint(properties, tmp, "summarizer");
 +    summarizerProps = tmp;
 +    return this;
 +  }
 +
 +  /**
 +   * Configures a table's locality groups prior to initial table creation.
 +   *
-    * Allows locality groups to be set prior to table creation. Additional calls to this method prior to table creation will overwrite previous locality group
-    * mappings.
++   * Allows locality groups to be set prior to table creation. Additional calls to this method prior
++   * to table creation will overwrite previous locality group mappings.
 +   *
 +   * @param groups
 +   *          mapping of locality group names to column families in the locality group
 +   *
 +   * @since 2.0.0
 +   *
 +   * @see TableOperations#setLocalityGroups
 +   */
 +  public NewTableConfiguration setLocalityGroups(Map<String,Set<Text>> groups) {
 +    // ensure locality groups do not overlap
 +    LocalityGroupUtil.ensureNonOverlappingGroups(groups);
 +    Map<String,String> tmp = new HashMap<>();
 +    for (Entry<String,Set<Text>> entry : groups.entrySet()) {
 +      Set<Text> colFams = entry.getValue();
 +      String value = LocalityGroupUtil.encodeColumnFamilies(colFams);
 +      tmp.put(Property.TABLE_LOCALITY_GROUP_PREFIX + entry.getKey(), value);
 +    }
-     tmp.put(Property.TABLE_LOCALITY_GROUPS.getKey(), groups.keySet().stream().collect(Collectors.joining(",")));
++    tmp.put(Property.TABLE_LOCALITY_GROUPS.getKey(),
++        groups.keySet().stream().collect(Collectors.joining(",")));
 +    checkDisjoint(properties, tmp, "locality groups");
 +    localityProps = tmp;
      return this;
    }
 +
 +  /**
 +   * Configure iterator settings for a table prior to its creation.
 +   *
-    * Additional calls to this method before table creation will overwrite previous iterator settings.
++   * Additional calls to this method before table creation will overwrite previous iterator
++   * settings.
 +   *
 +   * @param setting
 +   *          object specifying the properties of the iterator
 +   *
 +   * @since 2.0.0
 +   *
 +   * @see TableOperations#attachIterator(String, IteratorSetting)
 +   */
 +  public NewTableConfiguration attachIterator(IteratorSetting setting) {
 +    return attachIterator(setting, EnumSet.allOf(IteratorScope.class));
 +  }
 +
 +  /**
 +   * Configure iterator settings for a table prior to its creation.
 +   *
 +   * @param setting
 +   *          object specifying the properties of the iterator
 +   * @param scopes
 +   *          enumerated set of iterator scopes
 +   *
 +   * @since 2.0.0
 +   *
 +   * @see TableOperations#attachIterator(String, IteratorSetting, EnumSet)
 +   */
-   public NewTableConfiguration attachIterator(IteratorSetting setting, EnumSet<IteratorScope> scopes) {
++  public NewTableConfiguration attachIterator(IteratorSetting setting,
++      EnumSet<IteratorScope> scopes) {
 +    Objects.requireNonNull(setting, "setting cannot be null!");
 +    Objects.requireNonNull(scopes, "scopes cannot be null!");
 +    try {
 +      TableOperationsHelper.checkIteratorConflicts(iteratorProps, setting, scopes);
 +    } catch (AccumuloException e) {
-       throw new IllegalArgumentException("The specified IteratorSetting conflicts with an iterator already defined on this NewTableConfiguration", e);
++      throw new IllegalArgumentException(
++          "The specified IteratorSetting conflicts with an iterator already defined on this NewTableConfiguration",
++          e);
 +    }
 +    for (IteratorScope scope : scopes) {
-       String root = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX, scope.name().toLowerCase(), setting.getName());
++      String root = String.format("%s%s.%s", Property.TABLE_ITERATOR_PREFIX,
++          scope.name().toLowerCase(), setting.getName());
 +      for (Entry<String,String> prop : setting.getOptions().entrySet()) {
 +        iteratorProps.put(root + ".opt." + prop.getKey(), prop.getValue());
 +      }
 +      iteratorProps.put(root, setting.getPriority() + "," + setting.getIteratorClass());
 +      // verify that the iteratorProps assigned and the properties do not share any keys.
 +      checkDisjoint(properties, iteratorProps, "iterator");
 +    }
 +    return this;
 +  }
 +
 +  /**
 +   * Verify the provided properties are valid table properties.
 +   */
 +  private void checkTableProperties(Map<String,String> props) {
 +    props.keySet().forEach((key) -> {
 +      if (!key.startsWith(Property.TABLE_PREFIX.toString())) {
 +        throw new IllegalArgumentException("'" + key + "' is not a valid table property");
 +      }
 +    });
 +  }
  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/admin/SummaryRetriever.java
index 8dcf048,0000000..09a43c7
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/admin/SummaryRetriever.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/admin/SummaryRetriever.java
@@@ -1,112 -1,0 +1,122 @@@
 +/*
 + * 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.admin;
 +
 +import java.util.Collection;
 +import java.util.List;
 +
 +import org.apache.accumulo.core.client.AccumuloException;
 +import org.apache.accumulo.core.client.AccumuloSecurityException;
 +import org.apache.accumulo.core.client.TableNotFoundException;
 +import org.apache.accumulo.core.client.summary.SummarizerConfiguration;
 +import org.apache.accumulo.core.client.summary.Summary;
 +import org.apache.hadoop.io.Text;
 +
 +/**
 + * This interface allows configuring where and which summary data to retrieve before retrieving it.
 + *
 + * @since 2.0.0
 + */
 +public interface SummaryRetriever {
 +
 +  /**
-    * Forces a flush of data in memory to files before summary data is retrieved. Data recently written to Accumulo may be in memory. Summary data is only
-    * retrieved from files. Therefore recently written data may not be represented in summaries, unless this options is set to true. This is optional and
-    * defaults to false.
++   * Forces a flush of data in memory to files before summary data is retrieved. Data recently
++   * written to Accumulo may be in memory. Summary data is only retrieved from files. Therefore
++   * recently written data may not be represented in summaries, unless this options is set to true.
++   * This is optional and defaults to false.
 +   *
 +   * @return this
 +   */
 +  SummaryRetriever flush(boolean shouldFlush);
 +
 +  /**
 +   * The start row is not inclusive. Calling this method is optional.
 +   */
 +  SummaryRetriever startRow(Text startRow);
 +
 +  /**
 +   * The start row is not inclusive. Calling this method is optional.
 +   */
 +  SummaryRetriever startRow(CharSequence startRow);
 +
 +  /**
 +   * The end row is inclusive. Calling this method is optional.
 +   */
 +  SummaryRetriever endRow(Text endRow);
 +
 +  /**
 +   * The end row is inclusive. Calling this method is optional.
 +   */
 +  SummaryRetriever endRow(CharSequence endRow);
 +
 +  /**
-    * Filters which summary data is retrieved. By default all summary data present is retrieved. If only a subset of summary data is needed, then its best to be
-    * selective in order to avoid polluting summary data cache.
++   * Filters which summary data is retrieved. By default all summary data present is retrieved. If
++   * only a subset of summary data is needed, then its best to be selective in order to avoid
++   * polluting summary data cache.
 +   *
 +   * <p>
-    * Each set of summary data is generated using a specific {@link SummarizerConfiguration}. The methods {@link #withConfiguration(Collection)} and
-    * {@link #withConfiguration(SummarizerConfiguration...)} allow selecting sets of summary data based on exact {@link SummarizerConfiguration} matches. This
-    * method enables less exact matching using regular expressions.
++   * Each set of summary data is generated using a specific {@link SummarizerConfiguration}. The
++   * methods {@link #withConfiguration(Collection)} and
++   * {@link #withConfiguration(SummarizerConfiguration...)} allow selecting sets of summary data
++   * based on exact {@link SummarizerConfiguration} matches. This method enables less exact matching
++   * using regular expressions.
 +   *
 +   * <p>
-    * The regular expression passed to this method is used in the following way on the server side to match {@link SummarizerConfiguration} object. When a
-    * {@link SummarizerConfiguration} matches, the summary data generated using that configuration is returned.
++   * The regular expression passed to this method is used in the following way on the server side to
++   * match {@link SummarizerConfiguration} object. When a {@link SummarizerConfiguration} matches,
++   * the summary data generated using that configuration is returned.
 +   *
 +   * <pre>
 +   * <code>
 +   *    boolean doesConfigurationMatch(SummarizerConfiguration conf, String regex) {
 +   *      // This is how conf is converted to a String in tablet servers for matching.
 +   *      // The options are sorted to make writing regular expressions easier.
 +   *      String confString = conf.getClassName()+" "+new TreeMap&lt;&gt;(conf.getOptions());
 +   *      return Pattern.compile(regex).matcher(confString).matches();
 +   *    }
 +   * </code>
 +   * </pre>
 +   */
 +  SummaryRetriever withMatchingConfiguration(String regex);
 +
 +  /**
-    * Allows specifying a set of summaries, generated using the specified configs, to retrieve. By default will retrieve all present.
++   * Allows specifying a set of summaries, generated using the specified configs, to retrieve. By
++   * default will retrieve all present.
 +   *
 +   * <p>
-    * Using this method to be more selective may pull less data in to the tablet servers summary cache.
++   * Using this method to be more selective may pull less data in to the tablet servers summary
++   * cache.
 +   */
 +  SummaryRetriever withConfiguration(SummarizerConfiguration... config);
 +
 +  /**
-    * Allows specifying a set of summaries, generated using the specified configs, to retrieve. By default will retrieve all present.
++   * Allows specifying a set of summaries, generated using the specified configs, to retrieve. By
++   * default will retrieve all present.
 +   *
 +   * <p>
-    * Using this method to be more selective may pull less data in to the tablet servers summary cache.
++   * Using this method to be more selective may pull less data in to the tablet servers summary
++   * cache.
 +   */
 +  SummaryRetriever withConfiguration(Collection<SummarizerConfiguration> configs);
 +
 +  /**
 +   * @return a map of counter groups to counts
 +   */
-   List<Summary> retrieve() throws AccumuloException, AccumuloSecurityException, TableNotFoundException;
++  List<Summary> retrieve()
++      throws AccumuloException, AccumuloSecurityException, TableNotFoundException;
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/admin/TableOperations.java
index f88d28e,7ff76c9..d86e6af
--- a/core/src/main/java/org/apache/accumulo/core/client/admin/TableOperations.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/admin/TableOperations.java
@@@ -140,14 -143,16 +147,16 @@@ public interface TableOperations 
     *          Directory that contains the files copied by distcp from exportTable
     * @since 1.5.0
     */
-   void importTable(String tableName, String importDir) throws TableExistsException, AccumuloException, AccumuloSecurityException;
+   void importTable(String tableName, String importDir)
+       throws TableExistsException, AccumuloException, AccumuloSecurityException;
  
    /**
-    * Exports a table. The tables data is not exported, just table metadata and a list of files to distcp. The table being exported must be offline and stay
-    * offline for the duration of distcp. To avoid losing access to a table it can be cloned and the clone taken offline for export.
+    * Exports a table. The tables data is not exported, just table metadata and a list of files to
+    * distcp. The table being exported must be offline and stay offline for the duration of distcp.
+    * To avoid losing access to a table it can be cloned and the clone taken offline for export.
     *
     * <p>
 -   * See docs/examples/README.export
 +   * See https://github.com/apache/accumulo-examples/blob/master/docs/export.md
     *
     * @param tableName
     *          Name of the table to export.
@@@ -811,66 -874,6 +878,75 @@@
     *          the name of the table
     * @since 1.8.0
     */
-   SamplerConfiguration getSamplerConfiguration(String tableName) throws TableNotFoundException, AccumuloException, AccumuloSecurityException;
+   SamplerConfiguration getSamplerConfiguration(String tableName)
+       throws TableNotFoundException, AccumuloException, AccumuloSecurityException;
 +
 +  /**
 +   * Entry point for retrieving summaries with optional restrictions.
 +   *
 +   * <p>
-    * In order to retrieve Summaries, the Accumulo user making the request will need the {@link TablePermission#GET_SUMMARIES} table permission.
++   * In order to retrieve Summaries, the Accumulo user making the request will need the
++   * {@link TablePermission#GET_SUMMARIES} table permission.
 +   *
 +   * <p>
-    * Accumulo stores summary data with each file in each tablet. In order to make retrieving it faster there is a per tablet server cache of summary data. When
-    * summary data for a file is not present, it will be retrieved using threads on the tserver. The tablet server properties
-    * {@code tserver.summary.partition.threads}, {@code tserver.summary.remote.threads}, {@code tserver.summary.retrieval.threads}, and
-    * {@code tserver.cache.summary.size} impact the performance of retrieving summaries.
++   * Accumulo stores summary data with each file in each tablet. In order to make retrieving it
++   * faster there is a per tablet server cache of summary data. When summary data for a file is not
++   * present, it will be retrieved using threads on the tserver. The tablet server properties
++   * {@code tserver.summary.partition.threads}, {@code tserver.summary.remote.threads},
++   * {@code tserver.summary.retrieval.threads}, and {@code tserver.cache.summary.size} impact the
++   * performance of retrieving summaries.
 +   *
 +   * <p>
-    * Since summary data is cached, its important to use the summary selection options to only read the needed data into the cache.
++   * Since summary data is cached, its important to use the summary selection options to only read
++   * the needed data into the cache.
 +   *
 +   * <p>
-    * Summary data will be merged on the tablet servers and then in this client process. Therefore it's important that the required summarizers are on the
-    * clients classpath.
++   * Summary data will be merged on the tablet servers and then in this client process. Therefore
++   * it's important that the required summarizers are on the clients classpath.
 +   *
 +   * @since 2.0.0
 +   * @see Summarizer
 +   */
-   SummaryRetriever summaries(String tableName) throws TableNotFoundException, AccumuloException, AccumuloSecurityException;
++  SummaryRetriever summaries(String tableName)
++      throws TableNotFoundException, AccumuloException, AccumuloSecurityException;
 +
 +  /**
 +   * Enables summary generation for this table for future compactions.
 +   *
 +   * @param tableName
 +   *          add summarizers to this table
 +   * @param summarizers
 +   *          summarizers to add
 +   * @throws IllegalArgumentException
-    *           When new summarizers have the same property id as each other, or when the same summarizers previously added.
++   *           When new summarizers have the same property id as each other, or when the same
++   *           summarizers previously added.
 +   * @since 2.0.0
 +   * @see SummarizerConfiguration#toTableProperties()
 +   * @see SummarizerConfiguration#toTableProperties(SummarizerConfiguration...)
 +   * @see SummarizerConfiguration#toTableProperties(Collection)
 +   */
-   void addSummarizers(String tableName, SummarizerConfiguration... summarizers) throws TableNotFoundException, AccumuloException, AccumuloSecurityException;
++  void addSummarizers(String tableName, SummarizerConfiguration... summarizers)
++      throws TableNotFoundException, AccumuloException, AccumuloSecurityException;
 +
 +  /**
 +   * Removes summary generation for this table for the matching summarizers.
 +   *
 +   * @param tableName
 +   *          remove summarizers from this table
 +   * @param predicate
 +   *          removes all summarizers whose configuration that matches this predicate
 +   * @since 2.0.0
 +   */
-   void removeSummarizers(String tableName, Predicate<SummarizerConfiguration> predicate) throws AccumuloException, TableNotFoundException,
-       AccumuloSecurityException;
++  void removeSummarizers(String tableName, Predicate<SummarizerConfiguration> predicate)
++      throws AccumuloException, TableNotFoundException, AccumuloSecurityException;
 +
 +  /**
 +   * @param tableName
 +   *          list summarizers for this table
 +   * @return the summarizers currently configured for the table
 +   * @since 2.0.0
 +   * @see SummarizerConfiguration#fromTableProperties(Map)
 +   */
-   List<SummarizerConfiguration> listSummarizers(String tableName) throws AccumuloException, TableNotFoundException, AccumuloSecurityException;
++  List<SummarizerConfiguration> listSummarizers(String tableName)
++      throws AccumuloException, TableNotFoundException, AccumuloSecurityException;
  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/AbstractId.java
index 9bf7341,0000000..8d26cff
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/AbstractId.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/AbstractId.java
@@@ -1,89 -1,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.client.impl;
 +
 +import static java.nio.charset.StandardCharsets.UTF_8;
 +import static java.util.Objects.requireNonNull;
 +
 +import java.io.Serializable;
 +import java.util.Objects;
 +
 +/**
 + * An abstract identifier class for comparing equality of identifiers of the same type.
 + */
 +public abstract class AbstractId implements Comparable<AbstractId>, Serializable {
 +
 +  private static final long serialVersionUID = -155513612834787244L;
 +  private final String canonical;
 +  private Integer hashCode = null;
 +
 +  protected AbstractId(final String canonical) {
 +    requireNonNull(canonical, "canonical cannot be null");
 +    this.canonical = canonical;
 +  }
 +
 +  /**
 +   * The canonical ID
 +   */
 +  public final String canonicalID() {
 +    return canonical;
 +  }
 +
 +  public boolean isEmpty() {
 +    return canonical.isEmpty();
 +  }
 +
 +  /**
-    * AbstractID objects are considered equal if, and only if, they are of the same type and have the same canonical identifier.
++   * AbstractID objects are considered equal if, and only if, they are of the same type and have the
++   * same canonical identifier.
 +   */
 +  @Override
 +  public boolean equals(final Object obj) {
 +    if (this == obj)
 +      return true;
-     return obj != null && Objects.equals(getClass(), obj.getClass()) && Objects.equals(canonicalID(), ((AbstractId) obj).canonicalID());
++    return obj != null && Objects.equals(getClass(), obj.getClass())
++        && Objects.equals(canonicalID(), ((AbstractId) obj).canonicalID());
 +  }
 +
 +  @Override
 +  public int hashCode() {
 +    if (hashCode == null) {
 +      hashCode = Objects.hash(canonicalID());
 +    }
 +    return hashCode;
 +  }
 +
 +  /**
 +   * Returns a string of the canonical ID
 +   */
 +  @Override
 +  public String toString() {
 +    return canonical;
 +  }
 +
 +  /**
 +   * Return a UTF_8 byte[] of the canonical ID.
 +   */
 +  public final byte[] getUtf8() {
 +    return canonical.getBytes(UTF_8);
 +  }
 +
 +  @Override
 +  public int compareTo(AbstractId id) {
 +    requireNonNull(id, "id cannot be null");
 +    return this.canonicalID().compareTo(id.canonicalID());
 +  }
 +
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ClientConfConverter.java
index 2de50ac,0000000..d5080f0
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ClientConfConverter.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ClientConfConverter.java
@@@ -1,101 -1,0 +1,102 @@@
 +/*
 + * 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.impl;
 +
 +import java.util.HashMap;
 +import java.util.Iterator;
 +import java.util.Map;
 +import java.util.Properties;
 +
 +import org.apache.accumulo.core.client.ClientConfiguration;
 +import org.apache.accumulo.core.conf.ClientProperty;
 +
 +@SuppressWarnings("deprecation")
 +public class ClientConfConverter {
 +
-   private static Map<String, String> confProps = new HashMap<>();
-   private static Map<String, String> propsConf = new HashMap<>();
++  private static Map<String,String> confProps = new HashMap<>();
++  private static Map<String,String> propsConf = new HashMap<>();
 +
 +  static {
 +    propsConf.put(ClientProperty.INSTANCE_ZOOKEEPERS.getKey(),
 +        ClientConfiguration.ClientProperty.INSTANCE_ZK_HOST.getKey());
 +    propsConf.put(ClientProperty.INSTANCE_ZOOKEEPERS_TIMEOUT_SEC.getKey(),
 +        ClientConfiguration.ClientProperty.INSTANCE_ZK_TIMEOUT.getKey());
 +    propsConf.put(ClientProperty.SSL_ENABLED.getKey(),
 +        ClientConfiguration.ClientProperty.INSTANCE_RPC_SSL_ENABLED.getKey());
 +    propsConf.put(ClientProperty.SSL_KEYSTORE_PATH.getKey(),
 +        ClientConfiguration.ClientProperty.RPC_SSL_KEYSTORE_PATH.getKey());
 +    propsConf.put(ClientProperty.SSL_KEYSTORE_TYPE.getKey(),
 +        ClientConfiguration.ClientProperty.RPC_SSL_KEYSTORE_TYPE.getKey());
 +    propsConf.put(ClientProperty.SSL_KEYSTORE_PASSWORD.getKey(),
 +        ClientConfiguration.ClientProperty.RPC_SSL_KEYSTORE_PASSWORD.getKey());
 +    propsConf.put(ClientProperty.SSL_TRUSTSTORE_PATH.getKey(),
 +        ClientConfiguration.ClientProperty.RPC_SSL_TRUSTSTORE_PATH.getKey());
 +    propsConf.put(ClientProperty.SSL_TRUSTSTORE_TYPE.getKey(),
 +        ClientConfiguration.ClientProperty.RPC_SSL_TRUSTSTORE_TYPE.getKey());
 +    propsConf.put(ClientProperty.SSL_TRUSTSTORE_PASSWORD.getKey(),
 +        ClientConfiguration.ClientProperty.RPC_SSL_TRUSTSTORE_PASSWORD.getKey());
 +    propsConf.put(ClientProperty.SSL_USE_JSSE.getKey(),
 +        ClientConfiguration.ClientProperty.RPC_USE_JSSE.getKey());
 +    propsConf.put(ClientProperty.SASL_ENABLED.getKey(),
 +        ClientConfiguration.ClientProperty.INSTANCE_RPC_SASL_ENABLED.getKey());
 +    propsConf.put(ClientProperty.SASL_QOP.getKey(),
 +        ClientConfiguration.ClientProperty.RPC_SASL_QOP.getKey());
 +    propsConf.put(ClientProperty.SASL_KERBEROS_SERVER_PRIMARY.getKey(),
 +        ClientConfiguration.ClientProperty.KERBEROS_SERVER_PRIMARY.getKey());
 +
-     for (Map.Entry<String, String> entry : propsConf.entrySet()) {
++    for (Map.Entry<String,String> entry : propsConf.entrySet()) {
 +      confProps.put(entry.getValue(), entry.getKey());
 +    }
 +  }
 +
 +  public static ClientConfiguration toClientConf(Properties properties) {
 +    ClientConfiguration config = ClientConfiguration.create();
 +    for (Object keyObj : properties.keySet()) {
 +      String propKey = (String) keyObj;
 +      String val = properties.getProperty(propKey);
 +      String confKey = propsConf.get(propKey);
 +      if (confKey == null) {
 +        config.setProperty(propKey, val);
 +      } else {
 +        config.setProperty(confKey, val);
 +      }
 +      if (propKey.equals(ClientProperty.SSL_KEYSTORE_PATH.getKey())) {
 +        config.setProperty(ClientConfiguration.ClientProperty.INSTANCE_RPC_SSL_CLIENT_AUTH, "true");
 +      }
 +    }
 +    return config;
 +  }
 +
 +  public static Properties toProperties(ClientConfiguration clientConf) {
 +    Properties props = new Properties();
 +    Iterator<String> clientConfIter = clientConf.getKeys();
 +    while (clientConfIter.hasNext()) {
 +      String confKey = clientConfIter.next();
 +      String val = clientConf.getString(confKey);
 +      String propKey = confProps.get(confKey);
 +      if (propKey == null) {
-         if (!confKey.equals(ClientConfiguration.ClientProperty.INSTANCE_RPC_SSL_CLIENT_AUTH.getKey())) {
++        if (!confKey
++            .equals(ClientConfiguration.ClientProperty.INSTANCE_RPC_SSL_CLIENT_AUTH.getKey())) {
 +          props.setProperty(confKey, val);
 +        }
 +      } else {
 +        props.setProperty(propKey, val);
 +      }
 +    }
 +    return props;
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ClientContext.java
index b0baff3,0f53992..c07d799
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ClientContext.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ClientContext.java
@@@ -69,27 -72,13 +73,31 @@@ public class ClientContext 
    private Supplier<SslConnectionParams> sslSupplier;
    private TCredentials rpcCreds;
  
 +  private static <T> Supplier<T> memoizeWithExpiration(Supplier<T> s) {
-     //This insanity exists to make modernizer plugin happy.  We are living in the future now.
++    // This insanity exists to make modernizer plugin happy. We are living in the future now.
 +    return () -> Suppliers.memoizeWithExpiration(() -> s.get(), 100, TimeUnit.MILLISECONDS).get();
 +  }
 +
 +  public ClientContext(ConnectionInfo connectionInfo) {
-     this(ConnectionInfoFactory.getInstance(connectionInfo), ConnectionInfoFactory.getCredentials(connectionInfo), ConnectionInfoFactory
-         .getClientConfiguration(connectionInfo), ConnectionInfoFactory.getBatchWriterConfig(connectionInfo));
++    this(ConnectionInfoFactory.getInstance(connectionInfo),
++        ConnectionInfoFactory.getCredentials(connectionInfo),
++        ConnectionInfoFactory.getClientConfiguration(connectionInfo),
++        ConnectionInfoFactory.getBatchWriterConfig(connectionInfo));
 +  }
 +
    /**
     * Instantiate a client context
     */
    public ClientContext(Instance instance, Credentials credentials, ClientConfiguration clientConf) {
 +    this(instance, credentials, clientConf, new BatchWriterConfig());
 +  }
 +
-   public ClientContext(Instance instance, Credentials credentials, ClientConfiguration clientConf, BatchWriterConfig batchWriterConfig) {
-     this(instance, credentials, convertClientConfig(requireNonNull(clientConf, "clientConf is null")));
++  public ClientContext(Instance instance, Credentials credentials, ClientConfiguration clientConf,
++      BatchWriterConfig batchWriterConfig) {
+     this(instance, credentials,
+         convertClientConfig(requireNonNull(clientConf, "clientConf is null")));
      this.clientConf = clientConf;
 +    this.batchWriterConfig = batchWriterConfig;
    }
  
    /**
@@@ -119,9 -124,9 +129,10 @@@
        }
      };
  
-     timeoutSupplier = memoizeWithExpiration(() -> getConfiguration().getTimeInMillis(Property.GENERAL_RPC_TIMEOUT));
 -    timeoutSupplier = Suppliers.memoizeWithExpiration(timeoutSupplier, 100, TimeUnit.MILLISECONDS);
 -    sslSupplier = Suppliers.memoizeWithExpiration(sslSupplier, 100, TimeUnit.MILLISECONDS);
 -    saslSupplier = Suppliers.memoizeWithExpiration(saslSupplier, 100, TimeUnit.MILLISECONDS);
++    timeoutSupplier = memoizeWithExpiration(
++        () -> getConfiguration().getTimeInMillis(Property.GENERAL_RPC_TIMEOUT));
 +    sslSupplier = memoizeWithExpiration(() -> SslConnectionParams.forClient(getConfiguration()));
 +    saslSupplier = memoizeWithExpiration(saslSupplier);
  
    }
  
@@@ -252,9 -260,10 +270,12 @@@
          else {
            // Reconstitute the server kerberos property from the client config
            if (Property.GENERAL_KERBEROS_PRINCIPAL == property) {
-             if (config.containsKey(ClientConfiguration.ClientProperty.KERBEROS_SERVER_PRIMARY.getKey())) {
 -            if (config.containsKey(ClientProperty.KERBEROS_SERVER_PRIMARY.getKey())) {
++            if (config
++                .containsKey(ClientConfiguration.ClientProperty.KERBEROS_SERVER_PRIMARY.getKey())) {
                // Avoid providing a realm since we don't know what it is...
-               return config.getString(ClientConfiguration.ClientProperty.KERBEROS_SERVER_PRIMARY.getKey()) + "/_HOST@" + SaslConnectionParams.getDefaultRealm();
 -              return config.getString(ClientProperty.KERBEROS_SERVER_PRIMARY.getKey()) + "/_HOST@"
 -                  + SaslConnectionParams.getDefaultRealm();
++              return config
++                  .getString(ClientConfiguration.ClientProperty.KERBEROS_SERVER_PRIMARY.getKey())
++                  + "/_HOST@" + SaslConnectionParams.getDefaultRealm();
              }
            }
            return defaults.get(property);
@@@ -272,13 -281,16 +293,17 @@@
              props.put(key, config.getString(key));
          }
  
-         // Two client props that don't exist on the server config. Client doesn't need to know about the Kerberos instance from the principle, but servers do
+         // Two client props that don't exist on the server config. Client doesn't need to know about
+         // the Kerberos instance from the principle, but servers do
          // Automatically reconstruct the server property when converting a client config.
-         if (props.containsKey(ClientConfiguration.ClientProperty.KERBEROS_SERVER_PRIMARY.getKey())) {
-           final String serverPrimary = props.remove(ClientConfiguration.ClientProperty.KERBEROS_SERVER_PRIMARY.getKey());
 -        if (props.containsKey(ClientProperty.KERBEROS_SERVER_PRIMARY.getKey())) {
++        if (props
++            .containsKey(ClientConfiguration.ClientProperty.KERBEROS_SERVER_PRIMARY.getKey())) {
+           final String serverPrimary = props
 -              .remove(ClientProperty.KERBEROS_SERVER_PRIMARY.getKey());
 -          if (filter.apply(Property.GENERAL_KERBEROS_PRINCIPAL.getKey())) {
++              .remove(ClientConfiguration.ClientProperty.KERBEROS_SERVER_PRIMARY.getKey());
 +          if (filter.test(Property.GENERAL_KERBEROS_PRINCIPAL.getKey())) {
              // Use the _HOST expansion. It should be unnecessary in "client land".
-             props.put(Property.GENERAL_KERBEROS_PRINCIPAL.getKey(), serverPrimary + "/_HOST@" + SaslConnectionParams.getDefaultRealm());
+             props.put(Property.GENERAL_KERBEROS_PRINCIPAL.getKey(),
+                 serverPrimary + "/_HOST@" + SaslConnectionParams.getDefaultRealm());
            }
          }
  
@@@ -291,8 -303,9 +316,9 @@@
                  continue;
                }
  
 -              if (filter.apply(key)) {
 +              if (filter.test(key)) {
-                 char[] value = CredentialProviderFactoryShim.getValueFromCredentialProvider(hadoopConf, key);
+                 char[] value = CredentialProviderFactoryShim
+                     .getValueFromCredentialProvider(hadoopConf, key);
                  if (null != value) {
                    props.put(key, new String(value));
                  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ConditionalWriterImpl.java
index 3e74975,6d1dc3d..e4c60c6
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ConditionalWriterImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ConditionalWriterImpl.java
@@@ -96,11 -97,18 +96,12 @@@ import org.slf4j.LoggerFactory
  
  class ConditionalWriterImpl implements ConditionalWriter {
  
-   private static ThreadPoolExecutor cleanupThreadPool = new ThreadPoolExecutor(1, 1, 3, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), r -> {
-     Thread t = new Thread(r, "Conditional Writer Cleanup Thread");
-     t.setDaemon(true);
-     return t;
-   });
 -  private static class CleanupThreadFactory implements ThreadFactory {
 -
 -    @Override
 -    public Thread newThread(Runnable r) {
 -      Thread t = new Thread(r, "Conditional Writer Cleanup Thread ");
 -      t.setDaemon(true);
 -      return t;
 -    }
 -  }
 -
+   private static ThreadPoolExecutor cleanupThreadPool = new ThreadPoolExecutor(1, 1, 3,
 -      TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new CleanupThreadFactory());
++      TimeUnit.SECONDS, new LinkedBlockingQueue<>(), r -> {
++        Thread t = new Thread(r, "Conditional Writer Cleanup Thread");
++        t.setDaemon(true);
++        return t;
++      });
  
    static {
      cleanupThreadPool.allowCoreThreadTimeOut(true);
@@@ -513,8 -526,9 +519,9 @@@
        }
      }
  
-     TConditionalSession tcs = client.startConditionalUpdate(tinfo, context.rpcCreds(), ByteBufferUtil.toByteBuffers(auths.getAuthorizations()),
-         tableId.canonicalID(), DurabilityImpl.toThrift(durability), this.classLoaderContext);
+     TConditionalSession tcs = client.startConditionalUpdate(tinfo, context.rpcCreds(),
 -        ByteBufferUtil.toByteBuffers(auths.getAuthorizations()), tableId,
++        ByteBufferUtil.toByteBuffers(auths.getAuthorizations()), tableId.canonicalID(),
+         DurabilityImpl.toThrift(durability), this.classLoaderContext);
  
      synchronized (cachedSessionIDs) {
        SessionID sid = new SessionID();
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ConnectionInfoFactory.java
index c1cb17c,0000000..6420f2f
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ConnectionInfoFactory.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ConnectionInfoFactory.java
@@@ -1,85 -1,0 +1,86 @@@
 +/*
 + * 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.impl;
 +
 +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.BatchWriterConfig;
 +import org.apache.accumulo.core.client.ClientConfiguration;
 +import org.apache.accumulo.core.client.ConnectionInfo;
 +import org.apache.accumulo.core.client.Connector;
 +import org.apache.accumulo.core.client.Durability;
 +import org.apache.accumulo.core.client.Instance;
 +import org.apache.accumulo.core.client.ZooKeeperInstance;
 +import org.apache.accumulo.core.conf.ClientProperty;
 +
 +/**
 + * Creates internal objects using {@link ConnectionInfo}
 + */
 +public class ConnectionInfoFactory {
 +
 +  public static String getString(ConnectionInfo info, ClientProperty property) {
 +    return property.getValue(info.getProperties());
 +  }
 +
 +  public static Long getLong(ConnectionInfo info, ClientProperty property) {
 +    return property.getLong(info.getProperties());
 +  }
 +
-   public static Connector getConnector(ConnectionInfo info) throws AccumuloSecurityException, AccumuloException {
++  public static Connector getConnector(ConnectionInfo info)
++      throws AccumuloSecurityException, AccumuloException {
 +    return new ConnectorImpl(getClientContext(info));
 +  }
 +
 +  public static ClientContext getClientContext(ConnectionInfo info) {
 +    return new ClientContext(info);
 +  }
 +
 +  public static Instance getInstance(ConnectionInfo info) {
 +    return new ZooKeeperInstance(getClientConfiguration(info));
 +  }
 +
 +  public static Credentials getCredentials(ConnectionInfo info) {
 +    return new Credentials(info.getPrincipal(), info.getAuthenticationToken());
 +  }
 +
 +  public static BatchWriterConfig getBatchWriterConfig(ConnectionInfo info) {
 +    BatchWriterConfig batchWriterConfig = new BatchWriterConfig();
 +    Long maxMemory = getLong(info, ClientProperty.BATCH_WRITER_MAX_MEMORY_BYTES);
 +    if (maxMemory != null) {
 +      batchWriterConfig.setMaxMemory(maxMemory);
 +    }
 +    Long maxLatency = getLong(info, ClientProperty.BATCH_WRITER_MAX_LATENCY_SEC);
 +    if (maxLatency != null) {
 +      batchWriterConfig.setMaxLatency(maxLatency, TimeUnit.SECONDS);
 +    }
 +    Long timeout = getLong(info, ClientProperty.BATCH_WRITER_MAX_TIMEOUT_SEC);
 +    if (timeout != null) {
 +      batchWriterConfig.setTimeout(timeout, TimeUnit.SECONDS);
 +    }
 +    String durability = getString(info, ClientProperty.BATCH_WRITER_DURABILITY);
 +    if (!durability.isEmpty()) {
 +      batchWriterConfig.setDurability(Durability.valueOf(durability.toUpperCase()));
 +    }
 +    return batchWriterConfig;
 +  }
 +
 +  public static ClientConfiguration getClientConfiguration(ConnectionInfo info) {
 +    return ClientConfConverter.toClientConf(info.getProperties());
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ConnectorImpl.java
index 03c719c,ebf4f30..bab089f
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ConnectorImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ConnectorImpl.java
@@@ -66,7 -54,8 +66,8 @@@ public class ConnectorImpl extends Conn
    private InstanceOperations instanceops = null;
    private ReplicationOperations replicationops = null;
  
-   public ConnectorImpl(final ClientContext context) throws AccumuloSecurityException, AccumuloException {
+   public ConnectorImpl(final ClientContext context)
 -      throws AccumuloException, AccumuloSecurityException {
++      throws AccumuloSecurityException, AccumuloException {
      checkArgument(context != null, "Context is null");
      checkArgument(context.getCredentials() != null, "Credentials are null");
      checkArgument(context.getCredentials().getToken() != null, "Authentication token is null");
@@@ -75,10 -65,11 +77,11 @@@
  
      this.context = context;
  
-     // Skip fail fast for system services; string literal for class name, to avoid dependency on server jar
+     // Skip fail fast for system services; string literal for class name, to avoid dependency on
+     // server jar
      final String tokenClassName = context.getCredentials().getToken().getClass().getName();
      if (!SYSTEM_TOKEN_NAME.equals(tokenClassName)) {
 -      ServerClient.execute(context, new ClientExec<ClientService.Client>() {
 +      ServerClient.executeVoid(context, new ClientExec<ClientService.Client>() {
          @Override
          public void execute(ClientService.Client iface) throws Exception {
            if (!iface.authenticate(Tracer.traceInfo(), context.rpcCreds()))
@@@ -121,16 -117,12 +129,18 @@@
    }
  
    @Override
-   public BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations, int numQueryThreads, BatchWriterConfig config)
-       throws TableNotFoundException {
+   public BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations,
+       int numQueryThreads, BatchWriterConfig config) throws TableNotFoundException {
      checkArgument(tableName != null, "tableName is null");
      checkArgument(authorizations != null, "authorizations is null");
-     return new TabletServerBatchDeleter(context, getTableId(tableName), authorizations, numQueryThreads, config.merge(context.getBatchWriterConfig()));
+     return new TabletServerBatchDeleter(context, getTableId(tableName), authorizations,
 -        numQueryThreads, config);
++        numQueryThreads, config.merge(context.getBatchWriterConfig()));
 +  }
 +
 +  @Override
-   public BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations, int numQueryThreads) throws TableNotFoundException {
++  public BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations,
++      int numQueryThreads) throws TableNotFoundException {
 +    return createBatchDeleter(tableName, authorizations, numQueryThreads, new BatchWriterConfig());
    }
  
    @Deprecated
@@@ -142,18 -136,10 +154,20 @@@
    }
  
    @Override
-   public BatchWriter createBatchWriter(String tableName, BatchWriterConfig config) throws TableNotFoundException {
+   public BatchWriter createBatchWriter(String tableName, BatchWriterConfig config)
+       throws TableNotFoundException {
      checkArgument(tableName != null, "tableName is null");
 -    return new BatchWriterImpl(context, getTableId(tableName), config);
 +    // we used to allow null inputs for bw config
 +    if (config == null) {
 +      config = new BatchWriterConfig();
 +    }
-     return new BatchWriterImpl(context, getTableId(tableName), config.merge(context.getBatchWriterConfig()));
++    return new BatchWriterImpl(context, getTableId(tableName),
++        config.merge(context.getBatchWriterConfig()));
 +  }
 +
 +  @Override
 +  public BatchWriter createBatchWriter(String tableName) throws TableNotFoundException {
 +    return createBatchWriter(tableName, new BatchWriterConfig());
    }
  
    @Deprecated
@@@ -224,222 -208,4 +241,229 @@@
  
      return replicationops;
    }
 +
-   public static class ConnectorBuilderImpl implements InstanceArgs, PropertyOptions, ConnectionInfoOptions, AuthenticationArgs, ConnectionOptions, SslOptions,
-       SaslOptions, ConnectorFactory {
++  public static class ConnectorBuilderImpl
++      implements InstanceArgs, PropertyOptions, ConnectionInfoOptions, AuthenticationArgs,
++      ConnectionOptions, SslOptions, SaslOptions, ConnectorFactory {
 +
 +    private Properties properties = new Properties();
 +    private AuthenticationToken token = null;
 +
 +    @Override
 +    public Connector build() throws AccumuloException, AccumuloSecurityException {
 +      return ConnectionInfoFactory.getConnector(new ConnectionInfoImpl(properties, token));
 +    }
 +
 +    @Override
 +    public ConnectionInfo info() {
 +      return new ConnectionInfoImpl(properties, token);
 +    }
 +
 +    @Override
 +    public AuthenticationArgs forInstance(String instanceName, String zookeepers) {
 +      setProperty(ClientProperty.INSTANCE_NAME, instanceName);
 +      setProperty(ClientProperty.INSTANCE_ZOOKEEPERS, zookeepers);
 +      return this;
 +    }
 +
 +    @Override
 +    public SslOptions withTruststore(String path) {
 +      setProperty(ClientProperty.SSL_TRUSTSTORE_PATH, path);
 +      return this;
 +    }
 +
 +    @Override
 +    public SslOptions withTruststore(String path, String password, String type) {
 +      setProperty(ClientProperty.SSL_TRUSTSTORE_PATH, path);
 +      setProperty(ClientProperty.SSL_TRUSTSTORE_PASSWORD, password);
 +      setProperty(ClientProperty.SSL_TRUSTSTORE_TYPE, type);
 +      return this;
 +    }
 +
 +    @Override
 +    public SslOptions withKeystore(String path) {
 +      setProperty(ClientProperty.SSL_KEYSTORE_PATH, path);
 +      return this;
 +    }
 +
 +    @Override
 +    public SslOptions withKeystore(String path, String password, String type) {
 +      setProperty(ClientProperty.SSL_KEYSTORE_PATH, path);
 +      setProperty(ClientProperty.SSL_KEYSTORE_PASSWORD, password);
 +      setProperty(ClientProperty.SSL_KEYSTORE_TYPE, type);
 +      return this;
 +    }
 +
 +    @Override
 +    public SslOptions useJsse() {
 +      setProperty(ClientProperty.SSL_USE_JSSE, "true");
 +      return this;
 +    }
 +
 +    @Override
 +    public ConnectionOptions withZkTimeout(int timeout) {
 +      setProperty(ClientProperty.INSTANCE_ZOOKEEPERS_TIMEOUT_SEC, Integer.toString(timeout));
 +      return this;
 +    }
 +
 +    @Override
 +    public SslOptions withSsl() {
 +      setProperty(ClientProperty.SSL_ENABLED, "true");
 +      return this;
 +    }
 +
 +    @Override
 +    public SaslOptions withSasl() {
 +      setProperty(ClientProperty.SASL_ENABLED, "true");
 +      return this;
 +    }
 +
 +    @Override
 +    public ConnectionOptions withBatchWriterConfig(BatchWriterConfig batchWriterConfig) {
 +      setProperty(ClientProperty.BATCH_WRITER_MAX_MEMORY_BYTES, batchWriterConfig.getMaxMemory());
-       setProperty(ClientProperty.BATCH_WRITER_MAX_LATENCY_SEC, batchWriterConfig.getMaxLatency(TimeUnit.SECONDS));
-       setProperty(ClientProperty.BATCH_WRITER_MAX_TIMEOUT_SEC, batchWriterConfig.getTimeout(TimeUnit.SECONDS));
-       setProperty(ClientProperty.BATCH_WRITER_MAX_WRITE_THREADS, batchWriterConfig.getMaxWriteThreads());
-       setProperty(ClientProperty.BATCH_WRITER_DURABILITY, batchWriterConfig.getDurability().toString());
++      setProperty(ClientProperty.BATCH_WRITER_MAX_LATENCY_SEC,
++          batchWriterConfig.getMaxLatency(TimeUnit.SECONDS));
++      setProperty(ClientProperty.BATCH_WRITER_MAX_TIMEOUT_SEC,
++          batchWriterConfig.getTimeout(TimeUnit.SECONDS));
++      setProperty(ClientProperty.BATCH_WRITER_MAX_WRITE_THREADS,
++          batchWriterConfig.getMaxWriteThreads());
++      setProperty(ClientProperty.BATCH_WRITER_DURABILITY,
++          batchWriterConfig.getDurability().toString());
 +      return this;
 +    }
 +
 +    @Override
 +    public SaslOptions withPrimary(String kerberosServerPrimary) {
 +      setProperty(ClientProperty.SASL_KERBEROS_SERVER_PRIMARY, kerberosServerPrimary);
 +      return this;
 +    }
 +
 +    @Override
 +    public SaslOptions withQop(String qualityOfProtection) {
 +      setProperty(ClientProperty.SASL_QOP, qualityOfProtection);
 +      return this;
 +    }
 +
 +    @Override
 +    public ConnectorFactory usingProperties(String configFile) {
 +      Properties properties = new Properties();
 +      try (InputStream is = new FileInputStream(configFile)) {
 +        properties.load(is);
 +      } catch (IOException e) {
 +        throw new IllegalArgumentException(e);
 +      }
 +      return usingProperties(properties);
 +    }
 +
 +    @Override
 +    public ConnectorFactory usingProperties(Properties properties) {
 +      this.properties = properties;
 +      String authMethod = ClientProperty.AUTH_METHOD.getValue(properties).toLowerCase();
 +      switch (authMethod) {
 +        case "password":
 +          String password = ClientProperty.AUTH_PASSWORD.getValue(properties);
 +          Objects.nonNull(password);
 +          this.token = new PasswordToken(password);
 +          this.properties.remove(ClientProperty.AUTH_PASSWORD);
 +          break;
 +        case "kerberos":
 +          String principal = ClientProperty.AUTH_USERNAME.getValue(properties);
 +          String keytabPath = ClientProperty.AUTH_KERBEROS_KEYTAB_PATH.getValue(properties);
 +          Objects.nonNull(principal);
 +          Objects.nonNull(keytabPath);
 +          try {
 +            this.token = new KerberosToken(principal, new File(keytabPath));
 +          } catch (IOException e) {
 +            throw new IllegalArgumentException(e);
 +          }
 +        case "provider":
 +          String name = ClientProperty.AUTH_PROVIDER_NAME.getValue(properties);
 +          String providerUrls = ClientProperty.AUTH_PROVIDER_URLS.getValue(properties);
 +          try {
 +            this.token = new CredentialProviderToken(name, providerUrls);
 +          } catch (IOException e) {
 +            throw new IllegalArgumentException(e);
 +          }
 +        default:
-           throw new IllegalArgumentException("An authentication method (password, kerberos, etc) must be set");
++          throw new IllegalArgumentException(
++              "An authentication method (password, kerberos, etc) must be set");
 +      }
 +      return this;
 +    }
 +
 +    @Override
 +    public ConnectionOptions usingPassword(String username, CharSequence password) {
 +      setProperty(ClientProperty.AUTH_METHOD, "password");
 +      setProperty(ClientProperty.AUTH_USERNAME, username);
 +      this.token = new PasswordToken(password);
 +      return this;
 +    }
 +
 +    @Override
 +    public ConnectionOptions usingKerberos(String principal, String keyTabFile) {
 +      setProperty(ClientProperty.AUTH_METHOD, "kerberos");
 +      setProperty(ClientProperty.AUTH_USERNAME, principal);
 +      setProperty(ClientProperty.AUTH_KERBEROS_KEYTAB_PATH, keyTabFile);
 +      try {
 +        this.token = new KerberosToken(principal, new File(keyTabFile));
 +      } catch (IOException e) {
 +        throw new IllegalArgumentException(e);
 +      }
 +      return this;
 +    }
 +
 +    @Override
 +    public ConnectionOptions usingProvider(String username, String name, String providerUrls) {
 +      setProperty(ClientProperty.AUTH_METHOD, "provider");
 +      setProperty(ClientProperty.AUTH_USERNAME, username);
 +      setProperty(ClientProperty.AUTH_PROVIDER_NAME, name);
 +      setProperty(ClientProperty.AUTH_PROVIDER_URLS, providerUrls);
 +      try {
 +        this.token = new CredentialProviderToken(name, providerUrls);
 +      } catch (IOException e) {
 +        throw new IllegalArgumentException(e);
 +      }
 +      return this;
 +    }
 +
 +    @Override
 +    public ConnectionOptions usingToken(String principal, AuthenticationToken token) {
 +      this.token = token;
 +      setProperty(ClientProperty.AUTH_USERNAME, principal);
 +      if (token instanceof CredentialProviderToken) {
 +        setProperty(ClientProperty.AUTH_METHOD, "provider");
 +        CredentialProviderToken cpt = (CredentialProviderToken) token;
 +        setProperty(ClientProperty.AUTH_PROVIDER_NAME, cpt.getName());
 +        setProperty(ClientProperty.AUTH_PROVIDER_URLS, cpt.getCredentialProviders());
 +      } else if (token instanceof PasswordToken) {
 +        setProperty(ClientProperty.AUTH_METHOD, "password");
 +      } else if (token instanceof KerberosToken) {
 +        setProperty(ClientProperty.AUTH_METHOD, "kerberos");
-         setProperty(ClientProperty.AUTH_KERBEROS_KEYTAB_PATH, ((KerberosToken) token).getKeytab().getAbsolutePath());
++        setProperty(ClientProperty.AUTH_KERBEROS_KEYTAB_PATH,
++            ((KerberosToken) token).getKeytab().getAbsolutePath());
 +      } else {
 +        setProperty(ClientProperty.AUTH_METHOD, "unknown");
 +      }
 +      return this;
 +    }
 +
 +    @Override
 +    public ConnectorFactory usingConnectionInfo(ConnectionInfo connectionInfo) {
 +      this.properties = connectionInfo.getProperties();
 +      this.token = connectionInfo.getAuthenticationToken();
 +      return this;
 +    }
 +
 +    public void setProperty(ClientProperty property, String value) {
 +      properties.setProperty(property.getKey(), value);
 +    }
 +
 +    public void setProperty(ClientProperty property, Long value) {
 +      setProperty(property, Long.toString(value));
 +    }
 +
 +    public void setProperty(ClientProperty property, Integer value) {
 +      setProperty(property, Integer.toString(value));
 +    }
 +  }
  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/Credentials.java
index 92d1bd3,a4522a6..0967a91
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Credentials.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Credentials.java
@@@ -28,10 -27,13 +28,12 @@@ import org.apache.accumulo.core.client.
  import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
  import org.apache.accumulo.core.client.security.tokens.AuthenticationToken.AuthenticationTokenSerializer;
  import org.apache.accumulo.core.security.thrift.TCredentials;
 -import org.apache.accumulo.core.util.Base64;
  
  /**
-  * A wrapper for internal use. This class carries the instance, principal, and authentication token for use in the public API, in a non-serialized form. This is
-  * important, so that the authentication token carried in a {@link Connector} can be destroyed, invalidating future RPC operations from that {@link Connector}.
+  * A wrapper for internal use. This class carries the instance, principal, and authentication token
+  * for use in the public API, in a non-serialized form. This is important, so that the
+  * authentication token carried in a {@link Connector} can be destroyed, invalidating future RPC
+  * operations from that {@link Connector}.
   * <p>
   * See ACCUMULO-1312
   *
@@@ -109,9 -120,13 +120,15 @@@ public class Credentials 
     * @return serialized form of these credentials
     */
    public final String serialize() {
-     return (getPrincipal() == null ? "-" : Base64.getEncoder().encodeToString(getPrincipal().getBytes(UTF_8))) + ":"
-         + (getToken() == null ? "-" : Base64.getEncoder().encodeToString(getToken().getClass().getName().getBytes(UTF_8))) + ":"
-         + (getToken() == null ? "-" : Base64.getEncoder().encodeToString(AuthenticationTokenSerializer.serialize(getToken())));
+     return (getPrincipal() == null ? "-"
 -        : Base64.encodeBase64String(getPrincipal().getBytes(UTF_8)))
++        : Base64.getEncoder().encodeToString(getPrincipal().getBytes(UTF_8)))
+         + ":"
+         + (getToken() == null ? "-"
 -            : Base64.encodeBase64String(getToken().getClass().getName().getBytes(UTF_8)))
 -        + ":" + (getToken() == null ? "-"
 -            : Base64.encodeBase64String(AuthenticationTokenSerializer.serialize(getToken())));
++            : Base64.getEncoder().encodeToString(getToken().getClass().getName().getBytes(UTF_8)))
++        + ":"
++        + (getToken() == null ? "-"
++            : Base64.getEncoder()
++                .encodeToString(AuthenticationTokenSerializer.serialize(getToken())));
    }
  
    /**
@@@ -123,11 -139,13 +141,13 @@@
     */
    public static final Credentials deserialize(String serializedForm) {
      String[] split = serializedForm.split(":", 3);
-     String principal = split[0].equals("-") ? null : new String(Base64.getDecoder().decode(split[0]), UTF_8);
-     String tokenType = split[1].equals("-") ? null : new String(Base64.getDecoder().decode(split[1]), UTF_8);
+     String principal = split[0].equals("-") ? null
 -        : new String(Base64.decodeBase64(split[0]), UTF_8);
++        : new String(Base64.getDecoder().decode(split[0]), UTF_8);
+     String tokenType = split[1].equals("-") ? null
 -        : new String(Base64.decodeBase64(split[1]), UTF_8);
++        : new String(Base64.getDecoder().decode(split[1]), UTF_8);
      AuthenticationToken token = null;
      if (!split[2].equals("-")) {
 -      byte[] tokenBytes = Base64.decodeBase64(split[2]);
 +      byte[] tokenBytes = Base64.getDecoder().decode(split[2]);
        token = AuthenticationTokenSerializer.deserialize(tokenType, tokenBytes);
      }
      return new Credentials(principal, token);
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/InstanceOperationsImpl.java
index 7eade0d,fab8b98..1ba9e4b
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/InstanceOperationsImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/InstanceOperationsImpl.java
@@@ -62,10 -62,11 +62,11 @@@ public class InstanceOperationsImpl imp
    }
  
    @Override
-   public void setProperty(final String property, final String value) throws AccumuloException, AccumuloSecurityException, IllegalArgumentException {
+   public void setProperty(final String property, final String value)
+       throws AccumuloException, AccumuloSecurityException, IllegalArgumentException {
      checkArgument(property != null, "property is null");
      checkArgument(value != null, "value is null");
 -    MasterClient.execute(context, new ClientExec<MasterClientService.Client>() {
 +    MasterClient.executeVoid(context, new ClientExec<MasterClientService.Client>() {
        @Override
        public void execute(MasterClientService.Client client) throws Exception {
          client.setSystemProperty(Tracer.traceInfo(), context.rpcCreds(), property, value);
@@@ -74,9 -75,10 +75,10 @@@
    }
  
    @Override
-   public void removeProperty(final String property) throws AccumuloException, AccumuloSecurityException {
+   public void removeProperty(final String property)
+       throws AccumuloException, AccumuloSecurityException {
      checkArgument(property != null, "property is null");
 -    MasterClient.execute(context, new ClientExec<MasterClientService.Client>() {
 +    MasterClient.executeVoid(context, new ClientExec<MasterClientService.Client>() {
        @Override
        public void execute(MasterClientService.Client client) throws Exception {
          client.removeSystemProperty(Tracer.traceInfo(), context.rpcCreds(), property);
@@@ -191,8 -205,13 +205,9 @@@
      TTransport transport = null;
      try {
        transport = ThriftUtil.createTransport(AddressUtil.parseAddress(tserver, false), context);
-       TabletClientService.Client client = ThriftUtil.createClient(new TabletClientService.Client.Factory(), transport);
+       TabletClientService.Client client = ThriftUtil
+           .createClient(new TabletClientService.Client.Factory(), transport);
        client.getTabletServerStatus(Tracer.traceInfo(), context.rpcCreds());
 -    } catch (TTransportException e) {
 -      throw new AccumuloException(e);
 -    } catch (ThriftSecurityException e) {
 -      throw new AccumuloException(e);
      } catch (TException e) {
        throw new AccumuloException(e);
      } finally {
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/MasterClient.java
index c9194b1,39e1f2d..ca05f84
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/MasterClient.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/MasterClient.java
@@@ -149,9 -148,6 +153,10 @@@ public class MasterClient 
            default:
              throw new AccumuloException(e);
          }
 +      } catch (ThriftNotActiveServiceException e) {
 +        // Let it loop, fetching a new location
-         log.debug("Contacted a Master which is no longer active, re-creating the connection to the active Master");
++        log.debug(
++            "Contacted a Master which is no longer active, re-creating the connection to the active Master");
        } catch (Exception e) {
          throw new AccumuloException(e);
        } finally {
@@@ -176,7 -174,8 +183,8 @@@
      }
    }
  
-   public static void executeVoid(ClientContext context, ClientExec<MasterClientService.Client> exec) throws AccumuloException, AccumuloSecurityException {
 -  public static void execute(ClientContext context, ClientExec<MasterClientService.Client> exec)
++  public static void executeVoid(ClientContext context, ClientExec<MasterClientService.Client> exec)
+       throws AccumuloException, AccumuloSecurityException {
      try {
        executeGeneric(context, exec);
      } catch (TableNotFoundException e) {
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/MultiTableBatchWriterImpl.java
index 255aa01,e1b2306..e14240b
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/MultiTableBatchWriterImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/MultiTableBatchWriterImpl.java
@@@ -99,7 -102,8 +102,8 @@@ public class MultiTableBatchWriterImpl 
    @Override
    protected void finalize() {
      if (!closed.get()) {
-       log.warn("{} not shutdown; did you forget to call close()?", MultiTableBatchWriterImpl.class.getSimpleName());
 -      log.warn(MultiTableBatchWriterImpl.class.getSimpleName()
 -          + " not shutdown; did you forget to call close()?");
++      log.warn("{} not shutdown; did you forget to call close()?",
++          MultiTableBatchWriterImpl.class.getSimpleName());
        try {
          close();
        } catch (MutationsRejectedException mre) {
@@@ -137,10 -142,11 +142,11 @@@
    }
  
    @Override
-   public BatchWriter getBatchWriter(String tableName) throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
+   public BatchWriter getBatchWriter(String tableName)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
      checkArgument(tableName != null, "tableName is null");
  
 -    String tableId = getId(tableName);
 +    Table.ID tableId = getId(tableName);
  
      BatchWriter tbw = tableWriters.get(tableId);
      if (tbw == null) {
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java
index 56d7073,0000000..db5d838
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java
@@@ -1,64 -1,0 +1,67 @@@
 +/*
 + * 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.impl;
 +
 +import java.util.concurrent.ExecutionException;
 +
 +import org.apache.accumulo.core.client.Instance;
 +
 +import com.google.common.cache.Cache;
 +import com.google.common.cache.CacheBuilder;
 +
 +public class Namespace {
 +  public static final String ACCUMULO = "accumulo";
 +  public static final String DEFAULT = "";
 +  public static final String SEPARATOR = ".";
 +
 +  /**
-    * Object representing an internal Namespace ID. This class was created to help with type safety. For help obtaining the value of a namespace ID from
-    * Zookeeper, see {@link Namespaces#getNamespaceId(Instance, String)}
++   * Object representing an internal Namespace ID. This class was created to help with type safety.
++   * For help obtaining the value of a namespace ID from Zookeeper, see
++   * {@link Namespaces#getNamespaceId(Instance, String)}
 +   *
-    * Uses an internal cache and private constructor for storing a WeakReference of every Namespace.ID. Therefore, a Namespace.ID can't be instantiated outside
-    * this class and is accessed by calling Namespace.ID.{@link #of(String)}.
++   * Uses an internal cache and private constructor for storing a WeakReference of every
++   * Namespace.ID. Therefore, a Namespace.ID can't be instantiated outside this class and is
++   * accessed by calling Namespace.ID.{@link #of(String)}.
 +   */
 +  public static class ID extends AbstractId {
 +    private static final long serialVersionUID = 8931104141709170293L;
 +    static final Cache<String,ID> cache = CacheBuilder.newBuilder().weakValues().build();
 +
 +    public static final ID ACCUMULO = of("+accumulo");
 +    public static final ID DEFAULT = of("+default");
 +
 +    private ID(String canonical) {
 +      super(canonical);
 +    }
 +
 +    /**
 +     * Get a Namespace.ID object for the provided canonical string.
 +     *
 +     * @param canonical
 +     *          Namespace ID string
 +     * @return Namespace.ID object
 +     */
 +    public static Namespace.ID of(final String canonical) {
 +      try {
 +        return cache.get(canonical, () -> new Namespace.ID(canonical));
 +      } catch (ExecutionException e) {
-         throw new AssertionError("This should never happen: ID constructor should never return null.");
++        throw new AssertionError(
++            "This should never happen: ID constructor should never return null.");
 +      }
 +    }
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/NamespaceOperationsImpl.java
index c0fe567,70c7f9d..e8826c1
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/NamespaceOperationsImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/NamespaceOperationsImpl.java
@@@ -115,7 -117,9 +119,9 @@@ public class NamespaceOperationsImpl ex
      checkArgument(namespace != null, "namespace is null");
  
      try {
-       doNamespaceFateOperation(FateOperation.NAMESPACE_CREATE, Arrays.asList(ByteBuffer.wrap(namespace.getBytes(UTF_8))), Collections.emptyMap(), namespace);
+       doNamespaceFateOperation(FateOperation.NAMESPACE_CREATE,
 -          Arrays.asList(ByteBuffer.wrap(namespace.getBytes(UTF_8))),
 -          Collections.<String,String> emptyMap(), namespace);
++          Arrays.asList(ByteBuffer.wrap(namespace.getBytes(UTF_8))), Collections.emptyMap(),
++          namespace);
      } catch (NamespaceNotFoundException e) {
        // should not happen
        throw new AssertionError(e);
@@@ -123,14 -127,17 +129,16 @@@
    }
  
    @Override
-   public void delete(String namespace) throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException, NamespaceNotEmptyException {
+   public void delete(String namespace) throws AccumuloException, AccumuloSecurityException,
+       NamespaceNotFoundException, NamespaceNotEmptyException {
      checkArgument(namespace != null, "namespace is null");
 -    String namespaceId = Namespaces.getNamespaceId(context.getInstance(), namespace);
 +    Namespace.ID namespaceId = Namespaces.getNamespaceId(context.getInstance(), namespace);
  
 -    if (namespaceId.equals(Namespaces.ACCUMULO_NAMESPACE_ID)
 -        || namespaceId.equals(Namespaces.DEFAULT_NAMESPACE_ID)) {
 +    if (namespaceId.equals(Namespace.ID.ACCUMULO) || namespaceId.equals(Namespace.ID.DEFAULT)) {
        Credentials credentials = context.getCredentials();
        log.debug("{} attempted to delete the {} namespace", credentials.getPrincipal(), namespaceId);
-       throw new AccumuloSecurityException(credentials.getPrincipal(), SecurityErrorCode.UNSUPPORTED_OPERATION);
+       throw new AccumuloSecurityException(credentials.getPrincipal(),
+           SecurityErrorCode.UNSUPPORTED_OPERATION);
      }
  
      if (Namespaces.getTableIds(context.getInstance(), namespaceId).size() > 0) {
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java
index 2416c5a,9f8ff0d..40e95cf
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java
@@@ -78,113 -74,92 +79,123 @@@ public class Namespaces 
      }
    };
  
 -  private static SecurityPermission TABLES_PERMISSION = new SecurityPermission("tablesPermission");
 -
 -  public static final String DEFAULT_NAMESPACE_ID = "+default";
 -  public static final String DEFAULT_NAMESPACE = "";
 -  public static final String ACCUMULO_NAMESPACE_ID = "+accumulo";
 -  public static final String ACCUMULO_NAMESPACE = "accumulo";
 -
    private static ZooCache getZooCache(Instance instance) {
-     return new ZooCacheFactory().getZooCache(instance.getZooKeepers(), instance.getZooKeepersSessionTimeOut());
 -    SecurityManager sm = System.getSecurityManager();
 -    if (sm != null) {
 -      sm.checkPermission(TABLES_PERMISSION);
 -    }
+     return new ZooCacheFactory().getZooCache(instance.getZooKeepers(),
+         instance.getZooKeepersSessionTimeOut());
    }
  
 -  private static SortedMap<String,String> getMap(Instance instance, boolean nameAsKey) {
 +  public static boolean exists(Instance instance, Namespace.ID namespaceId) {
      ZooCache zc = getZooCache(instance);
 -
      List<String> namespaceIds = zc.getChildren(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES);
 +    return namespaceIds.contains(namespaceId.canonicalID());
 +  }
 +
-   public static List<Table.ID> getTableIds(Instance instance, Namespace.ID namespaceId) throws NamespaceNotFoundException {
++  public static List<Table.ID> getTableIds(Instance instance, Namespace.ID namespaceId)
++      throws NamespaceNotFoundException {
 +    String namespace = getNamespaceName(instance, namespaceId);
 +    List<Table.ID> tableIds = new LinkedList<>();
 +    for (Entry<String,Table.ID> nameToId : Tables.getNameToIdMap(instance).entrySet())
 +      if (namespace.equals(Tables.qualify(nameToId.getKey()).getFirst()))
 +        tableIds.add(nameToId.getValue());
 +    return tableIds;
 +  }
  
-   public static List<String> getTableNames(Instance instance, Namespace.ID namespaceId) throws NamespaceNotFoundException {
 -    TreeMap<String,String> namespaceMap = new TreeMap<>();
++  public static List<String> getTableNames(Instance instance, Namespace.ID namespaceId)
++      throws NamespaceNotFoundException {
 +    String namespace = getNamespaceName(instance, namespaceId);
 +    List<String> names = new LinkedList<>();
 +    for (String name : Tables.getNameToIdMap(instance).keySet())
 +      if (namespace.equals(Tables.qualify(name).getFirst()))
 +        names.add(name);
 +    return names;
 +  }
  
 +  /**
-    * Gets all the namespaces from ZK. The first arg (t) the BiConsumer accepts is the ID and the second (u) is the namespaceName.
++   * Gets all the namespaces from ZK. The first arg (t) the BiConsumer accepts is the ID and the
++   * second (u) is the namespaceName.
 +   */
 +  private static void getAllNamespaces(Instance instance, BiConsumer<String,String> biConsumer) {
 +    final ZooCache zc = getZooCache(instance);
 +    List<String> namespaceIds = zc.getChildren(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES);
      for (String id : namespaceIds) {
-       byte[] path = zc.get(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES + "/" + id + Constants.ZNAMESPACE_NAME);
+       byte[] path = zc.get(
+           ZooUtil.getRoot(instance) + Constants.ZNAMESPACES + "/" + id + Constants.ZNAMESPACE_NAME);
        if (path != null) {
 -        if (nameAsKey)
 -          namespaceMap.put(new String(path, UTF_8), id);
 -        else
 -          namespaceMap.put(id, new String(path, UTF_8));
 +        biConsumer.accept(id, new String(path, UTF_8));
        }
      }
 -    return namespaceMap;
    }
  
 -  public static boolean exists(Instance instance, String namespaceId) {
 -    ZooCache zc = getZooCache(instance);
 -    List<String> namespaceIds = zc.getChildren(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES);
 -    return namespaceIds.contains(namespaceId);
 +  /**
 +   * Return sorted map with key = ID, value = namespaceName
 +   */
 +  public static SortedMap<Namespace.ID,String> getIdToNameMap(Instance instance) {
 +    SortedMap<Namespace.ID,String> idMap = new TreeMap<>();
 +    getAllNamespaces(instance, (id, name) -> idMap.put(Namespace.ID.of(id), name));
 +    return idMap;
    }
  
 -  public static String getNamespaceId(Instance instance, String namespace)
 -      throws NamespaceNotFoundException {
 -    String id = getNameToIdMap(instance).get(namespace);
 -    if (id == null)
 -      throw new NamespaceNotFoundException(null, namespace,
 -          "getNamespaceId() failed to find namespace");
 -    return id;
 +  /**
 +   * Return sorted map with key = namespaceName, value = ID
 +   */
 +  public static SortedMap<String,Namespace.ID> getNameToIdMap(Instance instance) {
 +    SortedMap<String,Namespace.ID> nameMap = new TreeMap<>();
 +    getAllNamespaces(instance, (id, name) -> nameMap.put(name, Namespace.ID.of(id)));
 +    return nameMap;
    }
  
 -  public static String getNamespaceName(Instance instance, String namespaceId)
 +  /**
 +   * Look for namespace ID in ZK. Throw NamespaceNotFoundException if not found.
 +   */
-   public static Namespace.ID getNamespaceId(Instance instance, String namespaceName) throws NamespaceNotFoundException {
++  public static Namespace.ID getNamespaceId(Instance instance, String namespaceName)
+       throws NamespaceNotFoundException {
 -    String namespaceName = getIdToNameMap(instance).get(namespaceId);
 -    if (namespaceName == null)
 -      throw new NamespaceNotFoundException(namespaceId, null,
 -          "getNamespaceName() failed to find namespace");
 -    return namespaceName;
 -  }
 -
 -  public static SortedMap<String,String> getNameToIdMap(Instance instance) {
 -    return getMap(instance, true);
 +    final ArrayList<Namespace.ID> singleId = new ArrayList<>(1);
 +    getAllNamespaces(instance, (id, name) -> {
 +      if (name.equals(namespaceName))
 +        singleId.add(Namespace.ID.of(id));
 +    });
 +    if (singleId.isEmpty())
-       throw new NamespaceNotFoundException(null, namespaceName, "getNamespaceId() failed to find namespace");
++      throw new NamespaceNotFoundException(null, namespaceName,
++          "getNamespaceId() failed to find namespace");
 +    return singleId.get(0);
    }
  
 -  public static SortedMap<String,String> getIdToNameMap(Instance instance) {
 -    return getMap(instance, false);
 +  /**
 +   * Look for namespace ID in ZK. Fail quietly by logging and returning null.
 +   */
 +  public static Namespace.ID lookupNamespaceId(Instance instance, String namespaceName) {
 +    Namespace.ID id = null;
 +    try {
 +      id = getNamespaceId(instance, namespaceName);
 +    } catch (NamespaceNotFoundException e) {
 +      if (log.isDebugEnabled())
 +        log.debug("Failed to find namespace ID from name: " + namespaceName, e);
 +    }
 +    return id;
    }
  
 -  public static List<String> getTableIds(Instance instance, String namespaceId)
 -      throws NamespaceNotFoundException {
 -    String namespace = getNamespaceName(instance, namespaceId);
 -    List<String> names = new LinkedList<>();
 -    for (Entry<String,String> nameToId : Tables.getNameToIdMap(instance).entrySet())
 -      if (namespace.equals(Tables.qualify(nameToId.getKey()).getFirst()))
 -        names.add(nameToId.getValue());
 -    return names;
 +  /**
 +   * Return true if namespace name exists
 +   */
 +  public static boolean namespaceNameExists(Instance instance, String namespaceName) {
 +    return lookupNamespaceId(instance, namespaceName) != null;
    }
  
 -  public static List<String> getTableNames(Instance instance, String namespaceId)
 +  /**
 +   * Look for namespace name in ZK. Throw NamespaceNotFoundException if not found.
 +   */
-   public static String getNamespaceName(Instance instance, Namespace.ID namespaceId) throws NamespaceNotFoundException {
++  public static String getNamespaceName(Instance instance, Namespace.ID namespaceId)
+       throws NamespaceNotFoundException {
 -    String namespace = getNamespaceName(instance, namespaceId);
 -    List<String> names = new LinkedList<>();
 -    for (String name : Tables.getNameToIdMap(instance).keySet())
 -      if (namespace.equals(Tables.qualify(name).getFirst()))
 -        names.add(name);
 -    return names;
 +    String name;
 +    ZooCache zc = getZooCache(instance);
-     byte[] path = zc.get(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES + "/" + namespaceId.canonicalID() + Constants.ZNAMESPACE_NAME);
++    byte[] path = zc.get(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES + "/"
++        + namespaceId.canonicalID() + Constants.ZNAMESPACE_NAME);
 +    if (path != null)
 +      name = new String(path, UTF_8);
 +    else
-       throw new NamespaceNotFoundException(namespaceId.canonicalID(), null, "getNamespaceName() failed to find namespace");
++      throw new NamespaceNotFoundException(namespaceId.canonicalID(), null,
++          "getNamespaceName() failed to find namespace");
 +    return name;
    }
  
  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/OfflineIterator.java
index a6d8720,783ea77..fb926da
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/OfflineIterator.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/OfflineIterator.java
@@@ -159,10 -162,11 +162,11 @@@ class OfflineIterator implements Iterat
      this.range = range;
  
      if (this.options.fetchedColumns.size() > 0) {
-       this.range = range.bound(this.options.fetchedColumns.first(), this.options.fetchedColumns.last());
+       this.range = range.bound(this.options.fetchedColumns.first(),
+           this.options.fetchedColumns.last());
      }
  
 -    this.tableId = table.toString();
 +    this.tableId = Table.ID.of(table.toString());
      this.authorizations = authorizations;
      this.readers = new ArrayList<>();
  
@@@ -315,14 -324,11 +324,15 @@@
      return new Pair<>(extent, location);
    }
  
-   private SortedKeyValueIterator<Key,Value> createIterator(KeyExtent extent, List<String> absFiles) throws TableNotFoundException, AccumuloException,
-       IOException {
+   private SortedKeyValueIterator<Key,Value> createIterator(KeyExtent extent, List<String> absFiles)
+       throws TableNotFoundException, AccumuloException, IOException {
  
      // TODO share code w/ tablet - ACCUMULO-1303
 -    AccumuloConfiguration acuTableConf = AccumuloConfiguration.getTableConfiguration(conn, tableId);
 +
 +    // possible race condition here, if table is renamed
 +    String tableName = Tables.getTableName(conn.getInstance(), tableId);
-     AccumuloConfiguration acuTableConf = new ConfigurationCopy(conn.tableOperations().getProperties(tableName));
++    AccumuloConfiguration acuTableConf = new ConfigurationCopy(
++        conn.tableOperations().getProperties(tableName));
  
      Configuration conf = CachedConfiguration.getInstance();
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/OfflineScanner.java
index 8772184,955a8da..f38e886
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/OfflineScanner.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/OfflineScanner.java
@@@ -41,7 -41,8 +41,8 @@@ public class OfflineScanner extends Sca
    private Authorizations authorizations;
    private Text tableId;
  
-   public OfflineScanner(Instance instance, Credentials credentials, Table.ID tableId, Authorizations authorizations) {
 -  public OfflineScanner(Instance instance, Credentials credentials, String tableId,
++  public OfflineScanner(Instance instance, Credentials credentials, Table.ID tableId,
+       Authorizations authorizations) {
      checkArgument(instance != null, "instance is null");
      checkArgument(credentials != null, "credentials is null");
      checkArgument(tableId != null, "tableId is null");
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ReplicationOperationsImpl.java
index 7811651,527c02a..9421a97
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ReplicationOperationsImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ReplicationOperationsImpl.java
@@@ -117,7 -125,8 +125,8 @@@ public class ReplicationOperationsImpl 
      });
    }
  
-   protected Table.ID getTableId(Connector conn, String tableName) throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
 -  protected String getTableId(Connector conn, String tableName)
++  protected Table.ID getTableId(Connector conn, String tableName)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
      TableOperations tops = conn.tableOperations();
  
      if (!conn.tableOperations().exists(tableName)) {
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ScannerIterator.java
index ec0c48c,bc80f55..a588ea3
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ScannerIterator.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ScannerIterator.java
@@@ -66,7 -66,8 +66,8 @@@ public class ScannerIterator implement
  
    private static final List<KeyValue> EMPTY_LIST = Collections.emptyList();
  
-   private static ThreadPoolExecutor readaheadPool = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 3l, TimeUnit.SECONDS, new SynchronousQueue<>(),
+   private static ThreadPoolExecutor readaheadPool = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 3l,
 -      TimeUnit.SECONDS, new SynchronousQueue<Runnable>(),
++      TimeUnit.SECONDS, new SynchronousQueue<>(),
        new NamingThreadFactory("Accumulo scanner read ahead thread"));
  
    private class Reader implements Runnable {
@@@ -104,8 -106,8 +106,9 @@@
  
    }
  
-   ScannerIterator(ClientContext context, Table.ID tableId, Authorizations authorizations, Range range, int size, int timeOut, ScannerOptions options,
-       boolean isolated, long readaheadThreshold) {
 -  ScannerIterator(ClientContext context, String tableId, Authorizations authorizations, Range range,
 -      int size, int timeOut, ScannerOptions options, boolean isolated, long readaheadThreshold) {
++  ScannerIterator(ClientContext context, Table.ID tableId, Authorizations authorizations,
++      Range range, int size, int timeOut, ScannerOptions options, boolean isolated,
++      long readaheadThreshold) {
      this.timeOut = timeOut;
      this.readaheadThreshold = readaheadThreshold;
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/SecurityOperationsImpl.java
index 781a5d4,71059b1..7573a09
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/SecurityOperationsImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/SecurityOperationsImpl.java
@@@ -48,9 -48,10 +48,10 @@@ public class SecurityOperationsImpl imp
  
    private final ClientContext context;
  
-   private void executeVoid(ClientExec<ClientService.Client> exec) throws AccumuloException, AccumuloSecurityException {
 -  private void execute(ClientExec<ClientService.Client> exec)
++  private void executeVoid(ClientExec<ClientService.Client> exec)
+       throws AccumuloException, AccumuloSecurityException {
      try {
 -      ServerClient.executeRaw(context, exec);
 +      ServerClient.executeRawVoid(context, exec);
      } catch (ThriftTableOperationException ttoe) {
        // recast missing table
        if (ttoe.getType() == TableOperationExceptionType.NOTFOUND)
@@@ -125,9 -131,10 +131,10 @@@
    }
  
    @Override
-   public void dropLocalUser(final String principal) throws AccumuloException, AccumuloSecurityException {
+   public void dropLocalUser(final String principal)
+       throws AccumuloException, AccumuloSecurityException {
      checkArgument(principal != null, "principal is null");
 -    execute(new ClientExec<ClientService.Client>() {
 +    executeVoid(new ClientExec<ClientService.Client>() {
        @Override
        public void execute(ClientService.Client client) throws Exception {
          client.dropLocalUser(Tracer.traceInfo(), context.rpcCreds(), principal);
@@@ -165,10 -177,11 +177,11 @@@
      checkArgument(principal != null, "principal is null");
      checkArgument(token != null, "token is null");
      final Credentials toChange = new Credentials(principal, token);
 -    execute(new ClientExec<ClientService.Client>() {
 +    executeVoid(new ClientExec<ClientService.Client>() {
        @Override
        public void execute(ClientService.Client client) throws Exception {
-         client.changeLocalUserPassword(Tracer.traceInfo(), context.rpcCreds(), principal, ByteBuffer.wrap(token.getPassword()));
+         client.changeLocalUserPassword(Tracer.traceInfo(), context.rpcCreds(), principal,
+             ByteBuffer.wrap(token.getPassword()));
        }
      });
      if (context.getCredentials().getPrincipal().equals(principal)) {
@@@ -177,13 -190,15 +190,15 @@@
    }
  
    @Override
-   public void changeUserAuthorizations(final String principal, final Authorizations authorizations) throws AccumuloException, AccumuloSecurityException {
+   public void changeUserAuthorizations(final String principal, final Authorizations authorizations)
+       throws AccumuloException, AccumuloSecurityException {
      checkArgument(principal != null, "principal is null");
      checkArgument(authorizations != null, "authorizations is null");
 -    execute(new ClientExec<ClientService.Client>() {
 +    executeVoid(new ClientExec<ClientService.Client>() {
        @Override
        public void execute(ClientService.Client client) throws Exception {
-         client.changeAuthorizations(Tracer.traceInfo(), context.rpcCreds(), principal, ByteBufferUtil.toByteBuffers(authorizations.getAuthorizations()));
+         client.changeAuthorizations(Tracer.traceInfo(), context.rpcCreds(), principal,
+             ByteBufferUtil.toByteBuffers(authorizations.getAuthorizations()));
        }
      });
    }
@@@ -246,13 -269,15 +269,15 @@@
    }
  
    @Override
-   public void grantSystemPermission(final String principal, final SystemPermission permission) throws AccumuloException, AccumuloSecurityException {
+   public void grantSystemPermission(final String principal, final SystemPermission permission)
+       throws AccumuloException, AccumuloSecurityException {
      checkArgument(principal != null, "principal is null");
      checkArgument(permission != null, "permission is null");
 -    execute(new ClientExec<ClientService.Client>() {
 +    executeVoid(new ClientExec<ClientService.Client>() {
        @Override
        public void execute(ClientService.Client client) throws Exception {
-         client.grantSystemPermission(Tracer.traceInfo(), context.rpcCreds(), principal, permission.getId());
+         client.grantSystemPermission(Tracer.traceInfo(), context.rpcCreds(), principal,
+             permission.getId());
        }
      });
    }
@@@ -264,10 -289,11 +289,11 @@@
      checkArgument(table != null, "table is null");
      checkArgument(permission != null, "permission is null");
      try {
 -      execute(new ClientExec<ClientService.Client>() {
 +      executeVoid(new ClientExec<ClientService.Client>() {
          @Override
          public void execute(ClientService.Client client) throws Exception {
-           client.grantTablePermission(Tracer.traceInfo(), context.rpcCreds(), principal, table, permission.getId());
+           client.grantTablePermission(Tracer.traceInfo(), context.rpcCreds(), principal, table,
+               permission.getId());
          }
        });
      } catch (AccumuloSecurityException e) {
@@@ -284,22 -311,25 +311,25 @@@
      checkArgument(principal != null, "principal is null");
      checkArgument(namespace != null, "namespace is null");
      checkArgument(permission != null, "permission is null");
 -    execute(new ClientExec<ClientService.Client>() {
 +    executeVoid(new ClientExec<ClientService.Client>() {
        @Override
        public void execute(ClientService.Client client) throws Exception {
-         client.grantNamespacePermission(Tracer.traceInfo(), context.rpcCreds(), principal, namespace, permission.getId());
+         client.grantNamespacePermission(Tracer.traceInfo(), context.rpcCreds(), principal,
+             namespace, permission.getId());
        }
      });
    }
  
    @Override
-   public void revokeSystemPermission(final String principal, final SystemPermission permission) throws AccumuloException, AccumuloSecurityException {
+   public void revokeSystemPermission(final String principal, final SystemPermission permission)
+       throws AccumuloException, AccumuloSecurityException {
      checkArgument(principal != null, "principal is null");
      checkArgument(permission != null, "permission is null");
 -    execute(new ClientExec<ClientService.Client>() {
 +    executeVoid(new ClientExec<ClientService.Client>() {
        @Override
        public void execute(ClientService.Client client) throws Exception {
-         client.revokeSystemPermission(Tracer.traceInfo(), context.rpcCreds(), principal, permission.getId());
+         client.revokeSystemPermission(Tracer.traceInfo(), context.rpcCreds(), principal,
+             permission.getId());
        }
      });
    }
@@@ -311,10 -341,11 +341,11 @@@
      checkArgument(table != null, "table is null");
      checkArgument(permission != null, "permission is null");
      try {
 -      execute(new ClientExec<ClientService.Client>() {
 +      executeVoid(new ClientExec<ClientService.Client>() {
          @Override
          public void execute(ClientService.Client client) throws Exception {
-           client.revokeTablePermission(Tracer.traceInfo(), context.rpcCreds(), principal, table, permission.getId());
+           client.revokeTablePermission(Tracer.traceInfo(), context.rpcCreds(), principal, table,
+               permission.getId());
          }
        });
      } catch (AccumuloSecurityException e) {
@@@ -331,10 -363,11 +363,11 @@@
      checkArgument(principal != null, "principal is null");
      checkArgument(namespace != null, "namespace is null");
      checkArgument(permission != null, "permission is null");
 -    execute(new ClientExec<ClientService.Client>() {
 +    executeVoid(new ClientExec<ClientService.Client>() {
        @Override
        public void execute(ClientService.Client client) throws Exception {
-         client.revokeNamespacePermission(Tracer.traceInfo(), context.rpcCreds(), principal, namespace, permission.getId());
+         client.revokeNamespacePermission(Tracer.traceInfo(), context.rpcCreds(), principal,
+             namespace, permission.getId());
        }
      });
    }
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ServerClient.java
index d21a32e,6e49585..c0edd5a
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ServerClient.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ServerClient.java
@@@ -48,14 -45,10 +48,16 @@@ import org.slf4j.LoggerFactory
  public class ServerClient {
    private static final Logger log = LoggerFactory.getLogger(ServerClient.class);
  
-   public static <T> T execute(ClientContext context, ClientExecReturn<T,ClientService.Client> exec) throws AccumuloException, AccumuloSecurityException {
+   public static <T> T execute(ClientContext context, ClientExecReturn<T,ClientService.Client> exec)
+       throws AccumuloException, AccumuloSecurityException {
 +    return execute(context, new ClientService.Client.Factory(), exec);
 +  }
 +
-   public static <CT extends TServiceClient,RT> RT execute(ClientContext context, TServiceClientFactory<CT> factory, ClientExecReturn<RT,CT> exec)
++  public static <CT extends TServiceClient,RT> RT execute(ClientContext context,
++      TServiceClientFactory<CT> factory, ClientExecReturn<RT,CT> exec)
 +      throws AccumuloException, AccumuloSecurityException {
      try {
 -      return executeRaw(context, exec);
 +      return executeRaw(context, factory, exec);
      } catch (ThriftSecurityException e) {
        throw new AccumuloSecurityException(e.user, e.code, e);
      } catch (AccumuloException e) {
@@@ -65,9 -58,10 +67,10 @@@
      }
    }
  
-   public static void executeVoid(ClientContext context, ClientExec<ClientService.Client> exec) throws AccumuloException, AccumuloSecurityException {
 -  public static void execute(ClientContext context, ClientExec<ClientService.Client> exec)
++  public static void executeVoid(ClientContext context, ClientExec<ClientService.Client> exec)
+       throws AccumuloException, AccumuloSecurityException {
      try {
 -      executeRaw(context, exec);
 +      executeRawVoid(context, exec);
      } catch (ThriftSecurityException e) {
        throw new AccumuloSecurityException(e.user, e.code, e);
      } catch (AccumuloException e) {
@@@ -77,17 -71,13 +80,18 @@@
      }
    }
  
-   public static <T> T executeRaw(ClientContext context, ClientExecReturn<T,ClientService.Client> exec) throws Exception {
+   public static <T> T executeRaw(ClientContext context,
+       ClientExecReturn<T,ClientService.Client> exec) throws Exception {
 +    return executeRaw(context, new ClientService.Client.Factory(), exec);
 +  }
 +
-   public static <CT extends TServiceClient,RT> RT executeRaw(ClientContext context, TServiceClientFactory<CT> factory, ClientExecReturn<RT,CT> exec)
-       throws Exception {
++  public static <CT extends TServiceClient,RT> RT executeRaw(ClientContext context,
++      TServiceClientFactory<CT> factory, ClientExecReturn<RT,CT> exec) throws Exception {
      while (true) {
 -      ClientService.Client client = null;
 +      CT client = null;
        String server = null;
        try {
 -        Pair<String,Client> pair = ServerClient.getConnection(context);
 +        Pair<String,CT> pair = ServerClient.getConnection(context, factory);
          server = pair.getFirst();
          client = pair.getSecond();
          return exec.execute(client);
@@@ -103,7 -91,8 +107,8 @@@
      }
    }
  
-   public static void executeRawVoid(ClientContext context, ClientExec<ClientService.Client> exec) throws Exception {
 -  public static void executeRaw(ClientContext context, ClientExec<ClientService.Client> exec)
++  public static void executeRawVoid(ClientContext context, ClientExec<ClientService.Client> exec)
+       throws Exception {
      while (true) {
        ClientService.Client client = null;
        String server = null;
@@@ -131,21 -119,13 +137,25 @@@
      return getConnection(context, true);
    }
  
-   public static <CT extends TServiceClient> Pair<String,CT> getConnection(ClientContext context, TServiceClientFactory<CT> factory) throws TTransportException {
++  public static <CT extends TServiceClient> Pair<String,CT> getConnection(ClientContext context,
++      TServiceClientFactory<CT> factory) throws TTransportException {
 +    return getConnection(context, factory, true, context.getClientTimeoutInMillis());
 +  }
 +
-   public static Pair<String,ClientService.Client> getConnection(ClientContext context, boolean preferCachedConnections) throws TTransportException {
+   public static Pair<String,ClientService.Client> getConnection(ClientContext context,
+       boolean preferCachedConnections) throws TTransportException {
      return getConnection(context, preferCachedConnections, context.getClientTimeoutInMillis());
    }
  
-   public static Pair<String,ClientService.Client> getConnection(ClientContext context, boolean preferCachedConnections, long rpcTimeout)
-       throws TTransportException {
-     return getConnection(context, new ClientService.Client.Factory(), preferCachedConnections, rpcTimeout);
+   public static Pair<String,ClientService.Client> getConnection(ClientContext context,
+       boolean preferCachedConnections, long rpcTimeout) throws TTransportException {
++    return getConnection(context, new ClientService.Client.Factory(), preferCachedConnections,
++        rpcTimeout);
 +  }
 +
-   public static <CT extends TServiceClient> Pair<String,CT> getConnection(ClientContext context, TServiceClientFactory<CT> factory,
-       boolean preferCachedConnections, long rpcTimeout) throws TTransportException {
++  public static <CT extends TServiceClient> Pair<String,CT> getConnection(ClientContext context,
++      TServiceClientFactory<CT> factory, boolean preferCachedConnections, long rpcTimeout)
++      throws TTransportException {
      checkArgument(context != null, "context is null");
      // create list of servers
      ArrayList<ThriftTransportKey> servers = new ArrayList<>();
@@@ -165,8 -147,10 +177,9 @@@
  
      boolean opened = false;
      try {
-       Pair<String,TTransport> pair = ThriftTransportPool.getInstance().getAnyTransport(servers, preferCachedConnections);
+       Pair<String,TTransport> pair = ThriftTransportPool.getInstance().getAnyTransport(servers,
+           preferCachedConnections);
 -      ClientService.Client client = ThriftUtil.createClient(new ClientService.Client.Factory(),
 -          pair.getSecond());
 +      CT client = ThriftUtil.createClient(factory, pair.getSecond());
        opened = true;
        warnedAboutTServersBeingDown = false;
        return new Pair<>(pair.getFirst(), client);
@@@ -184,8 -168,9 +197,9 @@@
      }
    }
  
 -  public static void close(ClientService.Client client) {
 +  public static void close(TServiceClient client) {
-     if (client != null && client.getInputProtocol() != null && client.getInputProtocol().getTransport() != null) {
+     if (client != null && client.getInputProtocol() != null
+         && client.getInputProtocol().getTransport() != null) {
        ThriftTransportPool.getInstance().returnTransport(client.getInputProtocol().getTransport());
      } else {
        log.debug("Attempt to close null connection to a server", new Exception());
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/Table.java
index 15517d9,0000000..23b083b
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java
@@@ -1,63 -1,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.client.impl;
 +
 +import java.util.concurrent.ExecutionException;
 +
 +import org.apache.accumulo.core.client.Instance;
 +
 +import com.google.common.cache.Cache;
 +import com.google.common.cache.CacheBuilder;
 +
 +public class Table {
 +
 +  /**
-    * Object representing an internal table ID. This class was created to help with type safety. For help obtaining the value of a table ID from Zookeeper, see
++   * Object representing an internal table ID. This class was created to help with type safety. For
++   * help obtaining the value of a table ID from Zookeeper, see
 +   * {@link Tables#getTableId(Instance, String)}
 +   *
-    * Uses an internal cache and private constructor for storing a WeakReference of every Table.ID. Therefore, a Table.ID can't be instantiated outside this
-    * class and is accessed by calling Table.ID.{@link #of(String)}.
++   * Uses an internal cache and private constructor for storing a WeakReference of every Table.ID.
++   * Therefore, a Table.ID can't be instantiated outside this class and is accessed by calling
++   * Table.ID.{@link #of(String)}.
 +   */
 +  public static class ID extends AbstractId {
 +    private static final long serialVersionUID = 7399913185860577809L;
 +    static final Cache<String,ID> cache = CacheBuilder.newBuilder().weakValues().build();
 +
 +    public static final ID METADATA = of("!0");
 +    public static final ID REPLICATION = of("+rep");
 +    public static final ID ROOT = of("+r");
 +
 +    private ID(final String canonical) {
 +      super(canonical);
 +    }
 +
 +    /**
 +     * Get a Table.ID object for the provided canonical string.
 +     *
 +     * @param canonical
 +     *          table ID string
 +     * @return Table.ID object
 +     */
 +    public static ID of(final String canonical) {
 +      try {
 +        return cache.get(canonical, () -> new Table.ID(canonical));
 +      } catch (ExecutionException e) {
-         throw new AssertionError("This should never happen: ID constructor should never return null.");
++        throw new AssertionError(
++            "This should never happen: ID constructor should never return null.");
 +      }
 +    }
 +  }
 +
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/TableMap.java
index 9f17fde,8bd2db3..027807f
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TableMap.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TableMap.java
@@@ -75,7 -75,8 +75,8 @@@ public class TableMap 
                namespaceIdToNameMap.put(namespaceId, namespaceName);
              }
            } catch (NamespaceNotFoundException e) {
-             log.error("Table (" + tableIdStr + ") contains reference to namespace (" + namespaceId + ") that doesn't exist", e);
 -            log.error("Table (" + tableId + ") contains reference to namespace (" + namespaceId
++            log.error("Table (" + tableIdStr + ") contains reference to namespace (" + namespaceId
+                 + ") that doesn't exist", e);
              continue;
            }
          }
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsHelper.java
index 357cab4,baf53ef..755cb09
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsHelper.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsHelper.java
@@@ -120,7 -126,10 +126,8 @@@ public abstract class TableOperationsHe
      return result;
    }
  
-   public static void checkIteratorConflicts(Map<String,String> props, IteratorSetting setting, EnumSet<IteratorScope> scopes) throws AccumuloException {
 -  @Override
 -  public void checkIteratorConflicts(String tableName, IteratorSetting setting,
 -      EnumSet<IteratorScope> scopes) throws AccumuloException, TableNotFoundException {
 -    checkArgument(tableName != null, "tableName is null");
++  public static void checkIteratorConflicts(Map<String,String> props, IteratorSetting setting,
++      EnumSet<IteratorScope> scopes) throws AccumuloException {
      checkArgument(setting != null, "setting is null");
      checkArgument(scopes != null, "scopes is null");
      for (IteratorScope scope : scopes) {
@@@ -128,11 -138,11 +136,11 @@@
        String nameStr = String.format("%s.%s", scopeStr, setting.getName());
        String optStr = String.format("%s.opt.", nameStr);
        Map<String,String> optionConflicts = new TreeMap<>();
 -      for (Entry<String,String> property : this.getProperties(tableName)) {
 +      for (Entry<String,String> property : props.entrySet()) {
          if (property.getKey().startsWith(scopeStr)) {
            if (property.getKey().equals(nameStr))
-             throw new AccumuloException(new IllegalArgumentException("iterator name conflict for " + setting.getName() + ": " + property.getKey() + "="
-                 + property.getValue()));
+             throw new AccumuloException(new IllegalArgumentException("iterator name conflict for "
+                 + setting.getName() + ": " + property.getKey() + "=" + property.getValue()));
            if (property.getKey().startsWith(optStr))
              optionConflicts.put(property.getKey(), property.getValue());
            if (property.getKey().contains(".opt."))
@@@ -154,15 -168,8 +166,17 @@@
    }
  
    @Override
-   public void checkIteratorConflicts(String tableName, IteratorSetting setting, EnumSet<IteratorScope> scopes) throws AccumuloException, TableNotFoundException {
++  public void checkIteratorConflicts(String tableName, IteratorSetting setting,
++      EnumSet<IteratorScope> scopes) throws AccumuloException, TableNotFoundException {
 +    checkArgument(tableName != null, "tableName is null");
 +    Map<String,String> iteratorProps = new HashMap<>();
 +    for (Entry<String,String> entry : this.getProperties(tableName))
 +      iteratorProps.put(entry.getKey(), entry.getValue());
 +    checkIteratorConflicts(iteratorProps, setting, scopes);
 +  }
 +
-   public int addConstraint(String tableName, String constraintClassName) throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
+   public int addConstraint(String tableName, String constraintClassName)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
      TreeSet<Integer> constraintNumbers = new TreeSet<>();
      TreeMap<String,Integer> constraintClasses = new TreeMap<>();
      int i;
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsImpl.java
index 96afcf7,9632cc0..ea318a7
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsImpl.java
@@@ -268,8 -258,9 +278,9 @@@ public class TableOperationsImpl extend
        MasterClientService.Iface client = null;
        try {
          client = MasterClient.getConnectionWithRetry(context);
-         client.executeFateOperation(Tracer.traceInfo(), context.rpcCreds(), opid, op, args, opts, autoCleanUp);
+         client.executeFateOperation(Tracer.traceInfo(), context.rpcCreds(), opid, op, args, opts,
+             autoCleanUp);
 -        break;
 +        return;
        } catch (TTransportException tte) {
          log.debug("Failed to call executeFateOperation(), retrying ... ", tte);
          sleepUninterruptibly(100, TimeUnit.MILLISECONDS);
@@@ -361,7 -348,8 +380,8 @@@
          case NAMESPACE_NOTFOUND:
            throw new NamespaceNotFoundException(e);
          case OFFLINE:
-           throw new TableOfflineException(context.getInstance(), Tables.getTableId(context.getInstance(), tableOrNamespaceName).canonicalID());
+           throw new TableOfflineException(context.getInstance(),
 -              Tables.getTableId(context.getInstance(), tableOrNamespaceName));
++              Tables.getTableId(context.getInstance(), tableOrNamespaceName).canonicalID());
          default:
            throw new AccumuloException(e.description, e);
        }
@@@ -386,7 -374,8 +406,8 @@@
      private CountDownLatch latch;
      private AtomicReference<Throwable> exception;
  
-     SplitEnv(String tableName, Table.ID tableId, ExecutorService executor, CountDownLatch latch, AtomicReference<Throwable> exception) {
 -    SplitEnv(String tableName, String tableId, ExecutorService executor, CountDownLatch latch,
++    SplitEnv(String tableName, Table.ID tableId, ExecutorService executor, CountDownLatch latch,
+         AtomicReference<Throwable> exception) {
        this.tableName = tableName;
        this.tableId = tableId;
        this.executor = executor;
@@@ -436,8 -426,9 +458,9 @@@
    }
  
    @Override
-   public void addSplits(String tableName, SortedSet<Text> partitionKeys) throws TableNotFoundException, AccumuloException, AccumuloSecurityException {
+   public void addSplits(String tableName, SortedSet<Text> partitionKeys)
+       throws TableNotFoundException, AccumuloException, AccumuloSecurityException {
 -    String tableId = Tables.getTableId(context.getInstance(), tableName);
 +    Table.ID tableId = Tables.getTableId(context.getInstance(), tableName);
  
      List<Text> splits = new ArrayList<>(partitionKeys);
      // should be sorted because we copied from a sorted set, but that makes assumptions about
@@@ -459,10 -453,12 +485,12 @@@
            // user would only have the stack trace for the background thread.
            if (excep instanceof TableNotFoundException) {
              TableNotFoundException tnfe = (TableNotFoundException) excep;
-             throw new TableNotFoundException(tableId.canonicalID(), tableName, "Table not found by background thread", tnfe);
 -            throw new TableNotFoundException(tableId, tableName,
++            throw new TableNotFoundException(tableId.canonicalID(), tableName,
+                 "Table not found by background thread", tnfe);
            } else if (excep instanceof TableOfflineException) {
-             log.debug("TableOfflineException occurred in background thread. Throwing new exception", excep);
+             log.debug("TableOfflineException occurred in background thread. Throwing new exception",
+                 excep);
 -            throw new TableOfflineException(context.getInstance(), tableId);
 +            throw new TableOfflineException(context.getInstance(), tableId.canonicalID());
            } else if (excep instanceof AccumuloSecurityException) {
              // base == background accumulo security exception
              AccumuloSecurityException base = (AccumuloSecurityException) excep;
@@@ -483,8 -480,9 +512,9 @@@
      }
    }
  
-   private void addSplits(String tableName, SortedSet<Text> partitionKeys, Table.ID tableId) throws AccumuloException, AccumuloSecurityException,
-       TableNotFoundException, AccumuloServerException {
 -  private void addSplits(String tableName, SortedSet<Text> partitionKeys, String tableId)
++  private void addSplits(String tableName, SortedSet<Text> partitionKeys, Table.ID tableId)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException,
+       AccumuloServerException {
      TabletLocator tabLocator = TabletLocator.getLocator(context, tableId);
  
      for (Text split : partitionKeys) {
@@@ -716,7 -731,8 +763,8 @@@
      if (propertiesToSet == null)
        propertiesToSet = Collections.emptyMap();
  
-     List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(srcTableId.getUtf8()), ByteBuffer.wrap(newTableName.getBytes(UTF_8)));
 -    List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(srcTableId.getBytes(UTF_8)),
++    List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(srcTableId.getUtf8()),
+         ByteBuffer.wrap(newTableName.getBytes(UTF_8)));
      Map<String,String> opts = new HashMap<>();
      for (Entry<String,String> entry : propertiesToSet.entrySet()) {
        if (entry.getKey().startsWith(CLONE_EXCLUDE_PREFIX))
@@@ -751,17 -770,18 +802,18 @@@
    }
  
    @Override
-   public void flush(String tableName, Text start, Text end, boolean wait) throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
+   public void flush(String tableName, Text start, Text end, boolean wait)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
      checkArgument(tableName != null, "tableName is null");
  
 -    String tableId = Tables.getTableId(context.getInstance(), tableName);
 +    Table.ID tableId = Tables.getTableId(context.getInstance(), tableName);
      _flush(tableId, start, end, wait);
    }
  
    @Override
-   public void compact(String tableName, Text start, Text end, boolean flush, boolean wait) throws AccumuloSecurityException, TableNotFoundException,
-       AccumuloException {
+   public void compact(String tableName, Text start, Text end, boolean flush, boolean wait)
+       throws AccumuloSecurityException, TableNotFoundException, AccumuloException {
 -    compact(tableName, start, end, new ArrayList<IteratorSetting>(), flush, wait);
 +    compact(tableName, start, end, new ArrayList<>(), flush, wait);
    }
  
    @Override
@@@ -800,9 -826,11 +858,11 @@@
      if (config.getFlush())
        _flush(tableId, start, end, true);
  
-     List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(tableId.getUtf8()), start == null ? EMPTY : TextUtil.getByteBuffer(start), end == null ? EMPTY
-         : TextUtil.getByteBuffer(end), ByteBuffer.wrap(IteratorUtil.encodeIteratorSettings(config.getIterators())), ByteBuffer
-         .wrap(CompactionStrategyConfigUtil.encode(config.getCompactionStrategy())));
 -    List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(tableId.getBytes(UTF_8)),
++    List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(tableId.getUtf8()),
+         start == null ? EMPTY : TextUtil.getByteBuffer(start),
+         end == null ? EMPTY : TextUtil.getByteBuffer(end),
+         ByteBuffer.wrap(IteratorUtil.encodeIteratorSettings(config.getIterators())),
+         ByteBuffer.wrap(CompactionStrategyConfigUtil.encode(config.getCompactionStrategy())));
  
      Map<String,String> opts = new HashMap<>();
      try {
@@@ -816,10 -847,11 +876,11 @@@
    }
  
    @Override
-   public void cancelCompaction(String tableName) throws AccumuloSecurityException, TableNotFoundException, AccumuloException {
+   public void cancelCompaction(String tableName)
+       throws AccumuloSecurityException, TableNotFoundException, AccumuloException {
 -    String tableId = Tables.getTableId(context.getInstance(), tableName);
 +    Table.ID tableId = Tables.getTableId(context.getInstance(), tableName);
  
 -    List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(tableId.getBytes(UTF_8)));
 +    List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(tableId.getUtf8()));
  
      Map<String,String> opts = new HashMap<>();
      try {
@@@ -831,7 -864,8 +893,8 @@@
  
    }
  
-   private void _flush(Table.ID tableId, Text start, Text end, boolean wait) throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
 -  private void _flush(String tableId, Text start, Text end, boolean wait)
++  private void _flush(Table.ID tableId, Text start, Text end, boolean wait)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
  
      try {
        long flushID;
@@@ -843,7 -878,7 +907,8 @@@
          MasterClientService.Iface client = null;
          try {
            client = MasterClient.getConnectionWithRetry(context);
-           flushID = client.initiateFlush(Tracer.traceInfo(), context.rpcCreds(), tableId.canonicalID());
 -          flushID = client.initiateFlush(Tracer.traceInfo(), context.rpcCreds(), tableId);
++          flushID = client.initiateFlush(Tracer.traceInfo(), context.rpcCreds(),
++              tableId.canonicalID());
            break;
          } catch (TTransportException tte) {
            log.debug("Failed to call initiateFlush, retrying ... ", tte);
@@@ -861,8 -892,9 +926,9 @@@
          MasterClientService.Iface client = null;
          try {
            client = MasterClient.getConnectionWithRetry(context);
-           client.waitForFlush(Tracer.traceInfo(), context.rpcCreds(), tableId.canonicalID(), TextUtil.getByteBuffer(start), TextUtil.getByteBuffer(end),
-               flushID, wait ? Long.MAX_VALUE : 1);
 -          client.waitForFlush(Tracer.traceInfo(), context.rpcCreds(), tableId,
++          client.waitForFlush(Tracer.traceInfo(), context.rpcCreds(), tableId.canonicalID(),
+               TextUtil.getByteBuffer(start), TextUtil.getByteBuffer(end), flushID,
+               wait ? Long.MAX_VALUE : 1);
            break;
          } catch (TTransportException tte) {
            log.debug("Failed to call initiateFlush, retrying ... ", tte);
@@@ -956,9 -990,19 +1028,10 @@@
    }
  
    @Override
-   public void setLocalityGroups(String tableName, Map<String,Set<Text>> groups) throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
+   public void setLocalityGroups(String tableName, Map<String,Set<Text>> groups)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
      // ensure locality groups do not overlap
 -    HashSet<Text> all = new HashSet<>();
 -    for (Entry<String,Set<Text>> entry : groups.entrySet()) {
 -
 -      if (!Collections.disjoint(all, entry.getValue())) {
 -        throw new IllegalArgumentException(
 -            "Group " + entry.getKey() + " overlaps with another group");
 -      }
 -
 -      all.addAll(entry.getValue());
 -    }
 +    LocalityGroupUtil.ensureNonOverlappingGroups(groups);
  
      for (Entry<String,Set<Text>> entry : groups.entrySet()) {
        Set<Text> colFams = entry.getValue();
@@@ -1023,9 -1069,10 +1098,10 @@@
  
      Random random = new Random();
      Map<String,Map<KeyExtent,List<Range>>> binnedRanges = new HashMap<>();
 -    String tableId = Tables.getTableId(context.getInstance(), tableName);
 +    Table.ID tableId = Tables.getTableId(context.getInstance(), tableName);
      TabletLocator tl = TabletLocator.getLocator(context, tableId);
-     // its possible that the cache could contain complete, but old information about a tables tablets... so clear it
+     // its possible that the cache could contain complete, but old information about a tables
+     // tablets... so clear it
      tl.invalidateCache();
      while (!tl.binRanges(context, Collections.singletonList(range), binnedRanges).isEmpty()) {
        if (!Tables.exists(context.getInstance(), tableId))
@@@ -1129,8 -1183,8 +1212,8 @@@
      }
    }
  
-   private void waitForTableStateTransition(Table.ID tableId, TableState expectedState) throws AccumuloException, TableNotFoundException,
-       AccumuloSecurityException {
 -  private void waitForTableStateTransition(String tableId, TableState expectedState)
++  private void waitForTableStateTransition(Table.ID tableId, TableState expectedState)
+       throws AccumuloException, TableNotFoundException, AccumuloSecurityException {
  
      Text startRow = null;
      Text lastRow = null;
@@@ -1142,10 -1196,11 +1225,11 @@@
          TableState currentState = Tables.getTableState(context.getInstance(), tableId);
          if (currentState != expectedState) {
            if (!Tables.exists(context.getInstance(), tableId))
 -            throw new TableDeletedException(tableId);
 +            throw new TableDeletedException(tableId.canonicalID());
            if (currentState == TableState.DELETING)
 -            throw new TableNotFoundException(tableId, "", "Table is being deleted.");
 +            throw new TableNotFoundException(tableId.canonicalID(), "", "Table is being deleted.");
-           throw new AccumuloException("Unexpected table state " + tableId + " " + Tables.getTableState(context.getInstance(), tableId) + " != " + expectedState);
+           throw new AccumuloException("Unexpected table state " + tableId + " "
+               + Tables.getTableState(context.getInstance(), tableId) + " != " + expectedState);
          }
        }
  
@@@ -1263,11 -1323,12 +1352,12 @@@
    }
  
    @Override
-   public void offline(String tableName, boolean wait) throws AccumuloSecurityException, AccumuloException, TableNotFoundException {
+   public void offline(String tableName, boolean wait)
+       throws AccumuloSecurityException, AccumuloException, TableNotFoundException {
  
      checkArgument(tableName != null, "tableName is null");
 -    String tableId = Tables.getTableId(context.getInstance(), tableName);
 -    List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(tableId.getBytes(UTF_8)));
 +    Table.ID tableId = Tables.getTableId(context.getInstance(), tableName);
 +    List<ByteBuffer> args = Arrays.asList(ByteBuffer.wrap(tableId.getUtf8()));
      Map<String,String> opts = new HashMap<>();
  
      try {
@@@ -1287,10 -1350,11 +1379,11 @@@
    }
  
    @Override
-   public void online(String tableName, boolean wait) throws AccumuloSecurityException, AccumuloException, TableNotFoundException {
+   public void online(String tableName, boolean wait)
+       throws AccumuloSecurityException, AccumuloException, TableNotFoundException {
      checkArgument(tableName != null, "tableName is null");
  
 -    String tableId = Tables.getTableId(context.getInstance(), tableName);
 +    Table.ID tableId = Tables.getTableId(context.getInstance(), tableName);
  
      /**
       * ACCUMULO-4574 if table is already online return without executing fate operation.
@@@ -1679,138 -1775,4 +1801,151 @@@
  
      return new LoctionsImpl(binnedRanges);
    }
 +
 +  @Override
 +  public SummaryRetriever summaries(String tableName) {
 +
 +    return new SummaryRetriever() {
 +
 +      private Text startRow = null;
 +      private Text endRow = null;
 +      private List<TSummarizerConfiguration> summariesToFetch = Collections.emptyList();
 +      private String summarizerClassRegex;
 +      private boolean flush = false;
 +
 +      @Override
 +      public SummaryRetriever startRow(Text startRow) {
 +        Objects.requireNonNull(startRow);
 +        if (endRow != null) {
-           Preconditions.checkArgument(startRow.compareTo(endRow) < 0, "Start row must be less than end row : %s >= %s", startRow, endRow);
++          Preconditions.checkArgument(startRow.compareTo(endRow) < 0,
++              "Start row must be less than end row : %s >= %s", startRow, endRow);
 +        }
 +        this.startRow = startRow;
 +        return this;
 +      }
 +
 +      @Override
 +      public SummaryRetriever startRow(CharSequence startRow) {
 +        return startRow(new Text(startRow.toString()));
 +      }
 +
 +      @Override
-       public List<Summary> retrieve() throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
++      public List<Summary> retrieve()
++          throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
 +        Table.ID tableId = Tables.getTableId(context.getInstance(), tableName);
 +        if (Tables.getTableState(context.getInstance(), tableId) == TableState.OFFLINE)
 +          throw new TableOfflineException(context.getInstance(), tableId.canonicalID());
 +
-         TRowRange range = new TRowRange(TextUtil.getByteBuffer(startRow), TextUtil.getByteBuffer(endRow));
-         TSummaryRequest request = new TSummaryRequest(tableId.canonicalID(), range, summariesToFetch, summarizerClassRegex);
++        TRowRange range = new TRowRange(TextUtil.getByteBuffer(startRow),
++            TextUtil.getByteBuffer(endRow));
++        TSummaryRequest request = new TSummaryRequest(tableId.canonicalID(), range,
++            summariesToFetch, summarizerClassRegex);
 +        if (flush) {
 +          _flush(tableId, startRow, endRow, true);
 +        }
 +
-         TSummaries ret = ServerClient.execute(context, new TabletClientService.Client.Factory(), client -> {
-           TSummaries tsr = client.startGetSummaries(Tracer.traceInfo(), context.rpcCreds(), request);
-           while (!tsr.finished) {
-             tsr = client.contiuneGetSummaries(Tracer.traceInfo(), tsr.sessionId);
-           }
-           return tsr;
-         });
++        TSummaries ret = ServerClient.execute(context, new TabletClientService.Client.Factory(),
++            client -> {
++              TSummaries tsr = client.startGetSummaries(Tracer.traceInfo(), context.rpcCreds(),
++                  request);
++              while (!tsr.finished) {
++                tsr = client.contiuneGetSummaries(Tracer.traceInfo(), tsr.sessionId);
++              }
++              return tsr;
++            });
 +        return new SummaryCollection(ret).getSummaries();
 +      }
 +
 +      @Override
 +      public SummaryRetriever endRow(Text endRow) {
 +        Objects.requireNonNull(endRow);
 +        if (startRow != null) {
-           Preconditions.checkArgument(startRow.compareTo(endRow) < 0, "Start row must be less than end row : %s >= %s", startRow, endRow);
++          Preconditions.checkArgument(startRow.compareTo(endRow) < 0,
++              "Start row must be less than end row : %s >= %s", startRow, endRow);
 +        }
 +        this.endRow = endRow;
 +        return this;
 +      }
 +
 +      @Override
 +      public SummaryRetriever endRow(CharSequence endRow) {
 +        return endRow(new Text(endRow.toString()));
 +      }
 +
 +      @Override
 +      public SummaryRetriever withConfiguration(Collection<SummarizerConfiguration> configs) {
 +        Objects.requireNonNull(configs);
-         summariesToFetch = configs.stream().map(SummarizerConfigurationUtil::toThrift).collect(Collectors.toList());
++        summariesToFetch = configs.stream().map(SummarizerConfigurationUtil::toThrift)
++            .collect(Collectors.toList());
 +        return this;
 +      }
 +
 +      @Override
 +      public SummaryRetriever withConfiguration(SummarizerConfiguration... config) {
 +        Objects.requireNonNull(config);
 +        return withConfiguration(Arrays.asList(config));
 +      }
 +
 +      @Override
 +      public SummaryRetriever withMatchingConfiguration(String regex) {
 +        Objects.requireNonNull(regex);
-         // Do a sanity check here to make sure that regex compiles, instead of having it fail on a tserver.
++        // Do a sanity check here to make sure that regex compiles, instead of having it fail on a
++        // tserver.
 +        Pattern.compile(regex);
 +        this.summarizerClassRegex = regex;
 +        return this;
 +      }
 +
 +      @Override
 +      public SummaryRetriever flush(boolean b) {
 +        this.flush = b;
 +        return this;
 +      }
 +    };
 +  }
 +
 +  @Override
-   public void addSummarizers(String tableName, SummarizerConfiguration... newConfigs) throws AccumuloException, AccumuloSecurityException,
-       TableNotFoundException {
-     HashSet<SummarizerConfiguration> currentConfigs = new HashSet<>(SummarizerConfiguration.fromTableProperties(getProperties(tableName)));
++  public void addSummarizers(String tableName, SummarizerConfiguration... newConfigs)
++      throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
++    HashSet<SummarizerConfiguration> currentConfigs = new HashSet<>(
++        SummarizerConfiguration.fromTableProperties(getProperties(tableName)));
 +    HashSet<SummarizerConfiguration> newConfigSet = new HashSet<>(Arrays.asList(newConfigs));
 +
 +    newConfigSet.removeIf(sc -> currentConfigs.contains(sc));
 +
 +    Set<String> newIds = newConfigSet.stream().map(sc -> sc.getPropertyId()).collect(toSet());
 +
 +    for (SummarizerConfiguration csc : currentConfigs) {
 +      if (newIds.contains(csc.getPropertyId())) {
 +        throw new IllegalArgumentException("Summarizer property id is in use by " + csc);
 +      }
 +    }
 +
-     Set<Entry<String,String>> es = SummarizerConfiguration.toTableProperties(newConfigSet).entrySet();
++    Set<Entry<String,String>> es = SummarizerConfiguration.toTableProperties(newConfigSet)
++        .entrySet();
 +    for (Entry<String,String> entry : es) {
 +      setProperty(tableName, entry.getKey(), entry.getValue());
 +    }
 +  }
 +
 +  @Override
-   public void removeSummarizers(String tableName, Predicate<SummarizerConfiguration> predicate) throws AccumuloException, TableNotFoundException,
-       AccumuloSecurityException {
-     Collection<SummarizerConfiguration> summarizerConfigs = SummarizerConfiguration.fromTableProperties(getProperties(tableName));
++  public void removeSummarizers(String tableName, Predicate<SummarizerConfiguration> predicate)
++      throws AccumuloException, TableNotFoundException, AccumuloSecurityException {
++    Collection<SummarizerConfiguration> summarizerConfigs = SummarizerConfiguration
++        .fromTableProperties(getProperties(tableName));
 +    for (SummarizerConfiguration sc : summarizerConfigs) {
 +      if (predicate.test(sc)) {
 +        Set<String> ks = sc.toTableProperties().keySet();
 +        for (String key : ks) {
 +          removeProperty(tableName, key);
 +        }
 +      }
 +    }
 +  }
 +
 +  @Override
-   public List<SummarizerConfiguration> listSummarizers(String tableName) throws AccumuloException, TableNotFoundException, AccumuloSecurityException {
++  public List<SummarizerConfiguration> listSummarizers(String tableName)
++      throws AccumuloException, TableNotFoundException, AccumuloSecurityException {
 +    return new ArrayList<>(SummarizerConfiguration.fromTableProperties(getProperties(tableName)));
 +  }
  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/Tables.java
index a33d159,e9117bc..48c0eb0
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Tables.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Tables.java
@@@ -43,26 -46,18 +43,31 @@@ public class Tables 
  
    public static final String VALID_NAME_REGEX = "^(\\w+\\.)?(\\w+)$";
  
-   private static final SecurityPermission TABLES_PERMISSION = new SecurityPermission("tablesPermission");
-   // Per instance cache will expire after 10 minutes in case we encounter an instance not used frequently
-   private static Cache<String,TableMap> instanceToMapCache = CacheBuilder.newBuilder().expireAfterAccess(10, TimeUnit.MINUTES).build();
-   private static Cache<String,ZooCache> instanceToZooCache = CacheBuilder.newBuilder().expireAfterAccess(10, TimeUnit.MINUTES).build();
+   private static final SecurityPermission TABLES_PERMISSION = new SecurityPermission(
+       "tablesPermission");
+   // Per instance cache will expire after 10 minutes in case we encounter an instance not used
+   // frequently
+   private static Cache<String,TableMap> instanceToMapCache = CacheBuilder.newBuilder()
+       .expireAfterAccess(10, TimeUnit.MINUTES).build();
+   private static Cache<String,ZooCache> instanceToZooCache = CacheBuilder.newBuilder()
+       .expireAfterAccess(10, TimeUnit.MINUTES).build();
  
    /**
-    * Lookup table ID in ZK. Throw TableNotFoundException if not found. Also wraps NamespaceNotFoundException in TableNotFoundException if namespace is not
-    * found.
++   * Lookup table ID in ZK. Throw TableNotFoundException if not found. Also wraps
++   * NamespaceNotFoundException in TableNotFoundException if namespace is not found.
 +   */
-   public static Table.ID getTableId(Instance instance, String tableName) throws TableNotFoundException {
++  public static Table.ID getTableId(Instance instance, String tableName)
++      throws TableNotFoundException {
 +    try {
 +      return _getTableId(instance, tableName);
 +    } catch (NamespaceNotFoundException e) {
 +      throw new TableNotFoundException(tableName, e);
 +    }
 +  }
 +
 +  /**
-    * Return the cached ZooCache for provided instance. ZooCache is initially created with a watcher that will clear the TableMap cache for that instance when
-    * WatchedEvent occurs.
+    * Return the cached ZooCache for provided instance. ZooCache is initially created with a watcher
+    * that will clear the TableMap cache for that instance when WatchedEvent occurs.
     */
    private static ZooCache getZooCache(final Instance instance) {
      SecurityManager sm = System.getSecurityManager();
@@@ -73,23 -68,39 +78,26 @@@
      final String uuid = instance.getInstanceID();
  
      try {
 -      return instanceToZooCache.get(uuid, new Callable<ZooCache>() {
 -        @Override
 -        public ZooCache call() {
 -          final String zks = instance.getZooKeepers();
 -          final int timeOut = instance.getZooKeepersSessionTimeOut();
 -          return new ZooCacheFactory().getZooCache(zks, timeOut, new Watcher() {
 -            @Override
 -            public void process(WatchedEvent watchedEvent) {
 -              instanceToMapCache.invalidate(uuid);
 -            }
 -          });
 -        }
 +      return instanceToZooCache.get(uuid, () -> {
 +        final String zks = instance.getZooKeepers();
 +        final int timeOut = instance.getZooKeepersSessionTimeOut();
-         return new ZooCacheFactory().getZooCache(zks, timeOut, watchedEvent -> instanceToMapCache.invalidate(uuid));
++        return new ZooCacheFactory().getZooCache(zks, timeOut,
++            watchedEvent -> instanceToMapCache.invalidate(uuid));
        });
      } catch (ExecutionException e) {
        throw new RuntimeException(e);
      }
    }
  
 -  public static String getTableId(Instance instance, String tableName)
 -      throws TableNotFoundException {
 -    try {
 -      return _getTableId(instance, tableName);
 -    } catch (NamespaceNotFoundException e) {
 -      throw new TableNotFoundException(tableName, e);
 -    }
 -  }
 -
 -  public static String _getTableId(Instance instance, String tableName)
 +  /**
 +   * Lookup table ID in ZK. If not found, clears cache and tries again.
 +   */
-   public static Table.ID _getTableId(Instance instance, String tableName) throws NamespaceNotFoundException, TableNotFoundException {
++  public static Table.ID _getTableId(Instance instance, String tableName)
+       throws NamespaceNotFoundException, TableNotFoundException {
 -    String tableId = getNameToIdMap(instance).get(tableName);
 +    Table.ID tableId = getNameToIdMap(instance).get(tableName);
      if (tableId == null) {
-       // maybe the table exist, but the cache was not updated yet... so try to clear the cache and check again
+       // maybe the table exist, but the cache was not updated yet... so try to clear the cache and
+       // check again
        clearCache(instance);
        tableId = getNameToIdMap(instance).get(tableName);
        if (tableId == null) {
@@@ -103,10 -114,11 +111,11 @@@
      return tableId;
    }
  
-   public static String getTableName(Instance instance, Table.ID tableId) throws TableNotFoundException {
 -  public static String getTableName(Instance instance, String tableId)
++  public static String getTableName(Instance instance, Table.ID tableId)
+       throws TableNotFoundException {
      String tableName = getIdToNameMap(instance).get(tableId);
      if (tableName == null)
 -      throw new TableNotFoundException(tableId, null, null);
 +      throw new TableNotFoundException(tableId.canonicalID(), null, null);
      return tableName;
    }
  
@@@ -125,7 -138,12 +135,8 @@@
    private static TableMap getTableMap(final Instance instance) {
      TableMap map;
      try {
-       map = instanceToMapCache.get(instance.getInstanceID(), () -> new TableMap(instance, getZooCache(instance)));
 -      map = instanceToMapCache.get(instance.getInstanceID(), new Callable<TableMap>() {
 -        @Override
 -        public TableMap call() {
 -          return new TableMap(instance, getZooCache(instance));
 -        }
 -      });
++      map = instanceToMapCache.get(instance.getInstanceID(),
++          () -> new TableMap(instance, getZooCache(instance)));
      } catch (ExecutionException e) {
        throw new RuntimeException(e);
      }
@@@ -165,7 -189,8 +176,8 @@@
      } catch (TableNotFoundException e) {
        // handled in the string formatting
      }
-     return tableName == null ? String.format("?(ID:%s)", tableId.canonicalID()) : String.format("%s(ID:%s)", tableName, tableId.canonicalID());
 -    return tableName == null ? String.format("?(ID:%s)", tableId)
 -        : String.format("%s(ID:%s)", tableName, tableId);
++    return tableName == null ? String.format("?(ID:%s)", tableId.canonicalID())
++        : String.format("%s(ID:%s)", tableName, tableId.canonicalID());
    }
  
    public static String getPrintableTableInfoFromName(Instance instance, String tableName) {
@@@ -175,10 -200,11 +187,11 @@@
      } catch (TableNotFoundException e) {
        // handled in the string formatting
      }
-     return tableId == null ? String.format("%s(?)", tableName) : String.format("%s(ID:%s)", tableName, tableId.canonicalID());
+     return tableId == null ? String.format("%s(?)", tableName)
 -        : String.format("%s(ID:%s)", tableName, tableId);
++        : String.format("%s(ID:%s)", tableName, tableId.canonicalID());
    }
  
 -  public static TableState getTableState(Instance instance, String tableId) {
 +  public static TableState getTableState(Instance instance, Table.ID tableId) {
      return getTableState(instance, tableId, false);
    }
  
@@@ -194,9 -220,11 +207,11 @@@
     *          if true clear the table state in zookeeper before checking status
     * @return the table state.
     */
-   public static TableState getTableState(Instance instance, Table.ID tableId, boolean clearCachedState) {
 -  public static TableState getTableState(Instance instance, String tableId,
++  public static TableState getTableState(Instance instance, Table.ID tableId,
+       boolean clearCachedState) {
  
-     String statePath = ZooUtil.getRoot(instance) + Constants.ZTABLES + "/" + tableId.canonicalID() + Constants.ZTABLE_STATE;
 -    String statePath = ZooUtil.getRoot(instance) + Constants.ZTABLES + "/" + tableId
++    String statePath = ZooUtil.getRoot(instance) + Constants.ZTABLES + "/" + tableId.canonicalID()
+         + Constants.ZTABLE_STATE;
  
      if (clearCachedState) {
        Tables.clearCacheByPath(instance, statePath);
@@@ -250,7 -278,8 +265,8 @@@
     * @throws IllegalArgumentException
     *           if the table doesn't exist in ZooKeeper
     */
-   public static Namespace.ID getNamespaceId(Instance instance, Table.ID tableId) throws TableNotFoundException {
 -  public static String getNamespaceId(Instance instance, String tableId)
++  public static Namespace.ID getNamespaceId(Instance instance, Table.ID tableId)
+       throws TableNotFoundException {
      checkArgument(instance != null, "instance is null");
      checkArgument(tableId != null, "tableId is null");
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/TabletLocatorImpl.java
index 7c7a631,823115f..8dd736b
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletLocatorImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletLocatorImpl.java
@@@ -152,7 -156,8 +156,8 @@@ public class TabletLocatorImpl extends 
      }
    }
  
-   public TabletLocatorImpl(Table.ID tableId, TabletLocator parent, TabletLocationObtainer tlo, TabletServerLockChecker tslc) {
 -  public TabletLocatorImpl(String tableId, TabletLocator parent, TabletLocationObtainer tlo,
++  public TabletLocatorImpl(Table.ID tableId, TabletLocator parent, TabletLocationObtainer tlo,
+       TabletServerLockChecker tslc) {
      this.tableId = tableId;
      this.parent = parent;
      this.locationObtainer = tlo;
@@@ -472,9 -494,10 +494,10 @@@
      }
    }
  
-   private void lookupTabletLocation(ClientContext context, Text row, boolean retry, LockCheckerSession lcSession) throws AccumuloException,
-       AccumuloSecurityException, TableNotFoundException {
+   private void lookupTabletLocation(ClientContext context, Text row, boolean retry,
+       LockCheckerSession lcSession)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
 -    Text metadataRow = new Text(tableId);
 +    Text metadataRow = new Text(tableId.getUtf8());
      metadataRow.append(new byte[] {';'}, 0, 1);
      metadataRow.append(row.getBytes(), 0, row.getLength());
      TabletLocation ptl = parent.locateTablet(context, metadataRow, false, retry);
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchDeleter.java
index 4cd54cc,cc230b7..abbfc5d
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchDeleter.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchDeleter.java
@@@ -35,10 -35,11 +35,11 @@@ import org.apache.accumulo.core.securit
  public class TabletServerBatchDeleter extends TabletServerBatchReader implements BatchDeleter {
  
    private final ClientContext context;
 -  private String tableId;
 +  private Table.ID tableId;
    private BatchWriterConfig bwConfig;
  
-   public TabletServerBatchDeleter(ClientContext context, Table.ID tableId, Authorizations authorizations, int numQueryThreads, BatchWriterConfig bwConfig)
 -  public TabletServerBatchDeleter(ClientContext context, String tableId,
++  public TabletServerBatchDeleter(ClientContext context, Table.ID tableId,
+       Authorizations authorizations, int numQueryThreads, BatchWriterConfig bwConfig)
        throws TableNotFoundException {
      super(context, tableId, authorizations, numQueryThreads);
      this.context = context;
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReader.java
index 0999090,2be6d67..daffe19
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReader.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReader.java
@@@ -54,7 -54,8 +54,8 @@@ public class TabletServerBatchReader ex
  
    private final int batchReaderInstance = getNextBatchReaderInstance();
  
-   public TabletServerBatchReader(ClientContext context, Table.ID tableId, Authorizations authorizations, int numQueryThreads) {
 -  public TabletServerBatchReader(ClientContext context, String tableId,
++  public TabletServerBatchReader(ClientContext context, Table.ID tableId,
+       Authorizations authorizations, int numQueryThreads) {
      checkArgument(context != null, "context is null");
      checkArgument(tableId != null, "tableId is null");
      checkArgument(authorizations != null, "authorizations is null");
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReaderIterator.java
index a09576b,f00d95a..4609b8f
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReaderIterator.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchReaderIterator.java
@@@ -106,7 -106,8 +106,8 @@@ public class TabletServerBatchReaderIte
      void receive(List<Entry<Key,Value>> entries);
    }
  
-   public TabletServerBatchReaderIterator(ClientContext context, Table.ID tableId, Authorizations authorizations, ArrayList<Range> ranges, int numThreads,
 -  public TabletServerBatchReaderIterator(ClientContext context, String tableId,
++  public TabletServerBatchReaderIterator(ClientContext context, Table.ID tableId,
+       Authorizations authorizations, ArrayList<Range> ranges, int numThreads,
        ExecutorService queryThreadPool, ScannerOptions scannerOptions, long timeout) {
  
      this.context = context;
@@@ -184,8 -186,9 +186,10 @@@
  
          if (queryThreadPool.isShutdown()) {
            String shortMsg = "The BatchScanner was unexpectedly closed while this Iterator was still in use.";
-           log.error("{} Ensure that a reference to the BatchScanner is retained so that it can be closed when this Iterator is exhausted."
-               + " Not retaining a reference to the BatchScanner guarantees that you are leaking threads in your client JVM.", shortMsg);
 -          log.error(shortMsg
 -              + " Ensure that a reference to the BatchScanner is retained so that it can be closed when this Iterator is exhausted."
 -              + " Not retaining a reference to the BatchScanner guarantees that you are leaking threads in your client JVM.");
++          log.error(
++              "{} Ensure that a reference to the BatchScanner is retained so that it can be closed when this Iterator is exhausted."
++                  + " Not retaining a reference to the BatchScanner guarantees that you are leaking threads in your client JVM.",
++              shortMsg);
            throw new RuntimeException(shortMsg + " Ensure proper handling of the BatchScanner.");
          }
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java
index fa21db7,3fb8651..bde322f
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java
@@@ -240,7 -244,7 +243,8 @@@ public class TabletServerBatchWriter 
      this.notifyAll();
    }
  
-   public synchronized void addMutation(Table.ID table, Mutation m) throws MutationsRejectedException {
 -  public synchronized void addMutation(String table, Mutation m) throws MutationsRejectedException {
++  public synchronized void addMutation(Table.ID table, Mutation m)
++      throws MutationsRejectedException {
  
      if (closed)
        throw new IllegalStateException("Closed");
@@@ -294,7 -298,8 +298,8 @@@
      }
    }
  
-   public void addMutation(Table.ID table, Iterator<Mutation> iterator) throws MutationsRejectedException {
 -  public void addMutation(String table, Iterator<Mutation> iterator)
++  public void addMutation(Table.ID table, Iterator<Mutation> iterator)
+       throws MutationsRejectedException {
      while (iterator.hasNext()) {
        addMutation(table, iterator.next());
      }
@@@ -638,7 -657,8 +657,8 @@@
  
          if (rf != null) {
            if (log.isTraceEnabled())
-             log.trace("tid={}  Requeuing {} failed mutations", Thread.currentThread().getId(), rf.size());
 -            log.trace("tid=" + Thread.currentThread().getId() + "  Requeuing " + rf.size()
 -                + " failed mutations");
++            log.trace("tid={}  Requeuing {} failed mutations", Thread.currentThread().getId(),
++                rf.size());
            addFailedMutations(rf);
          }
        } catch (Throwable t) {
@@@ -680,13 -701,16 +701,14 @@@
        return ret;
      }
  
-     private void binMutations(MutationSet mutationsToProcess, Map<String,TabletServerMutations<Mutation>> binnedMutations) {
+     private void binMutations(MutationSet mutationsToProcess,
+         Map<String,TabletServerMutations<Mutation>> binnedMutations) {
 -      String tableId = null;
 +      Table.ID tableId = null;
        try {
 -        Set<Entry<String,List<Mutation>>> es = mutationsToProcess.getMutations().entrySet();
 -        for (Entry<String,List<Mutation>> entry : es) {
 +        Set<Entry<Table.ID,List<Mutation>>> es = mutationsToProcess.getMutations().entrySet();
 +        for (Entry<Table.ID,List<Mutation>> entry : es) {
            tableId = entry.getKey();
            TabletLocator locator = getLocator(tableId);
 -
 -          String table = entry.getKey();
            List<Mutation> tableMutations = entry.getValue();
  
            if (tableMutations != null) {
@@@ -698,9 -722,9 +720,10 @@@
  
                if (tableFailures.size() == tableMutations.size())
                  if (!Tables.exists(context.getInstance(), entry.getKey()))
 -                  throw new TableDeletedException(entry.getKey());
 -                else if (Tables.getTableState(context.getInstance(), table) == TableState.OFFLINE)
 -                  throw new TableOfflineException(context.getInstance(), entry.getKey());
 +                  throw new TableDeletedException(entry.getKey().canonicalID());
 +                else if (Tables.getTableState(context.getInstance(), tableId) == TableState.OFFLINE)
-                   throw new TableOfflineException(context.getInstance(), entry.getKey().canonicalID());
++                  throw new TableOfflineException(context.getInstance(),
++                      entry.getKey().canonicalID());
              }
            }
  
@@@ -712,8 -736,13 +735,9 @@@
          // assume an IOError communicating with metadata tablet
          failedMutations.add(mutationsToProcess);
        } catch (AccumuloSecurityException e) {
-         updateAuthorizationFailures(Collections.singletonMap(new KeyExtent(tableId, null, null), SecurityErrorCode.valueOf(e.getSecurityErrorCode().name())));
+         updateAuthorizationFailures(Collections.singletonMap(new KeyExtent(tableId, null, null),
+             SecurityErrorCode.valueOf(e.getSecurityErrorCode().name())));
 -      } catch (TableDeletedException e) {
 -        updateUnknownErrors(e.getMessage(), e);
 -      } catch (TableOfflineException e) {
 -        updateUnknownErrors(e.getMessage(), e);
 -      } catch (TableNotFoundException e) {
 +      } catch (TableDeletedException | TableNotFoundException | TableOfflineException e) {
          updateUnknownErrors(e.getMessage(), e);
        }
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ThriftScanner.java
index b495334,742b3b7..a0cd9d1
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/ThriftScanner.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ThriftScanner.java
@@@ -163,9 -169,12 +169,12 @@@ public class ThriftScanner 
  
      SamplerConfiguration samplerConfig;
  
-     public ScanState(ClientContext context, Table.ID tableId, Authorizations authorizations, Range range, SortedSet<Column> fetchedColumns, int size,
-         List<IterInfo> serverSideIteratorList, Map<String,Map<String,String>> serverSideIteratorOptions, boolean isolated, long readaheadThreshold,
-         SamplerConfiguration samplerConfig, long batchTimeOut, String classLoaderContext) {
 -    public ScanState(ClientContext context, String tableId, Authorizations authorizations,
++    public ScanState(ClientContext context, Table.ID tableId, Authorizations authorizations,
+         Range range, SortedSet<Column> fetchedColumns, int size,
+         List<IterInfo> serverSideIteratorList,
+         Map<String,Map<String,String>> serverSideIteratorOptions, boolean isolated,
+         long readaheadThreshold, SamplerConfiguration samplerConfig, long batchTimeOut,
+         String classLoaderContext) {
        this.context = context;
        this.authorizations = authorizations;
        this.classLoaderContext = classLoaderContext;
@@@ -246,11 -258,12 +258,12 @@@
  
              if (loc == null) {
                if (!Tables.exists(instance, scanState.tableId))
 -                throw new TableDeletedException(scanState.tableId);
 +                throw new TableDeletedException(scanState.tableId.canonicalID());
                else if (Tables.getTableState(instance, scanState.tableId) == TableState.OFFLINE)
 -                throw new TableOfflineException(instance, scanState.tableId);
 +                throw new TableOfflineException(instance, scanState.tableId.canonicalID());
  
-               error = "Failed to locate tablet for table : " + scanState.tableId + " row : " + scanState.startRow;
+               error = "Failed to locate tablet for table : " + scanState.tableId + " row : "
+                   + scanState.startRow;
                if (!error.equals(lastError))
                  log.debug("{}", error);
                else if (log.isTraceEnabled())
@@@ -414,11 -435,14 +435,14 @@@
        scanState.prevLoc = loc;
  
        if (scanState.scanID == null) {
-         Thread.currentThread().setName("Starting scan tserver=" + loc.tablet_location + " tableId=" + loc.tablet_extent.getTableId());
 -
+         Thread.currentThread().setName("Starting scan tserver=" + loc.tablet_location + " tableId="
+             + loc.tablet_extent.getTableId());
  
          if (log.isTraceEnabled()) {
-           String msg = "Starting scan tserver=" + loc.tablet_location + " tablet=" + loc.tablet_extent + " range=" + scanState.range + " ssil="
-               + scanState.serverSideIteratorList + " ssio=" + scanState.serverSideIteratorOptions + " context=" + scanState.classLoaderContext;
+           String msg = "Starting scan tserver=" + loc.tablet_location + " tablet="
+               + loc.tablet_extent + " range=" + scanState.range + " ssil="
 -              + scanState.serverSideIteratorList + " ssio=" + scanState.serverSideIteratorOptions;
++              + scanState.serverSideIteratorList + " ssio=" + scanState.serverSideIteratorOptions
++              + " context=" + scanState.classLoaderContext;
            log.trace("tid={} {}", Thread.currentThread().getId(), msg);
            timer = new OpTimer().start();
          }
diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/Writer.java
index deabe08,75b8f55..76230c3
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Writer.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Writer.java
@@@ -82,10 -85,11 +85,11 @@@ public class Writer 
        throw new IllegalArgumentException("Can not add empty mutations");
  
      while (true) {
-       TabletLocation tabLoc = TabletLocator.getLocator(context, tableId).locateTablet(context, new Text(m.getRow()), false, true);
+       TabletLocation tabLoc = TabletLocator.getLocator(context, tableId).locateTablet(context,
+           new Text(m.getRow()), false, true);
  
        if (tabLoc == null) {
 -        log.trace("No tablet location found for row " + new String(m.getRow(), UTF_8));
 +        log.trace("No tablet location found for row {}", new String(m.getRow(), UTF_8));
          sleepUninterruptibly(500, TimeUnit.MILLISECONDS);
          continue;
        }
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapred/AbstractInputFormat.java
index 5583f9f,9c7700b..f407163
--- a/core/src/main/java/org/apache/accumulo/core/client/mapred/AbstractInputFormat.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapred/AbstractInputFormat.java
@@@ -118,20 -116,6 +119,21 @@@ public abstract class AbstractInputForm
    }
  
    /**
 +   * Sets connection information needed to communicate with Accumulo for this job
 +   *
 +   * @param job
 +   *          Hadoop job instance to be configured
 +   * @param info
 +   *          Connection information for Accumulo
 +   * @since 2.0.0
 +   */
-   public static void setConnectionInfo(JobConf job, ConnectionInfo info) throws AccumuloSecurityException {
++  public static void setConnectionInfo(JobConf job, ConnectionInfo info)
++      throws AccumuloSecurityException {
 +    setConnectorInfo(job, info.getPrincipal(), info.getAuthenticationToken());
 +    setZooKeeperInstance(job, ConnectionInfoFactory.getClientConfiguration(info));
 +  }
 +
 +  /**
     * Sets the connector information needed to communicate with Accumulo in this job.
     *
     * <p>
@@@ -147,10 -134,9 +152,11 @@@
     * @param token
     *          the user's password
     * @since 1.5.0
 +   * @deprecated since 2.0.0, use {@link #setConnectionInfo(JobConf, ConnectionInfo)} instead
     */
 +  @Deprecated
-   public static void setConnectorInfo(JobConf job, String principal, AuthenticationToken token) throws AccumuloSecurityException {
+   public static void setConnectorInfo(JobConf job, String principal, AuthenticationToken token)
+       throws AccumuloSecurityException {
      if (token instanceof KerberosToken) {
        log.info("Received KerberosToken, attempting to fetch DelegationToken");
        try {
@@@ -190,10 -180,9 +200,11 @@@
     * @param tokenFile
     *          the path to the token file
     * @since 1.6.0
 +   * @deprecated since 2.0.0, use {@link #setConnectionInfo(JobConf, ConnectionInfo)} instead
     */
 +  @Deprecated
-   public static void setConnectorInfo(JobConf job, String principal, String tokenFile) throws AccumuloSecurityException {
+   public static void setConnectorInfo(JobConf job, String principal, String tokenFile)
+       throws AccumuloSecurityException {
      InputConfigurator.setConnectorInfo(CLASS, job, principal, tokenFile);
    }
  
@@@ -252,7 -243,8 +264,8 @@@
     */
    @Deprecated
    public static void setZooKeeperInstance(JobConf job, String instanceName, String zooKeepers) {
-     setZooKeeperInstance(job, ClientConfiguration.create().withInstance(instanceName).withZkHosts(zooKeepers));
+     setZooKeeperInstance(job,
 -        new ClientConfiguration().withInstance(instanceName).withZkHosts(zooKeepers));
++        ClientConfiguration.create().withInstance(instanceName).withZkHosts(zooKeepers));
    }
  
    /**
@@@ -566,13 -586,16 +590,16 @@@
  
          try {
            if (isOffline) {
-             scanner = new OfflineScanner(instance, new Credentials(principal, token), Table.ID.of(baseSplit.getTableId()), authorizations);
+             scanner = new OfflineScanner(instance, new Credentials(principal, token),
 -                baseSplit.getTableId(), authorizations);
++                Table.ID.of(baseSplit.getTableId()), authorizations);
            } else if (DeprecationUtil.isMockInstance(instance)) {
-             scanner = instance.getConnector(principal, token).createScanner(baseSplit.getTableName(), authorizations);
+             scanner = instance.getConnector(principal, token)
+                 .createScanner(baseSplit.getTableName(), authorizations);
            } else {
              ClientConfiguration clientConf = getClientConfiguration(job);
-             ClientContext context = new ClientContext(instance, new Credentials(principal, token), clientConf);
+             ClientContext context = new ClientContext(instance, new Credentials(principal, token),
+                 clientConf);
 -            scanner = new ScannerImpl(context, baseSplit.getTableId(), authorizations);
 +            scanner = new ScannerImpl(context, Table.ID.of(baseSplit.getTableId()), authorizations);
            }
            if (isIsolated) {
              log.info("Creating isolated scanner");
@@@ -645,8 -669,9 +673,9 @@@
  
    }
  
-   Map<String,Map<KeyExtent,List<Range>>> binOfflineTable(JobConf job, Table.ID tableId, List<Range> ranges) throws TableNotFoundException, AccumuloException,
-       AccumuloSecurityException {
 -  Map<String,Map<KeyExtent,List<Range>>> binOfflineTable(JobConf job, String tableId,
++  Map<String,Map<KeyExtent,List<Range>>> binOfflineTable(JobConf job, Table.ID tableId,
+       List<Range> ranges)
+       throws TableNotFoundException, AccumuloException, AccumuloSecurityException {
  
      Instance instance = getInstance(job);
      Connector conn = instance.getConnector(getPrincipal(job), getAuthenticationToken(job));
@@@ -775,8 -808,10 +813,10 @@@
              for (Range r : extentRanges.getValue()) {
                if (autoAdjust) {
                  // divide ranges into smaller ranges, based on the tablets
-                 RangeInputSplit split = new RangeInputSplit(tableName, tableId.canonicalID(), ke.clip(r), new String[] {location});
-                 SplitUtils.updateSplit(split, instance, tableConfig, principal, token, auths, logLevel);
 -                RangeInputSplit split = new RangeInputSplit(tableName, tableId, ke.clip(r),
 -                    new String[] {location});
++                RangeInputSplit split = new RangeInputSplit(tableName, tableId.canonicalID(),
++                    ke.clip(r), new String[] {location});
+                 SplitUtils.updateSplit(split, instance, tableConfig, principal, token, auths,
+                     logLevel);
                  split.setOffline(tableConfig.isOfflineScan());
                  split.setIsolatedScan(tableConfig.shouldUseIsolatedScanners());
                  split.setUsesLocalIterators(tableConfig.shouldUseLocalIterators());
@@@ -797,7 -832,8 +837,8 @@@
  
        if (!autoAdjust)
          for (Map.Entry<Range,ArrayList<String>> entry : splitsToAdd.entrySet()) {
-           RangeInputSplit split = new RangeInputSplit(tableName, tableId.canonicalID(), entry.getKey(), entry.getValue().toArray(new String[0]));
 -          RangeInputSplit split = new RangeInputSplit(tableName, tableId, entry.getKey(),
 -              entry.getValue().toArray(new String[0]));
++          RangeInputSplit split = new RangeInputSplit(tableName, tableId.canonicalID(),
++              entry.getKey(), entry.getValue().toArray(new String[0]));
            SplitUtils.updateSplit(split, instance, tableConfig, principal, token, auths, logLevel);
            split.setOffline(tableConfig.isOfflineScan());
            split.setIsolatedScan(tableConfig.shouldUseIsolatedScanners());
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloFileOutputFormat.java
index d7d2b2d,aa5f379..a88d1f4
--- a/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloFileOutputFormat.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloFileOutputFormat.java
@@@ -55,7 -56,24 +58,8 @@@ public class AccumuloFileOutputFormat e
    protected static final Logger log = Logger.getLogger(CLASS);
  
    /**
-    * Sets the compression type to use for data blocks. Specifying a compression may require additional libraries to be available to your Job.
 -   * This helper method provides an AccumuloConfiguration object constructed from the Accumulo
 -   * defaults, and overridden with Accumulo properties that have been stored in the Job's
 -   * configuration.
 -   *
 -   * @param job
 -   *          the Hadoop context for the configured job
 -   * @since 1.5.0
 -   * @deprecated since 1.7.0 This method returns a type that is not part of the public API and is
 -   *             not guaranteed to be stable. The method was deprecated to discourage its use.
 -   */
 -  @Deprecated
 -  protected static AccumuloConfiguration getAccumuloConfiguration(JobConf job) {
 -    return FileOutputConfigurator.getAccumuloConfiguration(CLASS, job);
 -  }
 -
 -  /**
+    * Sets the compression type to use for data blocks. Specifying a compression may require
+    * additional libraries to be available to your Job.
     *
     * @param job
     *          the Hadoop job instance to be configured
@@@ -138,28 -162,17 +148,31 @@@
      FileOutputConfigurator.setSampler(CLASS, job, samplerConfig);
    }
  
 +  /**
-    * Specifies a list of summarizer configurations to create summary data in the output file. Each Key Value written will be passed to the configured
-    * {@link Summarizer}'s.
++   * Specifies a list of summarizer configurations to create summary data in the output file. Each
++   * Key Value written will be passed to the configured {@link Summarizer}'s.
 +   *
 +   * @param job
 +   *          The Hadoop job instance to be configured
 +   * @param sumarizerConfigs
 +   *          summarizer configurations
 +   * @since 2.0.0
 +   */
 +  public static void setSummarizers(JobConf job, SummarizerConfiguration... sumarizerConfigs) {
 +    FileOutputConfigurator.setSummarizers(CLASS, job, sumarizerConfigs);
 +  }
 +
    @Override
-   public RecordWriter<Key,Value> getRecordWriter(FileSystem ignored, JobConf job, String name, Progressable progress) throws IOException {
+   public RecordWriter<Key,Value> getRecordWriter(FileSystem ignored, JobConf job, String name,
+       Progressable progress) throws IOException {
      // get the path of the temporary output file
      final Configuration conf = job;
-     final AccumuloConfiguration acuConf = FileOutputConfigurator.getAccumuloConfiguration(CLASS, job);
+     final AccumuloConfiguration acuConf = FileOutputConfigurator.getAccumuloConfiguration(CLASS,
+         job);
  
      final String extension = acuConf.get(Property.TABLE_FILE_TYPE);
-     final Path file = new Path(getWorkOutputPath(job), getUniqueName(job, "part") + "." + extension);
+     final Path file = new Path(getWorkOutputPath(job),
+         getUniqueName(job, "part") + "." + extension);
      final int visCacheSize = ConfiguratorBase.getVisibilityCacheSize(conf);
  
      return new RecordWriter<Key,Value>() {
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java
index 62d32a6,2752fd3..3801e4d
--- a/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java
@@@ -81,20 -82,6 +82,21 @@@ public class AccumuloOutputFormat imple
    protected static final Logger log = Logger.getLogger(CLASS);
  
    /**
 +   * Set the connection information needed to communicate with Accumulo in this job.
 +   *
 +   * @param job
 +   *          Hadoop job to be configured
 +   * @param info
 +   *          Accumulo connection information
 +   * @since 2.0.0
 +   */
-   public static void setConnectionInfo(JobConf job, ConnectionInfo info) throws AccumuloSecurityException {
++  public static void setConnectionInfo(JobConf job, ConnectionInfo info)
++      throws AccumuloSecurityException {
 +    setConnectorInfo(job, info.getPrincipal(), info.getAuthenticationToken());
 +    setZooKeeperInstance(job, ConnectionInfoFactory.getClientConfiguration(info));
 +  }
 +
 +  /**
     * Sets the connector information needed to communicate with Accumulo in this job.
     *
     * <p>
@@@ -110,10 -101,9 +116,11 @@@
     * @param token
     *          the user's password
     * @since 1.5.0
 +   * @deprecated since 2.0.0, use {@link #setConnectionInfo(JobConf, ConnectionInfo)} instead.
     */
 +  @Deprecated
-   public static void setConnectorInfo(JobConf job, String principal, AuthenticationToken token) throws AccumuloSecurityException {
+   public static void setConnectorInfo(JobConf job, String principal, AuthenticationToken token)
+       throws AccumuloSecurityException {
      if (token instanceof KerberosToken) {
        log.info("Received KerberosToken, attempting to fetch DelegationToken");
        try {
@@@ -153,10 -148,9 +165,11 @@@
     * @param tokenFile
     *          the path to the password file
     * @since 1.6.0
 +   * @deprecated since 2.0.0, use {@link #setConnectionInfo(JobConf, ConnectionInfo)} instead
     */
 +  @Deprecated
-   public static void setConnectorInfo(JobConf job, String principal, String tokenFile) throws AccumuloSecurityException {
+   public static void setConnectorInfo(JobConf job, String principal, String tokenFile)
+       throws AccumuloSecurityException {
      OutputConfigurator.setConnectorInfo(CLASS, job, principal, tokenFile);
    }
  
@@@ -233,11 -228,14 +247,12 @@@
     * @param zooKeepers
     *          a comma-separated list of zookeeper servers
     * @since 1.5.0
 -   * @deprecated since 1.6.0; Use {@link #setZooKeeperInstance(JobConf, ClientConfiguration)}
 -   *             instead.
 +   * @deprecated since 1.6.0; Use {@link #setConnectionInfo(JobConf, ConnectionInfo)} instead.
     */
 -
    @Deprecated
    public static void setZooKeeperInstance(JobConf job, String instanceName, String zooKeepers) {
-     setZooKeeperInstance(job, ClientConfiguration.create().withInstance(instanceName).withZkHosts(zooKeepers));
+     setZooKeeperInstance(job,
 -        new ClientConfiguration().withInstance(instanceName).withZkHosts(zooKeepers));
++        ClientConfiguration.create().withInstance(instanceName).withZkHosts(zooKeepers));
    }
  
    /**
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapred/impl/BatchInputSplit.java
index d0a4d1f,aea267e..f583418
--- a/core/src/main/java/org/apache/accumulo/core/client/mapred/impl/BatchInputSplit.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapred/impl/BatchInputSplit.java
@@@ -36,7 -37,8 +38,8 @@@ public class BatchInputSplit extends or
      super(split);
    }
  
-   public BatchInputSplit(String table, Table.ID tableId, Collection<Range> ranges, String[] location) {
 -  public BatchInputSplit(String table, String tableId, Collection<Range> ranges,
++  public BatchInputSplit(String table, Table.ID tableId, Collection<Range> ranges,
+       String[] location) {
      super(table, tableId, ranges, location);
    }
  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapreduce/AbstractInputFormat.java
index 0ca7c2d,b81d930..99ca2a2
--- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AbstractInputFormat.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AbstractInputFormat.java
@@@ -121,20 -119,6 +122,21 @@@ public abstract class AbstractInputForm
    }
  
    /**
 +   * Sets connection information needed to communicate with Accumulo for this job
 +   *
 +   * @param job
 +   *          Hadoop job instance to be configured
 +   * @param info
 +   *          Connection information for Accumulo
 +   * @since 2.0.0
 +   */
-   public static void setConnectionInfo(Job job, ConnectionInfo info) throws AccumuloSecurityException {
++  public static void setConnectionInfo(Job job, ConnectionInfo info)
++      throws AccumuloSecurityException {
 +    setConnectorInfo(job, info.getPrincipal(), info.getAuthenticationToken());
 +    setZooKeeperInstance(job, ConnectionInfoFactory.getClientConfiguration(info));
 +  }
 +
 +  /**
     * Sets the connector information needed to communicate with Accumulo in this job.
     *
     * <p>
@@@ -150,10 -137,9 +155,11 @@@
     * @param token
     *          the user's password
     * @since 1.5.0
 +   * @deprecated since 2.0.0; use {@link #setConnectionInfo(Job, ConnectionInfo)} instead.
     */
 +  @Deprecated
-   public static void setConnectorInfo(Job job, String principal, AuthenticationToken token) throws AccumuloSecurityException {
+   public static void setConnectorInfo(Job job, String principal, AuthenticationToken token)
+       throws AccumuloSecurityException {
      if (token instanceof KerberosToken) {
        log.info("Received KerberosToken, attempting to fetch DelegationToken");
        try {
@@@ -275,7 -269,8 +289,8 @@@
     */
    @Deprecated
    public static void setZooKeeperInstance(Job job, String instanceName, String zooKeepers) {
-     setZooKeeperInstance(job, ClientConfiguration.create().withInstance(instanceName).withZkHosts(zooKeepers));
+     setZooKeeperInstance(job,
 -        new ClientConfiguration().withInstance(instanceName).withZkHosts(zooKeepers));
++        ClientConfiguration.create().withInstance(instanceName).withZkHosts(zooKeepers));
    }
  
    /**
@@@ -402,9 -397,31 +419,10 @@@
      return InputConfigurator.getInputTableConfig(CLASS, context.getConfiguration(), tableName);
    }
  
 -  /**
 -   * Initializes an Accumulo {@link org.apache.accumulo.core.client.impl.TabletLocator} based on the
 -   * configuration.
 -   *
 -   * @param context
 -   *          the Hadoop context for the configured job
 -   * @param table
 -   *          the table for which to initialize the locator
 -   * @return an Accumulo tablet locator
 -   * @throws org.apache.accumulo.core.client.TableNotFoundException
 -   *           if the table name set on the configuration doesn't exist
 -   * @since 1.6.0
 -   * @deprecated since 1.7.0 This method returns a type that is not part of the public API and is
 -   *             not guaranteed to be stable. The method was deprecated to discourage its use.
 -   */
 -  @Deprecated
 -  protected static TabletLocator getTabletLocator(JobContext context, String table)
 -      throws TableNotFoundException {
 -    return InputConfigurator.getTabletLocator(CLASS, context.getConfiguration(), table);
 -  }
 -
    // InputFormat doesn't have the equivalent of OutputFormat's checkOutputSpecs(JobContext job)
    /**
-    * Check whether a configuration is fully configured to be used with an Accumulo {@link org.apache.hadoop.mapreduce.InputFormat}.
+    * Check whether a configuration is fully configured to be used with an Accumulo
+    * {@link org.apache.hadoop.mapreduce.InputFormat}.
     *
     * @param context
     *          the Hadoop context for the configured job
@@@ -592,13 -618,16 +619,16 @@@
  
          try {
            if (isOffline) {
-             scanner = new OfflineScanner(instance, new Credentials(principal, token), Table.ID.of(split.getTableId()), authorizations);
+             scanner = new OfflineScanner(instance, new Credentials(principal, token),
 -                split.getTableId(), authorizations);
++                Table.ID.of(split.getTableId()), authorizations);
            } else if (DeprecationUtil.isMockInstance(instance)) {
-             scanner = instance.getConnector(principal, token).createScanner(split.getTableName(), authorizations);
+             scanner = instance.getConnector(principal, token).createScanner(split.getTableName(),
+                 authorizations);
            } else {
              ClientConfiguration clientConf = getClientConfiguration(attempt);
-             ClientContext context = new ClientContext(instance, new Credentials(principal, token), clientConf);
+             ClientContext context = new ClientContext(instance, new Credentials(principal, token),
+                 clientConf);
 -            scanner = new ScannerImpl(context, split.getTableId(), authorizations);
 +            scanner = new ScannerImpl(context, Table.ID.of(split.getTableId()), authorizations);
            }
            if (isIsolated) {
              log.info("Creating isolated scanner");
@@@ -688,8 -718,9 +719,9 @@@
      }
    }
  
-   Map<String,Map<KeyExtent,List<Range>>> binOfflineTable(JobContext context, Table.ID tableId, List<Range> ranges) throws TableNotFoundException,
-       AccumuloException, AccumuloSecurityException {
 -  Map<String,Map<KeyExtent,List<Range>>> binOfflineTable(JobContext context, String tableId,
++  Map<String,Map<KeyExtent,List<Range>>> binOfflineTable(JobContext context, Table.ID tableId,
+       List<Range> ranges)
+       throws TableNotFoundException, AccumuloException, AccumuloSecurityException {
  
      Instance instance = getInstance(context);
      Connector conn = instance.getConnector(getPrincipal(context), getAuthenticationToken(context));
@@@ -820,8 -860,10 +862,10 @@@
              for (Range r : extentRanges.getValue()) {
                if (autoAdjust) {
                  // divide ranges into smaller ranges, based on the tablets
-                 RangeInputSplit split = new RangeInputSplit(tableName, tableId.canonicalID(), ke.clip(r), new String[] {location});
-                 SplitUtils.updateSplit(split, instance, tableConfig, principal, token, auths, logLevel);
 -                RangeInputSplit split = new RangeInputSplit(tableName, tableId, ke.clip(r),
 -                    new String[] {location});
++                RangeInputSplit split = new RangeInputSplit(tableName, tableId.canonicalID(),
++                    ke.clip(r), new String[] {location});
+                 SplitUtils.updateSplit(split, instance, tableConfig, principal, token, auths,
+                     logLevel);
                  split.setOffline(tableConfig.isOfflineScan());
                  split.setIsolatedScan(tableConfig.shouldUseIsolatedScanners());
                  split.setUsesLocalIterators(tableConfig.shouldUseLocalIterators());
@@@ -842,7 -884,8 +886,8 @@@
  
        if (!autoAdjust)
          for (Map.Entry<Range,ArrayList<String>> entry : splitsToAdd.entrySet()) {
-           RangeInputSplit split = new RangeInputSplit(tableName, tableId.canonicalID(), entry.getKey(), entry.getValue().toArray(new String[0]));
 -          RangeInputSplit split = new RangeInputSplit(tableName, tableId, entry.getKey(),
 -              entry.getValue().toArray(new String[0]));
++          RangeInputSplit split = new RangeInputSplit(tableName, tableId.canonicalID(),
++              entry.getKey(), entry.getValue().toArray(new String[0]));
            SplitUtils.updateSplit(split, instance, tableConfig, principal, token, auths, logLevel);
            split.setOffline(tableConfig.isOfflineScan());
            split.setIsolatedScan(tableConfig.shouldUseIsolatedScanners());
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormat.java
index dcdd42b,10ad85f..d37612a
--- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormat.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloFileOutputFormat.java
@@@ -53,7 -55,24 +56,8 @@@ public class AccumuloFileOutputFormat e
    protected static final Logger log = Logger.getLogger(CLASS);
  
    /**
-    * Sets the compression type to use for data blocks. Specifying a compression may require additional libraries to be available to your Job.
 -   * This helper method provides an AccumuloConfiguration object constructed from the Accumulo
 -   * defaults, and overridden with Accumulo properties that have been stored in the Job's
 -   * configuration.
 -   *
 -   * @param context
 -   *          the Hadoop context for the configured job
 -   * @since 1.5.0
 -   * @deprecated since 1.7.0 This method returns a type that is not part of the public API and is
 -   *             not guaranteed to be stable. The method was deprecated to discourage its use.
 -   */
 -  @Deprecated
 -  protected static AccumuloConfiguration getAccumuloConfiguration(JobContext context) {
 -    return FileOutputConfigurator.getAccumuloConfiguration(CLASS, context.getConfiguration());
 -  }
 -
 -  /**
+    * Sets the compression type to use for data blocks. Specifying a compression may require
+    * additional libraries to be available to your Job.
     *
     * @param job
     *          the Hadoop job instance to be configured
@@@ -136,20 -161,6 +146,20 @@@
      FileOutputConfigurator.setSampler(CLASS, job.getConfiguration(), samplerConfig);
    }
  
 +  /**
-    * Specifies a list of summarizer configurations to create summary data in the output file. Each Key Value written will be passed to the configured
-    * {@link Summarizer}'s.
++   * Specifies a list of summarizer configurations to create summary data in the output file. Each
++   * Key Value written will be passed to the configured {@link Summarizer}'s.
 +   *
 +   * @param job
 +   *          The Hadoop job instance to be configured
 +   * @param sumarizerConfigs
 +   *          summarizer configurations
 +   * @since 2.0.0
 +   */
 +  public static void setSummarizers(Job job, SummarizerConfiguration... sumarizerConfigs) {
 +    FileOutputConfigurator.setSummarizers(CLASS, job.getConfiguration(), sumarizerConfigs);
 +  }
 +
    @Override
    public RecordWriter<Key,Value> getRecordWriter(TaskAttemptContext context) throws IOException {
      // get the path of the temporary output file
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java
index 21b7714,a4ebf3a..528e57f
--- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java
@@@ -82,20 -83,6 +83,21 @@@ public class AccumuloOutputFormat exten
    protected static final Logger log = Logger.getLogger(CLASS);
  
    /**
 +   * Set the connection information needed to communicate with Accumulo in this job.
 +   *
 +   * @param job
 +   *          Hadoop job to be configured
 +   * @param info
 +   *          Accumulo connection information
 +   * @since 2.0.0
 +   */
-   public static void setConnectionInfo(Job job, ConnectionInfo info) throws AccumuloSecurityException {
++  public static void setConnectionInfo(Job job, ConnectionInfo info)
++      throws AccumuloSecurityException {
 +    setConnectorInfo(job, info.getPrincipal(), info.getAuthenticationToken());
 +    setZooKeeperInstance(job, ConnectionInfoFactory.getClientConfiguration(info));
 +  }
 +
 +  /**
     * Sets the connector information needed to communicate with Accumulo in this job.
     *
     * <p>
@@@ -111,10 -102,9 +117,11 @@@
     * @param token
     *          the user's password
     * @since 1.5.0
 +   * @deprecated since 2.0.0, replaced by {@link #setConnectionInfo(Job, ConnectionInfo)}
     */
 +  @Deprecated
-   public static void setConnectorInfo(Job job, String principal, AuthenticationToken token) throws AccumuloSecurityException {
+   public static void setConnectorInfo(Job job, String principal, AuthenticationToken token)
+       throws AccumuloSecurityException {
      if (token instanceof KerberosToken) {
        log.info("Received KerberosToken, attempting to fetch DelegationToken");
        try {
@@@ -154,10 -149,9 +166,11 @@@
     * @param tokenFile
     *          the path to the token file
     * @since 1.6.0
 +   * @deprecated since 2.0.0, replaced by {@link #setConnectionInfo(Job, ConnectionInfo)}
     */
 +  @Deprecated
-   public static void setConnectorInfo(Job job, String principal, String tokenFile) throws AccumuloSecurityException {
+   public static void setConnectorInfo(Job job, String principal, String tokenFile)
+       throws AccumuloSecurityException {
      OutputConfigurator.setConnectorInfo(CLASS, job.getConfiguration(), principal, tokenFile);
    }
  
@@@ -238,7 -234,8 +253,8 @@@
     */
    @Deprecated
    public static void setZooKeeperInstance(Job job, String instanceName, String zooKeepers) {
-     setZooKeeperInstance(job, ClientConfiguration.create().withInstance(instanceName).withZkHosts(zooKeepers));
+     setZooKeeperInstance(job,
 -        new ClientConfiguration().withInstance(instanceName).withZkHosts(zooKeepers));
++        ClientConfiguration.create().withInstance(instanceName).withZkHosts(zooKeepers));
    }
  
    /**
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplit.java
index 13226e4,f0e9ae4..e56c1d9
--- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplit.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/RangeInputSplit.java
@@@ -276,10 -282,11 +281,12 @@@ public class RangeInputSplit extends In
        out.writeInt(tokenSource.ordinal());
  
        if (null != token && null != tokenFile) {
-         throw new IOException("Cannot use both inline AuthenticationToken and file-based AuthenticationToken");
+         throw new IOException(
+             "Cannot use both inline AuthenticationToken and file-based AuthenticationToken");
        } else if (null != token) {
          out.writeUTF(token.getClass().getName());
-         out.writeUTF(Base64.getEncoder().encodeToString(AuthenticationTokenSerializer.serialize(token)));
 -        out.writeUTF(Base64.encodeBase64String(AuthenticationTokenSerializer.serialize(token)));
++        out.writeUTF(
++            Base64.getEncoder().encodeToString(AuthenticationTokenSerializer.serialize(token)));
        } else {
          out.writeUTF(tokenFile);
        }
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapreduce/impl/BatchInputSplit.java
index f1c612a,d055214..fb7e729
--- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/impl/BatchInputSplit.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/impl/BatchInputSplit.java
@@@ -46,8 -46,9 +47,9 @@@ public class BatchInputSplit extends Ra
      this.setRanges(split.getRanges());
    }
  
-   public BatchInputSplit(String table, Table.ID tableId, Collection<Range> ranges, String[] locations) {
 -  public BatchInputSplit(String table, String tableId, Collection<Range> ranges,
++  public BatchInputSplit(String table, Table.ID tableId, Collection<Range> ranges,
+       String[] locations) {
 -    super(table, tableId, new Range(), locations);
 +    super(table, tableId.canonicalID(), new Range(), locations);
      this.ranges = ranges;
    }
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBase.java
index 942c746,79ae9af..90812c9
--- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBase.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBase.java
@@@ -149,13 -154,15 +153,15 @@@ public class ConfiguratorBase 
      conf.setBoolean(enumToConfKey(implementingClass, ConnectorInfo.IS_CONFIGURED), true);
      conf.set(enumToConfKey(implementingClass, ConnectorInfo.PRINCIPAL), principal);
      if (token instanceof DelegationTokenImpl) {
-       // Avoid serializing the DelegationToken secret in the configuration -- the Job will do that work for us securely
+       // Avoid serializing the DelegationToken secret in the configuration -- the Job will do that
+       // work for us securely
        DelegationTokenImpl delToken = (DelegationTokenImpl) token;
-       conf.set(enumToConfKey(implementingClass, ConnectorInfo.TOKEN), TokenSource.JOB.prefix() + token.getClass().getName() + ":"
-           + delToken.getServiceName().toString());
+       conf.set(enumToConfKey(implementingClass, ConnectorInfo.TOKEN), TokenSource.JOB.prefix()
+           + token.getClass().getName() + ":" + delToken.getServiceName().toString());
      } else {
-       conf.set(enumToConfKey(implementingClass, ConnectorInfo.TOKEN), TokenSource.INLINE.prefix() + token.getClass().getName() + ":"
-           + Base64.getEncoder().encodeToString(AuthenticationTokenSerializer.serialize(token)));
+       conf.set(enumToConfKey(implementingClass, ConnectorInfo.TOKEN),
+           TokenSource.INLINE.prefix() + token.getClass().getName() + ":"
 -              + Base64.encodeBase64String(AuthenticationTokenSerializer.serialize(token)));
++              + Base64.getEncoder().encodeToString(AuthenticationTokenSerializer.serialize(token)));
      }
    }
  
@@@ -243,7 -257,8 +256,8 @@@
      if (token.startsWith(TokenSource.INLINE.prefix())) {
        String[] args = token.substring(TokenSource.INLINE.prefix().length()).split(":", 2);
        if (args.length == 2)
-         return AuthenticationTokenSerializer.deserialize(args[0], Base64.getDecoder().decode(args[1]));
+         return AuthenticationTokenSerializer.deserialize(args[0],
 -            Base64.decodeBase64(args[1].getBytes(UTF_8)));
++            Base64.getDecoder().decode(args[1]));
      } else if (token.startsWith(TokenSource.FILE.prefix())) {
        String tokenFileName = token.substring(TokenSource.FILE.prefix().length());
        return getTokenFromFile(conf, getPrincipal(implementingClass, conf), tokenFileName);
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/FileOutputConfigurator.java
index 1da81fe,9a9c051..e803562
--- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/FileOutputConfigurator.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/FileOutputConfigurator.java
@@@ -99,9 -105,11 +107,10 @@@ public class FileOutputConfigurator ext
     *          the Hadoop configuration object to configure
     * @since 1.6.0
     */
-   public static AccumuloConfiguration getAccumuloConfiguration(Class<?> implementingClass, Configuration conf) {
+   public static AccumuloConfiguration getAccumuloConfiguration(Class<?> implementingClass,
+       Configuration conf) {
      String prefix = enumToConfKey(implementingClass, Opts.ACCUMULO_PROPERTIES) + ".";
 -    ConfigurationCopy acuConf = new ConfigurationCopy(
 -        AccumuloConfiguration.getDefaultConfiguration());
 +    ConfigurationCopy acuConf = new ConfigurationCopy(DefaultConfiguration.getInstance());
      for (Entry<String,String> entry : conf)
        if (entry.getKey().startsWith(prefix)) {
          String propString = entry.getKey().substring(prefix.length());
@@@ -211,12 -236,4 +237,14 @@@
      }
    }
  
-   public static void setSummarizers(Class<?> implementingClass, Configuration conf, SummarizerConfiguration[] sumarizerConfigs) {
++  public static void setSummarizers(Class<?> implementingClass, Configuration conf,
++      SummarizerConfiguration[] sumarizerConfigs) {
 +    Map<String,String> props = SummarizerConfiguration.toTableProperties(sumarizerConfigs);
 +
 +    for (Entry<String,String> entry : props.entrySet()) {
-       conf.set(enumToConfKey(implementingClass, Opts.ACCUMULO_PROPERTIES) + "." + entry.getKey(), entry.getValue());
++      conf.set(enumToConfKey(implementingClass, Opts.ACCUMULO_PROPERTIES) + "." + entry.getKey(),
++          entry.getValue());
 +    }
 +  }
 +
  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/InputConfigurator.java
index b9690d5,b5fd34c..261a196
--- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/InputConfigurator.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/InputConfigurator.java
@@@ -215,9 -234,10 +235,10 @@@ public class InputConfigurator extends 
        for (Range r : ranges) {
          ByteArrayOutputStream baos = new ByteArrayOutputStream();
          r.write(new DataOutputStream(baos));
 -        rangeStrings.add(Base64.encodeBase64String(baos.toByteArray()));
 +        rangeStrings.add(Base64.getEncoder().encodeToString(baos.toByteArray()));
        }
-       conf.setStrings(enumToConfKey(implementingClass, ScanOpts.RANGES), rangeStrings.toArray(new String[0]));
+       conf.setStrings(enumToConfKey(implementingClass, ScanOpts.RANGES),
+           rangeStrings.toArray(new String[0]));
      } catch (IOException ex) {
        throw new IllegalArgumentException("Unable to encode ranges to Base64", ex);
      }
@@@ -236,12 -256,15 +257,14 @@@
     * @since 1.6.0
     * @see #setRanges(Class, Configuration, Collection)
     */
-   public static List<Range> getRanges(Class<?> implementingClass, Configuration conf) throws IOException {
+   public static List<Range> getRanges(Class<?> implementingClass, Configuration conf)
+       throws IOException {
  
-     Collection<String> encodedRanges = conf.getStringCollection(enumToConfKey(implementingClass, ScanOpts.RANGES));
+     Collection<String> encodedRanges = conf
+         .getStringCollection(enumToConfKey(implementingClass, ScanOpts.RANGES));
      List<Range> ranges = new ArrayList<>();
      for (String rangeString : encodedRanges) {
 -      ByteArrayInputStream bais = new ByteArrayInputStream(
 -          Base64.decodeBase64(rangeString.getBytes(UTF_8)));
 +      ByteArrayInputStream bais = new ByteArrayInputStream(Base64.getDecoder().decode(rangeString));
        Range range = new Range();
        range.readFields(new DataInputStream(bais));
        ranges.add(range);
@@@ -353,8 -384,10 +383,9 @@@
  
      for (String col : serialized) {
        int idx = col.indexOf(":");
-       Text cf = new Text(idx < 0 ? Base64.getDecoder().decode(col) : Base64.getDecoder().decode(col.substring(0, idx)));
 -      Text cf = new Text(idx < 0 ? Base64.decodeBase64(col.getBytes(UTF_8))
 -          : Base64.decodeBase64(col.substring(0, idx).getBytes(UTF_8)));
 -      Text cq = idx < 0 ? null
 -          : new Text(Base64.decodeBase64(col.substring(idx + 1).getBytes(UTF_8)));
++      Text cf = new Text(idx < 0 ? Base64.getDecoder().decode(col)
++          : Base64.getDecoder().decode(col.substring(0, idx)));
 +      Text cq = idx < 0 ? null : new Text(Base64.getDecoder().decode(col.substring(idx + 1)));
        columns.add(new Pair<>(cf, cq));
      }
      return columns;
@@@ -675,7 -727,8 +725,8 @@@
     *           if the table name set on the configuration doesn't exist
     * @since 1.6.0
     */
-   public static TabletLocator getTabletLocator(Class<?> implementingClass, Configuration conf, Table.ID tableId) throws TableNotFoundException {
+   public static TabletLocator getTabletLocator(Class<?> implementingClass, Configuration conf,
 -      String tableId) throws TableNotFoundException {
++      Table.ID tableId) throws TableNotFoundException {
      String instanceType = conf.get(enumToConfKey(implementingClass, InstanceOpts.TYPE));
      if ("MockInstance".equals(instanceType))
        return DeprecationUtil.makeMockLocator();
@@@ -842,7 -918,8 +908,8 @@@
      return null;
    }
  
-   public static Map<String,Map<KeyExtent,List<Range>>> binOffline(Table.ID tableId, List<Range> ranges, Instance instance, Connector conn)
 -  public static Map<String,Map<KeyExtent,List<Range>>> binOffline(String tableId,
++  public static Map<String,Map<KeyExtent,List<Range>>> binOffline(Table.ID tableId,
+       List<Range> ranges, Instance instance, Connector conn)
        throws AccumuloException, TableNotFoundException {
      Map<String,Map<KeyExtent,List<Range>>> binnedRanges = new HashMap<>();
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/partition/RangePartitioner.java
index f9d1bc1,1285889..1019e1f
--- a/core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/partition/RangePartitioner.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/partition/RangePartitioner.java
@@@ -88,11 -88,16 +88,13 @@@ public class RangePartitioner extends P
  
        if (cf != null) {
          for (Path path : cf) {
-           if (path.toUri().getPath().endsWith(cutFileName.substring(cutFileName.lastIndexOf('/')))) {
+           if (path.toUri().getPath()
+               .endsWith(cutFileName.substring(cutFileName.lastIndexOf('/')))) {
              TreeSet<Text> cutPoints = new TreeSet<>();
-             try (Scanner in = new Scanner(new BufferedReader(new InputStreamReader(new FileInputStream(path.toString()), UTF_8)))) {
 -            Scanner in = new Scanner(new BufferedReader(
 -                new InputStreamReader(new FileInputStream(path.toString()), UTF_8)));
 -            try {
++            try (Scanner in = new Scanner(new BufferedReader(
++                new InputStreamReader(new FileInputStream(path.toString()), UTF_8)))) {
                while (in.hasNextLine())
 -                cutPoints.add(new Text(Base64.decodeBase64(in.nextLine().getBytes(UTF_8))));
 -            } finally {
 -              in.close();
 +                cutPoints.add(new Text(Base64.getDecoder().decode(in.nextLine())));
              }
              cutPointArray = cutPoints.toArray(new Text[cutPoints.size()]);
              break;
diff --cc core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchDeleter.java
index b55b327,7e8c409..1b20380
--- a/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchDeleter.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mock/MockBatchDeleter.java
@@@ -64,9 -67,12 +66,10 @@@ public class MockBatchDeleter extends M
          Entry<Key,Value> next = iter.next();
          Key k = next.getKey();
          Mutation m = new Mutation(k.getRow());
-         m.putDelete(k.getColumnFamily(), k.getColumnQualifier(), new ColumnVisibility(k.getColumnVisibility()), k.getTimestamp());
+         m.putDelete(k.getColumnFamily(), k.getColumnQualifier(),
+             new ColumnVisibility(k.getColumnVisibility()), k.getTimestamp());
          writer.addMutation(m);
        }
 -    } finally {
 -      writer.close();
      }
    }
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/mock/MockConnector.java
index 4918125,2aec560..e473f71
--- a/core/src/main/java/org/apache/accumulo/core/client/mock/MockConnector.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mock/MockConnector.java
@@@ -79,38 -84,32 +84,43 @@@ public class MockConnector extends Conn
    }
  
    @Override
-   public BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations, int numQueryThreads, BatchWriterConfig config)
-       throws TableNotFoundException {
-     return createBatchDeleter(tableName, authorizations, numQueryThreads, config.getMaxMemory(), config.getMaxLatency(TimeUnit.MILLISECONDS),
-         config.getMaxWriteThreads());
+   public BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations,
+       int numQueryThreads, BatchWriterConfig config) throws TableNotFoundException {
+     return createBatchDeleter(tableName, authorizations, numQueryThreads, config.getMaxMemory(),
+         config.getMaxLatency(TimeUnit.MILLISECONDS), config.getMaxWriteThreads());
    }
  
 +  @Override
-   public BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations, int numQueryThreads) throws TableNotFoundException {
++  public BatchDeleter createBatchDeleter(String tableName, Authorizations authorizations,
++      int numQueryThreads) throws TableNotFoundException {
 +    return createBatchDeleter(tableName, authorizations, numQueryThreads, new BatchWriterConfig());
 +  }
 +
    @Deprecated
    @Override
-   public BatchWriter createBatchWriter(String tableName, long maxMemory, long maxLatency, int maxWriteThreads) throws TableNotFoundException {
+   public BatchWriter createBatchWriter(String tableName, long maxMemory, long maxLatency,
+       int maxWriteThreads) throws TableNotFoundException {
      if (acu.tables.get(tableName) == null)
        throw new TableNotFoundException(tableName, tableName, "no such table");
      return new MockBatchWriter(acu, tableName);
    }
  
    @Override
-   public BatchWriter createBatchWriter(String tableName, BatchWriterConfig config) throws TableNotFoundException {
-     return createBatchWriter(tableName, config.getMaxMemory(), config.getMaxLatency(TimeUnit.MILLISECONDS), config.getMaxWriteThreads());
+   public BatchWriter createBatchWriter(String tableName, BatchWriterConfig config)
+       throws TableNotFoundException {
+     return createBatchWriter(tableName, config.getMaxMemory(),
+         config.getMaxLatency(TimeUnit.MILLISECONDS), config.getMaxWriteThreads());
    }
  
 +  @Override
 +  public BatchWriter createBatchWriter(String tableName) throws TableNotFoundException {
 +    return createBatchWriter(tableName, new BatchWriterConfig());
 +  }
 +
    @Deprecated
    @Override
-   public MultiTableBatchWriter createMultiTableBatchWriter(long maxMemory, long maxLatency, int maxWriteThreads) {
+   public MultiTableBatchWriter createMultiTableBatchWriter(long maxMemory, long maxLatency,
+       int maxWriteThreads) {
      return new MockMultiTableBatchWriter(acu);
    }
  
@@@ -120,12 -120,8 +131,13 @@@
    }
  
    @Override
 +  public MultiTableBatchWriter createMultiTableBatchWriter() {
 +    return createMultiTableBatchWriter(new BatchWriterConfig());
 +  }
 +
 +  @Override
-   public Scanner createScanner(String tableName, Authorizations authorizations) throws TableNotFoundException {
+   public Scanner createScanner(String tableName, Authorizations authorizations)
+       throws TableNotFoundException {
      MockTable table = acu.tables.get(tableName);
      if (table == null)
        throw new TableNotFoundException(tableName, tableName, "no such table");
diff --cc core/src/main/java/org/apache/accumulo/core/client/mock/MockInstance.java
index ac53bed,f26638f..9f1f4c0
--- a/core/src/main/java/org/apache/accumulo/core/client/mock/MockInstance.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mock/MockInstance.java
@@@ -135,8 -143,23 +141,9 @@@ public class MockInstance implements In
      return getConnector(user, TextUtil.getBytes(new Text(pass.toString())));
    }
  
 -  AccumuloConfiguration conf = null;
 -
 -  @Deprecated
 -  @Override
 -  public AccumuloConfiguration getConfiguration() {
 -    return conf == null ? DefaultConfiguration.getInstance() : conf;
 -  }
 -
 -  @Override
 -  @Deprecated
 -  public void setConfiguration(AccumuloConfiguration conf) {
 -    this.conf = conf;
 -  }
 -
    @Override
-   public Connector getConnector(String principal, AuthenticationToken token) throws AccumuloException, AccumuloSecurityException {
+   public Connector getConnector(String principal, AuthenticationToken token)
+       throws AccumuloException, AccumuloSecurityException {
      Connector conn = new MockConnector(new Credentials(principal, token), acu, this);
      if (!acu.users.containsKey(principal))
        conn.securityOperations().createLocalUser(principal, (PasswordToken) token);
diff --cc core/src/main/java/org/apache/accumulo/core/client/mock/MockTableOperations.java
index 112b6a9,a996c1a..fcf3d03
--- a/core/src/main/java/org/apache/accumulo/core/client/mock/MockTableOperations.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mock/MockTableOperations.java
@@@ -292,8 -304,10 +307,9 @@@ class MockTableOperations extends Table
       */
      for (FileStatus importStatus : fs.listStatus(importPath)) {
        try {
-         FileSKVIterator importIterator = FileOperations.getInstance().newReaderBuilder().forFile(importStatus.getPath().toString(), fs, fs.getConf())
+         FileSKVIterator importIterator = FileOperations.getInstance().newReaderBuilder()
+             .forFile(importStatus.getPath().toString(), fs, fs.getConf())
 -            .withTableConfiguration(AccumuloConfiguration.getDefaultConfiguration())
 -            .seekToBeginning().build();
 +            .withTableConfiguration(DefaultConfiguration.getInstance()).seekToBeginning().build();
          while (importIterator.hasTop()) {
            Key key = importIterator.getTopKey();
            Value value = importIterator.getTopValue();
@@@ -503,31 -538,8 +540,34 @@@
    }
  
    @Override
-   public Locations locate(String tableName, Collection<Range> ranges) throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
+   public Locations locate(String tableName, Collection<Range> ranges)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
      throw new UnsupportedOperationException();
    }
 +
 +  @Override
-   public SummaryRetriever summaries(String tableName) throws TableNotFoundException, AccumuloException, AccumuloSecurityException {
++  public SummaryRetriever summaries(String tableName)
++      throws TableNotFoundException, AccumuloException, AccumuloSecurityException {
 +    throw new UnsupportedOperationException();
 +  }
 +
 +  @Override
-   public void addSummarizers(String tableName, SummarizerConfiguration... summarizerConf) throws TableNotFoundException, AccumuloException,
-       AccumuloSecurityException {
++  public void addSummarizers(String tableName, SummarizerConfiguration... summarizerConf)
++      throws TableNotFoundException, AccumuloException, AccumuloSecurityException {
 +    throw new UnsupportedOperationException();
 +
 +  }
 +
 +  @Override
-   public void removeSummarizers(String tableName, Predicate<SummarizerConfiguration> predicate) throws AccumuloException, TableNotFoundException,
-       AccumuloSecurityException {
++  public void removeSummarizers(String tableName, Predicate<SummarizerConfiguration> predicate)
++      throws AccumuloException, TableNotFoundException, AccumuloSecurityException {
 +    throw new UnsupportedOperationException();
 +
 +  }
 +
 +  @Override
-   public List<SummarizerConfiguration> listSummarizers(String tableName) throws AccumuloException, TableNotFoundException, AccumuloSecurityException {
++  public List<SummarizerConfiguration> listSummarizers(String tableName)
++      throws AccumuloException, TableNotFoundException, AccumuloSecurityException {
 +    throw new UnsupportedOperationException();
 +  }
  }
diff --cc core/src/main/java/org/apache/accumulo/core/client/mock/impl/MockTabletLocator.java
index 3837f2a,fbdb0e4..4e37294
--- a/core/src/main/java/org/apache/accumulo/core/client/mock/impl/MockTabletLocator.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/mock/impl/MockTabletLocator.java
@@@ -55,9 -56,10 +56,10 @@@ public class MockTabletLocator extends 
    }
  
    @Override
-   public List<Range> binRanges(ClientContext context, List<Range> ranges, Map<String,Map<KeyExtent,List<Range>>> binnedRanges) throws AccumuloException,
-       AccumuloSecurityException, TableNotFoundException {
+   public List<Range> binRanges(ClientContext context, List<Range> ranges,
+       Map<String,Map<KeyExtent,List<Range>>> binnedRanges)
+       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
 -    binnedRanges.put("", Collections.singletonMap(new KeyExtent("", null, null), ranges));
 +    binnedRanges.put("", Collections.singletonMap(new KeyExtent(), ranges));
      return Collections.emptyList();
    }
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/rfile/RFile.java
index 7c3f70e,fed3e35..f686e70
--- a/core/src/main/java/org/apache/accumulo/core/client/rfile/RFile.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/rfile/RFile.java
@@@ -187,120 -195,8 +201,132 @@@ public class RFile 
    }
  
    /**
-    * This is an intermediate interface in a larger builder pattern. Supports setting the required input sources for reading summary data from an RFile.
+    * This is an intermediate interface in a larger builder pattern. Supports setting the required
++   * input sources for reading summary data from an RFile.
 +   *
 +   * @since 2.0.0
 +   */
 +  public static interface SummaryInputArguments {
 +    /**
-      * Specify RFiles to read from. When multiple inputs are specified the summary data will be merged.
++     * Specify RFiles to read from. When multiple inputs are specified the summary data will be
++     * merged.
 +     *
 +     * @param inputs
 +     *          one or more RFiles to read.
 +     * @return this
 +     */
 +    SummaryOptions from(RFileSource... inputs);
 +
 +    /**
 +     * Specify RFiles to read from. When multiple are specified the summary data will be merged.
 +     *
 +     * @param files
 +     *          one or more RFiles to read.
 +     * @return this
 +     */
 +    SummaryFSOptions from(String... files);
 +  }
 +
 +  /**
-    * This is an intermediate interface in a larger builder pattern. Enables optionally setting a FileSystem to read RFile summary data from.
++   * This is an intermediate interface in a larger builder pattern. Enables optionally setting a
++   * FileSystem to read RFile summary data from.
 +   *
 +   * @since 2.0.0
 +   */
 +  public static interface SummaryFSOptions extends SummaryOptions {
 +    /**
-      * Optionally provide a FileSystem to open RFiles. If not specified, the FileSystem will be constructed using configuration on the classpath.
++     * Optionally provide a FileSystem to open RFiles. If not specified, the FileSystem will be
++     * constructed using configuration on the classpath.
 +     *
 +     * @param fs
 +     *          use this FileSystem to open files.
 +     * @return this
 +     */
 +    SummaryOptions withFileSystem(FileSystem fs);
 +  }
 +
 +  /**
-    * This is an intermediate interface in a large builder pattern. Allows setting options for retrieving summary data.
++   * This is an intermediate interface in a large builder pattern. Allows setting options for
++   * retrieving summary data.
 +   *
 +   * @since 2.0.0
 +   */
 +  public static interface SummaryOptions {
 +    /**
-      * This method allows retrieving a subset of summary data from a file. If a file has lots of separate summaries, reading a subset may be faster.
++     * This method allows retrieving a subset of summary data from a file. If a file has lots of
++     * separate summaries, reading a subset may be faster.
 +     *
 +     * @param summarySelector
-      *          Only read summary data that was generated with configuration that this predicate matches.
++     *          Only read summary data that was generated with configuration that this predicate
++     *          matches.
 +     * @return this
 +     */
 +    SummaryOptions selectSummaries(Predicate<SummarizerConfiguration> summarySelector);
 +
 +    /**
-      * Summary data may possibly be stored at a more granular level than the entire file. However there is no guarantee of this. If the data was stored at a
-      * more granular level, then this will get a subset of the summary data. The subset will very likely be an inaccurate approximation.
++     * Summary data may possibly be stored at a more granular level than the entire file. However
++     * there is no guarantee of this. If the data was stored at a more granular level, then this
++     * will get a subset of the summary data. The subset will very likely be an inaccurate
++     * approximation.
 +     *
 +     * @param startRow
 +     *          A non-null start row. The startRow is used exclusively.
 +     * @return this
 +     *
 +     * @see FileStatistics#getExtra()
 +     */
 +    SummaryOptions startRow(Text startRow);
 +
 +    /**
 +     * @param startRow
 +     *          UTF-8 encodes startRow. The startRow is used exclusively.
 +     * @return this
 +     * @see #startRow(Text)
 +     */
 +    SummaryOptions startRow(CharSequence startRow);
 +
 +    /**
-      * Summary data may possibly be stored at a more granular level than the entire file. However there is no guarantee of this. If the data was stored at a
-      * more granular level, then this will get a subset of the summary data. The subset will very likely be an inaccurate approximation.
++     * Summary data may possibly be stored at a more granular level than the entire file. However
++     * there is no guarantee of this. If the data was stored at a more granular level, then this
++     * will get a subset of the summary data. The subset will very likely be an inaccurate
++     * approximation.
 +     *
 +     * @param endRow
 +     *          A non-null end row. The end row is used inclusively.
 +     * @return this
 +     *
 +     * @see FileStatistics#getExtra()
 +     */
 +    SummaryOptions endRow(Text endRow);
 +
 +    /**
 +     * @param endRow
 +     *          UTF-8 encodes endRow. The end row is used inclusively.
 +     * @return this
 +     * @see #endRow(Text)
 +     */
 +    SummaryOptions endRow(CharSequence endRow);
 +
 +    /**
 +     * Reads summary data from file.
 +     *
 +     * @return The summary data in the file that satisfied the selection criteria.
 +     */
 +    Collection<Summary> read() throws IOException;
 +  }
 +
 +  /**
 +   * Entry point for reading summary data from RFiles.
 +   *
 +   * @since 2.0.0
 +   */
 +  public static SummaryInputArguments summaries() {
 +    return new RFileSummariesRetriever();
 +  }
 +
 +  /**
-    * This is an intermediate interface in a larger builder pattern. Supports setting the required output sink to write a RFile to.
++   * This is an intermediate interface in a larger builder pattern. Supports setting the required
+    * output sink to write a RFile to.
     *
     * @since 1.8.0
     */
@@@ -343,16 -241,6 +371,17 @@@
     * @since 1.8.0
     */
    public static interface WriterOptions {
 +
 +    /**
-      * Enable generating summary data in the created RFile by running {@link Summarizer}'s based on the specified configuration.
++     * Enable generating summary data in the created RFile by running {@link Summarizer}'s based on
++     * the specified configuration.
 +     *
 +     * @param summarizerConf
 +     *          Configuration for summarizer to run.
 +     * @since 2.0.0
 +     */
 +    public WriterOptions withSummarizers(SummarizerConfiguration... summarizerConf);
 +
      /**
       * An option to store sample data in the generated RFile.
       *
diff --cc core/src/main/java/org/apache/accumulo/core/client/rfile/RFileScanner.java
index 15c89ed,9320fc0..bcb2e49
--- a/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileScanner.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileScanner.java
@@@ -117,58 -113,6 +117,59 @@@ class RFileScanner extends ScannerOptio
      public long getMaxSize() {
        return Integer.MAX_VALUE;
      }
 +
 +    @Override
 +    public Stats getStats() {
 +      return new BlockCache.Stats() {
 +        @Override
 +        public long hitCount() {
 +          return 0L;
 +        }
 +
 +        @Override
 +        public long requestCount() {
 +          return 0L;
 +        }
 +      };
 +    }
 +
 +    @Override
 +    public CacheEntry getBlock(String blockName, Loader loader) {
 +      Map<String,Loader> depLoaders = loader.getDependencies();
 +      Map<String,byte[]> depData;
 +
 +      switch (depLoaders.size()) {
 +        case 0:
 +          depData = Collections.emptyMap();
 +          break;
 +        case 1:
 +          Entry<String,Loader> entry = depLoaders.entrySet().iterator().next();
-           depData = Collections.singletonMap(entry.getKey(), getBlock(entry.getKey(), entry.getValue()).getBuffer());
++          depData = Collections.singletonMap(entry.getKey(),
++              getBlock(entry.getKey(), entry.getValue()).getBuffer());
 +          break;
 +        default:
 +          depData = new HashMap<>();
 +          depLoaders.forEach((k, v) -> depData.put(k, getBlock(k, v).getBuffer()));
 +      }
 +
 +      byte[] data = loader.load(Integer.MAX_VALUE, depData);
 +
 +      return new CacheEntry() {
 +
 +        @Override
 +        public byte[] getBuffer() {
 +          return data;
 +        }
 +
 +        @Override
 +        public <T extends Weighbable> T getIndex(Supplier<T> supplier) {
 +          return null;
 +        }
 +
 +        @Override
 +        public void indexWeightChanged() {}
 +      };
 +    }
    }
  
    RFileScanner(Opts opts) {
@@@ -340,10 -269,11 +345,11 @@@
        RFileSource[] sources = opts.in.getSources();
        List<SortedKeyValueIterator<Key,Value>> readers = new ArrayList<>(sources.length);
        for (int i = 0; i < sources.length; i++) {
 +        // TODO may have been a bug with multiple files and caching in older version...
          FSDataInputStream inputStream = (FSDataInputStream) sources[i].getInputStream();
-         readers.add(new RFile.Reader(new CachableBlockFile.Reader("source-" + i, inputStream, sources[i].getLength(), opts.in.getConf(), dataCache, indexCache,
-             DefaultConfiguration.getInstance())));
 -
 -        readers.add(new RFile.Reader(new CachableBlockFile.Reader("source-" + i, inputStream,
 -            sources[i].getLength(), opts.in.getConf(), dataCache, indexCache,
 -            AccumuloConfiguration.getDefaultConfiguration())));
++        readers.add(new RFile.Reader(
++            new CachableBlockFile.Reader("source-" + i, inputStream, sources[i].getLength(),
++                opts.in.getConf(), dataCache, indexCache, DefaultConfiguration.getInstance())));
        }
  
        if (getSamplerConfiguration() != null) {
diff --cc core/src/main/java/org/apache/accumulo/core/client/rfile/RFileSummariesRetriever.java
index e4b3e05,0000000..7fd618c
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileSummariesRetriever.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileSummariesRetriever.java
@@@ -1,122 -1,0 +1,124 @@@
 +/*
 + * 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.rfile;
 +
 +import java.io.IOException;
 +import java.util.Collection;
 +import java.util.Collections;
 +import java.util.Objects;
 +import java.util.function.Predicate;
 +
 +import org.apache.accumulo.core.client.rfile.RFile.SummaryFSOptions;
 +import org.apache.accumulo.core.client.rfile.RFile.SummaryInputArguments;
 +import org.apache.accumulo.core.client.rfile.RFile.SummaryOptions;
 +import org.apache.accumulo.core.client.rfile.RFileScannerBuilder.InputArgs;
 +import org.apache.accumulo.core.client.summary.SummarizerConfiguration;
 +import org.apache.accumulo.core.client.summary.Summary;
 +import org.apache.accumulo.core.conf.AccumuloConfiguration;
 +import org.apache.accumulo.core.conf.DefaultConfiguration;
 +import org.apache.accumulo.core.summary.Gatherer;
 +import org.apache.accumulo.core.summary.SummarizerFactory;
 +import org.apache.accumulo.core.summary.SummaryCollection;
 +import org.apache.accumulo.core.summary.SummaryReader;
 +import org.apache.hadoop.conf.Configuration;
 +import org.apache.hadoop.fs.FileSystem;
 +import org.apache.hadoop.io.Text;
 +
 +class RFileSummariesRetriever implements SummaryInputArguments, SummaryFSOptions, SummaryOptions {
 +
 +  private Predicate<SummarizerConfiguration> summarySelector = sc -> true;
 +  private Text startRow;
 +  private InputArgs in;
 +  private Text endRow;
 +
 +  @Override
 +  public SummaryOptions selectSummaries(Predicate<SummarizerConfiguration> summarySelector) {
 +    Objects.requireNonNull(summarySelector);
 +    this.summarySelector = summarySelector;
 +    return this;
 +  }
 +
 +  @Override
 +  public SummaryOptions startRow(CharSequence startRow) {
 +    return startRow(new Text(startRow.toString()));
 +  }
 +
 +  @Override
 +  public SummaryOptions startRow(Text startRow) {
 +    Objects.requireNonNull(startRow);
 +    this.startRow = startRow;
 +    return this;
 +  }
 +
 +  @Override
 +  public SummaryOptions endRow(CharSequence endRow) {
 +    return endRow(new Text(endRow.toString()));
 +  }
 +
 +  @Override
 +  public SummaryOptions endRow(Text endRow) {
 +    Objects.requireNonNull(endRow);
 +    this.endRow = endRow;
 +    return this;
 +  }
 +
 +  @Override
 +  public Collection<Summary> read() throws IOException {
 +    SummarizerFactory factory = new SummarizerFactory();
 +    AccumuloConfiguration acuconf = DefaultConfiguration.getInstance();
 +    Configuration conf = in.getFileSystem().getConf();
 +
 +    RFileSource[] sources = in.getSources();
 +    try {
 +      SummaryCollection all = new SummaryCollection();
 +      for (RFileSource source : sources) {
-         SummaryReader fileSummary = SummaryReader.load(conf, acuconf, source.getInputStream(), source.getLength(), summarySelector, factory);
-         SummaryCollection sc = fileSummary.getSummaries(Collections.singletonList(new Gatherer.RowRange(startRow, endRow)));
++        SummaryReader fileSummary = SummaryReader.load(conf, acuconf, source.getInputStream(),
++            source.getLength(), summarySelector, factory);
++        SummaryCollection sc = fileSummary
++            .getSummaries(Collections.singletonList(new Gatherer.RowRange(startRow, endRow)));
 +        all.merge(sc, factory);
 +      }
 +      return all.getSummaries();
 +    } finally {
 +      for (RFileSource source : sources) {
 +        source.getInputStream().close();
 +      }
 +    }
 +  }
 +
 +  @Override
 +  public SummaryOptions withFileSystem(FileSystem fs) {
 +    Objects.requireNonNull(fs);
 +    this.in.fs = fs;
 +    return this;
 +  }
 +
 +  @Override
 +  public SummaryOptions from(RFileSource... inputs) {
 +    Objects.requireNonNull(inputs);
 +    in = new InputArgs(inputs);
 +    return this;
 +  }
 +
 +  @Override
 +  public SummaryFSOptions from(String... files) {
 +    Objects.requireNonNull(files);
 +    in = new InputArgs(files);
 +    return this;
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/rfile/RFileWriterBuilder.java
index 9097a8b,4dd7184..20636f8
--- a/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileWriterBuilder.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/rfile/RFileWriterBuilder.java
@@@ -63,14 -59,9 +63,16 @@@ class RFileWriterBuilder implements RFi
    }
  
    private OutputArgs out;
 -  private SamplerConfiguration sampler = null;
    private Map<String,String> tableConfig = Collections.emptyMap();
    private int visCacheSize = 1000;
 +  private Map<String,String> samplerProps = Collections.emptyMap();
 +  private Map<String,String> summarizerProps = Collections.emptyMap();
 +
-   private void checkDisjoint(Map<String,String> props, Map<String,String> derivedProps, String kind) {
-     checkArgument(Collections.disjoint(props.keySet(), derivedProps.keySet()), "Properties and derived %s properties are not disjoint", kind);
++  private void checkDisjoint(Map<String,String> props, Map<String,String> derivedProps,
++      String kind) {
++    checkArgument(Collections.disjoint(props.keySet(), derivedProps.keySet()),
++        "Properties and derived %s properties are not disjoint", kind);
 +  }
  
    @Override
    public WriterOptions withSampler(SamplerConfiguration samplerConf) {
@@@ -102,11 -92,12 +104,16 @@@
        } else {
          fsdo = new FSDataOutputStream(out.getOutputStream(), new FileSystem.Statistics("foo"));
        }
-       return new RFileWriter(fileops.newWriterBuilder().forOutputStream(".rf", fsdo, out.getConf()).withTableConfiguration(acuconf)
-           .setAccumuloStartEnabled(false).build(), visCacheSize);
 -      return new RFileWriter(fileops.newWriterBuilder().forOutputStream(".rf", fsdo, out.getConf())
 -          .withTableConfiguration(acuconf).build(), visCacheSize);
++      return new RFileWriter(
++          fileops.newWriterBuilder().forOutputStream(".rf", fsdo, out.getConf())
++              .withTableConfiguration(acuconf).setAccumuloStartEnabled(false).build(),
++          visCacheSize);
      } else {
-       return new RFileWriter(fileops.newWriterBuilder().forFile(out.path.toString(), out.getFileSystem(), out.getConf()).withTableConfiguration(acuconf)
-           .setAccumuloStartEnabled(false).build(), visCacheSize);
 -      return new RFileWriter(fileops.newWriterBuilder()
 -          .forFile(out.path.toString(), out.getFileSystem(), out.getConf())
 -          .withTableConfiguration(acuconf).build(), visCacheSize);
++      return new RFileWriter(
++          fileops.newWriterBuilder()
++              .forFile(out.path.toString(), out.getFileSystem(), out.getConf())
++              .withTableConfiguration(acuconf).setAccumuloStartEnabled(false).build(),
++          visCacheSize);
      }
    }
  
diff --cc core/src/main/java/org/apache/accumulo/core/client/security/tokens/CredentialProviderToken.java
index b39afe2,e804737..320268c
--- a/core/src/main/java/org/apache/accumulo/core/client/security/tokens/CredentialProviderToken.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/security/tokens/CredentialProviderToken.java
@@@ -31,11 -31,9 +31,12 @@@ import org.apache.hadoop.conf.Configura
   * An {@link AuthenticationToken} backed by a Hadoop CredentialProvider.
   */
  public class CredentialProviderToken extends PasswordToken {
-   public static final String NAME_PROPERTY = "name", CREDENTIAL_PROVIDERS_PROPERTY = "credentialProviders";
+   public static final String NAME_PROPERTY = "name",
+       CREDENTIAL_PROVIDERS_PROPERTY = "credentialProviders";
  
 +  private String name;
 +  private String credentialProviders;
 +
    public CredentialProviderToken() {
      super();
    }
@@@ -46,9 -44,9 +47,10 @@@
      setWithCredentialProviders(name, credentialProviders);
    }
  
-   protected void setWithCredentialProviders(String name, String credentialProviders) throws IOException {
+   protected void setWithCredentialProviders(String name, String credentialProviders)
+       throws IOException {
 +    this.name = name;
 +    this.credentialProviders = credentialProviders;
      final Configuration conf = new Configuration(CachedConfiguration.getInstance());
      conf.set(CredentialProviderFactoryShim.CREDENTIAL_PROVIDER_PATH, credentialProviders);
  
@@@ -61,26 -60,14 +64,28 @@@
      setPassword(CharBuffer.wrap(password));
    }
  
 +  /**
 +   * @return Name used to extract Accumulo user password from CredentialProvider
 +   */
 +  public String getName() {
 +    return name;
 +  }
 +
 +  /**
 +   * @return CSV list of CredentialProvider(s)
 +   */
 +  public String getCredentialProviders() {
 +    return credentialProviders;
 +  }
 +
    @Override
    public void init(Properties properties) {
-     char[] nameCharArray = properties.get(NAME_PROPERTY), credentialProvidersCharArray = properties.get(CREDENTIAL_PROVIDERS_PROPERTY);
+     char[] nameCharArray = properties.get(NAME_PROPERTY),
+         credentialProvidersCharArray = properties.get(CREDENTIAL_PROVIDERS_PROPERTY);
      if (null != nameCharArray && null != credentialProvidersCharArray) {
        try {
-         this.setWithCredentialProviders(new String(nameCharArray), new String(credentialProvidersCharArray));
+         this.setWithCredentialProviders(new String(nameCharArray),
+             new String(credentialProvidersCharArray));
        } catch (IOException e) {
          throw new IllegalArgumentException("Could not extract password from CredentialProvider", e);
        }
diff --cc core/src/main/java/org/apache/accumulo/core/client/summary/CounterSummary.java
index a0f9bc5,0000000..b5a5cca
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/CounterSummary.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/CounterSummary.java
@@@ -1,123 -1,0 +1,131 @@@
 +/*
 + * 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.summary;
 +
 +import java.util.HashMap;
 +import java.util.Map;
 +import java.util.Map.Entry;
 +
 +import com.google.common.annotations.VisibleForTesting;
 +
 +/**
-  * This a convenience class for interpreting summary data generated by implementations of {@link CountingSummarizer}
++ * This a convenience class for interpreting summary data generated by implementations of
++ * {@link CountingSummarizer}
 + *
 + * @since 2.0.0
 + */
 +
 +public class CounterSummary {
 +  private Map<String,Long> stats;
 +
 +  /**
 +   * This method will call {@link #CounterSummary(Summary, boolean)} with true.
 +   */
 +  public CounterSummary(Summary summary) {
 +    this(summary, true);
 +  }
 +
 +  /**
 +   * @param summary
 +   *          a summary
 +   * @param checkType
-    *          If true will try to ensure the classname from {@link Summary#getSummarizerConfiguration()} is an instance of {@link CountingSummarizer}. However
-    *          this check can only succeed if the class is on the classpath. For cases where the summary data needs to be used and the class is not on the
-    *          classpath, set this to false.
++   *          If true will try to ensure the classname from
++   *          {@link Summary#getSummarizerConfiguration()} is an instance of
++   *          {@link CountingSummarizer}. However this check can only succeed if the class is on the
++   *          classpath. For cases where the summary data needs to be used and the class is not on
++   *          the classpath, set this to false.
 +   */
 +  public CounterSummary(Summary summary, boolean checkType) {
 +    if (checkType) {
 +      String className = summary.getSummarizerConfiguration().getClassName();
 +      try {
 +        getClass().getClassLoader().loadClass(className).asSubclass(CountingSummarizer.class);
 +      } catch (ClassCastException e) {
-         throw new IllegalArgumentException(className + " is not an instance of " + CountingSummarizer.class.getSimpleName(), e);
++        throw new IllegalArgumentException(
++            className + " is not an instance of " + CountingSummarizer.class.getSimpleName(), e);
 +      } catch (ClassNotFoundException e) {
-         throw new IllegalArgumentException("Unable to check summary was produced by a " + CountingSummarizer.class.getSimpleName(), e);
++        throw new IllegalArgumentException(
++            "Unable to check summary was produced by a " + CountingSummarizer.class.getSimpleName(),
++            e);
 +      }
 +    }
 +    this.stats = summary.getStatistics();
 +  }
 +
 +  @VisibleForTesting
 +  CounterSummary(Map<String,Long> stats) {
 +    this.stats = stats;
 +  }
 +
 +  /**
 +   * @return statistic for {@link CountingSummarizer#SEEN_STAT}
 +   */
 +  public long getSeen() {
 +    return stats.getOrDefault(CountingSummarizer.SEEN_STAT, 0l);
 +  }
 +
 +  /**
 +   * @return statistic for {@link CountingSummarizer#EMITTED_STAT}
 +   */
 +  public long getEmitted() {
 +    return stats.getOrDefault(CountingSummarizer.EMITTED_STAT, 0l);
 +  }
 +
 +  /**
 +   * @return the sum of {@link #getTooLong()} and {@link #getTooLong()}
 +   */
 +  public long getIgnored() {
 +    return getTooLong() + getTooMany();
 +  }
 +
 +  /**
 +   * @return statistic for {@link CountingSummarizer#TOO_LONG_STAT}
 +   */
 +  public long getTooLong() {
 +    return stats.getOrDefault(CountingSummarizer.TOO_LONG_STAT, 0l);
 +  }
 +
 +  /**
 +   * @return statistic for {@link CountingSummarizer#TOO_MANY_STAT}
 +   */
 +  public long getTooMany() {
 +    return stats.getOrDefault(CountingSummarizer.TOO_MANY_STAT, 0l);
 +  }
 +
 +  /**
 +   * @return statistic for {@link CountingSummarizer#DELETES_IGNORED_STAT}
 +   */
 +  public long getDeletesIgnored() {
 +    return stats.getOrDefault(CountingSummarizer.DELETES_IGNORED_STAT, 0l);
 +  }
 +
 +  /**
-    * @return All statistics with a prefix of {@link CountingSummarizer#COUNTER_STAT_PREFIX} with the prefix stripped off.
++   * @return All statistics with a prefix of {@link CountingSummarizer#COUNTER_STAT_PREFIX} with the
++   *         prefix stripped off.
 +   */
 +  public Map<String,Long> getCounters() {
 +    HashMap<String,Long> ret = new HashMap<>();
 +    for (Entry<String,Long> entry : stats.entrySet()) {
 +      if (entry.getKey().startsWith(CountingSummarizer.COUNTER_STAT_PREFIX)) {
-         ret.put(entry.getKey().substring(CountingSummarizer.COUNTER_STAT_PREFIX.length()), entry.getValue());
++        ret.put(entry.getKey().substring(CountingSummarizer.COUNTER_STAT_PREFIX.length()),
++            entry.getValue());
 +      }
 +    }
 +    return ret;
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/summary/CountingSummarizer.java
index b3e1b68,0000000..58bbc3b
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/CountingSummarizer.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/CountingSummarizer.java
@@@ -1,302 -1,0 +1,319 @@@
 +/*
 + * 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.summary;
 +
 +import java.util.HashMap;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Map.Entry;
 +import java.util.function.Consumer;
 +import java.util.function.Function;
 +import java.util.function.UnaryOperator;
 +import java.util.stream.Collectors;
 +
 +import org.apache.accumulo.core.client.summary.summarizers.VisibilitySummarizer;
 +import org.apache.accumulo.core.data.Key;
 +import org.apache.accumulo.core.data.Value;
 +import org.apache.commons.lang.mutable.MutableLong;
 +
 +//checkstyle and formatter are in conflict
 +//@formatter:off
 +/**
 + * This class counts arbitrary keys while defending against too many keys and keys that are too long.
 + *
 + * <p>
 + * During collection and summarization this class will use the functions from {@link #converter()} and {@link #encoder()}. For each key/value the function from
 + * {@link #converter()} will be called to create zero or more counter objects. A counter associated with each counter object will be incremented, as long as
 + * there are not too many counters and the counter object is not too long.
 + *
 + * <p>
 + * When {@link Summarizer.Collector#summarize(Summarizer.StatisticConsumer)} is called, the function from {@link #encoder()} will be used to convert counter
 + * objects to strings. These strings will be used to emit statistics. Overriding {@link #encoder()} is optional. One reason to override is if the counter object
 + * contains binary or special data. For example, a function that base64 encodes counter objects could be created.
 + *
 + * <p>
 + * If the counter key type is mutable, then consider overriding {@link #copier()}.
 + *
 + * <p>
 + * The function returned by {@link #converter()} will be called frequently and should be very efficient. The function returned by {@link #encoder()} will be
 + * called less frequently and can be more expensive. The reason these two functions exists is to avoid the conversion to string for each key value, if that
 + * conversion is unnecessary.
 + *
 + * <p>
 + * Below is an example implementation that counts column visibilities. This example avoids converting column visibility to string for each key/value. This
 + * example shows the source code for {@link VisibilitySummarizer}.
 + *
 + * <pre>
 + * <code>
 + *   public class VisibilitySummarizer extends CountingSummarizer&lt;ByteSequence&gt; {
 + *     &#064;Override
 + *     protected UnaryOperator&lt;ByteSequence&gt; copier() {
 + *       // ByteSequences are mutable, so override and provide a copy function
 + *       return ArrayByteSequence::new;
 + *     }
 + *
 + *     &#064;Override
 + *     protected Converter&lt;ByteSequence&gt; converter() {
 + *       return (key, val, consumer) -&gt; consumer.accept(key.getColumnVisibilityData());
 + *     }
 + *   }
 + * </code>
 + * </pre>
 + *
 + * @param <K>
 + *          The counter key type. This type must have good implementations of {@link Object#hashCode()} and {@link Object#equals(Object)}.
 + * @see CounterSummary
 + * @since 2.0.0
 + */
 +//@formatter:on
 +public abstract class CountingSummarizer<K> implements Summarizer {
 +
 +  /**
-    * A configuration option for specifying the maximum number of unique counters an instance of this summarizer should track. If not specified, a default of
-    * {@value #MAX_COUNTER_DEFAULT} will be used.
++   * A configuration option for specifying the maximum number of unique counters an instance of this
++   * summarizer should track. If not specified, a default of {@value #MAX_COUNTER_DEFAULT} will be
++   * used.
 +   */
 +  public static final String MAX_COUNTERS_OPT = "maxCounters";
 +
 +  /**
-    * A configuration option for specifying the maximum length of an individual counter key. If not specified, a default of {@value #MAX_CKL_DEFAULT} will be
-    * used.
++   * A configuration option for specifying the maximum length of an individual counter key. If not
++   * specified, a default of {@value #MAX_CKL_DEFAULT} will be used.
 +   */
 +  public static final String MAX_COUNTER_LEN_OPT = "maxCounterLen";
 +
 +  /**
-    * A configuration option to determine if delete keys should be counted. If set to true then delete keys will not be passed to the {@link Converter} and the
-    * statistic {@value #DELETES_IGNORED_STAT} will track the number of deleted ignored. This options defaults to {@value #INGNORE_DELETES_DEFAULT}.
++   * A configuration option to determine if delete keys should be counted. If set to true then
++   * delete keys will not be passed to the {@link Converter} and the statistic
++   * {@value #DELETES_IGNORED_STAT} will track the number of deleted ignored. This options defaults
++   * to {@value #INGNORE_DELETES_DEFAULT}.
 +   */
 +  public static final String INGNORE_DELETES_OPT = "ignoreDeletes";
 +
 +  /**
-    * This prefixes all counters when emitting statistics in {@link Summarizer.Collector#summarize(Summarizer.StatisticConsumer)}.
++   * This prefixes all counters when emitting statistics in
++   * {@link Summarizer.Collector#summarize(Summarizer.StatisticConsumer)}.
 +   */
 +  public static final String COUNTER_STAT_PREFIX = "c:";
 +
 +  /**
-    * This is the name of the statistic that tracks how many counters objects were ignored because the number of unique counters was exceeded. The max number of
-    * unique counters is specified by {@link #MAX_COUNTERS_OPT}.
++   * This is the name of the statistic that tracks how many counters objects were ignored because
++   * the number of unique counters was exceeded. The max number of unique counters is specified by
++   * {@link #MAX_COUNTERS_OPT}.
 +   */
 +  public static final String TOO_MANY_STAT = "tooMany";
 +
 +  /**
-    * This is the name of the statistic that tracks how many counter objects were ignored because they were too long. The maximum lenght is specified by
-    * {@link #MAX_COUNTER_LEN_OPT}.
++   * This is the name of the statistic that tracks how many counter objects were ignored because
++   * they were too long. The maximum lenght is specified by {@link #MAX_COUNTER_LEN_OPT}.
 +   */
 +  public static final String TOO_LONG_STAT = "tooLong";
 +
 +  /**
-    * This is the name of the statistic that tracks the total number of counter objects emitted by the {@link Converter}. This includes emitted Counter objects
-    * that were ignored.
++   * This is the name of the statistic that tracks the total number of counter objects emitted by
++   * the {@link Converter}. This includes emitted Counter objects that were ignored.
 +   */
 +  public static final String EMITTED_STAT = "emitted";
 +
 +  /**
-    * This is the name of the statistic that tracks the total number of deleted keys seen. This statistic is only incremented when the
-    * {@value #INGNORE_DELETES_OPT} option is set to true.
++   * This is the name of the statistic that tracks the total number of deleted keys seen. This
++   * statistic is only incremented when the {@value #INGNORE_DELETES_OPT} option is set to true.
 +   */
 +  public static final String DELETES_IGNORED_STAT = "deletesIgnored";
 +
 +  /**
 +   * This tracks the total number of key/values seen by the {@link Summarizer.Collector}
 +   */
 +  public static final String SEEN_STAT = "seen";
 +
-   // this default can not be changed as persisted summary data depends on it. See the documentation about persistence in the Summarizer class javadoc.
++  // this default can not be changed as persisted summary data depends on it. See the documentation
++  // about persistence in the Summarizer class javadoc.
 +  public static final String MAX_COUNTER_DEFAULT = "1024";
 +
 +  // this default can not be changed as persisted summary data depends on it
 +  public static final String MAX_CKL_DEFAULT = "128";
 +
 +  // this default can not be changed as persisted summary data depends on it
 +  public static final String INGNORE_DELETES_DEFAULT = "true";
 +
-   private static final String[] ALL_STATS = new String[] {TOO_LONG_STAT, TOO_MANY_STAT, EMITTED_STAT, SEEN_STAT, DELETES_IGNORED_STAT};
++  private static final String[] ALL_STATS = new String[] {TOO_LONG_STAT, TOO_MANY_STAT,
++      EMITTED_STAT, SEEN_STAT, DELETES_IGNORED_STAT};
 +
 +  private int maxCounters;
 +  private int maxCounterKeyLen;
 +  private boolean ignoreDeletes;
 +
 +  private void init(SummarizerConfiguration conf) {
-     maxCounters = Integer.parseInt(conf.getOptions().getOrDefault(MAX_COUNTERS_OPT, MAX_COUNTER_DEFAULT));
-     maxCounterKeyLen = Integer.parseInt(conf.getOptions().getOrDefault(MAX_COUNTER_LEN_OPT, MAX_CKL_DEFAULT));
-     ignoreDeletes = Boolean.parseBoolean(conf.getOptions().getOrDefault(INGNORE_DELETES_OPT, INGNORE_DELETES_DEFAULT));
++    maxCounters = Integer
++        .parseInt(conf.getOptions().getOrDefault(MAX_COUNTERS_OPT, MAX_COUNTER_DEFAULT));
++    maxCounterKeyLen = Integer
++        .parseInt(conf.getOptions().getOrDefault(MAX_COUNTER_LEN_OPT, MAX_CKL_DEFAULT));
++    ignoreDeletes = Boolean
++        .parseBoolean(conf.getOptions().getOrDefault(INGNORE_DELETES_OPT, INGNORE_DELETES_DEFAULT));
 +  }
 +
 +  /**
 +   * A function that converts key values to zero or more counter objects.
 +   *
 +   * @since 2.0.0
 +   */
 +  public static interface Converter<K> {
 +    /**
 +     * @param consumer
 +     *          emit counter objects derived from key and value to this consumer
 +     */
 +    public void convert(Key k, Value v, Consumer<K> consumer);
 +  }
 +
 +  /**
 +   *
-    * @return A function that is used to convert each key value to zero or more counter objects. Each function returned should be independent.
++   * @return A function that is used to convert each key value to zero or more counter objects. Each
++   *         function returned should be independent.
 +   */
 +  protected abstract Converter<K> converter();
 +
 +  /**
-    * @return A function that is used to convert counter objects to String. The default function calls {@link Object#toString()} on the counter object.
++   * @return A function that is used to convert counter objects to String. The default function
++   *         calls {@link Object#toString()} on the counter object.
 +   */
 +  protected Function<K,String> encoder() {
 +    return Object::toString;
 +  }
 +
 +  /**
 +   * Override this if your key type is mutable and subject to change.
 +   *
-    * @return a function that used to copy the counter object. This function is only used when the collector has never seen the counter object before. In this
-    *         case the collector needs to possibly copy the counter object before using as map key. The default implementation is the
-    *         {@link UnaryOperator#identity()} function.
++   * @return a function that used to copy the counter object. This function is only used when the
++   *         collector has never seen the counter object before. In this case the collector needs to
++   *         possibly copy the counter object before using as map key. The default implementation is
++   *         the {@link UnaryOperator#identity()} function.
 +   */
 +  protected UnaryOperator<K> copier() {
 +    return UnaryOperator.identity();
 +  }
 +
 +  @Override
 +  public Collector collector(SummarizerConfiguration sc) {
 +    init(sc);
 +    return new Collector() {
 +
-       // Map used for computing summary incrementally uses ByteSequence for key which is more efficient than converting String for each Key. The
++      // Map used for computing summary incrementally uses ByteSequence for key which is more
++      // efficient than converting String for each Key. The
 +      // conversion to String is deferred until the summary is requested.
 +
 +      private Map<K,MutableLong> counters = new HashMap<>();
 +      private long tooMany = 0;
 +      private long tooLong = 0;
 +      private long seen = 0;
 +      private long emitted = 0;
 +      private long deleted = 0;
 +      private Converter<K> converter = converter();
 +      private Function<K,String> encoder = encoder();
 +      private UnaryOperator<K> copier = copier();
 +
 +      private void incrementCounter(K counter) {
 +        emitted++;
 +
 +        MutableLong ml = counters.get(counter);
 +        if (ml == null) {
 +          if (counters.size() >= maxCounters) {
 +            // no need to store this counter in the map and get() it... just use instance variable
 +            tooMany++;
 +          } else {
 +            // we have never seen this key before, check if its too long
 +            if (encoder.apply(counter).length() >= maxCounterKeyLen) {
 +              tooLong++;
 +            } else {
 +              counters.put(copier.apply(counter), new MutableLong(1));
 +            }
 +          }
 +        } else {
 +          // using mutable long allows calling put() to be avoided
 +          ml.increment();
 +        }
 +      }
 +
 +      @Override
 +      public void accept(Key k, Value v) {
 +        seen++;
 +        if (ignoreDeletes && k.isDeleted()) {
 +          deleted++;
 +        } else {
 +          converter.convert(k, v, this::incrementCounter);
 +        }
 +      }
 +
 +      @Override
 +      public void summarize(StatisticConsumer sc) {
 +        StringBuilder sb = new StringBuilder(COUNTER_STAT_PREFIX);
 +
 +        for (Entry<K,MutableLong> entry : counters.entrySet()) {
 +          sb.setLength(COUNTER_STAT_PREFIX.length());
 +          sb.append(encoder.apply(entry.getKey()));
 +          sc.accept(sb.toString(), entry.getValue().longValue());
 +        }
 +
 +        sc.accept(TOO_MANY_STAT, tooMany);
 +        sc.accept(TOO_LONG_STAT, tooLong);
 +        sc.accept(EMITTED_STAT, emitted);
 +        sc.accept(SEEN_STAT, seen);
 +        sc.accept(DELETES_IGNORED_STAT, deleted);
 +      }
 +    };
 +  }
 +
 +  @Override
 +  public Combiner combiner(SummarizerConfiguration sc) {
 +    init(sc);
 +    return new Combiner() {
 +
 +      @Override
 +      public void merge(Map<String,Long> summary1, Map<String,Long> summary2) {
 +
 +        for (String key : ALL_STATS) {
 +          summary1.merge(key, summary2.getOrDefault(key, 0l), Long::sum);
 +        }
 +
 +        for (Entry<String,Long> entry : summary2.entrySet()) {
 +          String k2 = entry.getKey();
 +          Long v2 = entry.getValue();
 +
 +          if (k2.startsWith(COUNTER_STAT_PREFIX)) {
 +            summary1.merge(k2, v2, Long::sum);
 +          }
 +        }
 +
 +        if (summary1.size() - ALL_STATS.length > maxCounters) {
 +          // find the keys with the lowest counts to remove
-           List<String> keysToRemove = summary1.entrySet().stream().filter(e -> e.getKey().startsWith(COUNTER_STAT_PREFIX)) // filter out non counters
-               .sorted((e1, e2) -> Long.compare(e2.getValue(), e1.getValue())) // sort descending by count
++          List<String> keysToRemove = summary1.entrySet().stream()
++              .filter(e -> e.getKey().startsWith(COUNTER_STAT_PREFIX)) // filter out non counters
++              .sorted((e1, e2) -> Long.compare(e2.getValue(), e1.getValue())) // sort descending by
++                                                                              // count
 +              .skip(maxCounters) // skip most frequent
-               .map(e -> e.getKey()).collect(Collectors.toList()); // collect the least frequent counters in a list
++              .map(e -> e.getKey()).collect(Collectors.toList()); // collect the least frequent
++                                                                  // counters in a list
 +
 +          long removedCount = 0;
 +          for (String key : keysToRemove) {
 +            removedCount += summary1.remove(key);
 +          }
 +
 +          summary1.merge(TOO_MANY_STAT, removedCount, Long::sum);
 +        }
 +      }
 +    };
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/summary/Summarizer.java
index f34c18e,0000000..02cf2ab
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/Summarizer.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/Summarizer.java
@@@ -1,229 -1,0 +1,236 @@@
 +/*
 + * 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.summary;
 +
 +import java.util.Map;
 +
 +import org.apache.accumulo.core.client.admin.TableOperations;
 +import org.apache.accumulo.core.client.rfile.RFile;
 +import org.apache.accumulo.core.data.Key;
 +import org.apache.accumulo.core.data.Value;
 +
 +//checkstyle and the formatter are in conflict, so turn off the formatter
 +//@formatter:off
 +/**
 + * <p>
 + * Instances of this interface can be configured for Accumulo tables. When Accumulo compacts files, it will use this Factory to create {@link Collector} and
 + * {@link Combiner} objects to generate summary information about the data in the file.
 + *
 + * <p>
 + * In order to merge summary information from multiple files, Accumulo will use this factory to create a {@link Combiner} object.
 + *
 + * <p>
 + * Below is an example of a very simple summarizer that will compute the number of deletes, total number of keys, min timestamp and max timestamp.
 + *
 + * <pre>
 + * <code>
 + *   public class BasicSummarizer implements Summarizer {
 + *
 + *     public static final String DELETES_STAT = &quot;deletes&quot;;
 + *     public static final String MIN_STAMP_STAT = &quot;minStamp&quot;;
 + *     public static final String MAX_STAMP_STAT = &quot;maxStamp&quot;;
 + *     public static final String TOTAL_STAT = &quot;total&quot;;
 + *
 + *     &#064;Override
 + *     public Collector collector(SummarizerConfiguration sc) {
 + *       return new Collector() {
 + *
 + *         private long minStamp = Long.MAX_VALUE;
 + *         private long maxStamp = Long.MIN_VALUE;
 + *         private long deletes = 0;
 + *         private long total = 0;
 + *
 + *         &#064;Override
 + *         public void accept(Key k, Value v) {
 + *           if (k.getTimestamp() &lt; minStamp) {
 + *             minStamp = k.getTimestamp();
 + *           }
 + *
 + *           if (k.getTimestamp() &gt; maxStamp) {
 + *             maxStamp = k.getTimestamp();
 + *           }
 + *
 + *           if (k.isDeleted()) {
 + *             deletes++;
 + *           }
 + *
 + *           total++;
 + *         }
 + *
 + *         &#064;Override
 + *         public void summarize(StatisticConsumer sc) {
 + *           sc.accept(MIN_STAMP_STAT, minStamp);
 + *           sc.accept(MAX_STAMP_STAT, maxStamp);
 + *           sc.accept(DELETES_STAT, deletes);
 + *           sc.accept(TOTAL_STAT, total);
 + *         }
 + *       };
 + *     }
 + *
 + *     &#064;Override
 + *     public Combiner combiner(SummarizerConfiguration sc) {
 + *       return (stats1, stats2) -&gt; {
 + *         stats1.merge(DELETES_STAT, stats2.get(DELETES_STAT), Long::sum);
 + *         stats1.merge(TOTAL_STAT, stats2.get(TOTAL_STAT), Long::sum);
 + *         stats1.merge(MIN_STAMP_STAT, stats2.get(MIN_STAMP_STAT), Long::min);
 + *         stats1.merge(MAX_STAMP_STAT, stats2.get(MAX_STAMP_STAT), Long::max);
 + *       };
 + *     }
 + *   }
 + * </code>
 + * </pre>
 + *
 + * <p>
 + * Below is an example summarizer that counts the log of the value length.
 + *
 + * <pre>
 + * <code>
 + * public class ValueLogLengthSummarizer implements Summarizer {
 + *
 + *  &#64;Override
 + *  public Collector collector(SummarizerConfiguration sc) {
 + *
 + *    return new Collector(){
 + *
 + *      long[] counts = new long[32];
 + *
 + *      &#64;Override
 + *      public void accept(Key k, Value v) {
 + *        int idx;
 + *        if(v.getSize() == 0)
 + *          idx = 0;
 + *        else
 + *          idx = IntMath.log2(v.getSize(), RoundingMode.UP);  //IntMath is from Guava
 + *
 + *        counts[idx]++;
 + *      }
 + *
 + *      &#64;Override
 + *      public void summarize(StatisticConsumer sc) {
 + *        for (int i = 0; i &lt; counts.length; i++) {
 + *          if(counts[i] &gt; 0) {
 + *            sc.accept(""+(1&lt;&lt;i), counts[i]);
 + *          }
 + *        }
 + *      }
 + *    };
 + *  }
 + *
 + *  &#64;Override
 + *  public Combiner combiner(SummarizerConfiguration sc) {
 + *    return (m1, m2) -&gt; m2.forEach((k,v) -&gt; m1.merge(k, v, Long::sum));
 + *  }
 + * }
 + * </code>
 + * </pre>
 + *
 + * <p>
 + * The reason a Summarizer is a factory for a Collector and Combiner is to make it very clear in the API that Accumulo uses them independently at different
 + * times. Therefore its not advisable to share internal state between the Collector and Combiner. The example implementation shows that the Collectors design
 + * allows for very efficient collection of specialized summary information. Creating {@link String} + {@link Long} pairs is deferred until the summarize method
 + * is called.
 + *
 + * <p>
 + * Summary data can be used by Compaction Strategies to decide which files to compact.
 + *
 + * <p>
 + * Summary data is persisted, so ideally the same summarizer class with the same options should always produce the same results.  If you need to change the behavior
 + * of a summarizer, then consider doing this by adding a new option.  If the same summarizer is configured twice with different options, then Accumulo will store and
 + * merge each one separately.  This can allow old and new behavior to coexists simultaneously.
 + *
 + * @since 2.0.0
 + *
 + * @see TableOperations#summaries(String)
 + * @see TableOperations#addSummarizers(String, SummarizerConfiguration...)
 + * @see TableOperations#listSummarizers(String)
 + * @see TableOperations#removeSummarizers(String, java.util.function.Predicate)
 + * @see RFile#summaries()
 + * @see SummarizerConfiguration
 + */
 + //@formatter:on
 +public interface Summarizer {
 +
 +  public static interface StatisticConsumer {
 +    public void accept(String statistic, long value);
 +  }
 +
 +  /**
-    * When Accumulo calls methods in this interface, it will call {@link #accept(Key, Value)} zero or more times and then call
-    * {@link Collector#summarize(Summarizer.StatisticConsumer)} once. After calling {@link Collector#summarize(Summarizer.StatisticConsumer)}, it will not use
-    * the collector again.
++   * When Accumulo calls methods in this interface, it will call {@link #accept(Key, Value)} zero or
++   * more times and then call {@link Collector#summarize(Summarizer.StatisticConsumer)} once. After
++   * calling {@link Collector#summarize(Summarizer.StatisticConsumer)}, it will not use the
++   * collector again.
 +   *
 +   * @since 2.0.0
 +   */
 +  public static interface Collector {
 +    /**
 +     * During compactions, Accumulo passes each Key Value written to the file to this method.
 +     */
 +    void accept(Key k, Value v);
 +
 +    /**
-      * After Accumulo has written some Key Values, it will call this method to generate some statistics about what was previously passed to
-      * {@link #accept(Key, Value)}.
++     * After Accumulo has written some Key Values, it will call this method to generate some
++     * statistics about what was previously passed to {@link #accept(Key, Value)}.
 +     *
 +     * <p>
-      * In order for summary data to be useful for decision making about data, it needs to be quickly accessible. In order to be quickly accessible, it needs to
-      * fit in the tablet server cache as described in {@link TableOperations#summaries(String)} and the compaction strategy documentation. Therefore its
-      * advisable to generate small summaries. If the summary data generated is too large it will not be stored. The maximum summary size is set using the per
-      * table property {@code table.file.summary.maxSize}. The number of files that exceeded the summary size is reported by
-      * {@link Summary.FileStatistics#getLarge()}.
++     * In order for summary data to be useful for decision making about data, it needs to be quickly
++     * accessible. In order to be quickly accessible, it needs to fit in the tablet server cache as
++     * described in {@link TableOperations#summaries(String)} and the compaction strategy
++     * documentation. Therefore its advisable to generate small summaries. If the summary data
++     * generated is too large it will not be stored. The maximum summary size is set using the per
++     * table property {@code table.file.summary.maxSize}. The number of files that exceeded the
++     * summary size is reported by {@link Summary.FileStatistics#getLarge()}.
 +     *
 +     * @param sc
 +     *          Emit statistics to this Object.
 +     */
 +    public void summarize(StatisticConsumer sc);
 +  }
 +
 +  /**
-    * A Combiner is used to merge statistics emitted from {@link Collector#summarize(Summarizer.StatisticConsumer)} and from previous invocations of itself.
++   * A Combiner is used to merge statistics emitted from
++   * {@link Collector#summarize(Summarizer.StatisticConsumer)} and from previous invocations of
++   * itself.
 +   *
 +   * @since 2.0.0
 +   */
 +  public static interface Combiner {
 +    /**
-      * This method should merge the statistics in the second map into the first map. Both maps may have statistics produced by a {@link Collector} or previous
-      * calls to this method.
++     * This method should merge the statistics in the second map into the first map. Both maps may
++     * have statistics produced by a {@link Collector} or previous calls to this method.
 +     *
 +     * <p>
-      * If first map is too large after this call, then it may not be stored. See the comment on {@link Collector#summarize(Summarizer.StatisticConsumer)}
++     * If first map is too large after this call, then it may not be stored. See the comment on
++     * {@link Collector#summarize(Summarizer.StatisticConsumer)}
 +     */
 +    public void merge(Map<String,Long> statistics1, Map<String,Long> statistics2);
 +  }
 +
 +  /**
-    * Factory method that creates a {@link Collector} based on configuration. Each {@link Collector} created by this method should be independent and have its
-    * own internal state. Accumulo uses a Collector to generate summary statistics about a sequence of key values written to a file.
++   * Factory method that creates a {@link Collector} based on configuration. Each {@link Collector}
++   * created by this method should be independent and have its own internal state. Accumulo uses a
++   * Collector to generate summary statistics about a sequence of key values written to a file.
 +   */
 +  public Collector collector(SummarizerConfiguration sc);
 +
 +  /**
-    * Factory method that creates a {@link Combiner}. Accumulo will only use the created Combiner to merge data from {@link Collector}s created using the same
-    * {@link SummarizerConfiguration}.
++   * Factory method that creates a {@link Combiner}. Accumulo will only use the created Combiner to
++   * merge data from {@link Collector}s created using the same {@link SummarizerConfiguration}.
 +   */
 +  public Combiner combiner(SummarizerConfiguration sc);
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/summary/SummarizerConfiguration.java
index 45fb7b1,0000000..d5abe00
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/SummarizerConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/SummarizerConfiguration.java
@@@ -1,285 -1,0 +1,293 @@@
 +/*
 + * 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.summary;
 +
 +import java.util.ArrayList;
 +import java.util.Arrays;
 +import java.util.Collection;
 +import java.util.Collections;
 +import java.util.Map;
 +import java.util.Map.Entry;
 +
 +import org.apache.accumulo.core.summary.SummarizerConfigurationUtil;
 +
 +import com.google.common.base.Preconditions;
 +import com.google.common.collect.ImmutableMap;
 +import com.google.common.hash.Hasher;
 +import com.google.common.hash.Hashing;
 +
 +/**
-  * This class encapsulates the configuration needed to instantiate a {@link Summarizer}. It also provides methods and documentation for setting the table
-  * properties that configure a Summarizer.
++ * This class encapsulates the configuration needed to instantiate a {@link Summarizer}. It also
++ * provides methods and documentation for setting the table properties that configure a Summarizer.
 + *
 + * @since 2.0.0
 + */
 +public class SummarizerConfiguration {
 +
 +  private final String className;
 +  private final Map<String,String> options;
 +  private int hashCode = 0;
 +  private final String configId;
 +
 +  private SummarizerConfiguration(String className, String configId, Map<String,String> options) {
 +    this.className = className;
 +    this.options = ImmutableMap.copyOf(options);
 +
 +    if (configId == null) {
 +      ArrayList<String> keys = new ArrayList<>(this.options.keySet());
 +      Collections.sort(keys);
 +      Hasher hasher = Hashing.murmur3_32().newHasher();
 +      hasher.putString(className);
 +      for (String key : keys) {
 +        hasher.putString(key);
 +        hasher.putString(options.get(key));
 +      }
 +
 +      this.configId = hasher.hash().toString();
 +    } else {
 +      this.configId = configId;
 +    }
 +  }
 +
 +  /**
 +   * @return the name of a class that implements @link {@link Summarizer}.
 +   */
 +  public String getClassName() {
 +    return className;
 +  }
 +
 +  /**
 +   * @return custom options for a {link @Summarizer}
 +   */
 +  public Map<String,String> getOptions() {
 +    return options;
 +  }
 +
 +  /**
-    * The propertyId is used to when creating table properties for a summarizer. Its not used for equality or hashCode for this class.
++   * The propertyId is used to when creating table properties for a summarizer. Its not used for
++   * equality or hashCode for this class.
 +   */
 +  public String getPropertyId() {
 +    return configId;
 +  }
 +
 +  @Override
 +  public String toString() {
 +    return className + " " + configId + " " + options;
 +  }
 +
 +  /**
 +   * Compares the classname and options to determine equality.
 +   */
 +  @Override
 +  public boolean equals(Object o) {
 +    if (o instanceof SummarizerConfiguration) {
 +      SummarizerConfiguration osc = (SummarizerConfiguration) o;
 +      return className.equals(osc.className) && options.equals(osc.options);
 +    }
 +
 +    return false;
 +  }
 +
 +  /**
 +   * Hashes the classname and options to create a hashcode.
 +   */
 +  @Override
 +  public int hashCode() {
 +    if (hashCode == 0) {
 +      hashCode = 31 * options.hashCode() + className.hashCode();
 +    }
 +    return hashCode;
 +  }
 +
 +  /**
-    * Converts this configuration to Accumulo per table properties. The returned map has the following key values. The {@code <configId>} below is from
-    * {@link #getPropertyId()}. The {@code <optionKey>} and {@code <optionValue>} below are derived from the key values of {@link #getOptions()}.
++   * Converts this configuration to Accumulo per table properties. The returned map has the
++   * following key values. The {@code <configId>} below is from {@link #getPropertyId()}. The
++   * {@code <optionKey>} and {@code <optionValue>} below are derived from the key values of
++   * {@link #getOptions()}.
 +   *
 +   * <pre>
 +   * {@code
 +   *   table.summarizer.<configId>=<classname>
 +   *   table.summarizer.<configId>.opt.<optionKey1>=<optionValue1>
 +   *   table.summarizer.<configId>.opt.<optionKey2>=<optionValue2>
 +   *      .
 +   *      .
 +   *      .
 +   *   table.summarizer.<configId>.opt.<optionKeyN>=<optionValueN>
 +   * }
 +   * </pre>
 +   */
 +  public Map<String,String> toTableProperties() {
 +    return SummarizerConfigurationUtil.toTablePropertiesMap(Collections.singletonList(this));
 +  }
 +
 +  /**
 +   * Encodes each configuration in the same way as {@link #toTableProperties()}.
 +   *
 +   * @throws IllegalArgumentException
 +   *           when there are duplicate values for {@link #getPropertyId()}
 +   */
 +  public static Map<String,String> toTableProperties(SummarizerConfiguration... configurations) {
 +    return SummarizerConfigurationUtil.toTablePropertiesMap(Arrays.asList(configurations));
 +  }
 +
 +  /**
 +   * Encodes each configuration in the same way as {@link #toTableProperties()}.
 +   *
 +   * @throws IllegalArgumentException
 +   *           when there are duplicate values for {@link #getPropertyId()}
 +   */
-   public static Map<String,String> toTableProperties(Collection<SummarizerConfiguration> configurations) {
++  public static Map<String,String> toTableProperties(
++      Collection<SummarizerConfiguration> configurations) {
 +    return SummarizerConfigurationUtil.toTablePropertiesMap(new ArrayList<>(configurations));
 +  }
 +
 +  /**
-    * Decodes table properties with the prefix {@code table.summarizer} into {@link SummarizerConfiguration} objects. Table properties with prefixes other than
++   * Decodes table properties with the prefix {@code table.summarizer} into
++   * {@link SummarizerConfiguration} objects. Table properties with prefixes other than
 +   * {@code table.summarizer} are ignored.
 +   */
 +  public static Collection<SummarizerConfiguration> fromTableProperties(Map<String,String> props) {
 +    return fromTableProperties(props.entrySet());
 +  }
 +
 +  /**
 +   * @see #fromTableProperties(Map)
 +   */
-   public static Collection<SummarizerConfiguration> fromTableProperties(Iterable<Entry<String,String>> props) {
++  public static Collection<SummarizerConfiguration> fromTableProperties(
++      Iterable<Entry<String,String>> props) {
 +    return SummarizerConfigurationUtil.getSummarizerConfigs(props);
 +  }
 +
 +  public static class Builder {
 +    private String className;
 +    private ImmutableMap.Builder<String,String> imBuilder;
 +    private String configId = null;
 +
 +    private Builder(String className) {
 +      this.className = className;
 +      this.imBuilder = ImmutableMap.builder();
 +    }
 +
 +    /**
-      * Sets the id used when generating table properties. Setting this is optional. If not set, an id is generated using hashing that will likely be unique.
++     * Sets the id used when generating table properties. Setting this is optional. If not set, an
++     * id is generated using hashing that will likely be unique.
 +     *
 +     * @param propId
-      *          This id is used when converting a {@link SummarizerConfiguration} to table properties. Since tables can have multiple summarizers, make sure its
-      *          unique.
++     *          This id is used when converting a {@link SummarizerConfiguration} to table
++     *          properties. Since tables can have multiple summarizers, make sure its unique.
 +     *
 +     * @see SummarizerConfiguration#toTableProperties()
 +     */
 +    public Builder setPropertyId(String propId) {
 +      Preconditions.checkArgument(propId.matches("\\w+"), "Config Id %s is not alphanum", propId);
 +      this.configId = propId;
 +      return this;
 +    }
 +
 +    /**
 +     * Adds an option that Summarizers can use when constructing Collectors and Combiners.
 +     *
 +     * @return this
 +     *
 +     * @see SummarizerConfiguration#getOptions()
 +     */
 +    public Builder addOption(String key, String value) {
 +      Preconditions.checkArgument(key.matches("\\w+"), "Option Id %s is not alphanum", key);
 +      imBuilder.put(key, value);
 +      return this;
 +    }
 +
 +    /**
 +     * Adds an option that Summarizers can use when constructing Collectors and Combiners.
 +     *
 +     * @return this
 +     *
 +     * @see SummarizerConfiguration#getOptions()
 +     */
 +    public Builder addOption(String key, long value) {
 +      return addOption(key, Long.toString(value));
 +    }
 +
 +    /**
 +     * Convenience method for adding multiple options. The following
 +     *
 +     * <pre>
 +     * {@code builder.addOptions("opt1","val1","opt2","val2","opt3","val3")}
 +     * </pre>
 +     *
 +     * <p>
 +     * is equivalent to
 +     *
 +     * <pre>
 +     * {@code
 +     *   builder.addOption("opt1","val1");
 +     *   builder.addOption("opt2","val2");
 +     *   builder.addOption("opt3","val3");
 +     * }
 +     * </pre>
 +     *
 +     * @param keyValuePairs
 +     *          This array must have an even and positive number of elements.
 +     * @return this
 +     * @see SummarizerConfiguration#getOptions()
 +     */
 +    public Builder addOptions(String... keyValuePairs) {
-       Preconditions.checkArgument(keyValuePairs.length % 2 == 0 && keyValuePairs.length > 0, "Require an even, positive number of arguments, got %s",
-           keyValuePairs.length);
++      Preconditions.checkArgument(keyValuePairs.length % 2 == 0 && keyValuePairs.length > 0,
++          "Require an even, positive number of arguments, got %s", keyValuePairs.length);
 +      for (int i = 0; i < keyValuePairs.length; i += 2) {
 +        addOption(keyValuePairs[i], keyValuePairs[i + 1]);
 +      }
 +      return this;
 +    }
 +
 +    /**
 +     * @param options
 +     *          Each entry in the map is passed to {@link #addOption(String, String)}
 +     * @return this
 +     *
 +     * @see SummarizerConfiguration#getOptions()
 +     */
 +    public Builder addOptions(Map<String,String> options) {
 +      options.entrySet().forEach(e -> addOption(e.getKey(), e.getValue()));
 +      return this;
 +    }
 +
 +    public SummarizerConfiguration build() {
 +      return new SummarizerConfiguration(className, configId, imBuilder.build());
 +    }
 +  }
 +
 +  /**
-    * Call this method to initiate a chain of fluent method calls to a create an immutable {@link SummarizerConfiguration}
++   * Call this method to initiate a chain of fluent method calls to a create an immutable
++   * {@link SummarizerConfiguration}
 +   *
 +   * @param className
 +   *          The fully qualified name of a class that implements {@link Summarizer}.
 +   */
 +  public static Builder builder(String className) {
 +    return new Builder(className);
 +  }
 +
 +  /**
 +   * @see #builder(String)
 +   */
 +  public static Builder builder(Class<? extends Summarizer> clazz) {
 +    return new Builder(clazz.getName());
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/summary/Summary.java
index 8a6a9aa,0000000..2e9f4e2
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/Summary.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/Summary.java
@@@ -1,145 -1,0 +1,158 @@@
 +/*
 + * 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.summary;
 +
 +import java.util.Map;
 +
 +import com.google.common.collect.ImmutableMap;
 +
 +/**
-  * This class encapsulates summary statistics, information about how those statistics were generated, and information about files the statistics were obtained
-  * from.
++ * This class encapsulates summary statistics, information about how those statistics were
++ * generated, and information about files the statistics were obtained from.
 + *
 + * @see Summarizer
 + * @since 2.0.0
 + */
 +public class Summary {
 +
 +  /**
 +   * @since 2.0.0
 +   */
 +  public static class FileStatistics {
 +    private final long total;
 +    private final long missing;
 +    private final long extra;
 +    private final long large;
 +    private final long deleted;
 +
 +    private FileStatistics(long total, long missing, long extra, long large, long deleted) {
 +      this.total = total;
 +      this.missing = missing;
 +      this.extra = extra;
 +      this.large = large;
 +      this.deleted = deleted;
 +    }
 +
 +    /**
 +     * @return The total number of files from which summary information was obtained.
 +     */
 +    public long getTotal() {
 +      return total;
 +    }
 +
 +    /**
-      * @return The number of files that did not contain the requested summary information. When this is non-zero, it means that summary counts may be
-      *         incomplete. In the Accumulo shell, the compact command has a -{@code -sf-no-summary} option to compact files missing summary information. The
-      *         compaction will create the summary information. This could be done over a range of the table to avoid doing the entire table at once.
++     * @return The number of files that did not contain the requested summary information. When this
++     *         is non-zero, it means that summary counts may be incomplete. In the Accumulo shell,
++     *         the compact command has a -{@code -sf-no-summary} option to compact files missing
++     *         summary information. The compaction will create the summary information. This could
++     *         be done over a range of the table to avoid doing the entire table at once.
 +     */
 +    public long getMissing() {
 +      return missing;
 +    }
 +
 +    /**
-      * @return The number of files that had summary information outside of a tablet or query range boundaries. When this is non-zero, it means that summary
-      *         counts may be artificially inflated or contain extraneous information. In the Accumulo shell, the compact command has a -{@code -sf-extra-summary}
-      *         option to compact files with extra summary information.
++     * @return The number of files that had summary information outside of a tablet or query range
++     *         boundaries. When this is non-zero, it means that summary counts may be artificially
++     *         inflated or contain extraneous information. In the Accumulo shell, the compact
++     *         command has a -{@code -sf-extra-summary} option to compact files with extra summary
++     *         information.
 +     */
 +    public long getExtra() {
 +      return extra;
 +    }
 +
 +    /**
-      * @return The number of files that an attempt was made to generate summaries, but the summarizer generated a summary that was larger than the configured
-      *         maximum. For these files no summary statistics are stored. Only the fact that summarization was attempted and failed is stored.
++     * @return The number of files that an attempt was made to generate summaries, but the
++     *         summarizer generated a summary that was larger than the configured maximum. For these
++     *         files no summary statistics are stored. Only the fact that summarization was
++     *         attempted and failed is stored.
 +     * @see Summarizer.Collector#summarize(org.apache.accumulo.core.client.summary.Summarizer.StatisticConsumer)
 +     */
 +    public long getLarge() {
 +      return large;
 +    }
 +
 +    /**
-      * @return The number of files that were deleted after the summary retrieval operations started. This is a rare race condition where a compaction causes a
-      *         file to be deleted while retrieving summaries. When this happens, the file that replaced the deleted file can not be used because it may contain
-      *         duplication summary information for other files. Avoiding this race condition would be expensive, so reporting it was chosen. If this condition
-      *         must be avoided, then compactions must be stopped. Compactions could be stopped on a cloned table to avoid this.
++     * @return The number of files that were deleted after the summary retrieval operations started.
++     *         This is a rare race condition where a compaction causes a file to be deleted while
++     *         retrieving summaries. When this happens, the file that replaced the deleted file can
++     *         not be used because it may contain duplication summary information for other files.
++     *         Avoiding this race condition would be expensive, so reporting it was chosen. If this
++     *         condition must be avoided, then compactions must be stopped. Compactions could be
++     *         stopped on a cloned table to avoid this.
 +     */
 +    public long getDeleted() {
 +      return deleted;
 +    }
 +
 +    /**
-      * @return The total number of files that had some kind of issue which would cause summary statistics to be inaccurate. This is the sum of
-      *         {@link #getMissing()}, {@link #getExtra()}, {{@link #getLarge()}, and {@link #getDeleted()}.
++     * @return The total number of files that had some kind of issue which would cause summary
++     *         statistics to be inaccurate. This is the sum of {@link #getMissing()},
++     *         {@link #getExtra()}, {{@link #getLarge()}, and {@link #getDeleted()}.
 +     */
 +    public long getInaccurate() {
 +      return getMissing() + getExtra() + getLarge() + getDeleted();
 +    }
 +
 +    @Override
 +    public String toString() {
-       return String.format("[total:%,d, missing:%,d, extra:%,d, large:%,d, deleted:%,d]", total, missing, extra, large, deleted);
++      return String.format("[total:%,d, missing:%,d, extra:%,d, large:%,d, deleted:%,d]", total,
++          missing, extra, large, deleted);
 +    }
 +  }
 +
 +  private final ImmutableMap<String,Long> statistics;
 +  private final SummarizerConfiguration config;
 +  private final FileStatistics fileStats;
 +
-   public Summary(Map<String,Long> summary, SummarizerConfiguration config, long totalFiles, long filesMissingSummary, long filesWithExtra, long filesWithLarge,
-       long deletedFiles) {
++  public Summary(Map<String,Long> summary, SummarizerConfiguration config, long totalFiles,
++      long filesMissingSummary, long filesWithExtra, long filesWithLarge, long deletedFiles) {
 +    this.statistics = ImmutableMap.copyOf(summary);
 +    this.config = config;
-     this.fileStats = new FileStatistics(totalFiles, filesMissingSummary, filesWithExtra, filesWithLarge, deletedFiles);
++    this.fileStats = new FileStatistics(totalFiles, filesMissingSummary, filesWithExtra,
++        filesWithLarge, deletedFiles);
 +  }
 +
 +  /**
 +   * @return Statistics about the files from which summary statistics were obtained.
 +   */
 +  public FileStatistics getFileStatistics() {
 +    return fileStats;
 +  }
 +
 +  /**
 +   * @return The configuration used to generate and combine the summary statistics
 +   */
 +  public SummarizerConfiguration getSummarizerConfiguration() {
 +    return config;
 +  }
 +
 +  /**
-    * @return An immutable map of the statistics that were generated and merged by the specified {@link Summarizer}.
++   * @return An immutable map of the statistics that were generated and merged by the specified
++   *         {@link Summarizer}.
 +   */
 +  public Map<String,Long> getStatistics() {
 +    return statistics;
 +  }
 +
 +  @Override
 +  public String toString() {
 +    return "config : " + config + " filestats : " + fileStats + " statistics : " + statistics;
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/DeletesSummarizer.java
index 1e94298,0000000..891a5f6
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/DeletesSummarizer.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/DeletesSummarizer.java
@@@ -1,75 -1,0 +1,77 @@@
 +/*
 + * 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.summary.summarizers;
 +
 +import org.apache.accumulo.core.client.admin.TableOperations;
 +import org.apache.accumulo.core.client.summary.Summarizer;
 +import org.apache.accumulo.core.client.summary.SummarizerConfiguration;
 +import org.apache.accumulo.core.data.Key;
 +import org.apache.accumulo.core.data.Value;
 +
 +/**
 + * This summarizer tracks the total number of delete Keys seen and the total number of keys seen.
 + *
 + * <p>
-  * This summarizer is used by org.apache.accumulo.tserver.compaction.strategies.TooManyDeletesCompactionStrategy to make compaction decisions based on the
-  * number of deletes.
++ * This summarizer is used by
++ * org.apache.accumulo.tserver.compaction.strategies.TooManyDeletesCompactionStrategy to make
++ * compaction decisions based on the number of deletes.
 + *
 + * @since 2.0.0
-  * @see TableOperations#addSummarizers(String, org.apache.accumulo.core.client.summary.SummarizerConfiguration...)
++ * @see TableOperations#addSummarizers(String,
++ *      org.apache.accumulo.core.client.summary.SummarizerConfiguration...)
 + */
 +public class DeletesSummarizer implements Summarizer {
 +
 +  /**
 +   * The name of the statistics for the number of deletes.
 +   */
 +  public static final String DELETES_STAT = "deletes";
 +
 +  /**
 +   * The name of the statistics for the total number of keys.
 +   */
 +  public static final String TOTAL_STAT = "total";
 +
 +  @Override
 +  public Collector collector(SummarizerConfiguration sc) {
 +    return new Collector() {
 +
 +      long total = 0;
 +      long deletes = 0;
 +
 +      @Override
 +      public void accept(Key k, Value v) {
 +        total++;
 +        if (k.isDeleted()) {
 +          deletes++;
 +        }
 +      }
 +
 +      @Override
 +      public void summarize(StatisticConsumer sc) {
 +        sc.accept(DELETES_STAT, deletes);
 +        sc.accept(TOTAL_STAT, total);
 +      }
 +    };
 +  }
 +
 +  @Override
 +  public Combiner combiner(SummarizerConfiguration sc) {
 +    return (m1, m2) -> m2.forEach((k, v) -> m1.merge(k, v, Long::sum));
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/EntryLengthSummarizer.java
index 10fb9d9,0000000..564eb0b
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/EntryLengthSummarizer.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/EntryLengthSummarizer.java
@@@ -1,147 -1,0 +1,151 @@@
 +/*
 + * 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.summary.summarizers;
 +
 +import java.math.RoundingMode;
 +import java.util.Map;
 +import java.util.function.BiFunction;
 +
 +import org.apache.accumulo.core.client.summary.Summarizer;
 +import org.apache.accumulo.core.client.summary.SummarizerConfiguration;
 +import org.apache.accumulo.core.data.Key;
 +import org.apache.accumulo.core.data.Value;
 +
 +import com.google.common.math.IntMath;
 +
 +/**
-  * Summarizer that computes summary information about field lengths. Specifically key length, row length, family length, qualifier length, visibility length,
-  * and value length. Incrementally computes minimum, maximum, count, sum, and log2 histogram of the lengths.
++ * Summarizer that computes summary information about field lengths. Specifically key length, row
++ * length, family length, qualifier length, visibility length, and value length. Incrementally
++ * computes minimum, maximum, count, sum, and log2 histogram of the lengths.
 + *
 + * @since 2.0.0
 + */
 +public class EntryLengthSummarizer implements Summarizer {
 +
-   /* Helper function that calculates the various statistics that is used for the Collector methods. */
++  /*
++   * Helper function that calculates the various statistics that is used for the Collector methods.
++   */
 +  private static class LengthStats {
 +    private long min = Long.MAX_VALUE;
 +    private long max = Long.MIN_VALUE;
 +    private long sum = 0;
 +    private long[] counts = new long[32];
 +
 +    private void accept(int length) {
 +      int idx;
 +
 +      if (length < min) {
 +        min = length;
 +      }
 +
 +      if (length > max) {
 +        max = length;
 +      }
 +
 +      sum += length;
 +
 +      if (length == 0) {
 +        idx = 0;
 +      } else {
 +        idx = IntMath.log2(length, RoundingMode.HALF_UP);
 +      }
 +
 +      counts[idx]++;
 +    }
 +
 +    void summarize(String prefix, StatisticConsumer sc) {
 +      sc.accept(prefix + ".min", (min != Long.MAX_VALUE ? min : 0));
 +      sc.accept(prefix + ".max", (max != Long.MIN_VALUE ? max : 0));
 +      sc.accept(prefix + ".sum", sum);
 +
 +      for (int i = 0; i < counts.length; i++) {
 +        if (counts[i] > 0) {
 +          sc.accept(prefix + ".logHist." + i, counts[i]);
 +        }
 +      }
 +    }
 +
 +  }
 +
 +  /* Helper functions for merging that is used by the Combiner. */
-   private static void merge(String key, BiFunction<Long,Long,Long> mergeFunc, Map<String,Long> stats1, Map<String,Long> stats2) {
++  private static void merge(String key, BiFunction<Long,Long,Long> mergeFunc,
++      Map<String,Long> stats1, Map<String,Long> stats2) {
 +    Long mergeVal = stats2.get(key);
 +
 +    if (mergeVal != null) {
 +      stats1.merge(key, mergeVal, mergeFunc);
 +    }
 +  }
 +
-   private static void merge(String prefix, Map<String, Long> stats1, Map<String,Long> stats2) {
-     merge(prefix+".min", Long::min, stats1, stats2);
-     merge(prefix+".max", Long::max, stats1, stats2);
-     merge(prefix+".sum", Long::sum, stats1, stats2);
++  private static void merge(String prefix, Map<String,Long> stats1, Map<String,Long> stats2) {
++    merge(prefix + ".min", Long::min, stats1, stats2);
++    merge(prefix + ".max", Long::max, stats1, stats2);
++    merge(prefix + ".sum", Long::sum, stats1, stats2);
 +    for (int i = 0; i < 32; i++) {
-       merge(prefix+".logHist."+i, Long::sum, stats1, stats2);
++      merge(prefix + ".logHist." + i, Long::sum, stats1, stats2);
 +    }
 +  }
 +
 +  @Override
 +  public Collector collector(SummarizerConfiguration sc) {
 +    return new Collector() {
 +
 +      private LengthStats keyStats = new LengthStats();
 +      private LengthStats rowStats = new LengthStats();
 +      private LengthStats familyStats = new LengthStats();
 +      private LengthStats qualifierStats = new LengthStats();
 +      private LengthStats visibilityStats = new LengthStats();
 +      private LengthStats valueStats = new LengthStats();
 +      private long total = 0;
 +
 +      @Override
 +      public void accept(Key k, Value v) {
 +        keyStats.accept(k.getLength());
 +        rowStats.accept(k.getRowData().length());
 +        familyStats.accept(k.getColumnFamilyData().length());
 +        qualifierStats.accept(k.getColumnQualifierData().length());
 +        visibilityStats.accept(k.getColumnVisibilityData().length());
 +        valueStats.accept(v.getSize());
 +        total++;
 +      }
 +
 +      @Override
 +      public void summarize(StatisticConsumer sc) {
 +        keyStats.summarize("key", sc);
 +        rowStats.summarize("row", sc);
 +        familyStats.summarize("family", sc);
 +        qualifierStats.summarize("qualifier", sc);
 +        visibilityStats.summarize("visibility", sc);
 +        valueStats.summarize("value", sc);
 +        sc.accept("total", total);
 +      }
 +    };
 +  }
 +
 +  @Override
 +  public Combiner combiner(SummarizerConfiguration sc) {
 +    return (stats1, stats2) -> {
 +      merge("key", stats1, stats2);
 +      merge("row", stats1, stats2);
 +      merge("family", stats1, stats2);
 +      merge("qualifier", stats1, stats2);
 +      merge("visibility", stats1, stats2);
 +      merge("value", stats1, stats2);
 +      stats1.merge("total", stats2.get("total"), Long::sum);
 +    };
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/FamilySummarizer.java
index 9452530,0000000..53a408b
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/FamilySummarizer.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/FamilySummarizer.java
@@@ -1,46 -1,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.client.summary.summarizers;
 +
 +import java.util.function.UnaryOperator;
 +
 +import org.apache.accumulo.core.client.admin.TableOperations;
 +import org.apache.accumulo.core.client.summary.CountingSummarizer;
 +import org.apache.accumulo.core.data.ArrayByteSequence;
 +import org.apache.accumulo.core.data.ByteSequence;
 +
 +/**
-  * Counts column column families. Leverages super class to defend against too many. This class is useful for discovering what column families are present when
-  * the expected number of families is small.
++ * Counts column column families. Leverages super class to defend against too many. This class is
++ * useful for discovering what column families are present when the expected number of families is
++ * small.
 + *
 + * @since 2.0.0
 + *
-  * @see TableOperations#addSummarizers(String, org.apache.accumulo.core.client.summary.SummarizerConfiguration...)
++ * @see TableOperations#addSummarizers(String,
++ *      org.apache.accumulo.core.client.summary.SummarizerConfiguration...)
 + * @see TableOperations#summaries(String)
 + */
 +public class FamilySummarizer extends CountingSummarizer<ByteSequence> {
 +
 +  @Override
 +  protected UnaryOperator<ByteSequence> copier() {
 +    return ArrayByteSequence::new;
 +  }
 +
 +  @Override
 +  protected Converter<ByteSequence> converter() {
 +    return (k, v, c) -> c.accept(k.getColumnFamilyData());
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/VisibilitySummarizer.java
index c8f76d0,0000000..630d42b
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/VisibilitySummarizer.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/summary/summarizers/VisibilitySummarizer.java
@@@ -1,47 -1,0 +1,49 @@@
 +/*
 + * 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.summary.summarizers;
 +
 +import java.util.function.UnaryOperator;
 +
 +import org.apache.accumulo.core.client.admin.TableOperations;
 +import org.apache.accumulo.core.client.summary.CountingSummarizer;
 +import org.apache.accumulo.core.data.ArrayByteSequence;
 +import org.apache.accumulo.core.data.ByteSequence;
 +
 +/**
-  * Counts column visibility labels. Leverages super class to defend against too many. This class is useful for discovering what column visibilities are present
-  * when the expected number of visibilities is small.
++ * Counts column visibility labels. Leverages super class to defend against too many. This class is
++ * useful for discovering what column visibilities are present when the expected number of
++ * visibilities is small.
 + *
 + * @since 2.0.0
 + *
-  * @see TableOperations#addSummarizers(String, org.apache.accumulo.core.client.summary.SummarizerConfiguration...)
++ * @see TableOperations#addSummarizers(String,
++ *      org.apache.accumulo.core.client.summary.SummarizerConfiguration...)
 + * @see TableOperations#summaries(String)
 + */
 +public class VisibilitySummarizer extends CountingSummarizer<ByteSequence> {
 +
 +  @Override
 +  protected UnaryOperator<ByteSequence> copier() {
 +    return ArrayByteSequence::new;
 +  }
 +
 +  @Override
 +  protected Converter<ByteSequence> converter() {
 +    return (k, v, c) -> c.accept(k.getColumnVisibilityData());
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/conf/AccumuloConfiguration.java
index 701a388,28c44e6..e9f570a
--- a/core/src/main/java/org/apache/accumulo/core/conf/AccumuloConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/AccumuloConfiguration.java
@@@ -104,9 -177,10 +107,10 @@@ public abstract class AccumuloConfigura
      return entries.entrySet().iterator();
    }
  
 -  private void checkType(Property property, PropertyType type) {
 +  private static void checkType(Property property, PropertyType type) {
      if (!property.getType().equals(type)) {
-       String msg = "Configuration method intended for type " + type + " called with a " + property.getType() + " argument (" + property.getKey() + ")";
+       String msg = "Configuration method intended for type " + type + " called with a "
+           + property.getType() + " argument (" + property.getKey() + ")";
        IllegalArgumentException err = new IllegalArgumentException(msg);
        log.error(msg, err);
        throw err;
@@@ -145,10 -220,11 +150,11 @@@
          if (prefixProps == null || prefixProps.updateCount != updateCount) {
            Map<String,String> propMap = new HashMap<>();
            // The reason this caching exists is to avoid repeatedly making this expensive call.
 -          getProperties(propMap, new PrefixFilter(property.getKey()));
 +          getProperties(propMap, key -> key.startsWith(property.getKey()));
            propMap = ImmutableMap.copyOf(propMap);
  
-           // So that locking is not needed when reading from enum map, always create a new one. Construct and populate map using a local var so its not visible
+           // So that locking is not needed when reading from enum map, always create a new one.
+           // Construct and populate map using a local var so its not visible
            // until ready.
            EnumMap<Property,PrefixProps> localPrefixes = new EnumMap<>(Property.class);
  
@@@ -171,10 -247,10 +177,11 @@@
    }
  
    /**
-    * Gets a property of type {@link PropertyType#BYTES} or {@link PropertyType#MEMORY}, interpreting the value properly.
 -   * Gets a property of type {@link PropertyType#MEMORY}, interpreting the value properly.
++   * Gets a property of type {@link PropertyType#BYTES} or {@link PropertyType#MEMORY}, interpreting
++   * the value properly.
     *
     * @param property
 -   *          property to get
 +   *          Property to get
     * @return property value
     * @throws IllegalArgumentException
     *           if the property is of the wrong type
diff --cc core/src/main/java/org/apache/accumulo/core/conf/CliConfiguration.java
index 7be1053,0000000..792d57b
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/CliConfiguration.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/CliConfiguration.java
@@@ -1,63 -1,0 +1,64 @@@
 +/*
 + * 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.conf;
 +
 +import java.util.HashMap;
 +import java.util.Map;
 +import java.util.Objects;
 +import java.util.function.Predicate;
 +
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +
 +public class CliConfiguration {
 +
 +  private static final Logger log = LoggerFactory.getLogger(CliConfiguration.class);
 +  private static volatile Map<String,String> config = new HashMap<>();
 +
 +  /**
-    * Sets CliConfiguration with map of configuration. Additional calls will overwrite existing properties and values.
++   * Sets CliConfiguration with map of configuration. Additional calls will overwrite existing
++   * properties and values.
 +   *
 +   * @param conf
 +   *          Map of configuration
 +   */
 +  public static void set(Map<String,String> conf) {
 +    Objects.requireNonNull(conf);
 +    config = conf;
 +  }
 +
 +  public static void print() {
 +    log.info("The following configuration was set on the command line:");
 +    for (Map.Entry<String,String> entry : config.entrySet()) {
 +      String key = entry.getKey();
 +      log.info(key + " = " + (Property.isSensitive(key) ? "<hidden>" : entry.getValue()));
 +    }
 +  }
 +
 +  public static String get(Property property) {
 +    return config.get(property.getKey());
 +  }
 +
 +  public static void getProperties(Map<String,String> props, Predicate<String> filter) {
 +    for (Map.Entry<String,String> entry : config.entrySet()) {
 +      if (filter.test(entry.getKey())) {
 +        props.put(entry.getKey(), entry.getValue());
 +      }
 +    }
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/conf/ClientConfigGenerate.java
index 0d95d2f,0000000..f71b7e0
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/ClientConfigGenerate.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ClientConfigGenerate.java
@@@ -1,194 -1,0 +1,203 @@@
 +/*
 + * 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.conf;
 +
 +import static java.nio.charset.StandardCharsets.UTF_8;
 +
 +import java.io.FileNotFoundException;
 +import java.io.PrintStream;
 +import java.io.UnsupportedEncodingException;
 +import java.util.Objects;
 +import java.util.Set;
 +import java.util.TreeMap;
 +
 +import com.google.common.collect.Sets;
 +
 +/**
-  * Generates client-properties.md for documentation on Accumulo website and accumulo-client.properties for Accumulo distribution tarball
++ * Generates client-properties.md for documentation on Accumulo website and
++ * accumulo-client.properties for Accumulo distribution tarball
 + */
 +class ClientConfigGenerate {
 +
 +  private abstract class Format {
 +
 +    abstract void beginSection(String section);
 +
 +    abstract void pageHeader();
 +
 +    abstract void property(ClientProperty prop);
 +
 +    void generate() {
 +      pageHeader();
 +
 +      generateSection("Instance", "instance.");
 +      generateSection("Authentication", "auth.", "auth.method", "auth.username");
 +      generateSection("Batch Writer", "batch.writer.");
 +      generateSection("SSL", "ssl.");
 +      generateSection("SASL", "sasl.");
 +      generateSection("Tracing", "trace.");
 +
 +      doc.close();
 +    }
 +
 +    void generateSection(String section, String prefix, String... prefixProps) {
 +      beginSection(section);
 +      for (String prop : prefixProps) {
 +        ClientProperty cp = sortedProps.get(prop);
 +        if (cp != null) {
 +          property(cp);
 +        }
 +      }
 +      Set<String> prefixSet = Sets.newHashSet(prefixProps);
 +      for (ClientProperty prop : sortedProps.values()) {
 +        if (prop.getKey().startsWith(prefix) && !prefixSet.contains(prop.getKey())) {
 +          property(prop);
 +        }
 +      }
 +    }
 +
 +    void generateSection(String section, String prefix) {
 +      generateSection(section, prefix, "");
 +    }
 +  }
 +
 +  private class Markdown extends Format {
 +
 +    @Override
 +    void beginSection(String section) {}
 +
 +    @Override
 +    void pageHeader() {
 +      doc.println("---");
 +      doc.println("title: Client Properties");
 +      doc.println("category: development");
 +      doc.println("order: 9");
 +      doc.println("---\n");
-       doc.println("<!-- WARNING: Do not edit this file. It is a generated file that is copied from Accumulo build (from core/target/generated-docs) -->");
++      doc.println(
++          "<!-- WARNING: Do not edit this file. It is a generated file that is copied from Accumulo build (from core/target/generated-docs) -->");
 +      doc.println("<!-- Generated by : " + getClass().getName() + " -->\n");
-       doc.println("Below are properties set in `accumulo-client.properties` that configure [Accumulo clients]({{ page.docs_baseurl }}/getting-started/clients#connecting). "
-           + "All properties have been part of the API since 2.0.0 (unless otherwise specified):\n");
++      doc.println(
++          "Below are properties set in `accumulo-client.properties` that configure [Accumulo clients]({{ page.docs_baseurl }}/getting-started/clients#connecting). "
++              + "All properties have been part of the API since 2.0.0 (unless otherwise specified):\n");
 +      doc.println("| Property | Default value | Since | Description |");
 +      doc.println("|----------|---------------|-------|-------------|");
 +    }
 +
 +    @Override
 +    void property(ClientProperty prop) {
 +      Objects.nonNull(prop);
-       doc.print("| <a name=\"" + prop.getKey().replace(".", "_") + "\" class=\"prop\"></a> " + prop.getKey() + " | ");
++      doc.print("| <a name=\"" + prop.getKey().replace(".", "_") + "\" class=\"prop\"></a> "
++          + prop.getKey() + " | ");
 +      String defaultValue = sanitize(prop.getDefaultValue()).trim();
 +      if (defaultValue.length() == 0) {
 +        defaultValue = "*empty*";
 +      }
-       doc.println(defaultValue + " | " + prop.getSince() + " | " + sanitize(prop.getDescription() + " |"));
++      doc.println(
++          defaultValue + " | " + prop.getSince() + " | " + sanitize(prop.getDescription() + " |"));
 +    }
 +
 +    String sanitize(String str) {
 +      return str.replace("\n", "<br>");
 +    }
 +  }
 +
 +  private class ConfigFile extends Format {
 +
 +    @Override
 +    void beginSection(String section) {
 +      doc.println("\n## " + section + " properties");
 +      doc.println("## --------------");
 +    }
 +
 +    @Override
 +    void pageHeader() {
 +      doc.println("# Licensed to the Apache Software Foundation (ASF) under one or more");
 +      doc.println("# contributor license agreements.  See the NOTICE file distributed with");
 +      doc.println("# this work for additional information regarding copyright ownership.");
 +      doc.println("# The ASF licenses this file to You under the Apache License, Version 2.0");
 +      doc.println("# (the \"License\"); you may not use this file except in compliance with");
 +      doc.println("# the License.  You may obtain a copy of the License at");
 +      doc.println("#");
 +      doc.println("#     http://www.apache.org/licenses/LICENSE-2.0");
 +      doc.println("#");
 +      doc.println("# Unless required by applicable law or agreed to in writing, software");
 +      doc.println("# distributed under the License is distributed on an \"AS IS\" BASIS,");
 +      doc.println("# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.");
 +      doc.println("# See the License for the specific language governing permissions and");
 +      doc.println("# limitations under the License.\n");
 +      doc.println("################################");
 +      doc.println("## Accumulo client configuration");
 +      doc.println("################################\n");
 +      doc.println("## NOTE - All properties that have a default are set with it. Properties that");
 +      doc.println("## are uncommented must be set by the user.");
 +    }
 +
 +    @Override
 +    void property(ClientProperty prop) {
 +      doc.println("## " + prop.getDescription());
 +      if (!prop.isRequired()) {
 +        doc.print("#");
 +      }
 +      doc.println(prop.getKey() + "=" + prop.getDefaultValue() + "\n");
 +    }
 +  }
 +
 +  private PrintStream doc;
 +  private final TreeMap<String,ClientProperty> sortedProps = new TreeMap<>();
 +
 +  private ClientConfigGenerate(PrintStream doc) {
 +    Objects.nonNull(doc);
 +    this.doc = doc;
 +    for (ClientProperty prop : ClientProperty.values()) {
 +      this.sortedProps.put(prop.getKey(), prop);
 +    }
 +  }
 +
 +  private void generateMarkdown() {
 +    new Markdown().generate();
 +  }
 +
 +  private void generateConfigFile() {
 +    new ConfigFile().generate();
 +  }
 +
 +  /**
-    * Generates markdown and config files for Accumulo client properties. Arguments are: "--generate-markdown filename" or "--generate-config filename"
++   * Generates markdown and config files for Accumulo client properties. Arguments are:
++   * "--generate-markdown filename" or "--generate-config filename"
 +   *
 +   * @param args
 +   *          command-line arguments
 +   * @throws IllegalArgumentException
 +   *           if args is invalid
 +   */
-   public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
++  public static void main(String[] args)
++      throws FileNotFoundException, UnsupportedEncodingException {
 +    if (args.length == 2) {
-       ClientConfigGenerate clientConfigGenerate = new ClientConfigGenerate(new PrintStream(args[1], UTF_8.name()));
++      ClientConfigGenerate clientConfigGenerate = new ClientConfigGenerate(
++          new PrintStream(args[1], UTF_8.name()));
 +      if (args[0].equals("--generate-markdown")) {
 +        clientConfigGenerate.generateMarkdown();
 +        return;
 +      } else if (args[0].equals("--generate-config")) {
 +        clientConfigGenerate.generateConfigFile();
 +        return;
 +      }
 +    }
-     throw new IllegalArgumentException("Usage: " + ClientConfigGenerate.class.getName() + " [--generate-markdown|--generate-config] <filename>");
++    throw new IllegalArgumentException("Usage: " + ClientConfigGenerate.class.getName()
++        + " [--generate-markdown|--generate-config] <filename>");
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/conf/ClientProperty.java
index be6240e,0000000..5a2fc44
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/ClientProperty.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ClientProperty.java
@@@ -1,172 -1,0 +1,187 @@@
 +/*
 + * 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.conf;
 +
 +import java.util.HashMap;
 +import java.util.Map;
 +import java.util.Objects;
 +import java.util.Properties;
 +
 +import org.apache.accumulo.core.Constants;
 +
 +public enum ClientProperty {
 +
 +  // Instance
 +  INSTANCE_NAME("instance.name", "", "Name of Accumulo instance to connect to", "", true),
-   INSTANCE_ZOOKEEPERS("instance.zookeepers", "localhost:2181", "Zookeeper connection information for Accumulo instance", "", true),
-   INSTANCE_ZOOKEEPERS_TIMEOUT_SEC("instance.zookeepers.timeout.sec", "30", "Zookeeper session timeout (in seconds)"),
++  INSTANCE_ZOOKEEPERS("instance.zookeepers", "localhost:2181",
++      "Zookeeper connection information for Accumulo instance", "", true),
++  INSTANCE_ZOOKEEPERS_TIMEOUT_SEC("instance.zookeepers.timeout.sec", "30",
++      "Zookeeper session timeout (in seconds)"),
 +
 +  // Authentication
-   AUTH_METHOD("auth.method", "password", "Authentication method (i.e password, kerberos, provider). Set more properties for chosen method below.", "", true),
-   AUTH_USERNAME("auth.username", "", "Accumulo username/principal for chosen authentication method", "", true),
++  AUTH_METHOD("auth.method", "password",
++      "Authentication method (i.e password, kerberos, provider). Set more properties for chosen method below.",
++      "", true),
++  AUTH_USERNAME("auth.username", "", "Accumulo username/principal for chosen authentication method",
++      "", true),
 +  AUTH_PASSWORD("auth.password", "", "Accumulo user password", "", true),
 +  AUTH_KERBEROS_KEYTAB_PATH("auth.kerberos.keytab.path", "", "Path to Kerberos keytab"),
-   AUTH_PROVIDER_NAME("auth.provider.name", "", "Alias used to extract Accumulo user password from CredentialProvider"),
-   AUTH_PROVIDER_URLS("auth.provider.urls", "", "Comma separated list of URLs defining CredentialProvider(s)"),
++  AUTH_PROVIDER_NAME("auth.provider.name", "",
++      "Alias used to extract Accumulo user password from CredentialProvider"),
++  AUTH_PROVIDER_URLS("auth.provider.urls", "",
++      "Comma separated list of URLs defining CredentialProvider(s)"),
 +
 +  // BatchWriter
-   BATCH_WRITER_MAX_MEMORY_BYTES("batch.writer.max.memory.bytes", "52428800", "Max memory (in bytes) to batch before writing"),
-   BATCH_WRITER_MAX_LATENCY_SEC("batch.writer.max.latency.sec", "120", "Max amount of time (in seconds) to hold data in memory before flushing it"),
++  BATCH_WRITER_MAX_MEMORY_BYTES("batch.writer.max.memory.bytes", "52428800",
++      "Max memory (in bytes) to batch before writing"),
++  BATCH_WRITER_MAX_LATENCY_SEC("batch.writer.max.latency.sec", "120",
++      "Max amount of time (in seconds) to hold data in memory before flushing it"),
 +  BATCH_WRITER_MAX_TIMEOUT_SEC("batch.writer.max.timeout.sec", "0",
 +      "Max amount of time (in seconds) an unresponsive server will be re-tried. An exception is thrown when this timeout is exceeded. Set to zero for no timeout."),
-   BATCH_WRITER_MAX_WRITE_THREADS("batch.writer.max.write.threads", "3", "Maximum number of threads to use for writing data to tablet servers."),
++  BATCH_WRITER_MAX_WRITE_THREADS("batch.writer.max.write.threads", "3",
++      "Maximum number of threads to use for writing data to tablet servers."),
 +  BATCH_WRITER_DURABILITY("batch.writer.durability", "default",
 +      "Change the durability for the BatchWriter session. To use the table's durability setting. use \"default\" which is the table's durability setting."),
 +
 +  // SSL
 +  SSL_ENABLED("ssl.enabled", "false", "Enable SSL for client RPC"),
 +  SSL_KEYSTORE_PASSWORD("ssl.keystore.password", "", "Password used to encrypt keystore"),
 +  SSL_KEYSTORE_PATH("ssl.keystore.path", "", "Path to SSL keystore file"),
 +  SSL_KEYSTORE_TYPE("ssl.keystore.type", "jks", "Type of SSL keystore"),
 +  SSL_TRUSTSTORE_PASSWORD("ssl.truststore.password", "", "Password used to encrypt truststore"),
 +  SSL_TRUSTSTORE_PATH("ssl.truststore.path", "", "Path to SSL truststore file"),
 +  SSL_TRUSTSTORE_TYPE("ssl.truststore.type", "jks", "Type of SSL truststore"),
 +  SSL_USE_JSSE("ssl.use.jsse", "false", "Use JSSE system properties to configure SSL"),
 +
 +  // SASL
 +  SASL_ENABLED("sasl.enabled", "false", "Enable SASL for client RPC"),
-   SASL_QOP("sasl.qop", "auth", "SASL quality of protection. Valid values are 'auth', 'auth-int', and 'auth-conf'"),
-   SASL_KERBEROS_SERVER_PRIMARY("sasl.kerberos.server.primary", "accumulo", "Kerberos principal/primary that Accumulo servers use to login"),
++  SASL_QOP("sasl.qop", "auth",
++      "SASL quality of protection. Valid values are 'auth', 'auth-int', and 'auth-conf'"),
++  SASL_KERBEROS_SERVER_PRIMARY("sasl.kerberos.server.primary", "accumulo",
++      "Kerberos principal/primary that Accumulo servers use to login"),
 +
 +  // Trace
-   TRACE_SPAN_RECEIVERS("trace.span.receivers", "org.apache.accumulo.tracer.ZooTraceClient", "A list of span receiver classes to send trace spans"),
-   TRACE_ZOOKEEPER_PATH("trace.zookeeper.path", Constants.ZTRACERS, "The zookeeper node where tracers are registered");
++  TRACE_SPAN_RECEIVERS("trace.span.receivers", "org.apache.accumulo.tracer.ZooTraceClient",
++      "A list of span receiver classes to send trace spans"),
++  TRACE_ZOOKEEPER_PATH("trace.zookeeper.path", Constants.ZTRACERS,
++      "The zookeeper node where tracers are registered");
 +
 +  public static final String TRACE_SPAN_RECEIVER_PREFIX = "trace.span.receiver";
 +
 +  private String key;
 +  private String defaultValue;
 +  private String description;
 +  private String since;
 +  private boolean required;
 +
-   ClientProperty(String key, String defaultValue, String description, String since, boolean required) {
++  ClientProperty(String key, String defaultValue, String description, String since,
++      boolean required) {
 +    Objects.requireNonNull(key);
 +    Objects.requireNonNull(defaultValue);
 +    Objects.requireNonNull(description);
 +    Objects.requireNonNull(since);
 +    this.key = key;
 +    this.defaultValue = defaultValue;
 +    this.description = description;
 +    this.since = since;
 +    this.required = required;
 +  }
 +
 +  ClientProperty(String key, String defaultValue, String description, String since) {
 +    this(key, defaultValue, description, since, false);
 +  }
 +
 +  ClientProperty(String key, String defaultValue, String description) {
 +    this(key, defaultValue, description, "");
 +  }
 +
 +  public String getKey() {
 +    return key;
 +  }
 +
 +  public String getDefaultValue() {
 +    return defaultValue;
 +  }
 +
 +  public String getDescription() {
 +    return description;
 +  }
 +
 +  public String getSince() {
 +    return since;
 +  }
 +
 +  public boolean isRequired() {
 +    return required;
 +  }
 +
 +  public String getValue(Properties properties) {
 +    Objects.requireNonNull(properties);
 +    String value = properties.getProperty(getKey());
 +    if (value == null || value.isEmpty()) {
 +      value = getDefaultValue();
 +    }
 +    Objects.requireNonNull(value);
 +    if (isRequired() && value.isEmpty()) {
 +      throw new IllegalArgumentException(getKey() + " must be set!");
 +    }
 +    return value;
 +  }
 +
 +  public Long getLong(Properties properties) {
 +    String value = getValue(properties);
 +    if (value.isEmpty()) {
 +      return null;
 +    }
 +    return Long.parseLong(value);
 +  }
 +
 +  public Integer getInteger(Properties properties) {
 +    String value = getValue(properties);
 +    if (value.isEmpty()) {
 +      return null;
 +    }
 +    return Integer.parseInt(value);
 +  }
 +
 +  public boolean getBoolean(Properties properties) {
 +    String value = getValue(properties);
 +    if (value.isEmpty()) {
 +      return false;
 +    }
 +    return Boolean.valueOf(value);
 +  }
 +
 +  public static Properties getPrefix(Properties properties, String prefix) {
 +    Properties props = new Properties();
 +    for (Object keyObj : properties.keySet()) {
 +      String key = (String) keyObj;
 +      if (key.startsWith(prefix)) {
 +        props.put(key, properties.getProperty(key));
 +      }
 +    }
 +    return props;
 +  }
 +
 +  public static Map<String,String> toMap(Properties properties) {
 +    Map<String,String> propMap = new HashMap<>();
 +    for (Object obj : properties.keySet()) {
 +      propMap.put((String) obj, properties.getProperty((String) obj));
 +    }
 +    return propMap;
 +  }
 +}
diff --cc core/src/main/java/org/apache/accumulo/core/conf/ConfigSanityCheck.java
index e6c1894,0f3e6a2..34ec3df
--- a/core/src/main/java/org/apache/accumulo/core/conf/ConfigSanityCheck.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ConfigSanityCheck.java
@@@ -79,37 -68,6 +81,41 @@@ public class ConfigSanityCheck 
        if (key.equals(Property.INSTANCE_VOLUMES.getKey())) {
          usingVolumes = value != null && !value.isEmpty();
        }
 +
-       // If the block size or block size index is configured to be too large, we throw an exception to avoid potentially corrupting RFiles later
-       if (key.equals(Property.TABLE_FILE_COMPRESSED_BLOCK_SIZE_INDEX.getKey()) || key.equals(Property.TABLE_FILE_COMPRESSED_BLOCK_SIZE.getKey())) {
++      // If the block size or block size index is configured to be too large, we throw an exception
++      // to avoid potentially corrupting RFiles later
++      if (key.equals(Property.TABLE_FILE_COMPRESSED_BLOCK_SIZE_INDEX.getKey())
++          || key.equals(Property.TABLE_FILE_COMPRESSED_BLOCK_SIZE.getKey())) {
 +        long bsize = ConfigurationTypeHelper.getFixedMemoryAsBytes(value);
-         Preconditions.checkArgument(bsize > 0 && bsize < Integer.MAX_VALUE, key + " must be greater than 0 and less than " + Integer.MAX_VALUE + " but was: "
-             + bsize);
++        Preconditions.checkArgument(bsize > 0 && bsize < Integer.MAX_VALUE, key
++            + " must be greater than 0 and less than " + Integer.MAX_VALUE + " but was: " + bsize);
 +      }
 +
 +      if (key.equals(Property.CRYPTO_CIPHER_SUITE.getKey())) {
 +        cipherSuite = Objects.requireNonNull(value);
-         Preconditions.checkArgument(cipherSuite.equals(NULL_CIPHER) || cipherSuite.split("/").length == 3,
-             "Cipher suite must be NullCipher or in the form algorithm/mode/padding. Suite: " + cipherSuite + " is invalid.");
++        Preconditions.checkArgument(
++            cipherSuite.equals(NULL_CIPHER) || cipherSuite.split("/").length == 3,
++            "Cipher suite must be NullCipher or in the form algorithm/mode/padding. Suite: "
++                + cipherSuite + " is invalid.");
 +      }
 +
 +      if (key.equals(Property.CRYPTO_CIPHER_KEY_ALGORITHM_NAME.getKey())) {
 +        keyAlgorithm = Objects.requireNonNull(value);
 +      }
 +
 +      if (key.equals(Property.CRYPTO_MODULE_CLASS.getKey())) {
 +        cryptoModule = Objects.requireNonNull(value);
 +        if (!cryptoModule.equals(NULL_CRYPTO_MODULE)) {
 +          verifyValidClassName(key, cryptoModule, CryptoModule.class);
 +        }
 +
 +      }
 +      if (key.equals(Property.CRYPTO_SECRET_KEY_ENCRYPTION_STRATEGY_CLASS.getKey())) {
 +        secretKeyEncryptionStrategy = Objects.requireNonNull(value);
 +        if (!secretKeyEncryptionStrategy.equals(NULL_SECRET_KEY_ENCRYPTION_STRATEGY)) {
 +          verifyValidClassName(key, secretKeyEncryptionStrategy, SecretKeyEncryptionStrategy.class);
 +        }
 +      }
      }
  
      if (instanceZkTimeoutValue != null) {
@@@ -117,15 -76,8 +124,21 @@@
      }
  
      if (!usingVolumes) {
-       log.warn("Use of {} and {} are deprecated. Consider using {} instead.", INSTANCE_DFS_URI, INSTANCE_DFS_DIR, Property.INSTANCE_VOLUMES);
 -      log.warn("Use of " + INSTANCE_DFS_URI + " and " + INSTANCE_DFS_DIR
 -          + " are deprecated. Consider using " + Property.INSTANCE_VOLUMES + " instead.");
++      log.warn("Use of {} and {} are deprecated. Consider using {} instead.", INSTANCE_DFS_URI,
++          INSTANCE_DFS_DIR, Property.INSTANCE_VOLUMES);
 +    }
 +
-     if ((cipherSuite.equals(NULL_CIPHER) || keyAlgorithm.equals(NULL_CIPHER)) && !cipherSuite.equals(keyAlgorithm)) {
-       fatal(Property.CRYPTO_CIPHER_SUITE.getKey() + " and " + Property.CRYPTO_CIPHER_KEY_ALGORITHM_NAME + " must both be configured.");
++    if ((cipherSuite.equals(NULL_CIPHER) || keyAlgorithm.equals(NULL_CIPHER))
++        && !cipherSuite.equals(keyAlgorithm)) {
++      fatal(Property.CRYPTO_CIPHER_SUITE.getKey() + " and "
++          + Property.CRYPTO_CIPHER_KEY_ALGORITHM_NAME + " must both be configured.");
 +    }
 +
-     if (cryptoModule.equals(NULL_CRYPTO_MODULE) ^ secretKeyEncryptionStrategy.equals(NULL_SECRET_KEY_ENCRYPTION_STRATEGY)) {
-       fatal(Property.CRYPTO_MODULE_CLASS.getKey() + " and " + Property.CRYPTO_SECRET_KEY_ENCRYPTION_STRATEGY_CLASS.getKey() + " must both be configured.");
++    if (cryptoModule.equals(NULL_CRYPTO_MODULE)
++        ^ secretKeyEncryptionStrategy.equals(NULL_SECRET_KEY_ENCRYPTION_STRATEGY)) {
++      fatal(Property.CRYPTO_MODULE_CLASS.getKey() + " and "
++          + Property.CRYPTO_SECRET_KEY_ENCRYPTION_STRATEGY_CLASS.getKey()
++          + " must both be configured.");
      }
    }
  
@@@ -185,24 -138,4 +199,27 @@@
      log.error("FATAL: {}", msg);
      throw new SanityCheckException(msg);
    }
 +
 +  /**
 +   * Verifies a configured option is a legal class and has a required base class.
 +   *
 +   * @param confOption
 +   *          The Property key name
 +   * @param className
 +   *          The Property value, the string representation of a class to be loaded
 +   * @param requiredBaseClass
 +   *          The base class required for the className
 +   */
-   private static void verifyValidClassName(String confOption, String className, Class<?> requiredBaseClass) {
++  private static void verifyValidClassName(String confOption, String className,
++      Class<?> requiredBaseClass) {
 +    try {
 +      ConfigurationTypeHelper.getClassInstance(null, className, requiredBaseClass);
-     } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException e) {
++    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
++        | IOException e) {
 +      fatal(confOption + " has an invalid class name: " + className);
 +    } catch (ClassCastException e) {
-       fatal(confOption + " must implement " + requiredBaseClass + ", but the configured class does not: " + className);
++      fatal(confOption + " must implement " + requiredBaseClass
++          + ", but the configured class does not: " + className);
 +    }
 +  }
  }
diff --cc core/src/main/java/org/apache/accumulo/core/conf/ConfigurationCopy.java
index cf1c9fe,2a8d99d..d08f66d
--- a/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationCopy.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationCopy.java
@@@ -20,10 -20,12 +20,11 @@@ import java.util.Collections
  import java.util.HashMap;
  import java.util.Map;
  import java.util.Map.Entry;
 -
 -import com.google.common.base.Predicate;
 +import java.util.function.Predicate;
  
  /**
-  * An {@link AccumuloConfiguration} which holds a flat copy of properties defined in another configuration
+  * An {@link AccumuloConfiguration} which holds a flat copy of properties defined in another
+  * configuration
   */
  public class ConfigurationCopy extends AccumuloConfiguration {
    private long updateCount = 0;
diff --cc core/src/main/java/org/apache/accumulo/core/conf/ConfigurationDocGen.java
index 91df2dc,b7753f6..90b8b55
--- a/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationDocGen.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationDocGen.java
@@@ -19,12 -19,19 +19,13 @@@ package org.apache.accumulo.core.conf
  import static java.nio.charset.StandardCharsets.UTF_8;
  
  import java.io.FileNotFoundException;
 -import java.io.IOException;
 -import java.io.InputStream;
  import java.io.PrintStream;
  import java.io.UnsupportedEncodingException;
 -import java.util.ArrayList;
  import java.util.TreeMap;
  
 -import org.slf4j.Logger;
 -import org.slf4j.LoggerFactory;
 -
  /**
-  * This class generates documentation to inform users of the available configuration properties in a presentable form.
+  * This class generates documentation to inform users of the available configuration properties in a
+  * presentable form.
   */
  class ConfigurationDocGen {
    private abstract class Format {
@@@ -78,40 -138,151 +79,46 @@@
      }
  
      @Override
 -    void propertyQuickLinks() {
 -      doc.println("<p>Jump to: ");
 -      String delimiter = "";
 -      for (Property prefix : prefixes) {
 -        if (!prefix.isExperimental()) {
 -          doc.print(delimiter + "<a href='#" + prefix.name() + "'>" + prefix.getKey() + "*</a>");
 -          delimiter = "&nbsp;|&nbsp;";
 -        }
 -      }
 -      doc.println("</p>");
 -    }
 -
 -    @Override
 -    void prefixSection(Property prefix) {
 -      beginRow();
 +    void pageHeader() {
 +      doc.println("---");
 +      doc.println("title: Server Properties");
 +      doc.println("category: administration");
 +      doc.println("order: 3");
 +      doc.println("---\n");
-       doc.println("<!-- WARNING: Do not edit this file. It is a generated file that is copied from Accumulo build (from core/target/generated-docs) -->\n");
-       doc.println("Below are properties set in `accumulo-site.xml` or the Accumulo shell that configure Accumulo servers (i.e tablet server, master, etc):\n");
+       doc.println(
 -          t("td", t("span", prefix.getKey() + '*', "id='" + prefix.name() + "' class='large'"),
 -              "colspan='5'" + (prefix.isDeprecated() ? " class='deprecated'" : "")));
 -      endRow();
 -      beginRow();
 -      doc.println(t("td",
 -          (prefix.isDeprecated() ? t("b", t("i", "Deprecated. ", null), null) : "")
 -              + sanitize(prefix.getDescription()),
 -          "colspan='5'" + (prefix.isDeprecated() ? " class='deprecated'" : "")));
 -      endRow();
 -
 -      switch (prefix) {
 -        case TABLE_CONSTRAINT_PREFIX:
 -          break;
 -        case TABLE_ITERATOR_PREFIX:
 -          break;
 -        case TABLE_LOCALITY_GROUP_PREFIX:
 -          break;
 -        case TABLE_COMPACTION_STRATEGY_PREFIX:
 -          break;
 -        default:
 -          columnNames("Property", "Type", "ZooKeeper Mutable", "Default Value", "Description");
 -          break;
 -      }
 -    }
 -
 -    @Override
 -    void property(Property prefix, Property prop) {
 -      boolean isDeprecated = prefix.isDeprecated() || prop.isDeprecated();
 -      if (prop.getKey().startsWith(prefix.getKey())) {
 -        beginRow();
 -        cellData(prop.getKey(), isDeprecated ? "class='deprecated'" : null);
 -        cellData(
 -            "<b><a href='#" + prop.getType().name() + "'>"
 -                + prop.getType().toString().replaceAll(" ", "&nbsp;") + "</a></b>",
 -            isDeprecated ? "class='deprecated'" : null);
 -        cellData(isZooKeeperMutable(prop), isDeprecated ? "class='deprecated'" : null);
 -        cellData(
 -            "<pre>" + (prop.getRawDefaultValue().isEmpty() ? "&nbsp;"
 -                : sanitize(prop.getRawDefaultValue().replaceAll(" ", "&nbsp;"))) + "</pre>",
 -            isDeprecated ? "class='deprecated'" : null);
 -        cellData(
 -            (isDeprecated ? "<b><i>Deprecated.</i></b> " : "") + sanitize(prop.getDescription()),
 -            isDeprecated ? "class='deprecated'" : null);
 -        endRow();
 -      }
 -
 -    }
 -
 -    @Override
 -    void propertyTypeDescriptions() {
 -      columnNames("Property Type", "Description");
 -      for (PropertyType type : PropertyType.values()) {
 -        if (type == PropertyType.PREFIX)
 -          continue;
 -        beginRow();
 -        cellData("<h3 id='" + type.name() + "'>" + type + "</h3>", null);
 -        cellData(type.getFormatDescription(), null);
 -        endRow();
 -      }
 -    }
 -
 -    @Override
 -    String sanitize(String str) {
 -      return str.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
 -          .replaceAll("(?:\r\n|\r|\n)", "<br />");
 -    }
 -
 -    private String startTag(String tag, String options) {
 -      return "<" + tag + (options != null ? " " + options : "") + ">";
 -    }
 -
 -  }
 -
 -  private class Asciidoc extends Format {
 -    @Override
 -    void beginSection(String section) {
 -      doc.println("=== " + section);
 -    }
 -
 -    @Override
 -    String getExt() {
 -      return "txt";
 -    }
 -
 -    @Override
 -    void propertyQuickLinks() {
 -      doc.println("Jump to: ");
 -      String delimiter = "";
 -      for (Property prefix : prefixes) {
 -        if (!prefix.isExperimental()) {
 -          doc.print(delimiter + "<<" + prefix.name() + ">>");
 -          delimiter = " | ";
 -        }
 -      }
 -      doc.println();
 -      doc.println();
++          "<!-- WARNING: Do not edit this file. It is a generated file that is copied from Accumulo build (from core/target/generated-docs) -->\n");
++      doc.println(
++          "Below are properties set in `accumulo-site.xml` or the Accumulo shell that configure Accumulo servers (i.e tablet server, master, etc):\n");
      }
  
      @Override
      void prefixSection(Property prefix) {
        boolean depr = prefix.isDeprecated();
-       doc.print("| <a name=\"" + prefix.getKey().replace(".", "_") + "prefix\" class=\"prop\"></a> **" + prefix.getKey() + "*** | ");
-       doc.println((depr ? "**Deprecated.** " : "") + strike(sanitize(prefix.getDescription()), depr) + " |");
 -      doc.println("[[" + prefix.name() + "]]");
 -      doc.println("==== " + prefix.getKey() + "*" + (depr ? " (Deprecated)" : ""));
 -      doc.println(strike((depr ? "_Deprecated._ " : "") + sanitize(prefix.getDescription()), depr));
 -      doc.println();
 -    }
 -
 -    @Override
 -    void property(Property prefix, Property prop) {
 -      boolean depr = prefix.isDeprecated() || prop.isDeprecated();
 -      if (prop.getKey().startsWith(prefix.getKey())) {
 -        doc.println("===== " + prop.getKey());
 -        doc.println(strike((depr ? "_Deprecated._ " : "") + sanitize(prop.getDescription()), depr));
 -        doc.println();
 -        doc.println(strike("_Type:_ " + prop.getType().name(), depr) + " +");
 -        doc.println(strike("_Zookeeper Mutable:_ " + isZooKeeperMutable(prop), depr) + " +");
 -        String defaultValue = sanitize(prop.getRawDefaultValue()).trim();
 -        if (defaultValue.length() == 0) {
 -          // need a placeholder or the asciidoc line break won't work
 -          defaultValue = strike("_Default Value:_ _empty_", depr);
 -        } else if (defaultValue.contains("\n")) {
 -          // deal with multi-line values, skip strikethrough of value
 -          defaultValue = strike("_Default Value:_ ", depr) + "\n----\n" + defaultValue + "\n----\n";
 -        } else {
 -          defaultValue = strike("_Default Value:_ " + "`" + defaultValue + "`", depr);
 -        }
 -        doc.println(defaultValue);
 -        doc.println();
++      doc.print("| <a name=\"" + prefix.getKey().replace(".", "_")
++          + "prefix\" class=\"prop\"></a> **" + prefix.getKey() + "*** | ");
++      doc.println((depr ? "**Deprecated.** " : "") + strike(sanitize(prefix.getDescription()), depr)
++          + " |");
 +    }
 +
 +    @Override
 +    void property(Property prop) {
 +      boolean depr = prop.isDeprecated();
-       doc.print("| <a name=\"" + prop.getKey().replace(".", "_") + "\" class=\"prop\"></a> " + prop.getKey() + " | ");
-       doc.print((depr ? "**Deprecated.** " : "") + strike(sanitize(prop.getDescription()), depr) + "<br>");
++      doc.print("| <a name=\"" + prop.getKey().replace(".", "_") + "\" class=\"prop\"></a> "
++          + prop.getKey() + " | ");
++      doc.print((depr ? "**Deprecated.** " : "") + strike(sanitize(prop.getDescription()), depr)
++          + "<br>");
 +      doc.print(strike("**type:** " + prop.getType().name(), depr) + ", ");
 +      doc.print(strike("**zk mutable:** " + isZooKeeperMutable(prop), depr) + ", ");
 +      String defaultValue = sanitize(prop.getRawDefaultValue()).trim();
 +      if (defaultValue.length() == 0) {
 +        defaultValue = strike("**default value:** empty", depr);
 +      } else if (defaultValue.contains("\n")) {
 +        // deal with multi-line values, skip strikethrough of value
 +        defaultValue = strike("**default value:** ", depr) + "\n```\n" + defaultValue + "\n```\n";
 +      } else {
 +        defaultValue = strike("**default value:** " + "`" + defaultValue + "`", depr);
        }
 +      doc.println(defaultValue + " |");
      }
  
      private String strike(String s, boolean isDeprecated) {
@@@ -123,7 -294,9 +130,8 @@@
        for (PropertyType type : PropertyType.values()) {
          if (type == PropertyType.PREFIX)
            continue;
-         doc.println("| " + sanitize(type.toString()) + " | " + sanitize(type.getFormatDescription()) + " |");
 -        doc.println("==== " + sanitize(type.toString()));
 -        doc.println(sanitize(type.getFormatDescription()));
 -        doc.println();
++        doc.println("| " + sanitize(type.toString()) + " | " + sanitize(type.getFormatDescription())
++            + " |");
        }
      }
  
@@@ -157,18 -368,25 +165,21 @@@
    }
  
    /**
-    * Generates documentation for accumulo-site.xml file usage. Arguments are: "--generate-markdown filename"
 -   * Generates documentation for conf/accumulo-site.xml file usage. Arguments are: "--generate-doc",
 -   * file to write to.
++   * Generates documentation for accumulo-site.xml file usage. Arguments are: "--generate-markdown
++   * filename"
     *
     * @param args
     *          command-line arguments
     * @throws IllegalArgumentException
     *           if args is invalid
     */
-   public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
+   public static void main(String[] args)
+       throws FileNotFoundException, UnsupportedEncodingException {
 -    if (args.length == 2 && args[0].equals("--generate-html")) {
 -      new ConfigurationDocGen(new PrintStream(args[1], UTF_8.name())).generateHtml();
 -    } else if (args.length == 2 && args[0].equals("--generate-asciidoc")) {
 -      new ConfigurationDocGen(new PrintStream(args[1], UTF_8.name())).generateAsciidoc();
 +    if (args.length == 2 && args[0].equals("--generate-markdown")) {
 +      new ConfigurationDocGen(new PrintStream(args[1], UTF_8.name())).generateMarkdown();
      } else {
-       throw new IllegalArgumentException("Usage: " + ConfigurationDocGen.class.getName() + " --generate-markdown <filename>");
 -      throw new IllegalArgumentException("Usage: " + ConfigurationDocGen.class.getName()
 -          + " --generate-html <filename> | --generate-asciidoc <filename>");
++      throw new IllegalArgumentException(
++          "Usage: " + ConfigurationDocGen.class.getName() + " --generate-markdown <filename>");
      }
    }
 -
  }
diff --cc core/src/main/java/org/apache/accumulo/core/conf/ConfigurationTypeHelper.java
index 1ad7965,0000000..d718c9c
mode 100644,000000..100644
--- a/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationTypeHelper.java
+++ b/core/src/main/java/org/apache/accumulo/core/conf/ConfigurationTypeHelper.java
@@@ -1,204 -1,0 +1,216 @@@
 +/*
 + * 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.conf;
 +
 +import java.io.IOException;
 +import java.util.Collections;
 +import java.util.HashMap;
 +import java.util.Map;
 +import java.util.concurrent.TimeUnit;
 +
 +import org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +
 +public class ConfigurationTypeHelper {
 +
 +  private static final Logger log = LoggerFactory.getLogger(ConfigurationTypeHelper.class);
 +
 +  /**
-    * Interprets a string specifying bytes. A bytes type is specified as a long integer followed by an optional B (bytes), K (KB), M (MB), or G (GB).
++   * Interprets a string specifying bytes. A bytes type is specified as a long integer followed by
++   * an optional B (bytes), K (KB), M (MB), or G (GB).
 +   *
 +   * @param str
 +   *          String value
 +   * @return interpreted memory size in bytes
 +   */
 +  public static long getFixedMemoryAsBytes(String str) {
 +    char lastChar = str.charAt(str.length() - 1);
 +
 +    if (lastChar == 'b') {
-       log.warn("The 'b' in {} is being considered as bytes. Setting memory by bits is not supported", str);
++      log.warn(
++          "The 'b' in {} is being considered as bytes. Setting memory by bits is not supported",
++          str);
 +    }
 +    try {
 +      int multiplier;
 +      switch (Character.toUpperCase(lastChar)) {
 +        case 'G':
 +          multiplier = 30;
 +          break;
 +        case 'M':
 +          multiplier = 20;
 +          break;
 +        case 'K':
 +          multiplier = 10;
 +          break;
 +        case 'B':
 +          multiplier = 0;
 +          break;
 +        default:
 +          return Long.parseLong(str);
 +      }
 +      return Long.parseLong(str.substring(0, str.length() - 1)) << multiplier;
 +    } catch (Exception ex) {
-       throw new IllegalArgumentException("The value '" + str + "' is not a valid memory setting. A valid value would a number "
-           + "possibly followed by an optional 'G', 'M', 'K', or 'B'.");
++      throw new IllegalArgumentException(
++          "The value '" + str + "' is not a valid memory setting. A valid value would a number "
++              + "possibly followed by an optional 'G', 'M', 'K', or 'B'.");
 +    }
 +  }
 +
 +  /**
-    * Interprets a string specifying a Memory type which is specified as a long integer followed by an optional B (bytes), K (KB), M (MB), G (GB) or %
-    * (percentage).
++   * Interprets a string specifying a Memory type which is specified as a long integer followed by
++   * an optional B (bytes), K (KB), M (MB), G (GB) or % (percentage).
 +   *
 +   * @param str
 +   *          String value
 +   * @return interpreted memory size in bytes
 +   */
 +  public static long getMemoryAsBytes(String str) {
 +    char lastChar = str.charAt(str.length() - 1);
 +    if (lastChar == '%') {
 +      try {
 +        int percent = Integer.parseInt(str.substring(0, str.length() - 1));
 +        if (percent <= 0 || percent >= 100) {
-           throw new IllegalArgumentException("The value '" + str + "' is not a valid memory setting.");
++          throw new IllegalArgumentException(
++              "The value '" + str + "' is not a valid memory setting.");
 +        }
 +        return Runtime.getRuntime().maxMemory() * percent / 100;
... 52926 lines suppressed ...

-- 
To stop receiving notification emails like this one, please contact
ctubbsii@apache.org.

[accumulo] 01/04: Merge commit 'fc20be34d6984114e7240c4eba276a3fe87a347b'

Posted by ct...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 19dc538d54e4ac021de9531bf23f3c8a2f4ac24b
Merge: add1c4c fc20be3
Author: Christopher Tubbs <ct...@apache.org>
AuthorDate: Fri Apr 6 00:59:56 2018 -0400

    Merge commit 'fc20be34d6984114e7240c4eba276a3fe87a347b'

 contrib/Eclipse-Accumulo-Codestyle.xml |  4 +--
 pom.xml                                | 50 ++++++++++++++--------------------
 2 files changed, 22 insertions(+), 32 deletions(-)

diff --cc pom.xml
index 08dc77e,f4b46bb..904e2b6
--- a/pom.xml
+++ b/pom.xml
@@@ -1017,10 -811,24 +1017,11 @@@
            <version>1.2.0</version>
          </plugin>
          <plugin>
 -          <groupId>org.apache.rat</groupId>
 -          <artifactId>apache-rat-plugin</artifactId>
 -          <configuration>
 -            <excludes combine.children="append">
 -              <exclude>src/main/resources/META-INF/services/*</exclude>
 -              <exclude>nbproject/**</exclude>
 -              <exclude>nb-configuration.xml</exclude>
 -              <exclude>nbactions.xml</exclude>
 -            </excludes>
 -          </configuration>
 -        </plugin>
 -        <plugin>
 -          <!-- this plugin requires java 1.8 and should only be used in a jdk8 profile -->
            <groupId>net.revelc.code.formatter</groupId>
            <artifactId>formatter-maven-plugin</artifactId>
-           <version>2.7.1</version>
+           <version>2.7.2</version>
            <configuration>
+             <configFile>${eclipseFormatterStyle}</configFile>
              <compilerCompliance>${maven.compiler.source}</compilerCompliance>
              <compilerSource>${maven.compiler.source}</compilerSource>
              <compilerTargetPlatform>${maven.compiler.target}</compilerTargetPlatform>
@@@ -1036,40 -844,9 +1037,25 @@@
              <skipJsonFormatting>true</skipJsonFormatting>
              <skipCssFormatting>true</skipCssFormatting>
            </configuration>
-           <dependencies>
-             <dependency>
-               <groupId>org.eclipse.tycho</groupId>
-               <artifactId>org.eclipse.jdt.core</artifactId>
-               <version>3.10.0.v20140604-1726</version>
-             </dependency>
-           </dependencies>
-           <executions>
-             <execution>
-               <id>format-java-source</id>
-               <goals>
-                 <goal>format</goal>
-               </goals>
-             </execution>
-           </executions>
          </plugin>
          <plugin>
 -          <!-- this plugin requires java 1.8 and should only be used in a jdk8 profile -->
 +          <groupId>org.apache.rat</groupId>
 +          <artifactId>apache-rat-plugin</artifactId>
 +          <configuration>
 +            <excludes combine.children="append">
 +              <exclude>src/main/resources/META-INF/services/*</exclude>
 +              <exclude>nbproject/**</exclude>
 +              <exclude>nb-configuration.xml</exclude>
 +              <exclude>nbactions.xml</exclude>
 +            </excludes>
 +          </configuration>
 +        </plugin>
 +        <plugin>
 +          <groupId>net.revelc.code</groupId>
 +          <artifactId>warbucks-maven-plugin</artifactId>
 +          <version>1.0.0</version>
 +        </plugin>
 +        <plugin>
            <groupId>net.revelc.code</groupId>
            <artifactId>impsort-maven-plugin</artifactId>
            <version>1.0.1</version>

-- 
To stop receiving notification emails like this one, please contact
ctubbsii@apache.org.