You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2021/09/13 20:19:27 UTC
[hbase-site] branch asf-site updated: Published site at
d26bcaaa915901970c4ddd56a9f1e601fedb29c4.
This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hbase-site.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 87dc208 Published site at d26bcaaa915901970c4ddd56a9f1e601fedb29c4.
87dc208 is described below
commit 87dc208a982bd3eb49047f560163550df01f4e52
Author: jenkins <bu...@apache.org>
AuthorDate: Mon Sep 13 20:19:11 2021 +0000
Published site at d26bcaaa915901970c4ddd56a9f1e601fedb29c4.
---
acid-semantics.html | 2 +-
apache_hbase_reference_guide.pdf | 4 +-
.../apache/hadoop/hbase/HBaseTestingUtility.html | 480 +-
.../org/apache/hadoop/hbase/MiniHBaseCluster.html | 12 +-
.../apache/hadoop/hbase/HBaseTestingUtility.html | 8523 ++++----
.../org/apache/hadoop/hbase/MiniHBaseCluster.html | 174 +-
book.html | 2 +-
bulk-loads.html | 2 +-
checkstyle-aggregate.html | 20682 +++++++++----------
checkstyle.rss | 74 +-
coc.html | 2 +-
dependencies.html | 2 +-
dependency-convergence.html | 2 +-
dependency-info.html | 2 +-
dependency-management.html | 2 +-
devapidocs/allclasses-frame.html | 3 +
devapidocs/allclasses-noframe.html | 3 +
devapidocs/constant-values.html | 85 +-
devapidocs/index-all.html | 598 +-
devapidocs/org/apache/hadoop/hbase/Abortable.html | 2 +-
.../org/apache/hadoop/hbase/HBaseIOException.html | 4 +-
.../apache/hadoop/hbase/HBaseRpcServicesBase.html | 971 +
.../org/apache/hadoop/hbase/HBaseServerBase.html | 1594 ++
.../hbase/HBaseTestingUtility.SeenRowTracker.html | 20 +-
.../apache/hadoop/hbase/HBaseTestingUtility.html | 546 +-
...iHBaseCluster.MiniHBaseClusterRegionServer.html | 49 +-
.../org/apache/hadoop/hbase/MiniHBaseCluster.html | 12 +-
devapidocs/org/apache/hadoop/hbase/Server.html | 24 +-
devapidocs/org/apache/hadoop/hbase/Stoppable.html | 2 +-
.../hbase/backup/BackupInfo.BackupPhase.html | 18 +-
.../hbase/backup/BackupInfo.BackupState.html | 14 +-
.../hadoop/hbase/backup/BackupInfo.Filter.html | 4 +-
.../org/apache/hadoop/hbase/backup/BackupInfo.html | 286 +-
.../hadoop/hbase/backup/class-use/BackupInfo.html | 22 +
.../hadoop/hbase/backup/impl/BackupManager.html | 152 +-
.../backup/impl/BackupManifest.BackupImage.html | 18 +-
.../hadoop/hbase/backup/impl/BackupManifest.html | 10 +-
.../backup/impl/BackupSystemTable.WALItem.html | 18 +-
.../hbase/backup/impl/BackupSystemTable.html | 691 +-
.../hbase/backup/impl/FullTableBackupClient.html | 14 +-
.../IncrementalBackupManager.NewestLogFilter.html | 10 +-
.../backup/impl/IncrementalBackupManager.html | 130 +-
.../backup/impl/IncrementalTableBackupClient.html | 36 +-
.../hbase/backup/impl/TableBackupClient.Stage.html | 16 +-
.../hbase/backup/impl/TableBackupClient.html | 60 +-
.../impl/class-use/BackupSystemTable.WALItem.html | 79 +-
.../hadoop/hbase/backup/impl/package-use.html | 5 +-
.../hbase/backup/master/BackupLogCleaner.html | 46 +-
.../apache/hadoop/hbase/backup/package-tree.html | 4 +-
.../apache/hadoop/hbase/backup/package-use.html | 21 +
.../hadoop/hbase/backup/util/BackupUtils.html | 90 +-
.../apache/hadoop/hbase/class-use/Abortable.html | 6 +
.../hadoop/hbase/class-use/ChoreService.html | 40 +-
.../hbase/class-use/CoordinatedStateManager.html | 52 +-
.../hbase/class-use/HBaseRpcServicesBase.html | 268 +
.../hadoop/hbase/class-use/HBaseServerBase.html | 248 +
.../hadoop/hbase/class-use/HRegionLocation.html | 30 +-
.../hbase/class-use/MetaRegionLocationCache.html | 16 +-
.../hadoop/hbase/class-use/ScheduledChore.html | 17 +-
.../org/apache/hadoop/hbase/class-use/Server.html | 13 +-
.../apache/hadoop/hbase/class-use/ServerName.html | 180 +-
.../apache/hadoop/hbase/class-use/Stoppable.html | 6 +
.../hadoop/hbase/class-use/TableDescriptors.html | 60 +-
.../apache/hadoop/hbase/class-use/TableName.html | 51 +-
.../class-use/ZooKeeperConnectionException.html | 27 +-
.../hbase/client/ConnectionRegistryEndpoint.html | 2 +-
.../hadoop/hbase/client/class-use/Admin.html | 2 +-
.../client/class-use/AsyncClusterConnection.html | 68 +-
.../hadoop/hbase/client/class-use/Connection.html | 20 +-
.../class-use/ConnectionRegistryEndpoint.html | 6 +
.../apache/hadoop/hbase/client/class-use/Get.html | 12 +-
.../apache/hadoop/hbase/client/class-use/Put.html | 8 -
.../apache/hadoop/hbase/client/class-use/Scan.html | 10 +-
.../apache/hadoop/hbase/client/package-tree.html | 24 +-
.../apache/hadoop/hbase/client/package-use.html | 55 +-
.../hadoop/hbase/conf/ConfigurationObserver.html | 2 +-
.../hbase/conf/class-use/ConfigurationManager.html | 59 +-
.../conf/class-use/ConfigurationObserver.html | 12 +
.../org/apache/hadoop/hbase/conf/package-use.html | 8 +
.../apache/hadoop/hbase/executor/EventType.html | 4 +-
.../hbase/executor/class-use/ExecutorService.html | 25 +-
.../apache/hadoop/hbase/executor/package-tree.html | 2 +-
.../apache/hadoop/hbase/filter/package-tree.html | 6 +-
.../hadoop/hbase/fs/class-use/HFileSystem.html | 54 +-
.../org/apache/hadoop/hbase/fs/package-use.html | 42 +-
.../hadoop/hbase/hbtop/field/package-tree.html | 2 +-
.../hadoop/hbase/hbtop/terminal/package-tree.html | 2 +-
.../hadoop/hbase/http/class-use/InfoServer.html | 89 +-
.../org/apache/hadoop/hbase/http/package-tree.html | 4 +-
.../org/apache/hadoop/hbase/http/package-use.html | 44 +-
.../apache/hadoop/hbase/io/hfile/package-tree.html | 6 +-
.../ipc/AnnotationReadingPriorityFunction.html | 8 +-
.../hadoop/hbase/ipc/HBaseRPCErrorHandler.html | 2 +-
.../apache/hadoop/hbase/ipc/NettyRpcServer.html | 32 +-
.../apache/hadoop/hbase/ipc/PriorityFunction.html | 2 +-
.../hbase/ipc/class-use/HBaseRPCErrorHandler.html | 28 +-
.../hbase/ipc/class-use/PriorityFunction.html | 71 +-
.../hadoop/hbase/ipc/class-use/QosPriority.html | 59 +-
.../hadoop/hbase/ipc/class-use/RpcScheduler.html | 30 +-
.../RpcServer.BlockingServiceAndInterface.html | 26 +-
.../hadoop/hbase/ipc/class-use/RpcServer.html | 22 +
.../hbase/ipc/class-use/RpcServerInterface.html | 59 +-
.../apache/hadoop/hbase/ipc/package-summary.html | 2 +-
.../org/apache/hadoop/hbase/ipc/package-use.html | 35 +-
.../hadoop/hbase/mapreduce/package-tree.html | 4 +-
.../master/HMaster.TableDescriptorGetter.html | 4 +-
.../org/apache/hadoop/hbase/master/HMaster.html | 1399 +-
.../master/HMasterCommandLine.LocalHMaster.html | 33 +-
.../MasterRpcServices.BalanceSwitchMode.html | 10 +-
.../hadoop/hbase/master/MasterRpcServices.html | 1246 +-
.../hadoop/hbase/master/balancer/package-tree.html | 2 +-
.../master/class-use/ActiveMasterManager.html | 4 +
.../hadoop/hbase/master/class-use/HMaster.html | 4 -
.../hbase/master/class-use/MasterRpcServices.html | 4 +
.../hbase/master/http/MasterDumpServlet.html | 14 +-
.../apache/hadoop/hbase/master/package-tree.html | 20 +-
.../hbase/master/procedure/package-tree.html | 4 +-
.../hadoop/hbase/monitoring/package-tree.html | 2 +-
.../namequeues/class-use/NamedQueueRecorder.html | 114 +-
.../hadoop/hbase/namequeues/package-use.html | 42 +
.../apache/hadoop/hbase/net/class-use/Address.html | 40 +-
.../org/apache/hadoop/hbase/net/package-use.html | 42 +-
.../org/apache/hadoop/hbase/package-frame.html | 2 +
.../org/apache/hadoop/hbase/package-summary.html | 12 +
.../org/apache/hadoop/hbase/package-tree.html | 27 +-
.../org/apache/hadoop/hbase/package-use.html | 192 +-
.../hadoop/hbase/procedure2/package-tree.html | 4 +-
.../apache/hadoop/hbase/quotas/package-tree.html | 6 +-
.../hbase/regionserver/FavoredNodesForRegion.html | 2 +-
.../HRegionServer.CompactionChecker.html | 14 +-
.../HRegionServer.MovedRegionInfo.html | 12 +-
.../HRegionServer.PeriodicMemStoreFlusher.html | 14 +-
.../HRegionServer.SystemExitWhenAbortTimeout.html | 6 +-
.../hadoop/hbase/regionserver/HRegionServer.html | 2022 +-
.../hadoop/hbase/regionserver/LastSequenceId.html | 2 +-
.../hbase/regionserver/MutableOnlineRegions.html | 2 +-
.../hadoop/hbase/regionserver/OnlineRegions.html | 2 +-
.../RSRpcServices.RegionScannerCloseCallBack.html | 8 +-
.../RSRpcServices.RegionScannerHolder.html | 30 +-
...RSRpcServices.RegionScannerShippedCallBack.html | 12 +-
.../RSRpcServices.RegionScannersCloseCallBack.html | 10 +-
.../RSRpcServices.ScannerListener.html | 8 +-
.../hadoop/hbase/regionserver/RSRpcServices.html | 1124 +-
.../hbase/regionserver/RegionServerServices.html | 2 +-
.../class-use/FavoredNodesForRegion.html | 28 -
.../regionserver/class-use/HRegionServer.html | 58 +-
.../regionserver/class-use/HeapMemoryManager.html | 22 +
.../regionserver/class-use/LastSequenceId.html | 30 +-
.../class-use/MutableOnlineRegions.html | 28 -
.../regionserver/class-use/OnlineRegions.html | 30 +-
.../regionserver/class-use/RSRpcServices.html | 70 -
.../class-use/RegionServerServices.html | 44 +-
.../class-use/RpcSchedulerFactory.html | 25 -
.../hadoop/hbase/regionserver/package-tree.html | 34 +-
.../hadoop/hbase/regionserver/package-use.html | 133 +-
.../regionserver/querymatcher/package-tree.html | 2 +-
.../hbase/regionserver/wal/package-tree.html | 2 +-
.../regionserver/ReplicationSource.html | 160 +-
.../regionserver/class-use/ReplicationStatus.html | 24 +-
.../replication/regionserver/package-tree.html | 2 +-
.../replication/regionserver/package-use.html | 27 +-
.../hadoop/hbase/rest/model/package-tree.html | 2 +-
.../security/SaslUtil.QualityOfProtection.html | 4 +-
.../security/access/class-use/AccessChecker.html | 72 +-
.../access/class-use/Permission.Action.html | 10 +-
.../access/class-use/ZKPermissionWatcher.html | 60 +-
.../hadoop/hbase/security/access/package-tree.html | 4 +-
.../hadoop/hbase/security/access/package-use.html | 51 +-
.../hadoop/hbase/security/class-use/User.html | 42 +-
.../hbase/security/class-use/UserProvider.html | 22 +-
.../apache/hadoop/hbase/security/package-tree.html | 2 +-
.../apache/hadoop/hbase/thrift/package-tree.html | 2 +-
.../apache/hadoop/hbase/util/DNS.ServerType.html | 4 +-
.../hbase/util/NettyEventLoopGroupConfig.html | 37 +-
.../OOMEChecker.html} | 93 +-
.../hbase/util/ObjectPool.ObjectFactory.html | 4 +-
devapidocs/org/apache/hadoop/hbase/util/Order.html | 4 +-
.../hbase/util/class-use/DNS.ServerType.html | 66 +
.../util/class-use/NettyEventLoopGroupConfig.html | 41 +-
.../hadoop/hbase/util/class-use/OOMEChecker.html | 20 +-
.../hadoop/hbase/util/class-use/Sleeper.html | 10 +-
.../apache/hadoop/hbase/util/package-frame.html | 1 +
.../apache/hadoop/hbase/util/package-summary.html | 118 +-
.../org/apache/hadoop/hbase/util/package-tree.html | 11 +-
.../org/apache/hadoop/hbase/util/package-use.html | 106 +-
.../zookeeper/class-use/ClusterStatusTracker.html | 10 +-
.../hbase/zookeeper/class-use/ZKWatcher.html | 59 +-
.../apache/hadoop/hbase/zookeeper/package-use.html | 20 +-
devapidocs/overview-tree.html | 18 +-
.../apache/hadoop/hbase/HBaseRpcServicesBase.html | 458 +
.../org/apache/hadoop/hbase/HBaseServerBase.html | 672 +
.../hbase/HBaseTestingUtility.SeenRowTracker.html | 8523 ++++----
.../apache/hadoop/hbase/HBaseTestingUtility.html | 8523 ++++----
...iHBaseCluster.MiniHBaseClusterRegionServer.html | 174 +-
...BaseCluster.SingleFileSystemShutdownThread.html | 174 +-
.../org/apache/hadoop/hbase/MiniHBaseCluster.html | 174 +-
.../src-html/org/apache/hadoop/hbase/Server.html | 126 +-
.../hbase/backup/BackupInfo.BackupPhase.html | 915 +-
.../hbase/backup/BackupInfo.BackupState.html | 915 +-
.../hadoop/hbase/backup/BackupInfo.Filter.html | 915 +-
.../org/apache/hadoop/hbase/backup/BackupInfo.html | 915 +-
.../hadoop/hbase/backup/impl/BackupManager.html | 1011 +-
.../impl/BackupManifest.BackupImage.Builder.html | 20 +-
.../backup/impl/BackupManifest.BackupImage.html | 20 +-
.../hadoop/hbase/backup/impl/BackupManifest.html | 20 +-
.../backup/impl/BackupSystemTable.WALItem.html | 3745 ++--
.../hbase/backup/impl/BackupSystemTable.html | 3745 ++--
.../hbase/backup/impl/FullTableBackupClient.html | 414 +-
.../IncrementalBackupManager.NewestLogFilter.html | 622 +-
.../backup/impl/IncrementalBackupManager.html | 622 +-
.../backup/impl/IncrementalTableBackupClient.html | 826 +-
.../hbase/backup/impl/TableBackupClient.Stage.html | 805 +-
.../hbase/backup/impl/TableBackupClient.html | 805 +-
.../hbase/backup/master/BackupLogCleaner.html | 262 +-
.../hadoop/hbase/backup/util/BackupUtils.html | 1431 +-
.../ipc/AnnotationReadingPriorityFunction.html | 6 +-
.../apache/hadoop/hbase/ipc/NettyRpcServer.html | 315 +-
.../master/HMaster.TableDescriptorGetter.html | 7648 +++----
.../org/apache/hadoop/hbase/master/HMaster.html | 7648 +++----
.../MasterRpcServices.BalanceSwitchMode.html | 6740 +++---
.../hadoop/hbase/master/MasterRpcServices.html | 6740 +++---
.../hbase/master/http/MasterDumpServlet.html | 198 +-
.../HRegionServer.CompactionChecker.html | 7350 +++----
.../HRegionServer.MovedRegionInfo.html | 7350 +++----
.../HRegionServer.PeriodicMemStoreFlusher.html | 7350 +++----
.../HRegionServer.SystemExitWhenAbortTimeout.html | 7350 +++----
.../hadoop/hbase/regionserver/HRegionServer.html | 7350 +++----
...perImpl.RegionServerMetricsWrapperRunnable.html | 12 +-
.../MetricsRegionServerWrapperImpl.html | 12 +-
.../RSRpcServices.RegionScannerCloseCallBack.html | 7826 ++++---
.../RSRpcServices.RegionScannerHolder.html | 7826 ++++---
...RSRpcServices.RegionScannerShippedCallBack.html | 7826 ++++---
.../RSRpcServices.RegionScannersCloseCallBack.html | 7826 ++++---
.../RSRpcServices.ScannerListener.html | 7826 ++++---
.../hadoop/hbase/regionserver/RSRpcServices.html | 7826 ++++---
.../regionserver/ReplicationSource.html | 1584 +-
.../security/access/AccessChecker.InputUser.html | 46 +-
.../hbase/security/access/AccessChecker.html | 46 +-
.../hbase/util/NettyEventLoopGroupConfig.html | 102 +-
.../org/apache/hadoop/hbase/util/OOMEChecker.html | 122 +
downloads.html | 2 +-
export_control.html | 2 +-
index.html | 2 +-
issue-tracking.html | 2 +-
mail-lists.html | 2 +-
metrics.html | 2 +-
old_news.html | 2 +-
plugin-management.html | 2 +-
plugins.html | 2 +-
poweredbyhbase.html | 2 +-
project-info.html | 2 +-
project-reports.html | 2 +-
project-summary.html | 2 +-
pseudo-distributed.html | 2 +-
replication.html | 2 +-
resources.html | 2 +-
source-repository.html | 2 +-
sponsors.html | 2 +-
supportingprojects.html | 2 +-
team-list.html | 2 +-
testdevapidocs/allclasses-frame.html | 1 -
testdevapidocs/allclasses-noframe.html | 1 -
testdevapidocs/index-all.html | 34 +-
.../hbase/HBaseTestingUtil.SeenRowTracker.html | 20 +-
.../org/apache/hadoop/hbase/HBaseTestingUtil.html | 508 +-
...sHBaseCluster.MiniHBaseClusterRegionServer.html | 41 +-
.../hadoop/hbase/SingleProcessHBaseCluster.html | 12 +-
...lientOperationTimeout.DelayedRSRpcServices.html | 23 +-
...ClientOperationTimeout.DelayedRegionServer.html | 41 +-
.../hbase/TestLocalHBaseCluster.MyHMaster.html | 27 +-
.../TestLocalHBaseCluster.MyHRegionServer.html | 41 +-
...estBackupBase.FullTableBackupClientForTest.html | 8 +-
...upBase.IncrementalTableBackupClientForTest.html | 8 +-
.../apache/hadoop/hbase/backup/TestBackupBase.html | 133 +-
.../hbase/backup/TestBackupBoundaryTests.html | 4 +-
.../hadoop/hbase/backup/TestBackupDelete.html | 4 +-
.../hbase/backup/TestBackupDeleteRestore.html | 4 +-
.../hbase/backup/TestBackupDeleteWithFailures.html | 4 +-
.../hadoop/hbase/backup/TestBackupDescribe.html | 4 +-
.../hadoop/hbase/backup/TestBackupMerge.html | 4 +-
.../hbase/backup/TestBackupMultipleDeletes.html | 4 +-
.../hadoop/hbase/backup/TestBackupRepair.html | 4 +-
.../hadoop/hbase/backup/TestBackupShowHistory.html | 4 +-
.../hadoop/hbase/backup/TestBackupSmallTests.html | 4 +-
.../hbase/backup/TestBackupStatusProgress.html | 4 +-
.../hadoop/hbase/backup/TestBackupSystemTable.html | 106 +-
.../apache/hadoop/hbase/backup/TestFullBackup.html | 4 +-
.../hadoop/hbase/backup/TestFullBackupSet.html | 4 +-
.../hbase/backup/TestFullBackupSetRestoreSet.html | 4 +-
.../hbase/backup/TestFullBackupWithFailures.html | 4 +-
.../hadoop/hbase/backup/TestFullRestore.html | 4 +-
.../hadoop/hbase/backup/TestIncrementalBackup.html | 4 +-
.../backup/TestIncrementalBackupDeleteTable.html | 4 +-
.../TestIncrementalBackupMergeWithFailures.html | 4 +-
.../backup/TestIncrementalBackupWithBulkLoad.html | 4 +-
.../backup/TestIncrementalBackupWithFailures.html | 4 +-
.../hadoop/hbase/backup/TestRemoteBackup.html | 4 +-
.../hadoop/hbase/backup/TestRemoteRestore.html | 4 +-
.../hbase/backup/TestRepairAfterFailedDelete.html | 4 +-
.../hbase/backup/TestRestoreBoundaryTests.html | 4 +-
.../hbase/backup/TestSystemTableSnapshot.html | 4 +-
.../hbase/backup/master/TestBackupLogCleaner.html | 49 +-
.../hadoop/hbase/class-use/HBaseClassTestRule.html | 62 +-
.../hadoop/hbase/class-use/HBaseTestingUtil.html | 14 +-
...nerRPCTimeout.RSRpcServicesWithScanTimeout.html | 23 +-
...nnerRPCTimeout.RegionServerWithScanTimeout.html | 41 +-
...taReplicaAssigment.BrokenMetaReplicaMaster.html | 27 +-
.../client/TestMetaCache.FakeRSRpcServices.html | 23 +-
...tMetaCache.RegionServerWithFakeRpcServices.html | 41 +-
.../hadoop/hbase/client/TestTableFavoredNodes.html | 6 +-
.../apache/hadoop/hbase/client/package-tree.html | 22 +-
...ifoRpcScheduler.MockMasterFifoRpcScheduler.html | 6 +-
.../hbase/ipc/TestMasterFifoRpcScheduler.html | 39 +-
.../hadoop/hbase/master/AbstractTestDLS.html | 66 +-
.../hadoop/hbase/master/AlwaysStandByHMaster.html | 27 +-
.../TestCloseAnOpeningRegion.MockHMaster.html | 27 +-
.../TestClusterRestartFailover.HMasterForTest.html | 27 +-
.../master/TestGetReplicationLoad.MyMaster.html | 75 +-
.../hbase/master/TestGetReplicationLoad.html | 6 +-
.../hbase/master/TestMasterMetrics.MyMaster.html | 58 +-
.../master/TestMasterMetrics.MyRegionServer.html | 47 +-
.../hadoop/hbase/master/TestMasterMetrics.html | 26 +-
.../hadoop/hbase/master/TestMasterNoCluster.html | 4 +-
.../hbase/master/TestMasterNotCarryTable.html | 396 -
.../TestMasterOperationsForRegionReplicas.html | 4 +-
.../TestMetaShutdownHandler.MyRegionServer.html | 41 +-
...stRegionsRecoveryConfigManager.TestHMaster.html | 27 +-
...stRetainAssignmentOnRestart.HMasterForTest.html | 27 +-
.../hadoop/hbase/master/TestRollingRestart.html | 6 +-
.../TestShutdownBackupMaster.MockHMaster.html | 27 +-
...itializedRegionServer.RSRpcServicesForTest.html | 23 +-
...nitializedRegionServer.RegionServerForTest.html | 41 +-
...tOpenRegionProcedureBackoff.HMasterForTest.html | 27 +-
...TestOpenRegionProcedureHang.HMasterForTest.html | 27 +-
.../TestRaceBetweenSCPAndDTP.HMasterForTest.html | 27 +-
.../TestRaceBetweenSCPAndTRSP.HMasterForTest.html | 27 +-
...gnedToMultipleRegionServers.HMasterForTest.html | 27 +-
...TestReportOnlineRegionsRace.HMasterForTest.html | 27 +-
...ateTransitionFromDeadServer.HMasterForTest.html | 27 +-
...tRegionStateTransitionRetry.HMasterForTest.html | 27 +-
.../TestSCPGetRegionsRace.HMasterForTest.html | 27 +-
...stWakeUpUnexpectedProcedure.HMasterForTest.html | 27 +-
.../TestWakeUpUnexpectedProcedure.RSForTest.html | 41 +-
...UpUnexpectedProcedure.RSRpcServicesForTest.html | 23 +-
.../hbase/master/assignment/package-tree.html | 22 +-
.../hbase/master/http/TestMasterStatusServlet.html | 28 +-
.../apache/hadoop/hbase/master/package-frame.html | 1 -
.../hadoop/hbase/master/package-summary.html | 84 +-
.../apache/hadoop/hbase/master/package-tree.html | 7 +-
...terPeerWorkerWhenRestarting.HMasterForTest.html | 27 +-
.../hbase/master/replication/package-tree.html | 2 +-
.../hbase/namequeues/TestSlowLogAccessor.html | 28 +-
.../org/apache/hadoop/hbase/package-tree.html | 36 +-
.../hadoop/hbase/procedure2/package-tree.html | 4 +-
.../hbase/regionserver/OOMERegionServer.html | 41 +-
...ctionInDeadRegionServer.IgnoreYouAreDeadRS.html | 41 +-
.../hbase/regionserver/TestMultiLogThreshold.html | 2 +-
...henInitializing.RegisterAndDieRegionServer.html | 41 +-
...stRegionMergeTransactionOnCluster.MyMaster.html | 33 +-
...geTransactionOnCluster.MyMasterRpcServices.html | 44 +-
...TestRegionServerAbort.ErrorThrowingHRegion.html | 8 +-
...gionServerAbort.StopBlockingRegionObserver.html | 22 +-
.../hbase/regionserver/TestRegionServerAbort.html | 28 +-
.../regionserver/TestRegionServerNoMaster.html | 4 +-
...stRegionServerReportForDuty.MyRegionServer.html | 41 +-
...ServerReportForDuty.NeverInitializedMaster.html | 27 +-
...erHeartbeatMessages.HeartbeatHRegionServer.html | 41 +-
...nnerHeartbeatMessages.HeartbeatRPCServices.html | 23 +-
...PCScanMetrics.RSRPCServicesWithScanMetrics.html | 23 +-
...RPCScanMetrics.RegionServerWithScanMetrics.html | 41 +-
.../TestShutdownWhileWALBroken.MyRegionServer.html | 41 +-
.../TestSplitTransactionOnCluster.MyMaster.html | 33 +-
...itTransactionOnCluster.MyMasterRpcServices.html | 44 +-
.../hadoop/hbase/regionserver/package-tree.html | 40 +-
.../TestClaimReplicationQueue.HMasterForTest.html | 27 +-
.../TestReplicationProcedureRetry.MockHMaster.html | 27 +-
.../hadoop/hbase/replication/package-tree.html | 2 +-
...leRegionServerRestarts.RegionServerForTest.html | 41 +-
...eplicationSource.ShutdownDelayRegionServer.html | 41 +-
.../replication/regionserver/package-tree.html | 6 +-
.../TestMigrateRSGroupInfo.HMasterForTest.html | 31 +-
.../apache/hadoop/hbase/rsgroup/package-tree.html | 2 +-
.../org/apache/hadoop/hbase/test/package-tree.html | 4 +-
.../org/apache/hadoop/hbase/wal/package-tree.html | 2 +-
testdevapidocs/overview-tree.html | 45 +-
.../hbase/HBaseTestingUtil.SeenRowTracker.html | 7416 ++++---
.../org/apache/hadoop/hbase/HBaseTestingUtil.html | 7416 ++++---
...sHBaseCluster.MiniHBaseClusterRegionServer.html | 178 +-
...BaseCluster.SingleFileSystemShutdownThread.html | 178 +-
.../hadoop/hbase/SingleProcessHBaseCluster.html | 178 +-
.../hbase/TestMetaUpdatesGoToPriorityQueue.html | 35 +-
...estBackupBase.FullTableBackupClientForTest.html | 961 +-
...upBase.IncrementalTableBackupClientForTest.html | 961 +-
.../apache/hadoop/hbase/backup/TestBackupBase.html | 961 +-
.../hadoop/hbase/backup/TestBackupSystemTable.html | 947 +-
.../hbase/backup/master/TestBackupLogCleaner.html | 241 +-
.../hbase/client/TestSeparateClientZKCluster.html | 4 +-
.../hadoop/hbase/client/TestTableFavoredNodes.html | 200 +-
...ifoRpcScheduler.MockMasterFifoRpcScheduler.html | 251 +-
.../hbase/ipc/TestMasterFifoRpcScheduler.html | 251 +-
.../hadoop/hbase/master/AbstractTestDLS.html | 1082 +-
.../hbase/master/TestGetLastFlushedSequenceId.html | 34 +-
.../master/TestGetReplicationLoad.MyMaster.html | 185 +-
.../hbase/master/TestGetReplicationLoad.html | 185 +-
.../hbase/master/TestMasterMetrics.MyMaster.html | 324 +-
.../master/TestMasterMetrics.MyRegionServer.html | 324 +-
.../hadoop/hbase/master/TestMasterMetrics.html | 324 +-
.../hbase/master/TestMasterNotCarryTable.html | 153 -
.../hadoop/hbase/master/TestMasterQosFunction.html | 7 +-
.../hadoop/hbase/master/TestRollingRestart.html | 109 +-
.../TestWakeUpUnexpectedProcedure.AMForTest.html | 2 +-
...stWakeUpUnexpectedProcedure.HMasterForTest.html | 2 +-
.../TestWakeUpUnexpectedProcedure.RSForTest.html | 2 +-
...UpUnexpectedProcedure.RSRpcServicesForTest.html | 2 +-
.../TestWakeUpUnexpectedProcedure.SMForTest.html | 2 +-
.../assignment/TestWakeUpUnexpectedProcedure.html | 2 +-
.../hbase/master/http/TestMasterStatusServlet.html | 236 +-
.../hbase/namequeues/TestSlowLogAccessor.html | 381 +-
.../TestMultiLogThreshold.ActionType.html | 75 +-
.../TestMultiLogThreshold.LevelAndMessage.html | 75 +-
.../hbase/regionserver/TestMultiLogThreshold.html | 75 +-
.../hbase/regionserver/TestMutateRowsRecovery.html | 2 +-
...stRegionMergeTransactionOnCluster.MyMaster.html | 2 +-
...geTransactionOnCluster.MyMasterRpcServices.html | 2 +-
.../TestRegionMergeTransactionOnCluster.html | 2 +-
...TestRegionServerAbort.ErrorThrowingHRegion.html | 443 +-
...gionServerAbort.StopBlockingRegionObserver.html | 443 +-
.../hbase/regionserver/TestRegionServerAbort.html | 443 +-
.../regionserver/TestRegionServerNoMaster.html | 177 +-
...PCScanMetrics.RSRPCServicesWithScanMetrics.html | 2 +-
...RPCScanMetrics.RegionServerWithScanMetrics.html | 2 +-
.../regionserver/TestScannerRPCScanMetrics.html | 2 +-
...plitTransactionOnCluster.CustomSplitPolicy.html | 2 +-
...actionOnCluster.FailingSplitMasterObserver.html | 2 +-
.../TestSplitTransactionOnCluster.MyMaster.html | 2 +-
...itTransactionOnCluster.MyMasterRpcServices.html | 2 +-
.../TestSplitTransactionOnCluster.html | 2 +-
.../hbase/replication/TestReplicationStatus.html | 2 +-
438 files changed, 112458 insertions(+), 114158 deletions(-)
diff --git a/acid-semantics.html b/acid-semantics.html
index 45c385a..b87393e 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -456,7 +456,7 @@
<div class="row">
<p>Copyright ©2007–2021
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2021-09-10</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2021-09-13</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index af24872..477a4b0 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 1.5.3, based on Prawn 2.2.2)
/Producer (Apache HBase Team)
-/ModDate (D:20210910200602+00'00')
-/CreationDate (D:20210910201734+00'00')
+/ModDate (D:20210913200552+00'00')
+/CreationDate (D:20210913201711+00'00')
>>
endobj
2 0 obj
diff --git a/apidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html b/apidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 5d7bd9f..64f79cd 100644
--- a/apidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/apidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -125,7 +125,7 @@ var activeTableTab = "activeTableTab";
<br>
<pre>@InterfaceAudience.Public
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.173">HBaseTestingUtility</a>
+public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.172">HBaseTestingUtility</a>
extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a></pre>
<div class="block">Facility for testing HBase. Replacement for
old HBaseTestCase and HBaseClusterTestCase functionality.
@@ -2178,7 +2178,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>REGIONS_PER_SERVER_KEY</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.185">REGIONS_PER_SERVER_KEY</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.184">REGIONS_PER_SERVER_KEY</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -2192,7 +2192,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_REGIONS_PER_SERVER</h4>
-<pre>public static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.190">DEFAULT_REGIONS_PER_SERVER</a></pre>
+<pre>public static final int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.189">DEFAULT_REGIONS_PER_SERVER</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">The default number of regions per regionserver when creating a pre-split
table.</div>
@@ -2208,7 +2208,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>PRESPLIT_TEST_TABLE_KEY</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.193">PRESPLIT_TEST_TABLE_KEY</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.192">PRESPLIT_TEST_TABLE_KEY</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -2222,7 +2222,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>PRESPLIT_TEST_TABLE</h4>
-<pre>public static final boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.194">PRESPLIT_TEST_TABLE</a></pre>
+<pre>public static final boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.193">PRESPLIT_TEST_TABLE</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -2236,7 +2236,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>MEMSTORETS_TAGS_PARAMETRIZED</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.216">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.215">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">This is for unit tests parameterized with a single boolean.</div>
</li>
@@ -2247,7 +2247,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>BLOOM_AND_COMPRESSION_COMBINATIONS</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.292">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.291">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2257,7 +2257,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>fam1</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1877">fam1</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1876">fam1</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2267,7 +2267,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>fam2</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1878">fam2</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1877">fam2</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2277,7 +2277,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>fam3</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1879">fam3</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1878">fam3</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2287,7 +2287,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>COLUMNS</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1880">COLUMNS</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1879">COLUMNS</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2297,7 +2297,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>FIRST_CHAR</h4>
-<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1883">FIRST_CHAR</a></pre>
+<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1882">FIRST_CHAR</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -2311,7 +2311,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>LAST_CHAR</h4>
-<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1884">LAST_CHAR</a></pre>
+<pre>public static final char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1883">LAST_CHAR</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -2325,7 +2325,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>START_KEY_BYTES</h4>
-<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1885">START_KEY_BYTES</a></pre>
+<pre>public static final byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1884">START_KEY_BYTES</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2335,7 +2335,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>START_KEY</h4>
-<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1886">START_KEY</a></pre>
+<pre>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1885">START_KEY</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2345,7 +2345,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>ROWS</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2432">ROWS</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2431">ROWS</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">All the row values for the data loaded by <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>loadTable(Table, byte[])</code></a></div>
</li>
@@ -2356,7 +2356,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>KEYS</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2447">KEYS</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2446">KEYS</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2366,7 +2366,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockListLast">
<li class="blockList">
<h4>KEYS_FOR_HBA_CREATE_TABLE</h4>
-<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2459">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
+<pre>public static final byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2458">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2384,7 +2384,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>HBaseTestingUtility</h4>
-<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.303">HBaseTestingUtility</a>()</pre>
+<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.302">HBaseTestingUtility</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block"><p>Create an HBaseTestingUtility using a default configuration.
@@ -2399,7 +2399,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockListLast">
<li class="blockList">
<h4>HBaseTestingUtility</h4>
-<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.316">HBaseTestingUtility</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.315">HBaseTestingUtility</a>(org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block"><p>Create an HBaseTestingUtility using a given configuration.
@@ -2426,7 +2426,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>available</h4>
-<pre>public static boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.224">available</a>(int port)</pre>
+<pre>public static boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.223">available</a>(int port)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Checks to see if a specific port is available.</div>
<dl>
@@ -2443,7 +2443,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>memStoreTSTagsAndOffheapCombination</h4>
-<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.279">memStoreTSTagsAndOffheapCombination</a>()</pre>
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.278">memStoreTSTagsAndOffheapCombination</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2453,7 +2453,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>closeRegionAndWAL</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.345">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.Region r)
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.344">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.Region r)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Close both the region <code>r</code> and it's underlying WAL. For use in tests.</div>
@@ -2469,7 +2469,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>closeRegionAndWAL</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.352">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.HRegion r)
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.351">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.HRegion r)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Close both the HRegion <code>r</code> and it's underlying WAL. For use in tests.</div>
@@ -2485,7 +2485,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>getConfiguration</h4>
-<pre>public org.apache.hadoop.conf.Configuration <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.371">getConfiguration</a>()</pre>
+<pre>public org.apache.hadoop.conf.Configuration <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.370">getConfiguration</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns this classes's instance of <code>Configuration</code>. Be careful how
you use the returned Configuration since <a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a> instances
@@ -2509,7 +2509,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>setHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.375">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> hbaseCluster)</pre>
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.374">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> hbaseCluster)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2519,7 +2519,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>setupDataTestDir</h4>
-<pre>protected org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.396">setupDataTestDir</a>()</pre>
+<pre>protected org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.395">setupDataTestDir</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Home our data in a dir under <a href="../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html#DEFAULT_BASE_TEST_DIRECTORY"><code>HBaseCommonTestingUtility.DEFAULT_BASE_TEST_DIRECTORY</code></a>.
Give it a random name so can have many concurrent tests running if
@@ -2547,7 +2547,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>getDataTestDirOnTestFS</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.462">getDataTestDirOnTestFS</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.461">getDataTestDirOnTestFS</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
@@ -2567,7 +2567,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>getDataTestDirOnTestFS</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.477">getDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> subdirName)
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.476">getDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> subdirName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
@@ -2589,7 +2589,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.522">cleanupDataTestDirOnTestFS</a>()
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.521">cleanupDataTestDirOnTestFS</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Cleans the test data directory on the test filesystem.</div>
@@ -2607,7 +2607,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.534">cleanupDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> subdirName)
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.533">cleanupDataTestDirOnTestFS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> subdirName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Cleans a subdirectory under the test data directory on the test filesystem.</div>
@@ -2625,7 +2625,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.546">startMiniDFSCluster</a>(int servers)
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.545">startMiniDFSCluster</a>(int servers)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Start a minidfscluster.</div>
@@ -2647,7 +2647,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.561">startMiniDFSCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] hosts)
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.560">startMiniDFSCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] hosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Start a minidfscluster.
@@ -2673,7 +2673,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.579">startMiniDFSCluster</a>(int servers,
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.578">startMiniDFSCluster</a>(int servers,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] hosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -2698,7 +2698,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.596">startMiniDFSCluster</a>(int servers,
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.595">startMiniDFSCluster</a>(int servers,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] racks,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] hosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2715,7 +2715,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniDFSClusterForTestWAL</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.624">startMiniDFSClusterForTestWAL</a>(int namenodePort)
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.623">startMiniDFSClusterForTestWAL</a>(int namenodePort)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -2730,7 +2730,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>isNewVersionBehaviorEnabled</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.690">isNewVersionBehaviorEnabled</a>()</pre>
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.689">isNewVersionBehaviorEnabled</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating
new column families. Default to false.</div>
@@ -2742,7 +2742,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>isReadShortCircuitOn</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.704">isReadShortCircuitOn</a>()</pre>
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.703">isReadShortCircuitOn</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.
This allows to specify this parameter on the command line.
@@ -2755,7 +2755,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniDFSCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.750">shutdownMiniDFSCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.749">shutdownMiniDFSCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Shuts down instance created by call to <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniDFSCluster-int-"><code>startMiniDFSCluster(int)</code></a>
@@ -2773,7 +2773,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.772">startMiniCluster</a>(boolean createWALDir)
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.771">startMiniCluster</a>(boolean createWALDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use
<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -2800,7 +2800,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.791">startMiniCluster</a>(int numSlaves,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.790">startMiniCluster</a>(int numSlaves,
boolean createRootDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use
@@ -2829,7 +2829,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.812">startMiniCluster</a>(int numSlaves,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.811">startMiniCluster</a>(int numSlaves,
boolean createRootDir,
boolean createWALDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2860,7 +2860,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.834">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.833">startMiniCluster</a>(int numMasters,
int numSlaves,
boolean createRootDir)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2891,7 +2891,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.855">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.854">startMiniCluster</a>(int numMasters,
int numSlaves)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use
@@ -2920,7 +2920,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.877">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.876">startMiniCluster</a>(int numMasters,
int numSlaves,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] dataNodeHosts,
boolean createRootDir)
@@ -2954,7 +2954,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.900">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.899">startMiniCluster</a>(int numMasters,
int numSlaves,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] dataNodeHosts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -2986,7 +2986,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.922">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.921">startMiniCluster</a>(int numMasters,
int numRegionServers,
int numDataNodes)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -3017,7 +3017,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.947">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.946">startMiniCluster</a>(int numMasters,
int numSlaves,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] dataNodeHosts,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends org.apache.hadoop.hbase.master.HMaster> masterClass,
@@ -3053,7 +3053,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.977">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.976">startMiniCluster</a>(int numMasters,
int numRegionServers,
int numDataNodes,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] dataNodeHosts,
@@ -3091,7 +3091,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1009">startMiniCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1008">startMiniCluster</a>(int numMasters,
int numRegionServers,
int numDataNodes,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] dataNodeHosts,
@@ -3132,7 +3132,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1029">startMiniCluster</a>(int numSlaves)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1028">startMiniCluster</a>(int numSlaves)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.
@@ -3154,7 +3154,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1041">startMiniCluster</a>()
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1040">startMiniCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Start up a minicluster of hbase, dfs and zookeeper all using default options.
@@ -3174,7 +3174,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1051">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1050">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.
@@ -3194,7 +3194,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1088">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1087">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3218,7 +3218,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1140">startMiniHBaseCluster</a>()
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1139">startMiniHBaseCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3241,7 +3241,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1158">startMiniHBaseCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1157">startMiniHBaseCluster</a>(int numMasters,
int numRegionServers)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -3273,7 +3273,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1180">startMiniHBaseCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1179">startMiniHBaseCluster</a>(int numMasters,
int numRegionServers,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> rsPorts)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -3307,7 +3307,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>startMiniHBaseCluster</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1206">startMiniHBaseCluster</a>(int numMasters,
+public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1205">startMiniHBaseCluster</a>(int numMasters,
int numRegionServers,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> rsPorts,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends org.apache.hadoop.hbase.master.HMaster> masterClass,
@@ -3348,7 +3348,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>restartHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1222">restartHBaseCluster</a>(int servers)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1221">restartHBaseCluster</a>(int servers)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3369,7 +3369,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>restartHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1226">restartHBaseCluster</a>(int servers,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1225">restartHBaseCluster</a>(int servers,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> ports)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -3387,7 +3387,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>restartHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1234">restartHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1233">restartHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a> option)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3404,7 +3404,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>getMiniHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1259">getMiniHBaseCluster</a>()</pre>
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1258">getMiniHBaseCluster</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -3421,7 +3421,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1271">shutdownMiniCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1270">shutdownMiniCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Stops mini hbase, zk, and hdfs clusters.</div>
@@ -3439,7 +3439,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1286">shutdownMiniHBaseCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1285">shutdownMiniHBaseCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.</div>
@@ -3455,7 +3455,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>killMiniHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1304">killMiniHBaseCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1303">killMiniHBaseCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.</div>
@@ -3471,7 +3471,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>getDefaultRootDirPath</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1332">getDefaultRootDirPath</a>(boolean create)
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1331">getDefaultRootDirPath</a>(boolean create)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns the path to the default root dir the minicluster uses. If <code>create</code>
@@ -3492,7 +3492,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>getDefaultRootDirPath</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1347">getDefaultRootDirPath</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1346">getDefaultRootDirPath</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Same as {<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getDefaultRootDirPath-boolean-"><code>getDefaultRootDirPath(boolean create)</code></a>
@@ -3512,7 +3512,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1363">createRootDir</a>(boolean create)
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1362">createRootDir</a>(boolean create)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Creates an hbase rootdir in user home directory. Also creates hbase
@@ -3538,7 +3538,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1378">createRootDir</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1377">createRootDir</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Same as <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#createRootDir-boolean-"><code>createRootDir(boolean create)</code></a>
@@ -3557,7 +3557,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createWALRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1391">createWALRootDir</a>()
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1390">createWALRootDir</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Creates a hbase walDir in the user's home directory.
@@ -3578,7 +3578,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>flush</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1413">flush</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1412">flush</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Flushes all caches in the mini hbase cluster</div>
@@ -3594,7 +3594,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>flush</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1421">flush</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1420">flush</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Flushes all caches in the mini hbase cluster</div>
@@ -3610,7 +3610,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>compact</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1429">compact</a>(boolean major)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1428">compact</a>(boolean major)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Compact all regions in the mini hbase cluster</div>
@@ -3626,7 +3626,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>compact</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1437">compact</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1436">compact</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
boolean major)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3643,7 +3643,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1448">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1447">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> family)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3665,7 +3665,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1460">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1459">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] families)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3687,7 +3687,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1476">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1475">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3709,7 +3709,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createMultiRegionTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1489">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1488">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family,
int numRegions)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3733,7 +3733,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1506">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1505">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3755,7 +3755,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createMultiRegionTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1518">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1517">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3777,7 +3777,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createMultiRegionTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1530">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1529">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
int replicaCount,
byte[][] families)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3801,7 +3801,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1543">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1542">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
byte[][] splitKeys)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3825,7 +3825,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1557">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1556">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
byte[][] splitKeys,
int replicaCount)
@@ -3851,7 +3851,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1563">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1562">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
int numVersions,
byte[] startKey,
@@ -3871,7 +3871,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1579">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1578">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
byte[][] families,
org.apache.hadoop.conf.Configuration c)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3893,7 +3893,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1593">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1592">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
byte[][] families,
byte[][] splitKeys,
org.apache.hadoop.conf.Configuration c)
@@ -3919,7 +3919,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1613">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1612">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
byte[][] families,
byte[][] splitKeys,
<a href="../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a> type,
@@ -3949,7 +3949,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1644">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1643">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
byte[][] splitRows)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -3971,7 +3971,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1673">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1672">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
byte[][] splitKeys,
int replicaCount,
@@ -3999,7 +3999,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1684">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1683">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family,
int numVersions)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4019,7 +4019,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1692">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1691">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
int numVersions)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4039,7 +4039,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1701">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1700">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
int numVersions,
byte[][] splitKeys)
@@ -4060,7 +4060,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createMultiRegionTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1727">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1726">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
int numVersions)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4080,7 +4080,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1736">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1735">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
int numVersions,
int blockSize)
@@ -4101,7 +4101,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1754">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1753">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
int numVersions,
int blockSize,
@@ -4120,7 +4120,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1779">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1778">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
int[] numVersions)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4140,7 +4140,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1803">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1802">createTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family,
byte[][] splitRows)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4160,7 +4160,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<ul class="blockList">
<li class="blockList">
<h4>createMultiRegionTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1822">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1821">createMultiRegionTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4180,7 +4180,7 @@ public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
<li class="blockList">
<h4>modifyTableSync</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1834">modifyTableSync</a>(<a href="../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin,
+public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1833">modifyTableSync</a>(<a href="../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> desc)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -4203,7 +4203,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>setReplicas</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1842">setReplicas</a>(<a href="../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin,
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1841">setReplicas</a>(<a href="../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> admin,
<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
int replicaCount)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -4223,7 +4223,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>deleteTable</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1853">deleteTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1852">deleteTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Drop an existing table</div>
@@ -4241,7 +4241,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>deleteTableIfAny</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1866">deleteTableIfAny</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1865">deleteTableIfAny</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Drop an existing table</div>
@@ -4259,7 +4259,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createModifyableTableDescriptor</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1888">createModifyableTableDescriptor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1887">createModifyableTableDescriptor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -4269,7 +4269,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createTableDescriptor</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1894">createTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> name,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1893">createTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> name,
int minVersions,
int versions,
int ttl,
@@ -4283,7 +4283,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createModifyableTableDescriptor</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1909">createModifyableTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> name,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1908">createModifyableTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> name,
int minVersions,
int versions,
int ttl,
@@ -4297,7 +4297,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createTableDescriptor</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1929">createTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> name)</pre>
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1928">createTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> name)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Create a table of name <code>name</code>.</div>
<dl>
@@ -4314,7 +4314,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createTableDescriptor</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1934">createTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1933">createTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
@@ -4325,7 +4325,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createTableDescriptor</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1938">createTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1937">createTableDescriptor</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] families,
int maxVersions)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4337,7 +4337,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createLocalHRegion</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1959">createLocalHRegion</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> desc,
+<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1958">createLocalHRegion</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> desc,
byte[] startKey,
byte[] endKey)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4361,7 +4361,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createLocalHRegion</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1970">createLocalHRegion</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
+<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1969">createLocalHRegion</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> desc)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4379,7 +4379,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createLocalHRegion</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1983">createLocalHRegion</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
+<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1982">createLocalHRegion</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> desc,
org.apache.hadoop.hbase.wal.WAL wal)
@@ -4405,7 +4405,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createLocalHRegion</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1998">createLocalHRegion</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1997">createLocalHRegion</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] startKey,
byte[] stopKey,
org.apache.hadoop.conf.Configuration conf,
@@ -4436,7 +4436,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createLocalHRegionWithInMemoryFlags</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2005">createLocalHRegionWithInMemoryFlags</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2004">createLocalHRegionWithInMemoryFlags</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] startKey,
byte[] stopKey,
org.apache.hadoop.conf.Configuration conf,
@@ -4459,7 +4459,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>deleteTableData</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2040">deleteTableData</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2039">deleteTableData</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Provide an existing table name to truncate.
@@ -4480,7 +4480,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>truncateTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2060">truncateTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2059">truncateTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
boolean preserveRegions)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4503,7 +4503,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>truncateTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2079">truncateTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2078">truncateTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Truncate a table using the admin command.
@@ -4527,7 +4527,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadTable</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2090">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2089">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
byte[] f)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4549,7 +4549,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadTable</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2101">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2100">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
byte[] f,
boolean writeToWAL)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4572,7 +4572,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadTable</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2112">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2111">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
byte[][] f)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4594,7 +4594,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadTable</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2124">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2123">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
byte[][] f,
byte[] value)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4618,7 +4618,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadTable</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2136">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2135">loadTable</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
byte[][] f,
byte[] value,
boolean writeToWAL)
@@ -4643,7 +4643,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadRegion</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2204">loadRegion</a>(org.apache.hadoop.hbase.regionserver.HRegion r,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2203">loadRegion</a>(org.apache.hadoop.hbase.regionserver.HRegion r,
byte[] f)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4659,7 +4659,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadRegion</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2208">loadRegion</a>(org.apache.hadoop.hbase.regionserver.Region r,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2207">loadRegion</a>(org.apache.hadoop.hbase.regionserver.Region r,
byte[] f)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4675,7 +4675,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadRegion</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2220">loadRegion</a>(org.apache.hadoop.hbase.regionserver.HRegion r,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2219">loadRegion</a>(org.apache.hadoop.hbase.regionserver.HRegion r,
byte[] f,
boolean flush)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4699,7 +4699,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadNumericRows</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2257">loadNumericRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2256">loadNumericRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
byte[] f,
int startRow,
int endRow)
@@ -4717,7 +4717,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>loadRandomRows</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2267">loadRandomRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2266">loadRandomRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
byte[] f,
int rowSize,
int totalRows)
@@ -4735,7 +4735,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>verifyNumericRows</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2279">verifyNumericRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2278">verifyNumericRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
byte[] f,
int startRow,
int endRow,
@@ -4754,7 +4754,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>verifyNumericRows</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2301">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.Region region,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2300">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.Region region,
byte[] f,
int startRow,
int endRow)
@@ -4772,7 +4772,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>verifyNumericRows</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2306">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2305">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
byte[] f,
int startRow,
int endRow)
@@ -4790,7 +4790,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>verifyNumericRows</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2311">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.Region region,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2310">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.Region region,
byte[] f,
int startRow,
int endRow,
@@ -4809,7 +4809,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>verifyNumericRows</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2316">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2315">verifyNumericRows</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
byte[] f,
int startRow,
int endRow,
@@ -4828,7 +4828,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>deleteNumericRows</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2342">deleteNumericRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2341">deleteNumericRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> t,
byte[] f,
int startRow,
int endRow)
@@ -4846,7 +4846,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>countRows</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2357">countRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table)
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2356">countRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Return the number of rows in the given table.</div>
@@ -4866,7 +4866,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>countRows</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2361">countRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2360">countRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
<a href="../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> scan)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4882,7 +4882,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>countRows</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2371">countRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2370">countRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table,
byte[]... families)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4898,7 +4898,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>countRows</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2382">countRows</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2381">countRows</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Return the number of rows in the given table.</div>
@@ -4914,7 +4914,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>countRows</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2391">countRows</a>(org.apache.hadoop.hbase.regionserver.Region region)
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2390">countRows</a>(org.apache.hadoop.hbase.regionserver.Region region)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -4929,7 +4929,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>countRows</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2395">countRows</a>(org.apache.hadoop.hbase.regionserver.Region region,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2394">countRows</a>(org.apache.hadoop.hbase.regionserver.Region region,
<a href="../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> scan)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -4945,7 +4945,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>countRows</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2404">countRows</a>(org.apache.hadoop.hbase.regionserver.InternalScanner scanner)
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2403">countRows</a>(org.apache.hadoop.hbase.regionserver.InternalScanner scanner)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -4960,7 +4960,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>checksumRows</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2419">checksumRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table)
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2418">checksumRows</a>(<a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Return an md5 digest of the entire contents of a table.</div>
@@ -4976,7 +4976,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createMultiRegionsInMeta</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2481">createMultiRegionsInMeta</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2480">createMultiRegionsInMeta</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
byte[][] startKeys)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5002,7 +5002,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createWal</h4>
-<pre>public static org.apache.hadoop.hbase.wal.WAL <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2507">createWal</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static org.apache.hadoop.hbase.wal.WAL <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2506">createWal</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hadoop.fs.Path rootDir,
<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5020,7 +5020,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createRegionAndWAL</h4>
-<pre>public static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2521">createRegionAndWAL</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
+<pre>public static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2520">createRegionAndWAL</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
org.apache.hadoop.fs.Path rootDir,
org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd)
@@ -5040,7 +5040,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createRegionAndWAL</h4>
-<pre>public static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2530">createRegionAndWAL</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
+<pre>public static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2529">createRegionAndWAL</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
org.apache.hadoop.fs.Path rootDir,
org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
@@ -5061,7 +5061,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createRegionAndWAL</h4>
-<pre>public static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2542">createRegionAndWAL</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
+<pre>public static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2541">createRegionAndWAL</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
org.apache.hadoop.fs.Path rootDir,
org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
@@ -5082,7 +5082,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createRegionAndWAL</h4>
-<pre>public static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2555">createRegionAndWAL</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
+<pre>public static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2554">createRegionAndWAL</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> info,
org.apache.hadoop.fs.Path rootDir,
org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> htd,
@@ -5103,7 +5103,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>getMetaTableRows</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><byte[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2569">getMetaTableRows</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><byte[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2568">getMetaTableRows</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns all rows from the hbase:meta table.</div>
@@ -5119,7 +5119,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>getMetaTableRows</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><byte[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2589">getMetaTableRows</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><byte[]> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2588">getMetaTableRows</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns all rows from the hbase:meta table for a given user table</div>
@@ -5135,7 +5135,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>getOtherRegionServer</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegionServer <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2631">getOtherRegionServer</a>(org.apache.hadoop.hbase.regionserver.HRegionServer rs)</pre>
+<pre>public org.apache.hadoop.hbase.regionserver.HRegionServer <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2630">getOtherRegionServer</a>(org.apache.hadoop.hbase.regionserver.HRegionServer rs)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -5145,7 +5145,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>getRSForFirstRegionInTable</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegionServer <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2649">getRSForFirstRegionInTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public org.apache.hadoop.hbase.regionserver.HRegionServer <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2648">getRSForFirstRegionInTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5168,7 +5168,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>startMiniMapReduceCluster</h4>
-<pre>public org.apache.hadoop.mapred.MiniMRCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2687">startMiniMapReduceCluster</a>()
+<pre>public org.apache.hadoop.mapred.MiniMRCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2686">startMiniMapReduceCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Starts a <code>MiniMRCluster</code> with a default number of
@@ -5185,7 +5185,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>shutdownMiniMapReduceCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2797">shutdownMiniMapReduceCluster</a>()</pre>
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2796">shutdownMiniMapReduceCluster</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Stops the previously started <code>MiniMRCluster</code>.</div>
</li>
@@ -5196,7 +5196,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createMockRegionServerService</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.RegionServerServices <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2811">createMockRegionServerService</a>()
+<pre>public org.apache.hadoop.hbase.regionserver.RegionServerServices <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2810">createMockRegionServerService</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Create a stubbed out RegionServerService, mainly for getting FS.</div>
@@ -5212,7 +5212,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createMockRegionServerService</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.RegionServerServices <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2819">createMockRegionServerService</a>(org.apache.hadoop.hbase.ipc.RpcServerInterface rpc)
+<pre>public org.apache.hadoop.hbase.regionserver.RegionServerServices <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2818">createMockRegionServerService</a>(org.apache.hadoop.hbase.ipc.RpcServerInterface rpc)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Create a stubbed out RegionServerService, mainly for getting FS.
@@ -5229,7 +5229,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<ul class="blockList">
<li class="blockList">
<h4>createMockRegionServerService</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.RegionServerServices <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2831">createMockRegionServerService</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> name)
+<pre>public org.apache.hadoop.hbase.regionserver.RegionServerServices <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2830">createMockRegionServerService</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> name)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Create a stubbed out RegionServerService, mainly for getting FS.
@@ -5247,7 +5247,7 @@ public static void <a href="../../../../src-html/org/apache/hadoop/hba
<li class="blockList">
<h4>enableDebug</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2845">enableDebug</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> clazz)</pre>
+public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2844">enableDebug</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> clazz)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as
HBase only uses log4j. You should do this by your own as it you know which log
framework you are using then set the log level to debug is very easy.</span></div>
@@ -5264,7 +5264,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>expireMasterSession</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2853">expireMasterSession</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2852">expireMasterSession</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Expire the Master's session</div>
@@ -5280,7 +5280,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>expireRegionServerSession</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2862">expireRegionServerSession</a>(int index)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2861">expireRegionServerSession</a>(int index)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Expire a region server's session</div>
@@ -5298,7 +5298,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>expireSession</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2888">expireSession</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher nodeZK)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2887">expireSession</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher nodeZK)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -5313,7 +5313,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>expireSession</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2903">expireSession</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher nodeZK,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2902">expireSession</a>(org.apache.hadoop.hbase.zookeeper.ZKWatcher nodeZK,
boolean checkStatus)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5338,7 +5338,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getHBaseCluster</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2954">getHBaseCluster</a>()</pre>
+<pre>public <a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2953">getHBaseCluster</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Get the Mini HBase cluster.</div>
<dl>
@@ -5355,7 +5355,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getHBaseClusterInterface</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2966">getHBaseClusterInterface</a>()</pre>
+<pre>public <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2965">getHBaseClusterInterface</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns the HBaseCluster instance.
<p>Returned object can be any of the subclasses of HBaseCluster, and the
@@ -5371,7 +5371,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>invalidateConnection</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2981">invalidateConnection</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2980">invalidateConnection</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Resets the connections so that the next time getConnection() is called, a new connection is
@@ -5393,7 +5393,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getConnection</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2997">getConnection</a>()
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2996">getConnection</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Get a shared Connection to the cluster.
@@ -5412,7 +5412,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getConnection</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3007">getConnection</a>(<a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> user)
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3006">getConnection</a>(<a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> user)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Get a assigned Connection to the cluster.
@@ -5433,7 +5433,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getAsyncConnection</h4>
-<pre>public org.apache.hadoop.hbase.client.AsyncClusterConnection <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3016">getAsyncConnection</a>()
+<pre>public org.apache.hadoop.hbase.client.AsyncClusterConnection <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3015">getAsyncConnection</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Get a shared AsyncClusterConnection to the cluster.
@@ -5452,7 +5452,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getAsyncConnection</h4>
-<pre>public org.apache.hadoop.hbase.client.AsyncClusterConnection <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3040">getAsyncConnection</a>(<a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> user)
+<pre>public org.apache.hadoop.hbase.client.AsyncClusterConnection <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3039">getAsyncConnection</a>(<a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> user)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Get a assigned AsyncClusterConnection to the cluster.
@@ -5473,7 +5473,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>closeConnection</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3044">closeConnection</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3043">closeConnection</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -5488,7 +5488,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getAdmin</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3059">getAdmin</a>()
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3058">getAdmin</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns an Admin instance which is shared between HBaseTestingUtility instance users.
@@ -5505,7 +5505,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getHbck</h4>
-<pre>public org.apache.hadoop.hbase.client.Hbck <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3071">getHbck</a>()
+<pre>public org.apache.hadoop.hbase.client.Hbck <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3070">getHbck</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns an <code>Hbck</code> instance. Needs be closed when done.</div>
@@ -5521,7 +5521,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>unassignRegion</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3080">unassignRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regionName)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3079">unassignRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regionName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Unassign the named region.</div>
@@ -5539,7 +5539,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>unassignRegion</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3089">unassignRegion</a>(byte[] regionName)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3088">unassignRegion</a>(byte[] regionName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Unassign the named region.</div>
@@ -5557,7 +5557,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>unassignRegionByRow</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3099">unassignRegionByRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> row,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3098">unassignRegionByRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> row,
<a href="../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a> table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5577,7 +5577,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>unassignRegionByRow</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3110">unassignRegionByRow</a>(byte[] row,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3109">unassignRegionByRow</a>(byte[] row,
<a href="../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a> table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5597,7 +5597,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getSplittableRegion</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3121">getSplittableRegion</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3120">getSplittableRegion</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
int maxAttempts)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Retrieves a splittable region randomly from tableName</div>
@@ -5616,7 +5616,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getDFSCluster</h4>
-<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3153">getDFSCluster</a>()</pre>
+<pre>public org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3152">getDFSCluster</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -5626,7 +5626,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>setDFSCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3157">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster cluster)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3156">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster cluster)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5643,7 +5643,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>setDFSCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3169">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster cluster,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3168">setDFSCluster</a>(org.apache.hadoop.hdfs.MiniDFSCluster cluster,
boolean requireDown)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5666,7 +5666,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getTestFileSystem</h4>
-<pre>public org.apache.hadoop.fs.FileSystem <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3178">getTestFileSystem</a>()
+<pre>public org.apache.hadoop.fs.FileSystem <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3177">getTestFileSystem</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -5681,7 +5681,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitTableAvailable</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3189">waitTableAvailable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3188">waitTableAvailable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5702,7 +5702,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitTableAvailable</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3194">waitTableAvailable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3193">waitTableAvailable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
long timeoutMillis)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5720,7 +5720,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitTableAvailable</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3204">waitTableAvailable</a>(byte[] table,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3203">waitTableAvailable</a>(byte[] table,
long timeoutMillis)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5742,7 +5742,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>explainTableAvailability</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3209">explainTableAvailability</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3208">explainTableAvailability</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -5757,7 +5757,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>explainTableState</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3235">explainTableState</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3234">explainTableState</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
org.apache.hadoop.hbase.client.TableState.State state)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5773,7 +5773,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>findLastTableState</h4>
-<pre>public org.apache.hadoop.hbase.client.TableState <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3248">findLastTableState</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
+<pre>public org.apache.hadoop.hbase.client.TableState <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3247">findLastTableState</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -5788,7 +5788,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitTableEnabled</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3276">waitTableEnabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3275">waitTableEnabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5810,7 +5810,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitTableEnabled</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3290">waitTableEnabled</a>(byte[] table,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3289">waitTableEnabled</a>(byte[] table,
long timeoutMillis)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5835,7 +5835,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitTableEnabled</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3295">waitTableEnabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3294">waitTableEnabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
long timeoutMillis)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5851,7 +5851,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitTableDisabled</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3307">waitTableDisabled</a>(byte[] table)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3306">waitTableDisabled</a>(byte[] table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5872,7 +5872,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitTableDisabled</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3312">waitTableDisabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3311">waitTableDisabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
long millisTimeout)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5890,7 +5890,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitTableDisabled</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3324">waitTableDisabled</a>(byte[] table,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3323">waitTableDisabled</a>(byte[] table,
long timeoutMillis)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5912,7 +5912,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>ensureSomeRegionServersAvailable</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3336">ensureSomeRegionServersAvailable</a>(int num)
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3335">ensureSomeRegionServersAvailable</a>(int num)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Make sure that at least the specified number of region servers
@@ -5933,7 +5933,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>ensureSomeNonStoppedRegionServersAvailable</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3357">ensureSomeNonStoppedRegionServersAvailable</a>(int num)
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3356">ensureSomeNonStoppedRegionServersAvailable</a>(int num)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Make sure that at least the specified number of region servers
@@ -5955,7 +5955,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getDifferentUser</h4>
-<pre>public static <a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3389">getDifferentUser</a>(org.apache.hadoop.conf.Configuration c,
+<pre>public static <a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3388">getDifferentUser</a>(org.apache.hadoop.conf.Configuration c,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> differentiatingSuffix)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -5979,7 +5979,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getAllOnlineRegions</h4>
-<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3405">getAllOnlineRegions</a>(<a href="../../../../org/apache/hadoop/hbase/M [...]
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3404">getAllOnlineRegions</a>(<a href="../../../../org/apache/hadoop/hbase/M [...]
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -5994,7 +5994,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>setMaxRecoveryErrorCount</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3449">setMaxRecoveryErrorCount</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> stream,
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3436">setMaxRecoveryErrorCount</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a> stream,
int max)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Set maxRecoveryErrorCount in DFSClient. In 0.20 pre-append its hard-coded to 5 and
@@ -6023,7 +6023,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>assignRegion</h4>
-<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3475">assignRegion</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)
+<pre>public boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3462">assignRegion</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -6044,7 +6044,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>moveRegionAndWait</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3490">moveRegionAndWait</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> destRegion,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3477">moveRegionAndWait</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> destRegion,
<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> destServer)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6066,7 +6066,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitUntilAllRegionsAssigned</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3515">waitUntilAllRegionsAssigned</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3502">waitUntilAllRegionsAssigned</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Wait until all regions for a table in hbase:meta have a non-empty
@@ -6088,7 +6088,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitUntilAllSystemRegionsAssigned</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3524">waitUntilAllSystemRegionsAssigned</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3511">waitUntilAllSystemRegionsAssigned</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Waith until all system table's regions get assigned</div>
@@ -6104,7 +6104,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitUntilAllRegionsAssigned</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3537">waitUntilAllRegionsAssigned</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3524">waitUntilAllRegionsAssigned</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
long timeout)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -6127,7 +6127,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getFromStoreFile</h4>
-<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3619">getFromStoreFile</a>(org.apache.hadoop.hbase.regionserver.HStore store,
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3606">getFromStoreFile</a>(org.apache.hadoop.hbase.regionserver.HStore store,
<a href="../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a> get)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -6145,7 +6145,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getRegionSplitStartKeys</h4>
-<pre>public byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3649">getRegionSplitStartKeys</a>(byte[] startKey,
+<pre>public byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3636">getRegionSplitStartKeys</a>(byte[] startKey,
byte[] endKey,
int numRegions)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -6166,7 +6166,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getFromStoreFile</h4>
-<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3664">getFromStoreFile</a>(org.apache.hadoop.hbase.regionserver.HStore store,
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3651">getFromStoreFile</a>(org.apache.hadoop.hbase.regionserver.HStore store,
byte[] row,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><byte[]> columns)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6185,7 +6185,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>assertKVListsEqual</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3675">assertKVListsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> additionalMsg,
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3662">assertKVListsEqual</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> additionalMsg,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><? extends <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> expected,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><? extends <a href="../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> actual)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -6197,7 +6197,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>safeGetAsStr</h4>
-<pre>public static <T> <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3702">safeGetAsStr</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><T> lst,
+<pre>public static <T> <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3689">safeGetAsStr</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><T> lst,
int i)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
@@ -6208,7 +6208,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getClusterKey</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3710">getClusterKey</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3697">getClusterKey</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -6218,7 +6218,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createRandomTable</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3718">createRandomTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3705">createRandomTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> families,
int maxVersions,
int numColsPerRow,
@@ -6242,7 +6242,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>randomFreePort</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3802">randomFreePort</a>()</pre>
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3789">randomFreePort</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -6252,7 +6252,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>randomMultiCastAddress</h4>
-<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3805">randomMultiCastAddress</a>()</pre>
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3792">randomMultiCastAddress</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -6262,7 +6262,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitForHostPort</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3809">waitForHostPort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> host,
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3796">waitForHostPort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> host,
int port)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -6278,7 +6278,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createPreSplitLoadTestTable</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3840">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3827">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] columnFamily,
<a href="../../../../org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a> compression,
@@ -6301,7 +6301,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createPreSplitLoadTestTable</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3852">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3839">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] columnFamily,
<a href="../../../../org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a> compression,
@@ -6327,7 +6327,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createPreSplitLoadTestTable</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3871">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3858">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[][] columnFamilies,
<a href="../../../../org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a> compression,
@@ -6353,7 +6353,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createPreSplitLoadTestTable</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3893">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3880">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> desc,
<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> hcd)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6374,7 +6374,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createPreSplitLoadTestTable</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3903">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3890">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> desc,
<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> hcd,
int numRegionsPerServer)
@@ -6396,7 +6396,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createPreSplitLoadTestTable</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3914">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3901">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> desc,
<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>[] hcds,
int numRegionsPerServer)
@@ -6418,7 +6418,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createPreSplitLoadTestTable</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3926">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3913">createPreSplitLoadTestTable</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> td,
<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>[] cds,
org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm splitter,
@@ -6441,7 +6441,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getMetaRSPort</h4>
-<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3971">getMetaRSPort</a>(<a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> connection)
+<pre>public static int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3958">getMetaRSPort</a>(<a href="../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> connection)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<dl>
@@ -6456,7 +6456,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>assertRegionOnServer</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3981">assertRegionOnServer</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3968">assertRegionOnServer</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri,
<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
long timeout)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -6477,7 +6477,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>assertRegionOnlyOnServer</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3999">assertRegionOnlyOnServer</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3986">assertRegionOnlyOnServer</a>(<a href="../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri,
<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
long timeout)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -6498,7 +6498,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createTestRegion</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4030">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> tableName,
+<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4017">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> tableName,
<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> cd)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -6514,7 +6514,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>createTestRegion</h4>
-<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4037">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> tableName,
+<pre>public org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4024">createTestRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> tableName,
<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a> cd,
org.apache.hadoop.hbase.io.hfile.BlockCache blockCache)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6531,7 +6531,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>setFileSystemURI</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4045">setFileSystemURI</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> fsURI)</pre>
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4032">setFileSystemURI</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> fsURI)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -6541,7 +6541,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>predicateNoRegionsInTransition</h4>
-<pre>public <any> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4052">predicateNoRegionsInTransition</a>()</pre>
+<pre>public <any> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4039">predicateNoRegionsInTransition</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns a <code>Predicate</code> for checking that there are no regions in transition in master</div>
</li>
@@ -6552,7 +6552,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>predicateTableEnabled</h4>
-<pre>public <any> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4075">predicateTableEnabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre>public <any> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4062">predicateTableEnabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns a <code>Predicate</code> for checking that table is enabled</div>
</li>
@@ -6563,7 +6563,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>predicateTableDisabled</h4>
-<pre>public <any> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4092">predicateTableDisabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre>public <any> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4079">predicateTableDisabled</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns a <code>Predicate</code> for checking that table is enabled</div>
</li>
@@ -6574,7 +6574,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>predicateTableAvailable</h4>
-<pre>public <any> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4109">predicateTableAvailable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre>public <any> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4096">predicateTableAvailable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Returns a <code>Predicate</code> for checking that table is enabled</div>
</li>
@@ -6585,7 +6585,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitUntilNoRegionsInTransition</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4146">waitUntilNoRegionsInTransition</a>(long timeout)
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4133">waitUntilNoRegionsInTransition</a>(long timeout)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Wait until no regions in transition.</div>
@@ -6603,7 +6603,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitUntilNoRegionsInTransition</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4154">waitUntilNoRegionsInTransition</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4141">waitUntilNoRegionsInTransition</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Wait until no regions in transition. (time limit 15min)</div>
@@ -6619,7 +6619,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>waitLabelAvailable</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4163">waitLabelAvailable</a>(long timeoutMillis,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4150">waitLabelAvailable</a>(long timeoutMillis,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>... labels)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Wait until labels is ready in VisibilityLabelsCache.</div>
@@ -6636,7 +6636,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>generateColumnDescriptors</h4>
-<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4194">generateColumnDescriptors</a>()</pre>
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4181">generateColumnDescriptors</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Create a set of column descriptors with the combination of compression,
encoding, bloom codecs available.</div>
@@ -6652,7 +6652,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>generateColumnDescriptors</h4>
-<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4204">generateColumnDescriptors</a>(<a href="https://docs.oracle.com/javas [...]
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4191">generateColumnDescriptors</a>(<a href="https://docs.oracle.com/javas [...]
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Create a set of column descriptors with the combination of compression,
encoding, bloom codecs available.</div>
@@ -6670,7 +6670,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getSupportedCompressionAlgorithms</h4>
-<pre>public static <a href="../../../../org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a>[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4228">getSupportedCompressionAlgorithms</a>()</pre>
+<pre>public static <a href="../../../../org/apache/hadoop/hbase/io/compress/Compression.Algorithm.html" title="enum in org.apache.hadoop.hbase.io.compress">Compression.Algorithm</a>[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4215">getSupportedCompressionAlgorithms</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Get supported compression algorithms.</div>
<dl>
@@ -6685,7 +6685,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getClosestRowBefore</h4>
-<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4243">getClosestRowBefore</a>(org.apache.hadoop.hbase.regionserver.Region r,
+<pre>public <a href="../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4230">getClosestRowBefore</a>(org.apache.hadoop.hbase.regionserver.Region r,
byte[] row,
byte[] family)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6702,7 +6702,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>setupMiniKdc</h4>
-<pre>public org.apache.hadoop.minikdc.MiniKdc <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4275">setupMiniKdc</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a> keytabFile)
+<pre>public org.apache.hadoop.minikdc.MiniKdc <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4262">setupMiniKdc</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</a> keytabFile)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Sets up <code>MiniKdc</code> for testing security.
@@ -6723,7 +6723,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getNumHFiles</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4305">getNumHFiles</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4292">getNumHFiles</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
@@ -6734,7 +6734,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>getNumHFilesForRS</h4>
-<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4314">getNumHFilesForRS</a>(org.apache.hadoop.hbase.regionserver.HRegionServer rs,
+<pre>public int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4301">getNumHFilesForRS</a>(org.apache.hadoop.hbase.regionserver.HRegionServer rs,
<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
@@ -6746,7 +6746,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockList">
<li class="blockList">
<h4>verifyTableDescriptorIgnoreTableName</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4334">verifyTableDescriptorIgnoreTableName</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> ltd,
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4321">verifyTableDescriptorIgnoreTableName</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> ltd,
<a href="../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> rtd)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
@@ -6757,7 +6757,7 @@ public void <a href="../../../../src-html/org/apache/hadoop/hbase/HBas
<ul class="blockListLast">
<li class="blockList">
<h4>await</h4>
-<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4352">await</a>(long sleepMillis,
+<pre>public static void <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.4339">await</a>(long sleepMillis,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/BooleanSupplier.html?is-external=true" title="class or interface in java.util.function">BooleanSupplier</a> condition)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
diff --git a/apidocs/org/apache/hadoop/hbase/MiniHBaseCluster.html b/apidocs/org/apache/hadoop/hbase/MiniHBaseCluster.html
index 98adebf..1467e19 100644
--- a/apidocs/org/apache/hadoop/hbase/MiniHBaseCluster.html
+++ b/apidocs/org/apache/hadoop/hbase/MiniHBaseCluster.html
@@ -2049,7 +2049,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="c
<ul class="blockList">
<li class="blockList">
<h4>countServedRegions</h4>
-<pre>public long <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.884">countServedRegions</a>()</pre>
+<pre>public long <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.875">countServedRegions</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Counts the total numbers of regions being served by the currently online
region servers by asking each how many regions they have. Does not look
@@ -2066,7 +2066,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="c
<ul class="blockList">
<li class="blockList">
<h4>killAll</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.899">killAll</a>()</pre>
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.887">killAll</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block">Do a simulated kill all masters and regionservers. Useful when it is
impossible to bring the mini-cluster back for clean shutdown.</div>
@@ -2078,7 +2078,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="c
<ul class="blockList">
<li class="blockList">
<h4>waitUntilShutDown</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.919">waitUntilShutDown</a>()</pre>
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.907">waitUntilShutDown</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html#waitUntilShutDown--">HBaseCluster</a></code></span></div>
<div class="block">Wait for HBase Cluster to shut down.</div>
@@ -2094,7 +2094,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="c
<ul class="blockList">
<li class="blockList">
<h4>findRegionsForTable</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.regionserver.HRegion> <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.923">findRegionsForTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.regionserver.HRegion> <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.911">findRegionsForTable</a>(<a href="../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2104,7 +2104,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="c
<ul class="blockList">
<li class="blockList">
<h4>getRegionServerIndex</h4>
-<pre>protected int <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.937">getRegionServerIndex</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>protected int <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.925">getRegionServerIndex</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
@@ -2114,7 +2114,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="c
<ul class="blockListLast">
<li class="blockList">
<h4>getMasterIndex</h4>
-<pre>protected int <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.948">getMasterIndex</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>protected int <a href="../../../../src-html/org/apache/hadoop/hbase/MiniHBaseCluster.html#line.936">getMasterIndex</a>(<a href="../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span> </div>
</li>
</ul>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/apidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 79f840e..f5e30bf 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -83,11 +83,11 @@
<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Result;<a name="line.75"></a>
<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.76"></a>
<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.Table;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.82"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.Scan.ReadType;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Table;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.82"></a>
<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.fs.HFileSystem;<a name="line.83"></a>
<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.84"></a>
<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.85"></a>
@@ -96,4281 +96,4268 @@
<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.io.hfile.ChecksumUtil;<a name="line.88"></a>
<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.logging.Log4jUtils;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.assignment.RegionStateStore;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.mob.MobFileCache;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.regionserver.ChunkCreator;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.MemStoreLAB;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.security.HBaseKerberosUtils;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.security.User;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.JVMClusterUtil;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.util.RegionSplitter;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.EmptyWatcher;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hdfs.DFSClient;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.mapred.JobConf;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.mapred.MiniMRCluster;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.mapred.TaskLog;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.zookeeper.WatchedEvent;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.zookeeper.ZooKeeper;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.zookeeper.ZooKeeper.States;<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.io.Closeables;<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>/**<a name="line.152"></a>
-<span class="sourceLineNo">153</span> * Facility for testing HBase. Replacement for<a name="line.153"></a>
-<span class="sourceLineNo">154</span> * old HBaseTestCase and HBaseClusterTestCase functionality.<a name="line.154"></a>
-<span class="sourceLineNo">155</span> * Create an instance and keep it around testing HBase. This class is<a name="line.155"></a>
-<span class="sourceLineNo">156</span> * meant to be your one-stop shop for anything you might need testing. Manages<a name="line.156"></a>
-<span class="sourceLineNo">157</span> * one cluster at a time only. Managed cluster can be an in-process<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * {@link MiniHBaseCluster}, or a deployed cluster of type {@code DistributedHBaseCluster}.<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * Not all methods work with the real cluster.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * Depends on log4j being on classpath and<a name="line.160"></a>
-<span class="sourceLineNo">161</span> * hbase-site.xml for logging and test-run configuration. It does not set<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * logging levels.<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * In the configuration properties, default values for master-info-port and<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * region-server-port are overridden such that a random port will be assigned (thus<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * avoiding port contention if another local HBase instance is already running).<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * setting it to true.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * @deprecated since 3.0.0, will be removed in 4.0.0. Use<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * {@link org.apache.hadoop.hbase.testing.TestingHBaseCluster} instead.<a name="line.169"></a>
-<span class="sourceLineNo">170</span> */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>@InterfaceAudience.Public<a name="line.171"></a>
-<span class="sourceLineNo">172</span>@Deprecated<a name="line.172"></a>
-<span class="sourceLineNo">173</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> /**<a name="line.175"></a>
-<span class="sourceLineNo">176</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * used in mini dfs.<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * @deprecated since 2.0.0 and will be removed in 3.0.0. Can be used only with mini dfs.<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-19410">HBASE-19410</a><a name="line.180"></a>
-<span class="sourceLineNo">181</span> */<a name="line.181"></a>
-<span class="sourceLineNo">182</span> @Deprecated<a name="line.182"></a>
-<span class="sourceLineNo">183</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.185"></a>
-<span class="sourceLineNo">186</span> /**<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * The default number of regions per regionserver when creating a pre-split<a name="line.187"></a>
-<span class="sourceLineNo">188</span> * table.<a name="line.188"></a>
-<span class="sourceLineNo">189</span> */<a name="line.189"></a>
-<span class="sourceLineNo">190</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.190"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.logging.Log4jUtils;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.master.assignment.RegionStateStore;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.mob.MobFileCache;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.regionserver.ChunkCreator;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.regionserver.InternalScanner;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.MemStoreLAB;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.security.HBaseKerberosUtils;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.security.User;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.JVMClusterUtil;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.RegionSplitter;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.EmptyWatcher;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hdfs.DFSClient;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hdfs.MiniDFSCluster;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.mapred.JobConf;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.mapred.MiniMRCluster;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.mapred.TaskLog;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.minikdc.MiniKdc;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.zookeeper.WatchedEvent;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.zookeeper.ZooKeeper;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.zookeeper.ZooKeeper.States;<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.io.Closeables;<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>/**<a name="line.151"></a>
+<span class="sourceLineNo">152</span> * Facility for testing HBase. Replacement for<a name="line.152"></a>
+<span class="sourceLineNo">153</span> * old HBaseTestCase and HBaseClusterTestCase functionality.<a name="line.153"></a>
+<span class="sourceLineNo">154</span> * Create an instance and keep it around testing HBase. This class is<a name="line.154"></a>
+<span class="sourceLineNo">155</span> * meant to be your one-stop shop for anything you might need testing. Manages<a name="line.155"></a>
+<span class="sourceLineNo">156</span> * one cluster at a time only. Managed cluster can be an in-process<a name="line.156"></a>
+<span class="sourceLineNo">157</span> * {@link MiniHBaseCluster}, or a deployed cluster of type {@code DistributedHBaseCluster}.<a name="line.157"></a>
+<span class="sourceLineNo">158</span> * Not all methods work with the real cluster.<a name="line.158"></a>
+<span class="sourceLineNo">159</span> * Depends on log4j being on classpath and<a name="line.159"></a>
+<span class="sourceLineNo">160</span> * hbase-site.xml for logging and test-run configuration. It does not set<a name="line.160"></a>
+<span class="sourceLineNo">161</span> * logging levels.<a name="line.161"></a>
+<span class="sourceLineNo">162</span> * In the configuration properties, default values for master-info-port and<a name="line.162"></a>
+<span class="sourceLineNo">163</span> * region-server-port are overridden such that a random port will be assigned (thus<a name="line.163"></a>
+<span class="sourceLineNo">164</span> * avoiding port contention if another local HBase instance is already running).<a name="line.164"></a>
+<span class="sourceLineNo">165</span> * <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * setting it to true.<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * @deprecated since 3.0.0, will be removed in 4.0.0. Use<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * {@link org.apache.hadoop.hbase.testing.TestingHBaseCluster} instead.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> */<a name="line.169"></a>
+<span class="sourceLineNo">170</span>@InterfaceAudience.Public<a name="line.170"></a>
+<span class="sourceLineNo">171</span>@Deprecated<a name="line.171"></a>
+<span class="sourceLineNo">172</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span> /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * used in mini dfs.<a name="line.177"></a>
+<span class="sourceLineNo">178</span> * @deprecated since 2.0.0 and will be removed in 3.0.0. Can be used only with mini dfs.<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-19410">HBASE-19410</a><a name="line.179"></a>
+<span class="sourceLineNo">180</span> */<a name="line.180"></a>
+<span class="sourceLineNo">181</span> @Deprecated<a name="line.181"></a>
+<span class="sourceLineNo">182</span> private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span> public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.184"></a>
+<span class="sourceLineNo">185</span> /**<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * The default number of regions per regionserver when creating a pre-split<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * table.<a name="line.187"></a>
+<span class="sourceLineNo">188</span> */<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.193"></a>
-<span class="sourceLineNo">194</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> private MiniDFSCluster dfsCluster = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> private MiniMRCluster mrCluster = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.201"></a>
-<span class="sourceLineNo">202</span> private volatile boolean miniClusterRunning;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span> private String hadoopLogDir;<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.206"></a>
-<span class="sourceLineNo">207</span> * HBaseTestingUtility*/<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private Path dataTestDirOnTestFS = null;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> private final AtomicReference<AsyncClusterConnection> asyncConnection = new AtomicReference<>();<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static String FS_URI;<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.215"></a>
-<span class="sourceLineNo">216</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> /**<a name="line.218"></a>
-<span class="sourceLineNo">219</span> * Checks to see if a specific port is available.<a name="line.219"></a>
-<span class="sourceLineNo">220</span> *<a name="line.220"></a>
-<span class="sourceLineNo">221</span> * @param port the port number to check for availability<a name="line.221"></a>
-<span class="sourceLineNo">222</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.222"></a>
-<span class="sourceLineNo">223</span> */<a name="line.223"></a>
-<span class="sourceLineNo">224</span> public static boolean available(int port) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span> ServerSocket ss = null;<a name="line.225"></a>
-<span class="sourceLineNo">226</span> DatagramSocket ds = null;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> try {<a name="line.227"></a>
-<span class="sourceLineNo">228</span> ss = new ServerSocket(port);<a name="line.228"></a>
-<span class="sourceLineNo">229</span> ss.setReuseAddress(true);<a name="line.229"></a>
-<span class="sourceLineNo">230</span> ds = new DatagramSocket(port);<a name="line.230"></a>
-<span class="sourceLineNo">231</span> ds.setReuseAddress(true);<a name="line.231"></a>
-<span class="sourceLineNo">232</span> return true;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> } catch (IOException e) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> // Do nothing<a name="line.234"></a>
-<span class="sourceLineNo">235</span> } finally {<a name="line.235"></a>
-<span class="sourceLineNo">236</span> if (ds != null) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span> ds.close();<a name="line.237"></a>
-<span class="sourceLineNo">238</span> }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span> if (ss != null) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> try {<a name="line.241"></a>
-<span class="sourceLineNo">242</span> ss.close();<a name="line.242"></a>
-<span class="sourceLineNo">243</span> } catch (IOException e) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> /* should not be thrown */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span> }<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> return false;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span> /**<a name="line.252"></a>
-<span class="sourceLineNo">253</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.253"></a>
-<span class="sourceLineNo">254</span> * testing.<a name="line.254"></a>
-<span class="sourceLineNo">255</span> */<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.256"></a>
-<span class="sourceLineNo">257</span> List<Object[]> configurations = new ArrayList<>();<a name="line.257"></a>
-<span class="sourceLineNo">258</span> for (Compression.Algorithm comprAlgo :<a name="line.258"></a>
-<span class="sourceLineNo">259</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> for (BloomType bloomType : BloomType.values()) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.261"></a>
-<span class="sourceLineNo">262</span> }<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span> return Collections.unmodifiableList(configurations);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> }<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span> /**<a name="line.267"></a>
-<span class="sourceLineNo">268</span> * Create combination of memstoreTS and tags<a name="line.268"></a>
-<span class="sourceLineNo">269</span> */<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> List<Object[]> configurations = new ArrayList<>();<a name="line.271"></a>
-<span class="sourceLineNo">272</span> configurations.add(new Object[] { false, false });<a name="line.272"></a>
-<span class="sourceLineNo">273</span> configurations.add(new Object[] { false, true });<a name="line.273"></a>
-<span class="sourceLineNo">274</span> configurations.add(new Object[] { true, false });<a name="line.274"></a>
-<span class="sourceLineNo">275</span> configurations.add(new Object[] { true, true });<a name="line.275"></a>
-<span class="sourceLineNo">276</span> return Collections.unmodifiableList(configurations);<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span> List<Object[]> configurations = new ArrayList<>();<a name="line.280"></a>
-<span class="sourceLineNo">281</span> configurations.add(new Object[] { false, false, true });<a name="line.281"></a>
-<span class="sourceLineNo">282</span> configurations.add(new Object[] { false, false, false });<a name="line.282"></a>
-<span class="sourceLineNo">283</span> configurations.add(new Object[] { false, true, true });<a name="line.283"></a>
-<span class="sourceLineNo">284</span> configurations.add(new Object[] { false, true, false });<a name="line.284"></a>
-<span class="sourceLineNo">285</span> configurations.add(new Object[] { true, false, true });<a name="line.285"></a>
-<span class="sourceLineNo">286</span> configurations.add(new Object[] { true, false, false });<a name="line.286"></a>
-<span class="sourceLineNo">287</span> configurations.add(new Object[] { true, true, true });<a name="line.287"></a>
-<span class="sourceLineNo">288</span> configurations.add(new Object[] { true, true, false });<a name="line.288"></a>
-<span class="sourceLineNo">289</span> return Collections.unmodifiableList(configurations);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.292"></a>
-<span class="sourceLineNo">293</span> bloomAndCompressionCombinations();<a name="line.293"></a>
+<span class="sourceLineNo">192</span> public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.192"></a>
+<span class="sourceLineNo">193</span> public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span> private MiniDFSCluster dfsCluster = null;<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> private volatile HBaseCluster hbaseCluster = null;<a name="line.197"></a>
+<span class="sourceLineNo">198</span> private MiniMRCluster mrCluster = null;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span> /** If there is a mini cluster running for this testing utility instance. */<a name="line.200"></a>
+<span class="sourceLineNo">201</span> private volatile boolean miniClusterRunning;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span> private String hadoopLogDir;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span> /** Directory on test filesystem where we put the data for this instance of<a name="line.205"></a>
+<span class="sourceLineNo">206</span> * HBaseTestingUtility*/<a name="line.206"></a>
+<span class="sourceLineNo">207</span> private Path dataTestDirOnTestFS = null;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> private final AtomicReference<AsyncClusterConnection> asyncConnection = new AtomicReference<>();<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.211"></a>
+<span class="sourceLineNo">212</span> private static String FS_URI;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span> /** This is for unit tests parameterized with a single boolean. */<a name="line.214"></a>
+<span class="sourceLineNo">215</span> public static final List<Object[]> MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span> /**<a name="line.217"></a>
+<span class="sourceLineNo">218</span> * Checks to see if a specific port is available.<a name="line.218"></a>
+<span class="sourceLineNo">219</span> *<a name="line.219"></a>
+<span class="sourceLineNo">220</span> * @param port the port number to check for availability<a name="line.220"></a>
+<span class="sourceLineNo">221</span> * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not<a name="line.221"></a>
+<span class="sourceLineNo">222</span> */<a name="line.222"></a>
+<span class="sourceLineNo">223</span> public static boolean available(int port) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> ServerSocket ss = null;<a name="line.224"></a>
+<span class="sourceLineNo">225</span> DatagramSocket ds = null;<a name="line.225"></a>
+<span class="sourceLineNo">226</span> try {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> ss = new ServerSocket(port);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> ss.setReuseAddress(true);<a name="line.228"></a>
+<span class="sourceLineNo">229</span> ds = new DatagramSocket(port);<a name="line.229"></a>
+<span class="sourceLineNo">230</span> ds.setReuseAddress(true);<a name="line.230"></a>
+<span class="sourceLineNo">231</span> return true;<a name="line.231"></a>
+<span class="sourceLineNo">232</span> } catch (IOException e) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // Do nothing<a name="line.233"></a>
+<span class="sourceLineNo">234</span> } finally {<a name="line.234"></a>
+<span class="sourceLineNo">235</span> if (ds != null) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span> ds.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span> }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span> if (ss != null) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> try {<a name="line.240"></a>
+<span class="sourceLineNo">241</span> ss.close();<a name="line.241"></a>
+<span class="sourceLineNo">242</span> } catch (IOException e) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span> /* should not be thrown */<a name="line.243"></a>
+<span class="sourceLineNo">244</span> }<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span> }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span> return false;<a name="line.248"></a>
+<span class="sourceLineNo">249</span> }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span> /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span> * Create all combinations of Bloom filters and compression algorithms for<a name="line.252"></a>
+<span class="sourceLineNo">253</span> * testing.<a name="line.253"></a>
+<span class="sourceLineNo">254</span> */<a name="line.254"></a>
+<span class="sourceLineNo">255</span> private static List<Object[]> bloomAndCompressionCombinations() {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> List<Object[]> configurations = new ArrayList<>();<a name="line.256"></a>
+<span class="sourceLineNo">257</span> for (Compression.Algorithm comprAlgo :<a name="line.257"></a>
+<span class="sourceLineNo">258</span> HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span> for (BloomType bloomType : BloomType.values()) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span> configurations.add(new Object[] { comprAlgo, bloomType });<a name="line.260"></a>
+<span class="sourceLineNo">261</span> }<a name="line.261"></a>
+<span class="sourceLineNo">262</span> }<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return Collections.unmodifiableList(configurations);<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> /**<a name="line.266"></a>
+<span class="sourceLineNo">267</span> * Create combination of memstoreTS and tags<a name="line.267"></a>
+<span class="sourceLineNo">268</span> */<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private static List<Object[]> memStoreTSAndTagsCombination() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span> List<Object[]> configurations = new ArrayList<>();<a name="line.270"></a>
+<span class="sourceLineNo">271</span> configurations.add(new Object[] { false, false });<a name="line.271"></a>
+<span class="sourceLineNo">272</span> configurations.add(new Object[] { false, true });<a name="line.272"></a>
+<span class="sourceLineNo">273</span> configurations.add(new Object[] { true, false });<a name="line.273"></a>
+<span class="sourceLineNo">274</span> configurations.add(new Object[] { true, true });<a name="line.274"></a>
+<span class="sourceLineNo">275</span> return Collections.unmodifiableList(configurations);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span> public static List<Object[]> memStoreTSTagsAndOffheapCombination() {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> List<Object[]> configurations = new ArrayList<>();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> configurations.add(new Object[] { false, false, true });<a name="line.280"></a>
+<span class="sourceLineNo">281</span> configurations.add(new Object[] { false, false, false });<a name="line.281"></a>
+<span class="sourceLineNo">282</span> configurations.add(new Object[] { false, true, true });<a name="line.282"></a>
+<span class="sourceLineNo">283</span> configurations.add(new Object[] { false, true, false });<a name="line.283"></a>
+<span class="sourceLineNo">284</span> configurations.add(new Object[] { true, false, true });<a name="line.284"></a>
+<span class="sourceLineNo">285</span> configurations.add(new Object[] { true, false, false });<a name="line.285"></a>
+<span class="sourceLineNo">286</span> configurations.add(new Object[] { true, true, true });<a name="line.286"></a>
+<span class="sourceLineNo">287</span> configurations.add(new Object[] { true, true, false });<a name="line.287"></a>
+<span class="sourceLineNo">288</span> return Collections.unmodifiableList(configurations);<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> public static final Collection<Object[]> BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.291"></a>
+<span class="sourceLineNo">292</span> bloomAndCompressionCombinations();<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span> /**<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> *<a name="line.298"></a>
-<span class="sourceLineNo">299</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.299"></a>
-<span class="sourceLineNo">300</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.300"></a>
-<span class="sourceLineNo">301</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.301"></a>
-<span class="sourceLineNo">302</span> */<a name="line.302"></a>
-<span class="sourceLineNo">303</span> public HBaseTestingUtility() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span> this(HBaseConfiguration.create());<a name="line.304"></a>
-<span class="sourceLineNo">305</span> }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span> /**<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> *<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.311"></a>
-<span class="sourceLineNo">312</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.312"></a>
-<span class="sourceLineNo">313</span> *<a name="line.313"></a>
-<span class="sourceLineNo">314</span> * @param conf The configuration to use for further operations<a name="line.314"></a>
-<span class="sourceLineNo">315</span> */<a name="line.315"></a>
-<span class="sourceLineNo">316</span> public HBaseTestingUtility(Configuration conf) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> super(conf);<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.319"></a>
-<span class="sourceLineNo">320</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span> // Save this for when setting default file:// breaks things<a name="line.322"></a>
-<span class="sourceLineNo">323</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // Every cluster is a local cluster until we start DFS<a name="line.329"></a>
-<span class="sourceLineNo">330</span> // Note that conf could be null, but this.conf will not be<a name="line.330"></a>
-<span class="sourceLineNo">331</span> String dataTestDir = getDataTestDir().toString();<a name="line.331"></a>
-<span class="sourceLineNo">332</span> this.conf.set("fs.defaultFS","file:///");<a name="line.332"></a>
-<span class="sourceLineNo">333</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.333"></a>
-<span class="sourceLineNo">334</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.334"></a>
-<span class="sourceLineNo">335</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> // If the value for random ports isn't set set it to true, thus making<a name="line.336"></a>
-<span class="sourceLineNo">337</span> // tests opt-out for random port assignment<a name="line.337"></a>
-<span class="sourceLineNo">338</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> /**<a name="line.342"></a>
-<span class="sourceLineNo">343</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.343"></a>
-<span class="sourceLineNo">344</span> */<a name="line.344"></a>
-<span class="sourceLineNo">345</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> closeRegionAndWAL((HRegion)r);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span> /**<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.350"></a>
-<span class="sourceLineNo">351</span> */<a name="line.351"></a>
-<span class="sourceLineNo">352</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> if (r == null) return;<a name="line.353"></a>
-<span class="sourceLineNo">354</span> r.close();<a name="line.354"></a>
-<span class="sourceLineNo">355</span> if (r.getWAL() == null) return;<a name="line.355"></a>
-<span class="sourceLineNo">356</span> r.getWAL().close();<a name="line.356"></a>
-<span class="sourceLineNo">357</span> }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> /**<a name="line.359"></a>
-<span class="sourceLineNo">360</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.360"></a>
-<span class="sourceLineNo">361</span> * you use the returned Configuration since {@link Connection} instances<a name="line.361"></a>
-<span class="sourceLineNo">362</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.362"></a>
-<span class="sourceLineNo">363</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.363"></a>
-<span class="sourceLineNo">364</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.364"></a>
-<span class="sourceLineNo">365</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.365"></a>
-<span class="sourceLineNo">366</span> * make a copy and use that. Do<a name="line.366"></a>
-<span class="sourceLineNo">367</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.367"></a>
-<span class="sourceLineNo">368</span> * @return Instance of Configuration.<a name="line.368"></a>
-<span class="sourceLineNo">369</span> */<a name="line.369"></a>
-<span class="sourceLineNo">370</span> @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span> public Configuration getConfiguration() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> return super.getConfiguration();<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> this.hbaseCluster = hbaseCluster;<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> /**<a name="line.379"></a>
-<span class="sourceLineNo">380</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.380"></a>
-<span class="sourceLineNo">381</span> * Give it a random name so can have many concurrent tests running if<a name="line.381"></a>
-<span class="sourceLineNo">382</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.382"></a>
-<span class="sourceLineNo">383</span> * System property, as it's what minidfscluster bases<a name="line.383"></a>
-<span class="sourceLineNo">384</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.384"></a>
-<span class="sourceLineNo">385</span> * instances -- another instance could grab the temporary<a name="line.385"></a>
-<span class="sourceLineNo">386</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> * single instance only is how the minidfscluster works.<a name="line.387"></a>
-<span class="sourceLineNo">388</span> *<a name="line.388"></a>
-<span class="sourceLineNo">389</span> * We also create the underlying directory names for<a name="line.389"></a>
-<span class="sourceLineNo">390</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * in the conf, and as a system property for hadoop.tmp.dir (We do not create them!).<a name="line.391"></a>
-<span class="sourceLineNo">392</span> *<a name="line.392"></a>
-<span class="sourceLineNo">393</span> * @return The calculated data test build directory, if newly-created.<a name="line.393"></a>
-<span class="sourceLineNo">394</span> */<a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> protected Path setupDataTestDir() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> Path testPath = super.setupDataTestDir();<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (null == testPath) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> createSubDirAndSystemProperty(<a name="line.402"></a>
-<span class="sourceLineNo">403</span> "hadoop.log.dir",<a name="line.403"></a>
-<span class="sourceLineNo">404</span> testPath, "hadoop-log-dir");<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.406"></a>
-<span class="sourceLineNo">407</span> // we want our own value to ensure uniqueness on the same machine<a name="line.407"></a>
-<span class="sourceLineNo">408</span> createSubDirAndSystemProperty(<a name="line.408"></a>
-<span class="sourceLineNo">409</span> "hadoop.tmp.dir",<a name="line.409"></a>
-<span class="sourceLineNo">410</span> testPath, "hadoop-tmp-dir");<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.412"></a>
-<span class="sourceLineNo">413</span> createSubDir(<a name="line.413"></a>
-<span class="sourceLineNo">414</span> "mapreduce.cluster.local.dir",<a name="line.414"></a>
-<span class="sourceLineNo">415</span> testPath, "mapred-local-dir");<a name="line.415"></a>
-<span class="sourceLineNo">416</span> return testPath;<a name="line.416"></a>
-<span class="sourceLineNo">417</span> }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> private void createSubDirAndSystemProperty(<a name="line.419"></a>
-<span class="sourceLineNo">420</span> String propertyName, Path parent, String subDirName){<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span> String sysValue = System.getProperty(propertyName);<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span> if (sysValue != null) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> // There is already a value set. So we do nothing but hope<a name="line.425"></a>
-<span class="sourceLineNo">426</span> // that there will be no conflicts<a name="line.426"></a>
-<span class="sourceLineNo">427</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.427"></a>
-<span class="sourceLineNo">428</span> sysValue + " so I do NOT create it in " + parent);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> String confValue = conf.get(propertyName);<a name="line.429"></a>
-<span class="sourceLineNo">430</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.430"></a>
-<span class="sourceLineNo">431</span> LOG.warn(<a name="line.431"></a>
-<span class="sourceLineNo">432</span> propertyName + " property value differs in configuration and system: "+<a name="line.432"></a>
-<span class="sourceLineNo">433</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.433"></a>
-<span class="sourceLineNo">434</span> " Erasing configuration value by system value."<a name="line.434"></a>
-<span class="sourceLineNo">435</span> );<a name="line.435"></a>
-<span class="sourceLineNo">436</span> }<a name="line.436"></a>
-<span class="sourceLineNo">437</span> conf.set(propertyName, sysValue);<a name="line.437"></a>
-<span class="sourceLineNo">438</span> } else {<a name="line.438"></a>
-<span class="sourceLineNo">439</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.439"></a>
-<span class="sourceLineNo">440</span> createSubDir(propertyName, parent, subDirName);<a name="line.440"></a>
-<span class="sourceLineNo">441</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.441"></a>
-<span class="sourceLineNo">442</span> }<a name="line.442"></a>
-<span class="sourceLineNo">443</span> }<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span> /**<a name="line.445"></a>
-<span class="sourceLineNo">446</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.446"></a>
-<span class="sourceLineNo">447</span> * for the test filesystem by default<a name="line.447"></a>
-<span class="sourceLineNo">448</span> * @see #setupDataTestDirOnTestFS()<a name="line.448"></a>
-<span class="sourceLineNo">449</span> * @see #getTestFileSystem()<a name="line.449"></a>
-<span class="sourceLineNo">450</span> */<a name="line.450"></a>
-<span class="sourceLineNo">451</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> FileSystem fs = getTestFileSystem();<a name="line.452"></a>
-<span class="sourceLineNo">453</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.453"></a>
-<span class="sourceLineNo">454</span> }<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span> /**<a name="line.456"></a>
-<span class="sourceLineNo">457</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.457"></a>
-<span class="sourceLineNo">458</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.458"></a>
-<span class="sourceLineNo">459</span> * if the test relies on it.<a name="line.459"></a>
-<span class="sourceLineNo">460</span> * @return a unique path in the test filesystem<a name="line.460"></a>
-<span class="sourceLineNo">461</span> */<a name="line.461"></a>
-<span class="sourceLineNo">462</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> if (dataTestDirOnTestFS == null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> setupDataTestDirOnTestFS();<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> return dataTestDirOnTestFS;<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span> /**<a name="line.470"></a>
-<span class="sourceLineNo">471</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.471"></a>
-<span class="sourceLineNo">472</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.472"></a>
-<span class="sourceLineNo">473</span> * if the test relies on it.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> * @return a unique path in the test filesystem<a name="line.474"></a>
-<span class="sourceLineNo">475</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.475"></a>
-<span class="sourceLineNo">476</span> */<a name="line.476"></a>
-<span class="sourceLineNo">477</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.477"></a>
-<span class="sourceLineNo">478</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.478"></a>
-<span class="sourceLineNo">479</span> }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span> /**<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * Sets up a path in test filesystem to be used by tests.<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * Creates a new directory if not already setup.<a name="line.483"></a>
-<span class="sourceLineNo">484</span> */<a name="line.484"></a>
-<span class="sourceLineNo">485</span> private void setupDataTestDirOnTestFS() throws IOException {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> if (dataTestDirOnTestFS != null) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Data test on test fs dir already setup in "<a name="line.487"></a>
-<span class="sourceLineNo">488</span> + dataTestDirOnTestFS.toString());<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span> /**<a name="line.494"></a>
-<span class="sourceLineNo">495</span> * Sets up a new path in test filesystem to be used by tests.<a name="line.495"></a>
-<span class="sourceLineNo">496</span> */<a name="line.496"></a>
-<span class="sourceLineNo">497</span> private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.497"></a>
-<span class="sourceLineNo">498</span> //The file system can be either local, mini dfs, or if the configuration<a name="line.498"></a>
-<span class="sourceLineNo">499</span> //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.499"></a>
-<span class="sourceLineNo">500</span> //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.500"></a>
-<span class="sourceLineNo">501</span> //the working directory, and create a unique sub dir there<a name="line.501"></a>
-<span class="sourceLineNo">502</span> FileSystem fs = getTestFileSystem();<a name="line.502"></a>
-<span class="sourceLineNo">503</span> Path newDataTestDir;<a name="line.503"></a>
-<span class="sourceLineNo">504</span> String randomStr = getRandomUUID().toString();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> File dataTestDir = new File(newDataTestDir.toString());<a name="line.507"></a>
-<span class="sourceLineNo">508</span> if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span> } else {<a name="line.509"></a>
-<span class="sourceLineNo">510</span> Path base = getBaseTestDirOnTestFS();<a name="line.510"></a>
-<span class="sourceLineNo">511</span> newDataTestDir = new Path(base, randomStr);<a name="line.511"></a>
-<span class="sourceLineNo">512</span> if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.512"></a>
-<span class="sourceLineNo">513</span> }<a name="line.513"></a>
-<span class="sourceLineNo">514</span> return newDataTestDir;<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span> /**<a name="line.517"></a>
-<span class="sourceLineNo">518</span> * Cleans the test data directory on the test filesystem.<a name="line.518"></a>
-<span class="sourceLineNo">519</span> * @return True if we removed the test dirs<a name="line.519"></a>
-<span class="sourceLineNo">520</span> * @throws IOException<a name="line.520"></a>
-<span class="sourceLineNo">521</span> */<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> if (ret)<a name="line.524"></a>
-<span class="sourceLineNo">525</span> dataTestDirOnTestFS = null;<a name="line.525"></a>
-<span class="sourceLineNo">526</span> return ret;<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span> /**<a name="line.529"></a>
-<span class="sourceLineNo">530</span> * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.530"></a>
-<span class="sourceLineNo">531</span> * @return True if we removed child<a name="line.531"></a>
-<span class="sourceLineNo">532</span> * @throws IOException<a name="line.532"></a>
-<span class="sourceLineNo">533</span> */<a name="line.533"></a>
-<span class="sourceLineNo">534</span> public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> return getTestFileSystem().delete(cpath, true);<a name="line.536"></a>
-<span class="sourceLineNo">537</span> }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span> /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span> * Start a minidfscluster.<a name="line.540"></a>
-<span class="sourceLineNo">541</span> * @param servers How many DNs to start.<a name="line.541"></a>
-<span class="sourceLineNo">542</span> * @throws Exception<a name="line.542"></a>
-<span class="sourceLineNo">543</span> * @see #shutdownMiniDFSCluster()<a name="line.543"></a>
-<span class="sourceLineNo">544</span> * @return The mini dfs cluster created.<a name="line.544"></a>
-<span class="sourceLineNo">545</span> */<a name="line.545"></a>
-<span class="sourceLineNo">546</span> public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.546"></a>
-<span class="sourceLineNo">547</span> return startMiniDFSCluster(servers, null);<a name="line.547"></a>
-<span class="sourceLineNo">548</span> }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span> /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span> * Start a minidfscluster.<a name="line.551"></a>
-<span class="sourceLineNo">552</span> * This is useful if you want to run datanode on distinct hosts for things<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * like HDFS block location verification.<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * If you start MiniDFSCluster without host names, all instances of the<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * datanodes will have the same host name.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> * @param hosts hostnames DNs to run on.<a name="line.556"></a>
-<span class="sourceLineNo">557</span> * @throws Exception<a name="line.557"></a>
-<span class="sourceLineNo">558</span> * @see #shutdownMiniDFSCluster()<a name="line.558"></a>
-<span class="sourceLineNo">559</span> * @return The mini dfs cluster created.<a name="line.559"></a>
-<span class="sourceLineNo">560</span> */<a name="line.560"></a>
-<span class="sourceLineNo">561</span> public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.561"></a>
-<span class="sourceLineNo">562</span> throws Exception {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> if ( hosts != null && hosts.length != 0) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> return startMiniDFSCluster(hosts.length, hosts);<a name="line.564"></a>
-<span class="sourceLineNo">565</span> } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span> return startMiniDFSCluster(1, null);<a name="line.566"></a>
-<span class="sourceLineNo">567</span> }<a name="line.567"></a>
-<span class="sourceLineNo">568</span> }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span> /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span> * Start a minidfscluster.<a name="line.571"></a>
-<span class="sourceLineNo">572</span> * Can only create one.<a name="line.572"></a>
-<span class="sourceLineNo">573</span> * @param servers How many DNs to start.<a name="line.573"></a>
-<span class="sourceLineNo">574</span> * @param hosts hostnames DNs to run on.<a name="line.574"></a>
-<span class="sourceLineNo">575</span> * @throws Exception<a name="line.575"></a>
-<span class="sourceLineNo">576</span> * @see #shutdownMiniDFSCluster()<a name="line.576"></a>
-<span class="sourceLineNo">577</span> * @return The mini dfs cluster created.<a name="line.577"></a>
-<span class="sourceLineNo">578</span> */<a name="line.578"></a>
-<span class="sourceLineNo">579</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.579"></a>
-<span class="sourceLineNo">580</span> throws Exception {<a name="line.580"></a>
-<span class="sourceLineNo">581</span> return startMiniDFSCluster(servers, null, hosts);<a name="line.581"></a>
-<span class="sourceLineNo">582</span> }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span> private void setFs() throws IOException {<a name="line.584"></a>
-<span class="sourceLineNo">585</span> if(this.dfsCluster == null){<a name="line.585"></a>
-<span class="sourceLineNo">586</span> LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.586"></a>
-<span class="sourceLineNo">587</span> return;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span> FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.589"></a>
-<span class="sourceLineNo">590</span> CommonFSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span> // re-enable this check with dfs<a name="line.592"></a>
-<span class="sourceLineNo">593</span> conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String racks[], String hosts[])<a name="line.596"></a>
-<span class="sourceLineNo">597</span> throws Exception {<a name="line.597"></a>
-<span class="sourceLineNo">598</span> createDirsAndSetProperties();<a name="line.598"></a>
-<span class="sourceLineNo">599</span> EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span> // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.601"></a>
-<span class="sourceLineNo">602</span> Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.602"></a>
-<span class="sourceLineNo">603</span> Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.603"></a>
-<span class="sourceLineNo">604</span> "ERROR");<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span> this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.606"></a>
-<span class="sourceLineNo">607</span> true, null, racks, hosts, null);<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span> // Set this just-started cluster as our filesystem.<a name="line.609"></a>
-<span class="sourceLineNo">610</span> setFs();<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span> // Wait for the cluster to be totally up<a name="line.612"></a>
-<span class="sourceLineNo">613</span> this.dfsCluster.waitClusterUp();<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span> //reset the test directory for test file system<a name="line.615"></a>
-<span class="sourceLineNo">616</span> dataTestDirOnTestFS = null;<a name="line.616"></a>
-<span class="sourceLineNo">617</span> String dataTestDir = getDataTestDir().toString();<a name="line.617"></a>
-<span class="sourceLineNo">618</span> conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> return this.dfsCluster;<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span> public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> createDirsAndSetProperties();<a name="line.625"></a>
-<span class="sourceLineNo">626</span> // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.626"></a>
-<span class="sourceLineNo">627</span> Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.627"></a>
-<span class="sourceLineNo">628</span> Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.628"></a>
-<span class="sourceLineNo">629</span> "ERROR");<a name="line.629"></a>
-<span class="sourceLineNo">630</span> dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.630"></a>
-<span class="sourceLineNo">631</span> null, null, null);<a name="line.631"></a>
-<span class="sourceLineNo">632</span> return dfsCluster;<a name="line.632"></a>
-<span class="sourceLineNo">633</span> }<a name="line.633"></a>
-<span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span> /**<a name="line.635"></a>
-<span class="sourceLineNo">636</span> * This is used before starting HDFS and map-reduce mini-clusters Run something like the below to<a name="line.636"></a>
-<span class="sourceLineNo">637</span> * check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in<a name="line.637"></a>
-<span class="sourceLineNo">638</span> * the conf.<a name="line.638"></a>
-<span class="sourceLineNo">639</span> * <pre><a name="line.639"></a>
-<span class="sourceLineNo">640</span> * Configuration conf = TEST_UTIL.getConfiguration();<a name="line.640"></a>
-<span class="sourceLineNo">641</span> * for (Iterator&lt;Map.Entry&lt;String, String&gt;&gt; i = conf.iterator(); i.hasNext();) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> * Map.Entry&lt;String, String&gt; e = i.next();<a name="line.642"></a>
-<span class="sourceLineNo">643</span> * assertFalse(e.getKey() + " " + e.getValue(), e.getValue().contains("/tmp"));<a name="line.643"></a>
-<span class="sourceLineNo">644</span> * }<a name="line.644"></a>
-<span class="sourceLineNo">645</span> * </pre><a name="line.645"></a>
-<span class="sourceLineNo">646</span> */<a name="line.646"></a>
-<span class="sourceLineNo">647</span> private void createDirsAndSetProperties() throws IOException {<a name="line.647"></a>
-<span class="sourceLineNo">648</span> setupClusterTestDir();<a name="line.648"></a>
-<span class="sourceLineNo">649</span> conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.649"></a>
-<span class="sourceLineNo">650</span> System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.650"></a>
-<span class="sourceLineNo">651</span> createDirAndSetProperty("test.cache.data");<a name="line.651"></a>
-<span class="sourceLineNo">652</span> createDirAndSetProperty("hadoop.tmp.dir");<a name="line.652"></a>
-<span class="sourceLineNo">653</span> hadoopLogDir = createDirAndSetProperty("hadoop.log.dir");<a name="line.653"></a>
-<span class="sourceLineNo">654</span> createDirAndSetProperty("mapreduce.cluster.local.dir");<a name="line.654"></a>
-<span class="sourceLineNo">655</span> createDirAndSetProperty("mapreduce.cluster.temp.dir");<a name="line.655"></a>
-<span class="sourceLineNo">656</span> enableShortCircuit();<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span> Path root = getDataTestDirOnTestFS("hadoop");<a name="line.658"></a>
-<span class="sourceLineNo">659</span> conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.659"></a>
-<span class="sourceLineNo">660</span> new Path(root, "mapred-output-dir").toString());<a name="line.660"></a>
-<span class="sourceLineNo">661</span> conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.661"></a>
-<span class="sourceLineNo">662</span> conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.662"></a>
-<span class="sourceLineNo">663</span> new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.663"></a>
-<span class="sourceLineNo">664</span> conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.664"></a>
-<span class="sourceLineNo">665</span> conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.665"></a>
-<span class="sourceLineNo">666</span> new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span> // Frustrate yarn's and hdfs's attempts at writing /tmp.<a name="line.668"></a>
-<span class="sourceLineNo">669</span> // Below is fragile. Make it so we just interpolate any 'tmp' reference.<a name="line.669"></a>
-<span class="sourceLineNo">670</span> createDirAndSetProperty("yarn.node-labels.fs-store.root-dir");<a name="line.670"></a>
-<span class="sourceLineNo">671</span> createDirAndSetProperty("yarn.node-attribute.fs-store.root-dir");<a name="line.671"></a>
-<span class="sourceLineNo">672</span> createDirAndSetProperty("yarn.nodemanager.log-dirs");<a name="line.672"></a>
-<span class="sourceLineNo">673</span> createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.673"></a>
-<span class="sourceLineNo">674</span> createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.active-dir");<a name="line.674"></a>
-<span class="sourceLineNo">675</span> createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.done-dir");<a name="line.675"></a>
-<span class="sourceLineNo">676</span> createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.676"></a>
-<span class="sourceLineNo">677</span> createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.677"></a>
-<span class="sourceLineNo">678</span> createDirAndSetProperty("dfs.datanode.shared.file.descriptor.paths");<a name="line.678"></a>
-<span class="sourceLineNo">679</span> createDirAndSetProperty("nfs.dump.dir");<a name="line.679"></a>
-<span class="sourceLineNo">680</span> createDirAndSetProperty("java.io.tmpdir");<a name="line.680"></a>
-<span class="sourceLineNo">681</span> createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.681"></a>
-<span class="sourceLineNo">682</span> createDirAndSetProperty("dfs.provided.aliasmap.inmemory.leveldb.dir");<a name="line.682"></a>
-<span class="sourceLineNo">683</span> createDirAndSetProperty("fs.s3a.committer.staging.tmp.path");<a name="line.683"></a>
-<span class="sourceLineNo">684</span> }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span> /**<a name="line.686"></a>
-<span class="sourceLineNo">687</span> * Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating<a name="line.687"></a>
-<span class="sourceLineNo">688</span> * new column families. Default to false.<a name="line.688"></a>
-<span class="sourceLineNo">689</span> */<a name="line.689"></a>
-<span class="sourceLineNo">690</span> public boolean isNewVersionBehaviorEnabled(){<a name="line.690"></a>
-<span class="sourceLineNo">691</span> final String propName = "hbase.tests.new.version.behavior";<a name="line.691"></a>
-<span class="sourceLineNo">692</span> String v = System.getProperty(propName);<a name="line.692"></a>
-<span class="sourceLineNo">693</span> if (v != null){<a name="line.693"></a>
-<span class="sourceLineNo">694</span> return Boolean.parseBoolean(v);<a name="line.694"></a>
-<span class="sourceLineNo">695</span> }<a name="line.695"></a>
-<span class="sourceLineNo">696</span> return false;<a name="line.696"></a>
-<span class="sourceLineNo">697</span> }<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span> /**<a name="line.699"></a>
-<span class="sourceLineNo">700</span> * Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.<a name="line.700"></a>
-<span class="sourceLineNo">701</span> * This allows to specify this parameter on the command line.<a name="line.701"></a>
-<span class="sourceLineNo">702</span> * If not set, default is true.<a name="line.702"></a>
-<span class="sourceLineNo">703</span> */<a name="line.703"></a>
-<span class="sourceLineNo">704</span> public boolean isReadShortCircuitOn(){<a name="line.704"></a>
-<span class="sourceLineNo">705</span> final String propName = "hbase.tests.use.shortcircuit.reads";<a name="line.705"></a>
-<span class="sourceLineNo">706</span> String readOnProp = System.getProperty(propName);<a name="line.706"></a>
-<span class="sourceLineNo">707</span> if (readOnProp != null){<a name="line.707"></a>
-<span class="sourceLineNo">708</span> return Boolean.parseBoolean(readOnProp);<a name="line.708"></a>
-<span class="sourceLineNo">709</span> } else {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> return conf.getBoolean(propName, false);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> }<a name="line.711"></a>
-<span class="sourceLineNo">712</span> }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span> /** Enable the short circuit read, unless configured differently.<a name="line.714"></a>
-<span class="sourceLineNo">715</span> * Set both HBase and HDFS settings, including skipping the hdfs checksum checks.<a name="line.715"></a>
-<span class="sourceLineNo">716</span> */<a name="line.716"></a>
-<span class="sourceLineNo">717</span> private void enableShortCircuit() {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> if (isReadShortCircuitOn()) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span> String curUser = System.getProperty("user.name");<a name="line.719"></a>
-<span class="sourceLineNo">720</span> LOG.info("read short circuit is ON for user " + curUser);<a name="line.720"></a>
-<span class="sourceLineNo">721</span> // read short circuit, for hdfs<a name="line.721"></a>
-<span class="sourceLineNo">722</span> conf.set("dfs.block.local-path-access.user", curUser);<a name="line.722"></a>
-<span class="sourceLineNo">723</span> // read short circuit, for hbase<a name="line.723"></a>
-<span class="sourceLineNo">724</span> conf.setBoolean("dfs.client.read.shortcircuit", true);<a name="line.724"></a>
-<span class="sourceLineNo">725</span> // Skip checking checksum, for the hdfs client and the datanode<a name="line.725"></a>
-<span class="sourceLineNo">726</span> conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true);<a name="line.726"></a>
-<span class="sourceLineNo">727</span> } else {<a name="line.727"></a>
-<span class="sourceLineNo">728</span> LOG.info("read short circuit is OFF");<a name="line.728"></a>
-<span class="sourceLineNo">729</span> }<a name="line.729"></a>
-<span class="sourceLineNo">730</span> }<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span> private String createDirAndSetProperty(final String property) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span> return createDirAndSetProperty(property, property);<a name="line.733"></a>
-<span class="sourceLineNo">734</span> }<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span> private String createDirAndSetProperty(final String relPath, String property) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span> String path = getDataTestDir(relPath).toString();<a name="line.737"></a>
-<span class="sourceLineNo">738</span> System.setProperty(property, path);<a name="line.738"></a>
-<span class="sourceLineNo">739</span> conf.set(property, path);<a name="line.739"></a>
-<span class="sourceLineNo">740</span> new File(path).mkdirs();<a name="line.740"></a>
-<span class="sourceLineNo">741</span> LOG.info("Setting " + property + " to " + path + " in system properties and HBase conf");<a name="line.741"></a>
-<span class="sourceLineNo">742</span> return path;<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> /**<a name="line.745"></a>
-<span class="sourceLineNo">746</span> * Shuts down instance created by call to {@link #startMiniDFSCluster(int)}<a name="line.746"></a>
-<span class="sourceLineNo">747</span> * or does nothing.<a name="line.747"></a>
-<span class="sourceLineNo">748</span> * @throws IOException<a name="line.748"></a>
-<span class="sourceLineNo">749</span> */<a name="line.749"></a>
-<span class="sourceLineNo">750</span> public void shutdownMiniDFSCluster() throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span> if (this.dfsCluster != null) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span> // The below throws an exception per dn, AsynchronousCloseException.<a name="line.752"></a>
-<span class="sourceLineNo">753</span> this.dfsCluster.shutdown();<a name="line.753"></a>
-<span class="sourceLineNo">754</span> dfsCluster = null;<a name="line.754"></a>
-<span class="sourceLineNo">755</span> dataTestDirOnTestFS = null;<a name="line.755"></a>
-<span class="sourceLineNo">756</span> CommonFSUtils.setFsDefault(this.conf, new Path("file:///"));<a name="line.756"></a>
-<span class="sourceLineNo">757</span> }<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span> /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span> * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.<a name="line.761"></a>
-<span class="sourceLineNo">762</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.762"></a>
-<span class="sourceLineNo">763</span> * @param createWALDir Whether to create a new WAL directory.<a name="line.763"></a>
-<span class="sourceLineNo">764</span> * @return The mini HBase cluster created.<a name="line.764"></a>
-<span class="sourceLineNo">765</span> * @see #shutdownMiniCluster()<a name="line.765"></a>
-<span class="sourceLineNo">766</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.766"></a>
-<span class="sourceLineNo">767</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.767"></a>
-<span class="sourceLineNo">768</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.768"></a>
-<span class="sourceLineNo">769</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.769"></a>
-<span class="sourceLineNo">770</span> */<a name="line.770"></a>
-<span class="sourceLineNo">771</span> @Deprecated<a name="line.771"></a>
-<span class="sourceLineNo">772</span> public MiniHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {<a name="line.772"></a>
-<span class="sourceLineNo">773</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.773"></a>
-<span class="sourceLineNo">774</span> .createWALDir(createWALDir).build();<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return startMiniCluster(option);<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> /**<a name="line.778"></a>
-<span class="sourceLineNo">779</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.779"></a>
-<span class="sourceLineNo">780</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.780"></a>
-<span class="sourceLineNo">781</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.781"></a>
-<span class="sourceLineNo">782</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.782"></a>
-<span class="sourceLineNo">783</span> * @return The mini HBase cluster created.<a name="line.783"></a>
-<span class="sourceLineNo">784</span> * @see #shutdownMiniCluster()<a name="line.784"></a>
-<span class="sourceLineNo">785</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.785"></a>
-<span class="sourceLineNo">786</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.786"></a>
-<span class="sourceLineNo">787</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.787"></a>
-<span class="sourceLineNo">788</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.788"></a>
-<span class="sourceLineNo">789</span> */<a name="line.789"></a>
-<span class="sourceLineNo">790</span> @Deprecated<a name="line.790"></a>
-<span class="sourceLineNo">791</span> public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir)<a name="line.791"></a>
-<span class="sourceLineNo">792</span> throws Exception {<a name="line.792"></a>
-<span class="sourceLineNo">793</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.793"></a>
-<span class="sourceLineNo">794</span> .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir).build();<a name="line.794"></a>
-<span class="sourceLineNo">795</span> return startMiniCluster(option);<a name="line.795"></a>
-<span class="sourceLineNo">796</span> }<a name="line.796"></a>
-<span class="sourceLineNo">797</span><a name="line.797"></a>
-<span class="sourceLineNo">798</span> /**<a name="line.798"></a>
-<span class="sourceLineNo">799</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.799"></a>
-<span class="sourceLineNo">800</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.800"></a>
-<span class="sourceLineNo">801</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.801"></a>
-<span class="sourceLineNo">802</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.802"></a>
-<span class="sourceLineNo">803</span> * @param createWALDir Whether to create a new WAL directory.<a name="line.803"></a>
-<span class="sourceLineNo">804</span> * @return The mini HBase cluster created.<a name="line.804"></a>
-<span class="sourceLineNo">805</span> * @see #shutdownMiniCluster()<a name="line.805"></a>
-<span class="sourceLineNo">806</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.806"></a>
-<span class="sourceLineNo">807</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.807"></a>
-<span class="sourceLineNo">808</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.808"></a>
-<span class="sourceLineNo">809</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.809"></a>
-<span class="sourceLineNo">810</span> */<a name="line.810"></a>
-<span class="sourceLineNo">811</span> @Deprecated<a name="line.811"></a>
-<span class="sourceLineNo">812</span> public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,<a name="line.812"></a>
-<span class="sourceLineNo">813</span> boolean createWALDir) throws Exception {<a name="line.813"></a>
-<span class="sourceLineNo">814</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.814"></a>
-<span class="sourceLineNo">815</span> .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir)<a name="line.815"></a>
-<span class="sourceLineNo">816</span> .createWALDir(createWALDir).build();<a name="line.816"></a>
-<span class="sourceLineNo">817</span> return startMiniCluster(option);<a name="line.817"></a>
-<span class="sourceLineNo">818</span> }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span> /**<a name="line.820"></a>
-<span class="sourceLineNo">821</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.821"></a>
-<span class="sourceLineNo">822</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.822"></a>
-<span class="sourceLineNo">823</span> * @param numMasters Master node number.<a name="line.823"></a>
-<span class="sourceLineNo">824</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.824"></a>
-<span class="sourceLineNo">825</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.825"></a>
-<span class="sourceLineNo">826</span> * @return The mini HBase cluster created.<a name="line.826"></a>
-<span class="sourceLineNo">827</span> * @see #shutdownMiniCluster()<a name="line.827"></a>
-<span class="sourceLineNo">828</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.828"></a>
-<span class="sourceLineNo">829</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.829"></a>
-<span class="sourceLineNo">830</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.830"></a>
-<span class="sourceLineNo">831</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.831"></a>
-<span class="sourceLineNo">832</span> */<a name="line.832"></a>
-<span class="sourceLineNo">833</span> @Deprecated<a name="line.833"></a>
-<span class="sourceLineNo">834</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)<a name="line.834"></a>
-<span class="sourceLineNo">835</span> throws Exception {<a name="line.835"></a>
-<span class="sourceLineNo">836</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.836"></a>
-<span class="sourceLineNo">837</span> .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.837"></a>
-<span class="sourceLineNo">838</span> .numDataNodes(numSlaves).build();<a name="line.838"></a>
-<span class="sourceLineNo">839</span> return startMiniCluster(option);<a name="line.839"></a>
-<span class="sourceLineNo">840</span> }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span> /**<a name="line.842"></a>
-<span class="sourceLineNo">843</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @param numMasters Master node number.<a name="line.845"></a>
-<span class="sourceLineNo">846</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.846"></a>
-<span class="sourceLineNo">847</span> * @return The mini HBase cluster created.<a name="line.847"></a>
-<span class="sourceLineNo">848</span> * @see #shutdownMiniCluster()<a name="line.848"></a>
-<span class="sourceLineNo">849</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.849"></a>
-<span class="sourceLineNo">850</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.850"></a>
-<span class="sourceLineNo">851</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.851"></a>
-<span class="sourceLineNo">852</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.852"></a>
-<span class="sourceLineNo">853</span> */<a name="line.853"></a>
-<span class="sourceLineNo">854</span> @Deprecated<a name="line.854"></a>
-<span class="sourceLineNo">855</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {<a name="line.855"></a>
-<span class="sourceLineNo">856</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.856"></a>
-<span class="sourceLineNo">857</span> .numMasters(numMasters).numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.857"></a>
-<span class="sourceLineNo">858</span> return startMiniCluster(option);<a name="line.858"></a>
-<span class="sourceLineNo">859</span> }<a name="line.859"></a>
-<span class="sourceLineNo">860</span><a name="line.860"></a>
-<span class="sourceLineNo">861</span> /**<a name="line.861"></a>
-<span class="sourceLineNo">862</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.862"></a>
-<span class="sourceLineNo">863</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.863"></a>
-<span class="sourceLineNo">864</span> * @param numMasters Master node number.<a name="line.864"></a>
-<span class="sourceLineNo">865</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.865"></a>
-<span class="sourceLineNo">866</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.866"></a>
-<span class="sourceLineNo">867</span> * HDFS data node number.<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.868"></a>
-<span class="sourceLineNo">869</span> * @return The mini HBase cluster created.<a name="line.869"></a>
-<span class="sourceLineNo">870</span> * @see #shutdownMiniCluster()<a name="line.870"></a>
-<span class="sourceLineNo">871</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.871"></a>
-<span class="sourceLineNo">872</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.872"></a>
-<span class="sourceLineNo">873</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.873"></a>
-<span class="sourceLineNo">874</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.874"></a>
-<span class="sourceLineNo">875</span> */<a name="line.875"></a>
-<span class="sourceLineNo">876</span> @Deprecated<a name="line.876"></a>
-<span class="sourceLineNo">877</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.877"></a>
-<span class="sourceLineNo">878</span> boolean createRootDir) throws Exception {<a name="line.878"></a>
-<span class="sourceLineNo">879</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.879"></a>
-<span class="sourceLineNo">880</span> .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.880"></a>
-<span class="sourceLineNo">881</span> .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.881"></a>
-<span class="sourceLineNo">882</span> return startMiniCluster(option);<a name="line.882"></a>
-<span class="sourceLineNo">883</span> }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span> /**<a name="line.885"></a>
-<span class="sourceLineNo">886</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.886"></a>
-<span class="sourceLineNo">887</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.887"></a>
-<span class="sourceLineNo">888</span> * @param numMasters Master node number.<a name="line.888"></a>
-<span class="sourceLineNo">889</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.889"></a>
-<span class="sourceLineNo">890</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.890"></a>
-<span class="sourceLineNo">891</span> * HDFS data node number.<a name="line.891"></a>
-<span class="sourceLineNo">892</span> * @return The mini HBase cluster created.<a name="line.892"></a>
-<span class="sourceLineNo">893</span> * @see #shutdownMiniCluster()<a name="line.893"></a>
-<span class="sourceLineNo">894</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.894"></a>
-<span class="sourceLineNo">895</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.895"></a>
-<span class="sourceLineNo">896</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.896"></a>
-<span class="sourceLineNo">897</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.897"></a>
-<span class="sourceLineNo">898</span> */<a name="line.898"></a>
-<span class="sourceLineNo">899</span> @Deprecated<a name="line.899"></a>
-<span class="sourceLineNo">900</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)<a name="line.900"></a>
-<span class="sourceLineNo">901</span> throws Exception {<a name="line.901"></a>
-<span class="sourceLineNo">902</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.902"></a>
-<span class="sourceLineNo">903</span> .numMasters(numMasters).numRegionServers(numSlaves)<a name="line.903"></a>
-<span class="sourceLineNo">904</span> .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.904"></a>
-<span class="sourceLineNo">905</span> return startMiniCluster(option);<a name="line.905"></a>
-<span class="sourceLineNo">906</span> }<a name="line.906"></a>
-<span class="sourceLineNo">907</span><a name="line.907"></a>
-<span class="sourceLineNo">908</span> /**<a name="line.908"></a>
-<span class="sourceLineNo">909</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.909"></a>
-<span class="sourceLineNo">910</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.910"></a>
-<span class="sourceLineNo">911</span> * @param numMasters Master node number.<a name="line.911"></a>
-<span class="sourceLineNo">912</span> * @param numRegionServers Number of region servers.<a name="line.912"></a>
-<span class="sourceLineNo">913</span> * @param numDataNodes Number of datanodes.<a name="line.913"></a>
-<span class="sourceLineNo">914</span> * @return The mini HBase cluster created.<a name="line.914"></a>
-<span class="sourceLineNo">915</span> * @see #shutdownMiniCluster()<a name="line.915"></a>
-<span class="sourceLineNo">916</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.916"></a>
-<span class="sourceLineNo">917</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.917"></a>
-<span class="sourceLineNo">918</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.918"></a>
-<span class="sourceLineNo">919</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.919"></a>
-<span class="sourceLineNo">920</span> */<a name="line.920"></a>
-<span class="sourceLineNo">921</span> @Deprecated<a name="line.921"></a>
-<span class="sourceLineNo">922</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)<a name="line.922"></a>
-<span class="sourceLineNo">923</span> throws Exception {<a name="line.923"></a>
-<span class="sourceLineNo">924</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.924"></a>
-<span class="sourceLineNo">925</span> .numMasters(numMasters).numRegionServers(numRegionServers).numDataNodes(numDataNodes)<a name="line.925"></a>
-<span class="sourceLineNo">926</span> .build();<a name="line.926"></a>
-<span class="sourceLineNo">927</span> return startMiniCluster(option);<a name="line.927"></a>
-<span class="sourceLineNo">928</span> }<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span> /**<a name="line.930"></a>
-<span class="sourceLineNo">931</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.931"></a>
-<span class="sourceLineNo">932</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.932"></a>
-<span class="sourceLineNo">933</span> * @param numMasters Master node number.<a name="line.933"></a>
-<span class="sourceLineNo">934</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.934"></a>
-<span class="sourceLineNo">935</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.935"></a>
-<span class="sourceLineNo">936</span> * HDFS data node number.<a name="line.936"></a>
-<span class="sourceLineNo">937</span> * @param masterClass The class to use as HMaster, or null for default.<a name="line.937"></a>
-<span class="sourceLineNo">938</span> * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.938"></a>
-<span class="sourceLineNo">939</span> * @return The mini HBase cluster created.<a name="line.939"></a>
-<span class="sourceLineNo">940</span> * @see #shutdownMiniCluster()<a name="line.940"></a>
-<span class="sourceLineNo">941</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.941"></a>
-<span class="sourceLineNo">942</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.942"></a>
-<span class="sourceLineNo">943</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.943"></a>
-<span class="sourceLineNo">944</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.944"></a>
-<span class="sourceLineNo">945</span> */<a name="line.945"></a>
-<span class="sourceLineNo">946</span> @Deprecated<a name="line.946"></a>
-<span class="sourceLineNo">947</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.947"></a>
-<span class="sourceLineNo">948</span> Class<? extends HMaster> masterClass,<a name="line.948"></a>
-<span class="sourceLineNo">949</span> Class<? extends MiniHBaseCluster.MiniHBaseClusterRegionServer> rsClass)<a name="line.949"></a>
-<span class="sourceLineNo">950</span> throws Exception {<a name="line.950"></a>
-<span class="sourceLineNo">951</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.951"></a>
-<span class="sourceLineNo">952</span> .numMasters(numMasters).masterClass(masterClass)<a name="line.952"></a>
-<span class="sourceLineNo">953</span> .numRegionServers(numSlaves).rsClass(rsClass)<a name="line.953"></a>
-<span class="sourceLineNo">954</span> .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts)<a name="line.954"></a>
-<span class="sourceLineNo">955</span> .build();<a name="line.955"></a>
-<span class="sourceLineNo">956</span> return startMiniCluster(option);<a name="line.956"></a>
-<span class="sourceLineNo">957</span> }<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span> /**<a name="line.959"></a>
-<span class="sourceLineNo">960</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.960"></a>
-<span class="sourceLineNo">961</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.961"></a>
-<span class="sourceLineNo">962</span> * @param numMasters Master node number.<a name="line.962"></a>
-<span class="sourceLineNo">963</span> * @param numRegionServers Number of region servers.<a name="line.963"></a>
-<span class="sourceLineNo">964</span> * @param numDataNodes Number of datanodes.<a name="line.964"></a>
-<span class="sourceLineNo">965</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.965"></a>
-<span class="sourceLineNo">966</span> * HDFS data node number.<a name="line.966"></a>
-<span class="sourceLineNo">967</span> * @param masterClass The class to use as HMaster, or null for default.<a name="line.967"></a>
-<span class="sourceLineNo">968</span> * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.968"></a>
-<span class="sourceLineNo">969</span> * @return The mini HBase cluster created.<a name="line.969"></a>
-<span class="sourceLineNo">970</span> * @see #shutdownMiniCluster()<a name="line.970"></a>
-<span class="sourceLineNo">971</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.971"></a>
-<span class="sourceLineNo">972</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.972"></a>
-<span class="sourceLineNo">973</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.973"></a>
-<span class="sourceLineNo">974</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.974"></a>
-<span class="sourceLineNo">975</span> */<a name="line.975"></a>
-<span class="sourceLineNo">976</span> @Deprecated<a name="line.976"></a>
-<span class="sourceLineNo">977</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.977"></a>
-<span class="sourceLineNo">978</span> String[] dataNodeHosts, Class<? extends HMaster> masterClass,<a name="line.978"></a>
-<span class="sourceLineNo">979</span> Class<? extends MiniHBaseCluster.MiniHBaseClusterRegionServer> rsClass)<a name="line.979"></a>
-<span class="sourceLineNo">980</span> throws Exception {<a name="line.980"></a>
-<span class="sourceLineNo">981</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.981"></a>
-<span class="sourceLineNo">982</span> .numMasters(numMasters).masterClass(masterClass)<a name="line.982"></a>
-<span class="sourceLineNo">983</span> .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.983"></a>
-<span class="sourceLineNo">984</span> .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.984"></a>
-<span class="sourceLineNo">985</span> .build();<a name="line.985"></a>
-<span class="sourceLineNo">986</span> return startMiniCluster(option);<a name="line.986"></a>
-<span class="sourceLineNo">987</span> }<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span> /**<a name="line.989"></a>
-<span class="sourceLineNo">990</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.990"></a>
-<span class="sourceLineNo">991</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.991"></a>
-<span class="sourceLineNo">992</span> * @param numMasters Master node number.<a name="line.992"></a>
-<span class="sourceLineNo">993</span> * @param numRegionServers Number of region servers.<a name="line.993"></a>
-<span class="sourceLineNo">994</span> * @param numDataNodes Number of datanodes.<a name="line.994"></a>
-<span class="sourceLineNo">995</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.995"></a>
-<span class="sourceLineNo">996</span> * HDFS data node number.<a name="line.996"></a>
-<span class="sourceLineNo">997</span> * @param masterClass The class to use as HMaster, or null for default.<a name="line.997"></a>
-<span class="sourceLineNo">998</span> * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.998"></a>
-<span class="sourceLineNo">999</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> * @param createWALDir Whether to create a new WAL directory.<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> * @return The mini HBase cluster created.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> * @see #shutdownMiniCluster()<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> */<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> @Deprecated<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> String[] dataNodeHosts, Class<? extends HMaster> masterClass,<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> Class<? extends MiniHBaseCluster.MiniHBaseClusterRegionServer> rsClass, boolean createRootDir,<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> boolean createWALDir) throws Exception {<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> .numMasters(numMasters).masterClass(masterClass)<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> .createRootDir(createRootDir).createWALDir(createWALDir)<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> .build();<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> return startMiniCluster(option);<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span><a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> /**<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> * @param numSlaves slave node number, for both HBase region server and HDFS data node.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> * @see #shutdownMiniDFSCluster()<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> */<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> public MiniHBaseCluster startMiniCluster(int numSlaves) throws Exception {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> .numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> return startMiniCluster(option);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> }<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span><a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> /**<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> * Start up a minicluster of hbase, dfs and zookeeper all using default options.<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> * Option default value can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span> * @see #shutdownMiniDFSCluster()<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> */<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> public MiniHBaseCluster startMiniCluster() throws Exception {<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> return startMiniCluster(StartMiniClusterOption.builder().build());<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> /**<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span> * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> * It modifies Configuration. It homes the cluster data directory under a random<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> * subdirectory in a directory under System property test.build.data, to be cleaned up on exit.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> * @see #shutdownMiniDFSCluster()<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> */<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> public MiniHBaseCluster startMiniCluster(StartMiniClusterOption option) throws Exception {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> LOG.info("Starting up minicluster with option: {}", option);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span><a name="line.1053"></a>
-<span class="sourceLineNo">1054</span> // If we already put up a cluster, fail.<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> if (miniClusterRunning) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span> throw new IllegalStateException("A mini-cluster is already running");<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span> miniClusterRunning = true;<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span><a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> setupClusterTestDir();<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> System.setProperty(TEST_DIRECTORY_KEY, this.clusterTestDir.getPath());<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span><a name="line.1062"></a>
-<span class="sourceLineNo">1063</span> // Bring up mini dfs cluster. This spews a bunch of warnings about missing<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> // scheme. Complaints are 'Scheme is undefined for build/test/data/dfs/name1'.<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span> if (dfsCluster == null) {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> LOG.info("STARTING DFS");<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> dfsCluster = startMiniDFSCluster(option.getNumDataNodes(), option.getDataNodeHosts());<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> } else {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> LOG.info("NOT STARTING DFS");<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> }<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span><a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> // Start up a zk cluster.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span> if (getZkCluster() == null) {<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> startMiniZKCluster(option.getNumZkServers());<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> }<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span><a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> // Start the MiniHBaseCluster<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> return startMiniHBaseCluster(option);<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> }<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span><a name="line.1080"></a>
-<span class="sourceLineNo">1081</span> /**<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> * Starts up mini hbase cluster. Usually you won't want this. You'll usually want<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> * {@link #startMiniCluster()}. This is useful when doing stepped startup of clusters.<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> * @return Reference to the hbase mini hbase cluster.<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> * @see #shutdownMiniHBaseCluster()<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> */<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> public MiniHBaseCluster startMiniHBaseCluster(StartMiniClusterOption option)<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> throws IOException, InterruptedException {<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> // Now do the mini hbase cluster. Set the hbase.rootdir in config.<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span> createRootDir(option.isCreateRootDir());<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span> if (option.isCreateWALDir()) {<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span> createWALRootDir();<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span> }<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span> // Set the hbase.fs.tmp.dir config to make sure that we have some default value. This is<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span> // for tests that do not read hbase-defaults.xml<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span> setHBaseFsTmpDir();<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span><a name="line.1098"></a>
-<span class="sourceLineNo">1099</span> // These settings will make the server waits until this exact number of<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span> // regions servers are connected.<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span> if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1) == -1) {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, option.getNumRegionServers());<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span> }<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span> if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1) == -1) {<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, option.getNumRegionServers());<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span> }<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span><a name="line.1107"></a>
-<span class="sourceLineNo">1108</span> // Avoid log flooded with chore execution time, see HBASE-24646 for more details.<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span> Log4jUtils.setLogLevel(org.apache.hadoop.hbase.ScheduledChore.class.getName(), "INFO");<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span><a name="line.1110"></a>
-<span class="sourceLineNo">1111</span> Configuration c = new Configuration(this.conf);<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span> this.hbaseCluster = new MiniHBaseCluster(c, option.getNumMasters(),<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span> option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span> option.getMasterClass(), option.getRsClass());<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span> // Populate the master address configuration from mini cluster configuration.<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span> conf.set(HConstants.MASTER_ADDRS_KEY, MasterRegistry.getMasterAddr(c));<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span> // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span> try (Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span> ResultScanner s = t.getScanner(new Scan())) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span> for (;;) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span> if (s.next() == null) {<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span> break;<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span> }<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span> }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span> }<a name="line.1125"></a>
+<span class="sourceLineNo">295</span> /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span> * <p>Create an HBaseTestingUtility using a default configuration.<a name="line.296"></a>
+<span class="sourceLineNo">297</span> *<a name="line.297"></a>
+<span class="sourceLineNo">298</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.299"></a>
+<span class="sourceLineNo">300</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.300"></a>
+<span class="sourceLineNo">301</span> */<a name="line.301"></a>
+<span class="sourceLineNo">302</span> public HBaseTestingUtility() {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> this(HBaseConfiguration.create());<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span> /**<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * <p>Create an HBaseTestingUtility using a given configuration.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> *<a name="line.308"></a>
+<span class="sourceLineNo">309</span> * <p>Initially, all tmp files are written to a local test data directory.<a name="line.309"></a>
+<span class="sourceLineNo">310</span> * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.310"></a>
+<span class="sourceLineNo">311</span> * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.311"></a>
+<span class="sourceLineNo">312</span> *<a name="line.312"></a>
+<span class="sourceLineNo">313</span> * @param conf The configuration to use for further operations<a name="line.313"></a>
+<span class="sourceLineNo">314</span> */<a name="line.314"></a>
+<span class="sourceLineNo">315</span> public HBaseTestingUtility(Configuration conf) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> super(conf);<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> // a hbase checksum verification failure will cause unit tests to fail<a name="line.318"></a>
+<span class="sourceLineNo">319</span> ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span> // Save this for when setting default file:// breaks things<a name="line.321"></a>
+<span class="sourceLineNo">322</span> if (this.conf.get("fs.defaultFS") != null) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span> if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span> this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.326"></a>
+<span class="sourceLineNo">327</span> }<a name="line.327"></a>
+<span class="sourceLineNo">328</span> // Every cluster is a local cluster until we start DFS<a name="line.328"></a>
+<span class="sourceLineNo">329</span> // Note that conf could be null, but this.conf will not be<a name="line.329"></a>
+<span class="sourceLineNo">330</span> String dataTestDir = getDataTestDir().toString();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> this.conf.set("fs.defaultFS","file:///");<a name="line.331"></a>
+<span class="sourceLineNo">332</span> this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.334"></a>
+<span class="sourceLineNo">335</span> // If the value for random ports isn't set set it to true, thus making<a name="line.335"></a>
+<span class="sourceLineNo">336</span> // tests opt-out for random port assignment<a name="line.336"></a>
+<span class="sourceLineNo">337</span> this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.337"></a>
+<span class="sourceLineNo">338</span> this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.338"></a>
+<span class="sourceLineNo">339</span> }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.342"></a>
+<span class="sourceLineNo">343</span> */<a name="line.343"></a>
+<span class="sourceLineNo">344</span> public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> closeRegionAndWAL((HRegion)r);<a name="line.345"></a>
+<span class="sourceLineNo">346</span> }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span> /**<a name="line.348"></a>
+<span class="sourceLineNo">349</span> * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.349"></a>
+<span class="sourceLineNo">350</span> */<a name="line.350"></a>
+<span class="sourceLineNo">351</span> public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.351"></a>
+<span class="sourceLineNo">352</span> if (r == null) return;<a name="line.352"></a>
+<span class="sourceLineNo">353</span> r.close();<a name="line.353"></a>
+<span class="sourceLineNo">354</span> if (r.getWAL() == null) return;<a name="line.354"></a>
+<span class="sourceLineNo">355</span> r.getWAL().close();<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> /**<a name="line.358"></a>
+<span class="sourceLineNo">359</span> * Returns this classes's instance of {@link Configuration}. Be careful how<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * you use the returned Configuration since {@link Connection} instances<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * can be shared. The Map of Connections is keyed by the Configuration. If<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * say, a Connection was being used against a cluster that had been shutdown,<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * be wholesome. Rather than use the return direct, its usually best to<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * make a copy and use that. Do<a name="line.365"></a>
+<span class="sourceLineNo">366</span> * <code>Configuration c = new Configuration(INSTANCE.getConfiguration());</code><a name="line.366"></a>
+<span class="sourceLineNo">367</span> * @return Instance of Configuration.<a name="line.367"></a>
+<span class="sourceLineNo">368</span> */<a name="line.368"></a>
+<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
+<span class="sourceLineNo">370</span> public Configuration getConfiguration() {<a name="line.370"></a>
+<span class="sourceLineNo">371</span> return super.getConfiguration();<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span> this.hbaseCluster = hbaseCluster;<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span> /**<a name="line.378"></a>
+<span class="sourceLineNo">379</span> * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.379"></a>
+<span class="sourceLineNo">380</span> * Give it a random name so can have many concurrent tests running if<a name="line.380"></a>
+<span class="sourceLineNo">381</span> * we need to. It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.381"></a>
+<span class="sourceLineNo">382</span> * System property, as it's what minidfscluster bases<a name="line.382"></a>
+<span class="sourceLineNo">383</span> * it data dir on. Moding a System property is not the way to do concurrent<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * instances -- another instance could grab the temporary<a name="line.384"></a>
+<span class="sourceLineNo">385</span> * value unintentionally -- but not anything can do about it at moment;<a name="line.385"></a>
+<span class="sourceLineNo">386</span> * single instance only is how the minidfscluster works.<a name="line.386"></a>
+<span class="sourceLineNo">387</span> *<a name="line.387"></a>
+<span class="sourceLineNo">388</span> * We also create the underlying directory names for<a name="line.388"></a>
+<span class="sourceLineNo">389</span> * hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.389"></a>
+<span class="sourceLineNo">390</span> * in the conf, and as a system property for hadoop.tmp.dir (We do not create them!).<a name="line.390"></a>
+<span class="sourceLineNo">391</span> *<a name="line.391"></a>
+<span class="sourceLineNo">392</span> * @return The calculated data test build directory, if newly-created.<a name="line.392"></a>
+<span class="sourceLineNo">393</span> */<a name="line.393"></a>
+<span class="sourceLineNo">394</span> @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span> protected Path setupDataTestDir() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> Path testPath = super.setupDataTestDir();<a name="line.396"></a>
+<span class="sourceLineNo">397</span> if (null == testPath) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return null;<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> createSubDirAndSystemProperty(<a name="line.401"></a>
+<span class="sourceLineNo">402</span> "hadoop.log.dir",<a name="line.402"></a>
+<span class="sourceLineNo">403</span> testPath, "hadoop-log-dir");<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span> // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.405"></a>
+<span class="sourceLineNo">406</span> // we want our own value to ensure uniqueness on the same machine<a name="line.406"></a>
+<span class="sourceLineNo">407</span> createSubDirAndSystemProperty(<a name="line.407"></a>
+<span class="sourceLineNo">408</span> "hadoop.tmp.dir",<a name="line.408"></a>
+<span class="sourceLineNo">409</span> testPath, "hadoop-tmp-dir");<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span> // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.411"></a>
+<span class="sourceLineNo">412</span> createSubDir(<a name="line.412"></a>
+<span class="sourceLineNo">413</span> "mapreduce.cluster.local.dir",<a name="line.413"></a>
+<span class="sourceLineNo">414</span> testPath, "mapred-local-dir");<a name="line.414"></a>
+<span class="sourceLineNo">415</span> return testPath;<a name="line.415"></a>
+<span class="sourceLineNo">416</span> }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span> private void createSubDirAndSystemProperty(<a name="line.418"></a>
+<span class="sourceLineNo">419</span> String propertyName, Path parent, String subDirName){<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span> String sysValue = System.getProperty(propertyName);<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (sysValue != null) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> // There is already a value set. So we do nothing but hope<a name="line.424"></a>
+<span class="sourceLineNo">425</span> // that there will be no conflicts<a name="line.425"></a>
+<span class="sourceLineNo">426</span> LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.426"></a>
+<span class="sourceLineNo">427</span> sysValue + " so I do NOT create it in " + parent);<a name="line.427"></a>
+<span class="sourceLineNo">428</span> String confValue = conf.get(propertyName);<a name="line.428"></a>
+<span class="sourceLineNo">429</span> if (confValue != null && !confValue.endsWith(sysValue)){<a name="line.429"></a>
+<span class="sourceLineNo">430</span> LOG.warn(<a name="line.430"></a>
+<span class="sourceLineNo">431</span> propertyName + " property value differs in configuration and system: "+<a name="line.431"></a>
+<span class="sourceLineNo">432</span> "Configuration="+confValue+" while System="+sysValue+<a name="line.432"></a>
+<span class="sourceLineNo">433</span> " Erasing configuration value by system value."<a name="line.433"></a>
+<span class="sourceLineNo">434</span> );<a name="line.434"></a>
+<span class="sourceLineNo">435</span> }<a name="line.435"></a>
+<span class="sourceLineNo">436</span> conf.set(propertyName, sysValue);<a name="line.436"></a>
+<span class="sourceLineNo">437</span> } else {<a name="line.437"></a>
+<span class="sourceLineNo">438</span> // Ok, it's not set, so we create it as a subdirectory<a name="line.438"></a>
+<span class="sourceLineNo">439</span> createSubDir(propertyName, parent, subDirName);<a name="line.439"></a>
+<span class="sourceLineNo">440</span> System.setProperty(propertyName, conf.get(propertyName));<a name="line.440"></a>
+<span class="sourceLineNo">441</span> }<a name="line.441"></a>
+<span class="sourceLineNo">442</span> }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> /**<a name="line.444"></a>
+<span class="sourceLineNo">445</span> * @return Where to write test data on the test filesystem; Returns working directory<a name="line.445"></a>
+<span class="sourceLineNo">446</span> * for the test filesystem by default<a name="line.446"></a>
+<span class="sourceLineNo">447</span> * @see #setupDataTestDirOnTestFS()<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * @see #getTestFileSystem()<a name="line.448"></a>
+<span class="sourceLineNo">449</span> */<a name="line.449"></a>
+<span class="sourceLineNo">450</span> private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.450"></a>
+<span class="sourceLineNo">451</span> FileSystem fs = getTestFileSystem();<a name="line.451"></a>
+<span class="sourceLineNo">452</span> return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.452"></a>
+<span class="sourceLineNo">453</span> }<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span> /**<a name="line.455"></a>
+<span class="sourceLineNo">456</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.456"></a>
+<span class="sourceLineNo">457</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.457"></a>
+<span class="sourceLineNo">458</span> * if the test relies on it.<a name="line.458"></a>
+<span class="sourceLineNo">459</span> * @return a unique path in the test filesystem<a name="line.459"></a>
+<span class="sourceLineNo">460</span> */<a name="line.460"></a>
+<span class="sourceLineNo">461</span> public Path getDataTestDirOnTestFS() throws IOException {<a name="line.461"></a>
+<span class="sourceLineNo">462</span> if (dataTestDirOnTestFS == null) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> setupDataTestDirOnTestFS();<a name="line.463"></a>
+<span class="sourceLineNo">464</span> }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span> return dataTestDirOnTestFS;<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> /**<a name="line.469"></a>
+<span class="sourceLineNo">470</span> * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.470"></a>
+<span class="sourceLineNo">471</span> * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.471"></a>
+<span class="sourceLineNo">472</span> * if the test relies on it.<a name="line.472"></a>
+<span class="sourceLineNo">473</span> * @return a unique path in the test filesystem<a name="line.473"></a>
+<span class="sourceLineNo">474</span> * @param subdirName name of the subdir to create under the base test dir<a name="line.474"></a>
+<span class="sourceLineNo">475</span> */<a name="line.475"></a>
+<span class="sourceLineNo">476</span> public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.476"></a>
+<span class="sourceLineNo">477</span> return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.477"></a>
+<span class="sourceLineNo">478</span> }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span> /**<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * Sets up a path in test filesystem to be used by tests.<a name="line.481"></a>
+<span class="sourceLineNo">482</span> * Creates a new directory if not already setup.<a name="line.482"></a>
+<span class="sourceLineNo">483</span> */<a name="line.483"></a>
+<span class="sourceLineNo">484</span> private void setupDataTestDirOnTestFS() throws IOException {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> if (dataTestDirOnTestFS != null) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span> LOG.warn("Data test on test fs dir already setup in "<a name="line.486"></a>
+<span class="sourceLineNo">487</span> + dataTestDirOnTestFS.toString());<a name="line.487"></a>
+<span class="sourceLineNo">488</span> return;<a name="line.488"></a>
+<span class="sourceLineNo">489</span> }<a name="line.489"></a>
+<span class="sourceLineNo">490</span> dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<a name="line.490"></a>
+<span class="sourceLineNo">491</span> }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> /**<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * Sets up a new path in test filesystem to be used by tests.<a name="line.494"></a>
+<span class="sourceLineNo">495</span> */<a name="line.495"></a>
+<span class="sourceLineNo">496</span> private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.496"></a>
+<span class="sourceLineNo">497</span> //The file system can be either local, mini dfs, or if the configuration<a name="line.497"></a>
+<span class="sourceLineNo">498</span> //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.498"></a>
+<span class="sourceLineNo">499</span> //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.499"></a>
+<span class="sourceLineNo">500</span> //the working directory, and create a unique sub dir there<a name="line.500"></a>
+<span class="sourceLineNo">501</span> FileSystem fs = getTestFileSystem();<a name="line.501"></a>
+<span class="sourceLineNo">502</span> Path newDataTestDir;<a name="line.502"></a>
+<span class="sourceLineNo">503</span> String randomStr = getRandomUUID().toString();<a name="line.503"></a>
+<span class="sourceLineNo">504</span> if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.504"></a>
+<span class="sourceLineNo">505</span> newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.505"></a>
+<span class="sourceLineNo">506</span> File dataTestDir = new File(newDataTestDir.toString());<a name="line.506"></a>
+<span class="sourceLineNo">507</span> if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.507"></a>
+<span class="sourceLineNo">508</span> } else {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> Path base = getBaseTestDirOnTestFS();<a name="line.509"></a>
+<span class="sourceLineNo">510</span> newDataTestDir = new Path(base, randomStr);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.511"></a>
+<span class="sourceLineNo">512</span> }<a name="line.512"></a>
+<span class="sourceLineNo">513</span> return newDataTestDir;<a name="line.513"></a>
+<span class="sourceLineNo">514</span> }<a name="line.514"></a>
+<span class="sourceLineNo">515</span><a name="line.515"></a>
+<span class="sourceLineNo">516</span> /**<a name="line.516"></a>
+<span class="sourceLineNo">517</span> * Cleans the test data directory on the test filesystem.<a name="line.517"></a>
+<span class="sourceLineNo">518</span> * @return True if we removed the test dirs<a name="line.518"></a>
+<span class="sourceLineNo">519</span> * @throws IOException<a name="line.519"></a>
+<span class="sourceLineNo">520</span> */<a name="line.520"></a>
+<span class="sourceLineNo">521</span> public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.521"></a>
+<span class="sourceLineNo">522</span> boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.522"></a>
+<span class="sourceLineNo">523</span> if (ret)<a name="line.523"></a>
+<span class="sourceLineNo">524</span> dataTestDirOnTestFS = null;<a name="line.524"></a>
+<span class="sourceLineNo">525</span> return ret;<a name="line.525"></a>
+<span class="sourceLineNo">526</span> }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span> /**<a name="line.528"></a>
+<span class="sourceLineNo">529</span> * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.529"></a>
+<span class="sourceLineNo">530</span> * @return True if we removed child<a name="line.530"></a>
+<span class="sourceLineNo">531</span> * @throws IOException<a name="line.531"></a>
+<span class="sourceLineNo">532</span> */<a name="line.532"></a>
+<span class="sourceLineNo">533</span> public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.534"></a>
+<span class="sourceLineNo">535</span> return getTestFileSystem().delete(cpath, true);<a name="line.535"></a>
+<span class="sourceLineNo">536</span> }<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span> /**<a name="line.538"></a>
+<span class="sourceLineNo">539</span> * Start a minidfscluster.<a name="line.539"></a>
+<span class="sourceLineNo">540</span> * @param servers How many DNs to start.<a name="line.540"></a>
+<span class="sourceLineNo">541</span> * @throws Exception<a name="line.541"></a>
+<span class="sourceLineNo">542</span> * @see #shutdownMiniDFSCluster()<a name="line.542"></a>
+<span class="sourceLineNo">543</span> * @return The mini dfs cluster created.<a name="line.543"></a>
+<span class="sourceLineNo">544</span> */<a name="line.544"></a>
+<span class="sourceLineNo">545</span> public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.545"></a>
+<span class="sourceLineNo">546</span> return startMiniDFSCluster(servers, null);<a name="line.546"></a>
+<span class="sourceLineNo">547</span> }<a name="line.547"></a>
+<span class="sourceLineNo">548</span><a name="line.548"></a>
+<span class="sourceLineNo">549</span> /**<a name="line.549"></a>
+<span class="sourceLineNo">550</span> * Start a minidfscluster.<a name="line.550"></a>
+<span class="sourceLineNo">551</span> * This is useful if you want to run datanode on distinct hosts for things<a name="line.551"></a>
+<span class="sourceLineNo">552</span> * like HDFS block location verification.<a name="line.552"></a>
+<span class="sourceLineNo">553</span> * If you start MiniDFSCluster without host names, all instances of the<a name="line.553"></a>
+<span class="sourceLineNo">554</span> * datanodes will have the same host name.<a name="line.554"></a>
+<span class="sourceLineNo">555</span> * @param hosts hostnames DNs to run on.<a name="line.555"></a>
+<span class="sourceLineNo">556</span> * @throws Exception<a name="line.556"></a>
+<span class="sourceLineNo">557</span> * @see #shutdownMiniDFSCluster()<a name="line.557"></a>
+<span class="sourceLineNo">558</span> * @return The mini dfs cluster created.<a name="line.558"></a>
+<span class="sourceLineNo">559</span> */<a name="line.559"></a>
+<span class="sourceLineNo">560</span> public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.560"></a>
+<span class="sourceLineNo">561</span> throws Exception {<a name="line.561"></a>
+<span class="sourceLineNo">562</span> if ( hosts != null && hosts.length != 0) {<a name="line.562"></a>
+<span class="sourceLineNo">563</span> return startMiniDFSCluster(hosts.length, hosts);<a name="line.563"></a>
+<span class="sourceLineNo">564</span> } else {<a name="line.564"></a>
+<span class="sourceLineNo">565</span> return startMiniDFSCluster(1, null);<a name="line.565"></a>
+<span class="sourceLineNo">566</span> }<a name="line.566"></a>
+<span class="sourceLineNo">567</span> }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span> /**<a name="line.569"></a>
+<span class="sourceLineNo">570</span> * Start a minidfscluster.<a name="line.570"></a>
+<span class="sourceLineNo">571</span> * Can only create one.<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * @param servers How many DNs to start.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> * @param hosts hostnames DNs to run on.<a name="line.573"></a>
+<span class="sourceLineNo">574</span> * @throws Exception<a name="line.574"></a>
+<span class="sourceLineNo">575</span> * @see #shutdownMiniDFSCluster()<a name="line.575"></a>
+<span class="sourceLineNo">576</span> * @return The mini dfs cluster created.<a name="line.576"></a>
+<span class="sourceLineNo">577</span> */<a name="line.577"></a>
+<span class="sourceLineNo">578</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.578"></a>
+<span class="sourceLineNo">579</span> throws Exception {<a name="line.579"></a>
+<span class="sourceLineNo">580</span> return startMiniDFSCluster(servers, null, hosts);<a name="line.580"></a>
+<span class="sourceLineNo">581</span> }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span> private void setFs() throws IOException {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> if(this.dfsCluster == null){<a name="line.584"></a>
+<span class="sourceLineNo">585</span> LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.585"></a>
+<span class="sourceLineNo">586</span> return;<a name="line.586"></a>
+<span class="sourceLineNo">587</span> }<a name="line.587"></a>
+<span class="sourceLineNo">588</span> FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.588"></a>
+<span class="sourceLineNo">589</span> CommonFSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span> // re-enable this check with dfs<a name="line.591"></a>
+<span class="sourceLineNo">592</span> conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.592"></a>
+<span class="sourceLineNo">593</span> }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span> public MiniDFSCluster startMiniDFSCluster(int servers, final String racks[], String hosts[])<a name="line.595"></a>
+<span class="sourceLineNo">596</span> throws Exception {<a name="line.596"></a>
+<span class="sourceLineNo">597</span> createDirsAndSetProperties();<a name="line.597"></a>
+<span class="sourceLineNo">598</span> EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span> // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.600"></a>
+<span class="sourceLineNo">601</span> Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.601"></a>
+<span class="sourceLineNo">602</span> Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.602"></a>
+<span class="sourceLineNo">603</span> "ERROR");<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span> this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.605"></a>
+<span class="sourceLineNo">606</span> true, null, racks, hosts, null);<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span> // Set this just-started cluster as our filesystem.<a name="line.608"></a>
+<span class="sourceLineNo">609</span> setFs();<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span> // Wait for the cluster to be totally up<a name="line.611"></a>
+<span class="sourceLineNo">612</span> this.dfsCluster.waitClusterUp();<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span> //reset the test directory for test file system<a name="line.614"></a>
+<span class="sourceLineNo">615</span> dataTestDirOnTestFS = null;<a name="line.615"></a>
+<span class="sourceLineNo">616</span> String dataTestDir = getDataTestDir().toString();<a name="line.616"></a>
+<span class="sourceLineNo">617</span> conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.617"></a>
+<span class="sourceLineNo">618</span> LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span> return this.dfsCluster;<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.623"></a>
+<span class="sourceLineNo">624</span> createDirsAndSetProperties();<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.625"></a>
+<span class="sourceLineNo">626</span> Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.util.MBeans.class.getName(), "ERROR");<a name="line.626"></a>
+<span class="sourceLineNo">627</span> Log4jUtils.setLogLevel(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class.getName(),<a name="line.627"></a>
+<span class="sourceLineNo">628</span> "ERROR");<a name="line.628"></a>
+<span class="sourceLineNo">629</span> dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.629"></a>
+<span class="sourceLineNo">630</span> null, null, null);<a name="line.630"></a>
+<span class="sourceLineNo">631</span> return dfsCluster;<a name="line.631"></a>
+<span class="sourceLineNo">632</span> }<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span> /**<a name="line.634"></a>
+<span class="sourceLineNo">635</span> * This is used before starting HDFS and map-reduce mini-clusters Run something like the below to<a name="line.635"></a>
+<span class="sourceLineNo">636</span> * check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in<a name="line.636"></a>
+<span class="sourceLineNo">637</span> * the conf.<a name="line.637"></a>
+<span class="sourceLineNo">638</span> * <pre><a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Configuration conf = TEST_UTIL.getConfiguration();<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * for (Iterator&lt;Map.Entry&lt;String, String&gt;&gt; i = conf.iterator(); i.hasNext();) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span> * Map.Entry&lt;String, String&gt; e = i.next();<a name="line.641"></a>
+<span class="sourceLineNo">642</span> * assertFalse(e.getKey() + " " + e.getValue(), e.getValue().contains("/tmp"));<a name="line.642"></a>
+<span class="sourceLineNo">643</span> * }<a name="line.643"></a>
+<span class="sourceLineNo">644</span> * </pre><a name="line.644"></a>
+<span class="sourceLineNo">645</span> */<a name="line.645"></a>
+<span class="sourceLineNo">646</span> private void createDirsAndSetProperties() throws IOException {<a name="line.646"></a>
+<span class="sourceLineNo">647</span> setupClusterTestDir();<a name="line.647"></a>
+<span class="sourceLineNo">648</span> conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.648"></a>
+<span class="sourceLineNo">649</span> System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.649"></a>
+<span class="sourceLineNo">650</span> createDirAndSetProperty("test.cache.data");<a name="line.650"></a>
+<span class="sourceLineNo">651</span> createDirAndSetProperty("hadoop.tmp.dir");<a name="line.651"></a>
+<span class="sourceLineNo">652</span> hadoopLogDir = createDirAndSetProperty("hadoop.log.dir");<a name="line.652"></a>
+<span class="sourceLineNo">653</span> createDirAndSetProperty("mapreduce.cluster.local.dir");<a name="line.653"></a>
+<span class="sourceLineNo">654</span> createDirAndSetProperty("mapreduce.cluster.temp.dir");<a name="line.654"></a>
+<span class="sourceLineNo">655</span> enableShortCircuit();<a name="line.655"></a>
+<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">657</span> Path root = getDataTestDirOnTestFS("hadoop");<a name="line.657"></a>
+<span class="sourceLineNo">658</span> conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.658"></a>
+<span class="sourceLineNo">659</span> new Path(root, "mapred-output-dir").toString());<a name="line.659"></a>
+<span class="sourceLineNo">660</span> conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.660"></a>
+<span class="sourceLineNo">661</span> conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.661"></a>
+<span class="sourceLineNo">662</span> new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.662"></a>
+<span class="sourceLineNo">663</span> conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.663"></a>
+<span class="sourceLineNo">664</span> conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.664"></a>
+<span class="sourceLineNo">665</span> new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span> // Frustrate yarn's and hdfs's attempts at writing /tmp.<a name="line.667"></a>
+<span class="sourceLineNo">668</span> // Below is fragile. Make it so we just interpolate any 'tmp' reference.<a name="line.668"></a>
+<span class="sourceLineNo">669</span> createDirAndSetProperty("yarn.node-labels.fs-store.root-dir");<a name="line.669"></a>
+<span class="sourceLineNo">670</span> createDirAndSetProperty("yarn.node-attribute.fs-store.root-dir");<a name="line.670"></a>
+<span class="sourceLineNo">671</span> createDirAndSetProperty("yarn.nodemanager.log-dirs");<a name="line.671"></a>
+<span class="sourceLineNo">672</span> createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.672"></a>
+<span class="sourceLineNo">673</span> createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.active-dir");<a name="line.673"></a>
+<span class="sourceLineNo">674</span> createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.done-dir");<a name="line.674"></a>
+<span class="sourceLineNo">675</span> createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");<a name="line.675"></a>
+<span class="sourceLineNo">676</span> createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.676"></a>
+<span class="sourceLineNo">677</span> createDirAndSetProperty("dfs.datanode.shared.file.descriptor.paths");<a name="line.677"></a>
+<span class="sourceLineNo">678</span> createDirAndSetProperty("nfs.dump.dir");<a name="line.678"></a>
+<span class="sourceLineNo">679</span> createDirAndSetProperty("java.io.tmpdir");<a name="line.679"></a>
+<span class="sourceLineNo">680</span> createDirAndSetProperty("dfs.journalnode.edits.dir");<a name="line.680"></a>
+<span class="sourceLineNo">681</span> createDirAndSetProperty("dfs.provided.aliasmap.inmemory.leveldb.dir");<a name="line.681"></a>
+<span class="sourceLineNo">682</span> createDirAndSetProperty("fs.s3a.committer.staging.tmp.path");<a name="line.682"></a>
+<span class="sourceLineNo">683</span> }<a name="line.683"></a>
+<span class="sourceLineNo">684</span><a name="line.684"></a>
+<span class="sourceLineNo">685</span> /**<a name="line.685"></a>
+<span class="sourceLineNo">686</span> * Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating<a name="line.686"></a>
+<span class="sourceLineNo">687</span> * new column families. Default to false.<a name="line.687"></a>
+<span class="sourceLineNo">688</span> */<a name="line.688"></a>
+<span class="sourceLineNo">689</span> public boolean isNewVersionBehaviorEnabled(){<a name="line.689"></a>
+<span class="sourceLineNo">690</span> final String propName = "hbase.tests.new.version.behavior";<a name="line.690"></a>
+<span class="sourceLineNo">691</span> String v = System.getProperty(propName);<a name="line.691"></a>
+<span class="sourceLineNo">692</span> if (v != null){<a name="line.692"></a>
+<span class="sourceLineNo">693</span> return Boolean.parseBoolean(v);<a name="line.693"></a>
+<span class="sourceLineNo">694</span> }<a name="line.694"></a>
+<span class="sourceLineNo">695</span> return false;<a name="line.695"></a>
+<span class="sourceLineNo">696</span> }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span> /**<a name="line.698"></a>
+<span class="sourceLineNo">699</span> * Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.<a name="line.699"></a>
+<span class="sourceLineNo">700</span> * This allows to specify this parameter on the command line.<a name="line.700"></a>
+<span class="sourceLineNo">701</span> * If not set, default is true.<a name="line.701"></a>
+<span class="sourceLineNo">702</span> */<a name="line.702"></a>
+<span class="sourceLineNo">703</span> public boolean isReadShortCircuitOn(){<a name="line.703"></a>
+<span class="sourceLineNo">704</span> final String propName = "hbase.tests.use.shortcircuit.reads";<a name="line.704"></a>
+<span class="sourceLineNo">705</span> String readOnProp = System.getProperty(propName);<a name="line.705"></a>
+<span class="sourceLineNo">706</span> if (readOnProp != null){<a name="line.706"></a>
+<span class="sourceLineNo">707</span> return Boolean.parseBoolean(readOnProp);<a name="line.707"></a>
+<span class="sourceLineNo">708</span> } else {<a name="line.708"></a>
+<span class="sourceLineNo">709</span> return conf.getBoolean(propName, false);<a name="line.709"></a>
+<span class="sourceLineNo">710</span> }<a name="line.710"></a>
+<span class="sourceLineNo">711</span> }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span> /** Enable the short circuit read, unless configured differently.<a name="line.713"></a>
+<span class="sourceLineNo">714</span> * Set both HBase and HDFS settings, including skipping the hdfs checksum checks.<a name="line.714"></a>
+<span class="sourceLineNo">715</span> */<a name="line.715"></a>
+<span class="sourceLineNo">716</span> private void enableShortCircuit() {<a name="line.716"></a>
+<span class="sourceLineNo">717</span> if (isReadShortCircuitOn()) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span> String curUser = System.getProperty("user.name");<a name="line.718"></a>
+<span class="sourceLineNo">719</span> LOG.info("read short circuit is ON for user " + curUser);<a name="line.719"></a>
+<span class="sourceLineNo">720</span> // read short circuit, for hdfs<a name="line.720"></a>
+<span class="sourceLineNo">721</span> conf.set("dfs.block.local-path-access.user", curUser);<a name="line.721"></a>
+<span class="sourceLineNo">722</span> // read short circuit, for hbase<a name="line.722"></a>
+<span class="sourceLineNo">723</span> conf.setBoolean("dfs.client.read.shortcircuit", true);<a name="line.723"></a>
+<span class="sourceLineNo">724</span> // Skip checking checksum, for the hdfs client and the datanode<a name="line.724"></a>
+<span class="sourceLineNo">725</span> conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true);<a name="line.725"></a>
+<span class="sourceLineNo">726</span> } else {<a name="line.726"></a>
+<span class="sourceLineNo">727</span> LOG.info("read short circuit is OFF");<a name="line.727"></a>
+<span class="sourceLineNo">728</span> }<a name="line.728"></a>
+<span class="sourceLineNo">729</span> }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span> private String createDirAndSetProperty(final String property) {<a name="line.731"></a>
+<span class="sourceLineNo">732</span> return createDirAndSetProperty(property, property);<a name="line.732"></a>
+<span class="sourceLineNo">733</span> }<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span> private String createDirAndSetProperty(final String relPath, String property) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span> String path = getDataTestDir(relPath).toString();<a name="line.736"></a>
+<span class="sourceLineNo">737</span> System.setProperty(property, path);<a name="line.737"></a>
+<span class="sourceLineNo">738</span> conf.set(property, path);<a name="line.738"></a>
+<span class="sourceLineNo">739</span> new File(path).mkdirs();<a name="line.739"></a>
+<span class="sourceLineNo">740</span> LOG.info("Setting " + property + " to " + path + " in system properties and HBase conf");<a name="line.740"></a>
+<span class="sourceLineNo">741</span> return path;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> /**<a name="line.744"></a>
+<span class="sourceLineNo">745</span> * Shuts down instance created by call to {@link #startMiniDFSCluster(int)}<a name="line.745"></a>
+<span class="sourceLineNo">746</span> * or does nothing.<a name="line.746"></a>
+<span class="sourceLineNo">747</span> * @throws IOException<a name="line.747"></a>
+<span class="sourceLineNo">748</span> */<a name="line.748"></a>
+<span class="sourceLineNo">749</span> public void shutdownMiniDFSCluster() throws IOException {<a name="line.749"></a>
+<span class="sourceLineNo">750</span> if (this.dfsCluster != null) {<a name="line.750"></a>
+<span class="sourceLineNo">751</span> // The below throws an exception per dn, AsynchronousCloseException.<a name="line.751"></a>
+<span class="sourceLineNo">752</span> this.dfsCluster.shutdown();<a name="line.752"></a>
+<span class="sourceLineNo">753</span> dfsCluster = null;<a name="line.753"></a>
+<span class="sourceLineNo">754</span> dataTestDirOnTestFS = null;<a name="line.754"></a>
+<span class="sourceLineNo">755</span> CommonFSUtils.setFsDefault(this.conf, new Path("file:///"));<a name="line.755"></a>
+<span class="sourceLineNo">756</span> }<a name="line.756"></a>
+<span class="sourceLineNo">757</span> }<a name="line.757"></a>
+<span class="sourceLineNo">758</span><a name="line.758"></a>
+<span class="sourceLineNo">759</span> /**<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> * @param createWALDir Whether to create a new WAL directory.<a name="line.762"></a>
+<span class="sourceLineNo">763</span> * @return The mini HBase cluster created.<a name="line.763"></a>
+<span class="sourceLineNo">764</span> * @see #shutdownMiniCluster()<a name="line.764"></a>
+<span class="sourceLineNo">765</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.765"></a>
+<span class="sourceLineNo">766</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.766"></a>
+<span class="sourceLineNo">767</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.767"></a>
+<span class="sourceLineNo">768</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.768"></a>
+<span class="sourceLineNo">769</span> */<a name="line.769"></a>
+<span class="sourceLineNo">770</span> @Deprecated<a name="line.770"></a>
+<span class="sourceLineNo">771</span> public MiniHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {<a name="line.771"></a>
+<span class="sourceLineNo">772</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.772"></a>
+<span class="sourceLineNo">773</span> .createWALDir(createWALDir).build();<a name="line.773"></a>
+<span class="sourceLineNo">774</span> return startMiniCluster(option);<a name="line.774"></a>
+<span class="sourceLineNo">775</span> }<a name="line.775"></a>
+<span class="sourceLineNo">776</span><a name="line.776"></a>
+<span class="sourceLineNo">777</span> /**<a name="line.777"></a>
+<span class="sourceLineNo">778</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.778"></a>
+<span class="sourceLineNo">779</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.779"></a>
+<span class="sourceLineNo">780</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.780"></a>
+<span class="sourceLineNo">781</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.781"></a>
+<span class="sourceLineNo">782</span> * @return The mini HBase cluster created.<a name="line.782"></a>
+<span class="sourceLineNo">783</span> * @see #shutdownMiniCluster()<a name="line.783"></a>
+<span class="sourceLineNo">784</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.784"></a>
+<span class="sourceLineNo">785</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.785"></a>
+<span class="sourceLineNo">786</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.786"></a>
+<span class="sourceLineNo">787</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.787"></a>
+<span class="sourceLineNo">788</span> */<a name="line.788"></a>
+<span class="sourceLineNo">789</span> @Deprecated<a name="line.789"></a>
+<span class="sourceLineNo">790</span> public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir)<a name="line.790"></a>
+<span class="sourceLineNo">791</span> throws Exception {<a name="line.791"></a>
+<span class="sourceLineNo">792</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.792"></a>
+<span class="sourceLineNo">793</span> .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir).build();<a name="line.793"></a>
+<span class="sourceLineNo">794</span> return startMiniCluster(option);<a name="line.794"></a>
+<span class="sourceLineNo">795</span> }<a name="line.795"></a>
+<span class="sourceLineNo">796</span><a name="line.796"></a>
+<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
+<span class="sourceLineNo">798</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.798"></a>
+<span class="sourceLineNo">799</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.799"></a>
+<span class="sourceLineNo">800</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.800"></a>
+<span class="sourceLineNo">801</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.801"></a>
+<span class="sourceLineNo">802</span> * @param createWALDir Whether to create a new WAL directory.<a name="line.802"></a>
+<span class="sourceLineNo">803</span> * @return The mini HBase cluster created.<a name="line.803"></a>
+<span class="sourceLineNo">804</span> * @see #shutdownMiniCluster()<a name="line.804"></a>
+<span class="sourceLineNo">805</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.805"></a>
+<span class="sourceLineNo">806</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.806"></a>
+<span class="sourceLineNo">807</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.807"></a>
+<span class="sourceLineNo">808</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.808"></a>
+<span class="sourceLineNo">809</span> */<a name="line.809"></a>
+<span class="sourceLineNo">810</span> @Deprecated<a name="line.810"></a>
+<span class="sourceLineNo">811</span> public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,<a name="line.811"></a>
+<span class="sourceLineNo">812</span> boolean createWALDir) throws Exception {<a name="line.812"></a>
+<span class="sourceLineNo">813</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.813"></a>
+<span class="sourceLineNo">814</span> .numRegionServers(numSlaves).numDataNodes(numSlaves).createRootDir(createRootDir)<a name="line.814"></a>
+<span class="sourceLineNo">815</span> .createWALDir(createWALDir).build();<a name="line.815"></a>
+<span class="sourceLineNo">816</span> return startMiniCluster(option);<a name="line.816"></a>
+<span class="sourceLineNo">817</span> }<a name="line.817"></a>
+<span class="sourceLineNo">818</span><a name="line.818"></a>
+<span class="sourceLineNo">819</span> /**<a name="line.819"></a>
+<span class="sourceLineNo">820</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.820"></a>
+<span class="sourceLineNo">821</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.821"></a>
+<span class="sourceLineNo">822</span> * @param numMasters Master node number.<a name="line.822"></a>
+<span class="sourceLineNo">823</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.823"></a>
+<span class="sourceLineNo">824</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.824"></a>
+<span class="sourceLineNo">825</span> * @return The mini HBase cluster created.<a name="line.825"></a>
+<span class="sourceLineNo">826</span> * @see #shutdownMiniCluster()<a name="line.826"></a>
+<span class="sourceLineNo">827</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.827"></a>
+<span class="sourceLineNo">828</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.828"></a>
+<span class="sourceLineNo">829</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.829"></a>
+<span class="sourceLineNo">830</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.830"></a>
+<span class="sourceLineNo">831</span> */<a name="line.831"></a>
+<span class="sourceLineNo">832</span> @Deprecated<a name="line.832"></a>
+<span class="sourceLineNo">833</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)<a name="line.833"></a>
+<span class="sourceLineNo">834</span> throws Exception {<a name="line.834"></a>
+<span class="sourceLineNo">835</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.835"></a>
+<span class="sourceLineNo">836</span> .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.836"></a>
+<span class="sourceLineNo">837</span> .numDataNodes(numSlaves).build();<a name="line.837"></a>
+<span class="sourceLineNo">838</span> return startMiniCluster(option);<a name="line.838"></a>
+<span class="sourceLineNo">839</span> }<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span> /**<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.843"></a>
+<span class="sourceLineNo">844</span> * @param numMasters Master node number.<a name="line.844"></a>
+<span class="sourceLineNo">845</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.845"></a>
+<span class="sourceLineNo">846</span> * @return The mini HBase cluster created.<a name="line.846"></a>
+<span class="sourceLineNo">847</span> * @see #shutdownMiniCluster()<a name="line.847"></a>
+<span class="sourceLineNo">848</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.848"></a>
+<span class="sourceLineNo">849</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.849"></a>
+<span class="sourceLineNo">850</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.850"></a>
+<span class="sourceLineNo">851</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.851"></a>
+<span class="sourceLineNo">852</span> */<a name="line.852"></a>
+<span class="sourceLineNo">853</span> @Deprecated<a name="line.853"></a>
+<span class="sourceLineNo">854</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {<a name="line.854"></a>
+<span class="sourceLineNo">855</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.855"></a>
+<span class="sourceLineNo">856</span> .numMasters(numMasters).numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.856"></a>
+<span class="sourceLineNo">857</span> return startMiniCluster(option);<a name="line.857"></a>
+<span class="sourceLineNo">858</span> }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span> /**<a name="line.860"></a>
+<span class="sourceLineNo">861</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.861"></a>
+<span class="sourceLineNo">862</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.862"></a>
+<span class="sourceLineNo">863</span> * @param numMasters Master node number.<a name="line.863"></a>
+<span class="sourceLineNo">864</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.864"></a>
+<span class="sourceLineNo">865</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.865"></a>
+<span class="sourceLineNo">866</span> * HDFS data node number.<a name="line.866"></a>
+<span class="sourceLineNo">867</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.867"></a>
+<span class="sourceLineNo">868</span> * @return The mini HBase cluster created.<a name="line.868"></a>
+<span class="sourceLineNo">869</span> * @see #shutdownMiniCluster()<a name="line.869"></a>
+<span class="sourceLineNo">870</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.870"></a>
+<span class="sourceLineNo">871</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.871"></a>
+<span class="sourceLineNo">872</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.872"></a>
+<span class="sourceLineNo">873</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.873"></a>
+<span class="sourceLineNo">874</span> */<a name="line.874"></a>
+<span class="sourceLineNo">875</span> @Deprecated<a name="line.875"></a>
+<span class="sourceLineNo">876</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.876"></a>
+<span class="sourceLineNo">877</span> boolean createRootDir) throws Exception {<a name="line.877"></a>
+<span class="sourceLineNo">878</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.878"></a>
+<span class="sourceLineNo">879</span> .numMasters(numMasters).numRegionServers(numSlaves).createRootDir(createRootDir)<a name="line.879"></a>
+<span class="sourceLineNo">880</span> .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.880"></a>
+<span class="sourceLineNo">881</span> return startMiniCluster(option);<a name="line.881"></a>
+<span class="sourceLineNo">882</span> }<a name="line.882"></a>
+<span class="sourceLineNo">883</span><a name="line.883"></a>
+<span class="sourceLineNo">884</span> /**<a name="line.884"></a>
+<span class="sourceLineNo">885</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.885"></a>
+<span class="sourceLineNo">886</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.886"></a>
+<span class="sourceLineNo">887</span> * @param numMasters Master node number.<a name="line.887"></a>
+<span class="sourceLineNo">888</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.888"></a>
+<span class="sourceLineNo">889</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.889"></a>
+<span class="sourceLineNo">890</span> * HDFS data node number.<a name="line.890"></a>
+<span class="sourceLineNo">891</span> * @return The mini HBase cluster created.<a name="line.891"></a>
+<span class="sourceLineNo">892</span> * @see #shutdownMiniCluster()<a name="line.892"></a>
+<span class="sourceLineNo">893</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.893"></a>
+<span class="sourceLineNo">894</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.894"></a>
+<span class="sourceLineNo">895</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.895"></a>
+<span class="sourceLineNo">896</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.896"></a>
+<span class="sourceLineNo">897</span> */<a name="line.897"></a>
+<span class="sourceLineNo">898</span> @Deprecated<a name="line.898"></a>
+<span class="sourceLineNo">899</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)<a name="line.899"></a>
+<span class="sourceLineNo">900</span> throws Exception {<a name="line.900"></a>
+<span class="sourceLineNo">901</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.901"></a>
+<span class="sourceLineNo">902</span> .numMasters(numMasters).numRegionServers(numSlaves)<a name="line.902"></a>
+<span class="sourceLineNo">903</span> .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();<a name="line.903"></a>
+<span class="sourceLineNo">904</span> return startMiniCluster(option);<a name="line.904"></a>
+<span class="sourceLineNo">905</span> }<a name="line.905"></a>
+<span class="sourceLineNo">906</span><a name="line.906"></a>
+<span class="sourceLineNo">907</span> /**<a name="line.907"></a>
+<span class="sourceLineNo">908</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.908"></a>
+<span class="sourceLineNo">909</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.909"></a>
+<span class="sourceLineNo">910</span> * @param numMasters Master node number.<a name="line.910"></a>
+<span class="sourceLineNo">911</span> * @param numRegionServers Number of region servers.<a name="line.911"></a>
+<span class="sourceLineNo">912</span> * @param numDataNodes Number of datanodes.<a name="line.912"></a>
+<span class="sourceLineNo">913</span> * @return The mini HBase cluster created.<a name="line.913"></a>
+<span class="sourceLineNo">914</span> * @see #shutdownMiniCluster()<a name="line.914"></a>
+<span class="sourceLineNo">915</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.915"></a>
+<span class="sourceLineNo">916</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.916"></a>
+<span class="sourceLineNo">917</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.917"></a>
+<span class="sourceLineNo">918</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.918"></a>
+<span class="sourceLineNo">919</span> */<a name="line.919"></a>
+<span class="sourceLineNo">920</span> @Deprecated<a name="line.920"></a>
+<span class="sourceLineNo">921</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)<a name="line.921"></a>
+<span class="sourceLineNo">922</span> throws Exception {<a name="line.922"></a>
+<span class="sourceLineNo">923</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.923"></a>
+<span class="sourceLineNo">924</span> .numMasters(numMasters).numRegionServers(numRegionServers).numDataNodes(numDataNodes)<a name="line.924"></a>
+<span class="sourceLineNo">925</span> .build();<a name="line.925"></a>
+<span class="sourceLineNo">926</span> return startMiniCluster(option);<a name="line.926"></a>
+<span class="sourceLineNo">927</span> }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span> /**<a name="line.929"></a>
+<span class="sourceLineNo">930</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.930"></a>
+<span class="sourceLineNo">931</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.931"></a>
+<span class="sourceLineNo">932</span> * @param numMasters Master node number.<a name="line.932"></a>
+<span class="sourceLineNo">933</span> * @param numSlaves Slave node number, for both HBase region server and HDFS data node.<a name="line.933"></a>
+<span class="sourceLineNo">934</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.934"></a>
+<span class="sourceLineNo">935</span> * HDFS data node number.<a name="line.935"></a>
+<span class="sourceLineNo">936</span> * @param masterClass The class to use as HMaster, or null for default.<a name="line.936"></a>
+<span class="sourceLineNo">937</span> * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.937"></a>
+<span class="sourceLineNo">938</span> * @return The mini HBase cluster created.<a name="line.938"></a>
+<span class="sourceLineNo">939</span> * @see #shutdownMiniCluster()<a name="line.939"></a>
+<span class="sourceLineNo">940</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.940"></a>
+<span class="sourceLineNo">941</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.941"></a>
+<span class="sourceLineNo">942</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.942"></a>
+<span class="sourceLineNo">943</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.943"></a>
+<span class="sourceLineNo">944</span> */<a name="line.944"></a>
+<span class="sourceLineNo">945</span> @Deprecated<a name="line.945"></a>
+<span class="sourceLineNo">946</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,<a name="line.946"></a>
+<span class="sourceLineNo">947</span> Class<? extends HMaster> masterClass,<a name="line.947"></a>
+<span class="sourceLineNo">948</span> Class<? extends MiniHBaseCluster.MiniHBaseClusterRegionServer> rsClass)<a name="line.948"></a>
+<span class="sourceLineNo">949</span> throws Exception {<a name="line.949"></a>
+<span class="sourceLineNo">950</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.950"></a>
+<span class="sourceLineNo">951</span> .numMasters(numMasters).masterClass(masterClass)<a name="line.951"></a>
+<span class="sourceLineNo">952</span> .numRegionServers(numSlaves).rsClass(rsClass)<a name="line.952"></a>
+<span class="sourceLineNo">953</span> .numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts)<a name="line.953"></a>
+<span class="sourceLineNo">954</span> .build();<a name="line.954"></a>
+<span class="sourceLineNo">955</span> return startMiniCluster(option);<a name="line.955"></a>
+<span class="sourceLineNo">956</span> }<a name="line.956"></a>
+<span class="sourceLineNo">957</span><a name="line.957"></a>
+<span class="sourceLineNo">958</span> /**<a name="line.958"></a>
+<span class="sourceLineNo">959</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.959"></a>
+<span class="sourceLineNo">960</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.960"></a>
+<span class="sourceLineNo">961</span> * @param numMasters Master node number.<a name="line.961"></a>
+<span class="sourceLineNo">962</span> * @param numRegionServers Number of region servers.<a name="line.962"></a>
+<span class="sourceLineNo">963</span> * @param numDataNodes Number of datanodes.<a name="line.963"></a>
+<span class="sourceLineNo">964</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.964"></a>
+<span class="sourceLineNo">965</span> * HDFS data node number.<a name="line.965"></a>
+<span class="sourceLineNo">966</span> * @param masterClass The class to use as HMaster, or null for default.<a name="line.966"></a>
+<span class="sourceLineNo">967</span> * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.967"></a>
+<span class="sourceLineNo">968</span> * @return The mini HBase cluster created.<a name="line.968"></a>
+<span class="sourceLineNo">969</span> * @see #shutdownMiniCluster()<a name="line.969"></a>
+<span class="sourceLineNo">970</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.970"></a>
+<span class="sourceLineNo">971</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.971"></a>
+<span class="sourceLineNo">972</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.972"></a>
+<span class="sourceLineNo">973</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.973"></a>
+<span class="sourceLineNo">974</span> */<a name="line.974"></a>
+<span class="sourceLineNo">975</span> @Deprecated<a name="line.975"></a>
+<span class="sourceLineNo">976</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.976"></a>
+<span class="sourceLineNo">977</span> String[] dataNodeHosts, Class<? extends HMaster> masterClass,<a name="line.977"></a>
+<span class="sourceLineNo">978</span> Class<? extends MiniHBaseCluster.MiniHBaseClusterRegionServer> rsClass)<a name="line.978"></a>
+<span class="sourceLineNo">979</span> throws Exception {<a name="line.979"></a>
+<span class="sourceLineNo">980</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.980"></a>
+<span class="sourceLineNo">981</span> .numMasters(numMasters).masterClass(masterClass)<a name="line.981"></a>
+<span class="sourceLineNo">982</span> .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.982"></a>
+<span class="sourceLineNo">983</span> .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.983"></a>
+<span class="sourceLineNo">984</span> .build();<a name="line.984"></a>
+<span class="sourceLineNo">985</span> return startMiniCluster(option);<a name="line.985"></a>
+<span class="sourceLineNo">986</span> }<a name="line.986"></a>
+<span class="sourceLineNo">987</span><a name="line.987"></a>
+<span class="sourceLineNo">988</span> /**<a name="line.988"></a>
+<span class="sourceLineNo">989</span> * Start up a minicluster of hbase, dfs, and zookeeper.<a name="line.989"></a>
+<span class="sourceLineNo">990</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.990"></a>
+<span class="sourceLineNo">991</span> * @param numMasters Master node number.<a name="line.991"></a>
+<span class="sourceLineNo">992</span> * @param numRegionServers Number of region servers.<a name="line.992"></a>
+<span class="sourceLineNo">993</span> * @param numDataNodes Number of datanodes.<a name="line.993"></a>
+<span class="sourceLineNo">994</span> * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite<a name="line.994"></a>
+<span class="sourceLineNo">995</span> * HDFS data node number.<a name="line.995"></a>
+<span class="sourceLineNo">996</span> * @param masterClass The class to use as HMaster, or null for default.<a name="line.996"></a>
+<span class="sourceLineNo">997</span> * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.997"></a>
+<span class="sourceLineNo">998</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.998"></a>
+<span class="sourceLineNo">999</span> * @param createWALDir Whether to create a new WAL directory.<a name="line.999"></a>
+<span class="sourceLineNo">1000</span> * @return The mini HBase cluster created.<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span> * @see #shutdownMiniCluster()<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span> * {@link #startMiniCluster(StartMiniClusterOption)} instead.<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.1005"></a>
+<span class="sourceLineNo">1006</span> */<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span> @Deprecated<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span> public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span> String[] dataNodeHosts, Class<? extends HMaster> masterClass,<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span> Class<? extends MiniHBaseCluster.MiniHBaseClusterRegionServer> rsClass, boolean createRootDir,<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span> boolean createWALDir) throws Exception {<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span> .numMasters(numMasters).masterClass(masterClass)<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span> .numRegionServers(numRegionServers).rsClass(rsClass)<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span> .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts)<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span> .createRootDir(createRootDir).createWALDir(createWALDir)<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span> .build();<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span> return startMiniCluster(option);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span> }<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span><a name="line.1020"></a>
+<span class="sourceLineNo">1021</span> /**<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span> * Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span> * @param numSlaves slave node number, for both HBase region server and HDFS data node.<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span> * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span> * @see #shutdownMiniDFSCluster()<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span> */<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span> public MiniHBaseCluster startMiniCluster(int numSlaves) throws Exception {<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span> .numRegionServers(numSlaves).numDataNodes(numSlaves).build();<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span> return startMiniCluster(option);<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span> }<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span><a name="line.1033"></a>
+<span class="sourceLineNo">1034</span> /**<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span> * Start up a minicluster of hbase, dfs and zookeeper all using default options.<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span> * Option default value can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span> * @see #startMiniCluster(StartMiniClusterOption option)<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span> * @see #shutdownMiniDFSCluster()<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span> */<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span> public MiniHBaseCluster startMiniCluster() throws Exception {<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span> return startMiniCluster(StartMiniClusterOption.builder().build());<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span> }<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span><a name="line.1043"></a>
+<span class="sourceLineNo">1044</span> /**<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span> * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span> * It modifies Configuration. It homes the cluster data directory under a random<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span> * subdirectory in a directory under System property test.build.data, to be cleaned up on exit.<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span> * @see #shutdownMiniDFSCluster()<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span> */<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span> public MiniHBaseCluster startMiniCluster(StartMiniClusterOption option) throws Exception {<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span> LOG.info("Starting up minicluster with option: {}", option);<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span><a name="line.1052"></a>
+<span class="sourceLineNo">1053</span> // If we already put up a cluster, fail.<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span> if (miniClusterRunning) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span> throw new IllegalStateException("A mini-cluster is already running");<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span> }<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span> miniClusterRunning = true;<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span><a name="line.1058"></a>
+<span class="sourceLineNo">1059</span> setupClusterTestDir();<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span> System.setProperty(TEST_DIRECTORY_KEY, this.clusterTestDir.getPath());<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span><a name="line.1061"></a>
+<span class="sourceLineNo">1062</span> // Bring up mini dfs cluster. This spews a bunch of warnings about missing<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span> // scheme. Complaints are 'Scheme is undefined for build/test/data/dfs/name1'.<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span> if (dfsCluster == null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span> LOG.info("STARTING DFS");<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span> dfsCluster = startMiniDFSCluster(option.getNumDataNodes(), option.getDataNodeHosts());<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span> } else {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span> LOG.info("NOT STARTING DFS");<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span> }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span><a name="line.1070"></a>
+<span class="sourceLineNo">1071</span> // Start up a zk cluster.<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span> if (getZkCluster() == null) {<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span> startMiniZKCluster(option.getNumZkServers());<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span><a name="line.1075"></a>
+<span class="sourceLineNo">1076</span> // Start the MiniHBaseCluster<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span> return startMiniHBaseCluster(option);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span> }<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span><a name="line.1079"></a>
+<span class="sourceLineNo">1080</span> /**<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span> * Starts up mini hbase cluster. Usually you won't want this. You'll usually want<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span> * {@link #startMiniCluster()}. This is useful when doing stepped startup of clusters.<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span> * @return Reference to the hbase mini hbase cluster.<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span> * @see #startMiniCluster(StartMiniClusterOption)<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span> * @see #shutdownMiniHBaseCluster()<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span> */<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span> public MiniHBaseCluster startMiniHBaseCluster(StartMiniClusterOption option)<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span> throws IOException, InterruptedException {<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span> // Now do the mini hbase cluster. Set the hbase.rootdir in config.<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span> createRootDir(option.isCreateRootDir());<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span> if (option.isCreateWALDir()) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span> createWALRootDir();<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span> }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span> // Set the hbase.fs.tmp.dir config to make sure that we have some default value. This is<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span> // for tests that do not read hbase-defaults.xml<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span> setHBaseFsTmpDir();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span><a name="line.1097"></a>
+<span class="sourceLineNo">1098</span> // These settings will make the server waits until this exact number of<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span> // regions servers are connected.<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span> if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1) == -1) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, option.getNumRegionServers());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span> }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span> if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1) == -1) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, option.getNumRegionServers());<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span> }<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span><a name="line.1106"></a>
+<span class="sourceLineNo">1107</span> // Avoid log flooded with chore execution time, see HBASE-24646 for more details.<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span> Log4jUtils.setLogLevel(org.apache.hadoop.hbase.ScheduledChore.class.getName(), "INFO");<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span><a name="line.1109"></a>
+<span class="sourceLineNo">1110</span> Configuration c = new Configuration(this.conf);<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span> this.hbaseCluster = new MiniHBaseCluster(c, option.getNumMasters(),<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span> option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span> option.getMasterClass(), option.getRsClass());<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span> // Populate the master address configuration from mini cluster configuration.<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span> conf.set(HConstants.MASTER_ADDRS_KEY, MasterRegistry.getMasterAddr(c));<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span> // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span> try (Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span> ResultScanner s = t.getScanner(new Scan())) {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span> for (;;) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span> if (s.next() == null) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span> break;<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span> }<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span> }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span> }<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span><a name="line.1125"></a>
<span class="sourceLineNo">1126</span><a name="line.1126"></a>
-<span class="sourceLineNo">1127</span><a name="line.1127"></a>
-<span class="sourceLineNo">1128</span> getAdmin(); // create immediately the hbaseAdmin<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span> LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span> return (MiniHBaseCluster) hbaseCluster;<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span> }<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span><a name="line.1133"></a>
-<span class="sourceLineNo">1134</span> /**<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span> * Starts up mini hbase cluster using default options.<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span> * Default options can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span> * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span> * @see #shutdownMiniHBaseCluster()<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span> */<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span> public MiniHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span> return startMiniHBaseCluster(StartMiniClusterOption.builder().build());<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span> }<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span><a name="line.1143"></a>
-<span class="sourceLineNo">1144</span> /**<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span> * Starts up mini hbase cluster.<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span> * Usually you won't want this. You'll usually want {@link #startMiniCluster()}.<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span> * @param numMasters Master node number.<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span> * @param numRegionServers Number of region servers.<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span> * @return The mini HBase cluster created.<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span> * @see #shutdownMiniHBaseCluster()<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span> * {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span> * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.1155"></a>
-<span class="sourceLineNo">1156</span> */<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span> @Deprecated<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span> public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span> throws IOException, InterruptedException {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span> .numMasters(numMasters).numRegionServers(numRegionServers).build();<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span> return startMiniHBaseCluster(option);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span> }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span> /**<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span> * Starts up mini hbase cluster.<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span> * Usually you won't want this. You'll usually want {@link #startMiniCluster()}.<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span> * @param numMasters Master node number.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span> * @param numRegionServers Number of region servers.<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span> * @param rsPorts Ports that RegionServer should use.<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span> * @return The mini HBase cluster created.<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span> * @see #shutdownMiniHBaseCluster()<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span> * {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span> * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.1177"></a>
-<span class="sourceLineNo">1178</span> */<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span> @Deprecated<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span> public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span> List<Integer> rsPorts) throws IOException, InterruptedException {<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span> .numMasters(numMasters).numRegionServers(numRegionServers).rsPorts(rsPorts).build();<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span> return startMiniHBaseCluster(option);<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span> }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span> /**<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span> * Starts up mini hbase cluster.<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span> * Usually you won't want this. You'll usually want {@link #startMiniCluster()}.<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span> * @param numMasters Master node number.<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span> * @param numRegionServers Number of region servers.<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span> * @param rsPorts Ports that RegionServer should use.<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span> * @param masterClass The class to use as HMaster, or null for default.<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span> * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span> * @param createWALDir Whether to create a new WAL directory.<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span> * @return The mini HBase cluster created.<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span> * @see #shutdownMiniHBaseCluster()<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span> * {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span> * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span> */<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span> @Deprecated<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span> public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span> List<Integer> rsPorts, Class<? extends HMaster> masterClass,<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span> Class<? extends MiniHBaseCluster.MiniHBaseClusterRegionServer> rsClass,<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span> boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span> .numMasters(numMasters).masterClass(masterClass)<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span> .numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span> .createRootDir(createRootDir).createWALDir(createWALDir).build();<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span> return startMiniHBaseCluster(option);<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span> }<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span><a name="line.1216"></a>
-<span class="sourceLineNo">1217</span> /**<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span> * Starts the hbase cluster up again after shutting it down previously in a<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span> * test. Use this if you want to keep dfs/zk up and just stop/start hbase.<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span> * @param servers number of region servers<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span> */<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span> public void restartHBaseCluster(int servers) throws IOException, InterruptedException {<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span> this.restartHBaseCluster(servers, null);<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span> }<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span><a name="line.1225"></a>
-<span class="sourceLineNo">1226</span> public void restartHBaseCluster(int servers, List<Integer> ports)<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span> throws IOException, InterruptedException {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span> StartMiniClusterOption option =<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span> StartMiniClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span> restartHBaseCluster(option);<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span> invalidateConnection();<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span> }<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span><a name="line.1233"></a>
-<span class="sourceLineNo">1234</span> public void restartHBaseCluster(StartMiniClusterOption option)<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span> throws IOException, InterruptedException {<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span> closeConnection();<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span> this.hbaseCluster =<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span> new MiniHBaseCluster(this.conf, option.getNumMasters(), option.getNumAlwaysStandByMasters(),<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span> option.getNumRegionServers(), option.getRsPorts(), option.getMasterClass(),<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span> option.getRsClass());<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span> // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span> Connection conn = ConnectionFactory.createConnection(this.conf);<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span> Table t = conn.getTable(TableName.META_TABLE_NAME);<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span> ResultScanner s = t.getScanner(new Scan());<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span> while (s.next() != null) {<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span> // do nothing<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span> }<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span> LOG.info("HBase has been restarted");<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span> s.close();<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span> t.close();<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span> conn.close();<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span> }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span> /**<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span> * @return Current mini hbase cluster. Only has something in it after a call<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span> * to {@link #startMiniCluster()}.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span> * @see #startMiniCluster()<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span> */<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span> public MiniHBaseCluster getMiniHBaseCluster() {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span> if (this.hbaseCluster == null || this.hbaseCluster instanceof MiniHBaseCluster) {<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span> return (MiniHBaseCluster)this.hbaseCluster;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span> }<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span> throw new RuntimeException(hbaseCluster + " not an instance of " +<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span> MiniHBaseCluster.class.getName());<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span> }<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span><a name="line.1266"></a>
-<span class="sourceLineNo">1267</span> /**<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span> * Stops mini hbase, zk, and hdfs clusters.<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span> * @see #startMiniCluster(int)<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span> */<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span> public void shutdownMiniCluster() throws IOException {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span> LOG.info("Shutting down minicluster");<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span> shutdownMiniHBaseCluster();<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span> shutdownMiniDFSCluster();<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span> shutdownMiniZKCluster();<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span><a name="line.1276"></a>
-<span class="sourceLineNo">1277</span> cleanupTestDir();<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span> miniClusterRunning = false;<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span> LOG.info("Minicluster is down");<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span> }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span><a name="line.1281"></a>
-<span class="sourceLineNo">1282</span> /**<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span> * Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span> * @throws java.io.IOException in case command is unsuccessful<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span> */<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span> public void shutdownMiniHBaseCluster() throws IOException {<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span> cleanup();<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span> if (this.hbaseCluster != null) {<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span> this.hbaseCluster.shutdown();<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span> // Wait till hbase is down before going on to shutdown zk.<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span> this.hbaseCluster.waitUntilShutDown();<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span> this.hbaseCluster = null;<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span> }<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span> if (zooKeeperWatcher != null) {<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span> zooKeeperWatcher.close();<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span> zooKeeperWatcher = null;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span> }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span> }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span><a name="line.1299"></a>
-<span class="sourceLineNo">1300</span> /**<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span> * Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span> * @throws java.io.IOException throws in case command is unsuccessful<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span> */<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span> public void killMiniHBaseCluster() throws IOException {<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span> cleanup();<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span> if (this.hbaseCluster != null) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span> getMiniHBaseCluster().killAll();<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span> this.hbaseCluster = null;<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span> }<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span> if (zooKeeperWatcher != null) {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span> zooKeeperWatcher.close();<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span> zooKeeperWatcher = null;<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span> }<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span> }<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span><a name="line.1315"></a>
-<span class="sourceLineNo">1316</span> // close hbase admin, close current connection and reset MIN MAX configs for RS.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span> private void cleanup() throws IOException {<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span> closeConnection();<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span> // unset the configuration for MIN and MAX RS to start<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1);<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span> }<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span> /**<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span> * Returns the path to the default root dir the minicluster uses. If <code>create</code><a name="line.1325"></a>
-<span class="sourceLineNo">1326</span> * is true, a new root directory path is fetched irrespective of whether it has been fetched<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span> * before or not. If false, previous path is used.<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span> * Note: this does not cause the root dir to be created.<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span> * @return Fully qualified path for the default hbase root dir<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span> * @throws IOException<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span> */<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span> public Path getDefaultRootDirPath(boolean create) throws IOException {<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span> if (!create) {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span> return getDataTestDirOnTestFS();<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span> } else {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span> return getNewDataTestDirOnTestFS();<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span> }<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span> }<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span><a name="line.1339"></a>
-<span class="sourceLineNo">1340</span> /**<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span> * Same as {{@link HBaseTestingUtility#getDefaultRootDirPath(boolean create)}<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span> * except that <code>create</code> flag is false.<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span> * Note: this does not cause the root dir to be created.<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span> * @return Fully qualified path for the default hbase root dir<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span> * @throws IOException<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span> */<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span> public Path getDefaultRootDirPath() throws IOException {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span> return getDefaultRootDirPath(false);<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span> }<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span><a name="line.1350"></a>
-<span class="sourceLineNo">1351</span> /**<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span> * Creates an hbase rootdir in user home directory. Also creates hbase<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span> * version file. Normally you won't make use of this method. Root hbasedir<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span> * is created for you as part of mini cluster startup. You'd only use this<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span> * method if you were doing manual operation.<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span> * @param create This flag decides whether to get a new<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span> * root or data directory path or not, if it has been fetched already.<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span> * Note : Directory will be made irrespective of whether path has been fetched or not.<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span> * If directory already exists, it will be overwritten<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span> * @return Fully qualified path to hbase root dir<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span> * @throws IOException<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span> */<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span> public Path createRootDir(boolean create) throws IOException {<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span> FileSystem fs = FileSystem.get(this.conf);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span> Path hbaseRootdir = getDefaultRootDirPath(create);<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span> CommonFSUtils.setRootDir(this.conf, hbaseRootdir);<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span> fs.mkdirs(hbaseRootdir);<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span> FSUtils.setVersion(fs, hbaseRootdir);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span> return hbaseRootdir;<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span> }<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span><a name="line.1371"></a>
-<span class="sourceLineNo">1372</span> /**<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span> * Same as {@link HBaseTestingUtility#createRootDir(boolean create)}<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span> * except that <code>create</code> flag is false.<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span> * @return Fully qualified path to hbase root dir<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span> * @throws IOException<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span> */<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span> public Path createRootDir() throws IOException {<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span> return createRootDir(false);<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span> }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span> /**<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span> * Creates a hbase walDir in the user's home directory.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span> * Normally you won't make use of this method. Root hbaseWALDir<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span> * is created for you as part of mini cluster startup. You'd only use this<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span> * method if you were doing manual operation.<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span> *<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span> * @return Fully qualified path to hbase root dir<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span> * @throws IOException<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span> */<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span> public Path createWALRootDir() throws IOException {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span> FileSystem fs = FileSystem.get(this.conf);<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span> Path walDir = getNewDataTestDirOnTestFS();<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span> CommonFSUtils.setWALRootDir(this.conf, walDir);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span> fs.mkdirs(walDir);<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span> return walDir;<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span> }<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span><a name="line.1398"></a>
-<span class="sourceLineNo">1399</span> private void setHBaseFsTmpDir() throws IOException {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span> String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span> if (hbaseFsTmpDirInString == null) {<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span> this.conf.set("hbase.fs.tmp.dir", getDataTestDirOnTestFS("hbase-staging").toString());<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span> LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span> } else {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span> LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span> }<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span> }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span><a name="line.1408"></a>
-<span class="sourceLineNo">1409</span> /**<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span> * Flushes all caches in the mini hbase cluster<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span> * @throws IOException<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span> */<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span> public void flush() throws IOException {<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span> getMiniHBaseCluster().flushcache();<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span> }<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span><a name="line.1416"></a>
-<span class="sourceLineNo">1417</span> /**<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span> * Flushes all caches in the mini hbase cluster<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span> * @throws IOException<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span> */<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span> public void flush(TableName tableName) throws IOException {<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span> getMiniHBaseCluster().flushcache(tableName);<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span> }<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span><a name="line.1424"></a>
-<span class="sourceLineNo">1425</span> /**<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span> * Compact all regions in the mini hbase cluster<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span> * @throws IOException<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span> */<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span> public void compact(boolean major) throws IOException {<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span> getMiniHBaseCluster().compact(major);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span> }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span><a name="line.1432"></a>
-<span class="sourceLineNo">1433</span> /**<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span> * Compact all of a table's reagion in the mini hbase cluster<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span> * @throws IOException<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span> */<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span> public void compact(TableName tableName, boolean major) throws IOException {<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span> getMiniHBaseCluster().compact(tableName, major);<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span> }<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span><a name="line.1440"></a>
-<span class="sourceLineNo">1441</span> /**<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span> * Create a table.<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span> * @param tableName<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span> * @param family<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span> * @return A Table instance for the created table.<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span> * @throws IOException<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span> */<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span> public Table createTable(TableName tableName, String family)<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span> throws IOException{<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span> return createTable(tableName, new String[]{family});<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span> }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span><a name="line.1452"></a>
-<span class="sourceLineNo">1453</span> /**<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span> * Create a table.<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span> * @param tableName<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span> * @param families<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span> * @return A Table instance for the created table.<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span> * @throws IOException<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span> */<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span> public Table createTable(TableName tableName, String[] families)<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span> throws IOException {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span> List<byte[]> fams = new ArrayList<>(families.length);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span> for (String family : families) {<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span> fams.add(Bytes.toBytes(family));<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span> }<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span> return createTable(tableName, fams.toArray(new byte[0][]));<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span> }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span> /**<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span> * Create a table.<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span> * @param tableName<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span> * @param family<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span> * @return A Table instance for the created table.<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span> * @throws IOException<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span> */<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span> public Table createTable(TableName tableName, byte[] family)<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span> throws IOException{<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span> return createTable(tableName, new byte[][]{family});<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span> }<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span><a name="line.1480"></a>
-<span class="sourceLineNo">1481</span> /**<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span> * Create a table with multiple regions.<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span> * @param tableName<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span> * @param family<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span> * @param numRegions<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span> * @return A Table instance for the created table.<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span> * @throws IOException<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span> */<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span> public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span> throws IOException {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span> if (numRegions < 3) throw new IOException("Must create at least 3 regions");<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span> byte[] startKey = Bytes.toBytes("aaaaa");<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span> byte[] endKey = Bytes.toBytes("zzzzz");<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span> byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span><a name="line.1495"></a>
-<span class="sourceLineNo">1496</span> return createTable(tableName, new byte[][] { family }, splitKeys);<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span> }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span><a name="line.1498"></a>
-<span class="sourceLineNo">1499</span> /**<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span> * Create a table.<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span> * @param tableName<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span> * @param families<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span> * @return A Table instance for the created table.<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span> * @throws IOException<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span> */<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span> public Table createTable(TableName tableName, byte[][] families)<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span> throws IOException {<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span> return createTable(tableName, families, (byte[][]) null);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span> }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span> /**<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span> * Create a table with multiple regions.<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span> * @param tableName<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span> * @param families<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span> * @return A Table instance for the created table.<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span> * @throws IOException<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span> */<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span> public Table createMultiRegionTable(TableName tableName, byte[][] families) throws IOException {<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span> return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span> }<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span><a name="line.1521"></a>
-<span class="sourceLineNo">1522</span> /**<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span> * Create a table with multiple regions.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span> * @param tableName<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span> * @param replicaCount replica count.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span> * @param families<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span> * @return A Table instance for the created table.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span> * @throws IOException<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span> */<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span> public Table createMultiRegionTable(TableName tableName, int replicaCount, byte[][] families)<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span> throws IOException {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span> return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE, replicaCount);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span> }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span> /**<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span> * Create a table.<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span> * @param tableName<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span> * @param families<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span> * @param splitKeys<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span> * @return A Table instance for the created table.<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span> * @throws IOException<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span> */<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span> public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span> throws IOException {<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span> return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span> }<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span><a name="line.1547"></a>
-<span class="sourceLineNo">1548</span> /**<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span> * Create a table.<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span> * @param tableName the table name<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span> * @param families the families<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span> * @param splitKeys the splitkeys<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span> * @param replicaCount the region replica count<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span> * @return A Table instance for the created table.<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span> * @throws IOException throws IOException<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span> */<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span> public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span> int replicaCount) throws IOException {<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span> return createTable(tableName, families, splitKeys, replicaCount,<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span> new Configuration(getConfiguration()));<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span> }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span><a name="line.1562"></a>
-<span class="sourceLineNo">1563</span> public Table createTable(TableName tableName, byte[][] families, int numVersions, byte[] startKey,<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span> byte[] endKey, int numRegions) throws IOException {<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span> TableDescriptor desc = createTableDescriptor(tableName, families, numVersions);<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span> getAdmin().createTable(desc, startKey, endKey, numRegions);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span> // HBaseAdmin only waits for regions to appear in hbase:meta we<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span> // should wait until they are assigned<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span> return getConnection().getTable(tableName);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span> }<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span> /**<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span> * Create a table.<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span> * @param c Configuration to use<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span> * @return A Table instance for the created table.<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span> */<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span> public Table createTable(TableDescriptor htd, byte[][] families, Configuration c)<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span> throws IOException {<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span> return createTable(htd, families, null, c);<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span> }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span><a name="line.1583"></a>
-<span class="sourceLineNo">1584</span> /**<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span> * Create a table.<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span> * @param htd table descriptor<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span> * @param families array of column families<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span> * @param splitKeys array of split keys<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span> * @param c Configuration to use<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span> * @return A Table instance for the created table.<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span> * @throws IOException if getAdmin or createTable fails<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span> */<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span> public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span> Configuration c) throws IOException {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span> // Disable blooms (they are on by default as of 0.95) but we disable them here because<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span> // tests have hard coded counts of what to expect in block cache, etc., and blooms being<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span> // on is interfering.<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span> return createTable(htd, families, splitKeys, BloomType.NONE, HConstants.DEFAULT_BLOCKSIZE, c);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span> }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span><a name="line.1600"></a>
-<span class="sourceLineNo">1601</span> /**<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span> * Create a table.<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span> * @param htd table descriptor<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span> * @param families array of column families<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span> * @param splitKeys array of split keys<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span> * @param type Bloom type<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span> * @param blockSize block size<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span> * @param c Configuration to use<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span> * @return A Table instance for the created table.<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span> * @throws IOException if getAdmin or createTable fails<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span> */<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span><a name="line.1612"></a>
-<span class="sourceLineNo">1613</span> public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span> BloomType type, int blockSize, Configuration c) throws IOException {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span> for (byte[] family : families) {<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span> ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span> .setBloomFilterType(type)<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span> .setBlocksize(blockSize);<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span> cfdb.setNewVersionBehavior(true);<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span> }<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span> builder.setColumnFamily(cfdb.build());<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span> }<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span> TableDescriptor td = builder.build();<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span> if (splitKeys != null) {<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span> getAdmin().createTable(td, splitKeys);<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span> } else {<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span> getAdmin().createTable(td);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span> }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span> // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span> // we should wait until they are assigned<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span> waitUntilAllRegionsAssigned(td.getTableName());<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span> return getConnection().getTable(td.getTableName());<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span> }<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span><a name="line.1636"></a>
-<span class="sourceLineNo">1637</span> /**<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span> * Create a table.<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span> * @param htd table descriptor<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span> * @param splitRows array of split keys<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span> * @return A Table instance for the created table.<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span> * @throws IOException<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span> */<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span> public Table createTable(TableDescriptor htd, byte[][] splitRows)<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span> throws IOException {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span> for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span> builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span> .setNewVersionBehavior(true).build());<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span> }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span> }<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span> if (splitRows != null) {<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span> getAdmin().createTable(builder.build(), splitRows);<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span> } else {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span> getAdmin().createTable(builder.build());<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span> }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span> // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span> // we should wait until they are assigned<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span> waitUntilAllRegionsAssigned(htd.getTableName());<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span> return getConnection().getTable(htd.getTableName());<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span> }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span> /**<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span> * Create a table.<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span> * @param tableName the table name<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span> * @param families the families<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span> * @param splitKeys the split keys<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span> * @param replicaCount the replica count<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span> * @param c Configuration to use<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span> * @return A Table instance for the created table.<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span> */<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span> public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span> int replicaCount, final Configuration c) throws IOException {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span> TableDescriptor htd =<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span> TableDescriptorBuilder.newBuilder(tableName).setRegionReplication(replicaCount).build();<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span> return createTable(htd, families, splitKeys, c);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span> }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span> /**<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span> * Create a table.<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span> * @return A Table instance for the created table.<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span> */<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span> public Table createTable(TableName tableName, byte[] family, int numVersions) throws IOException {<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span> return createTable(tableName, new byte[][] { family }, numVersions);<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span> }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span><a name="line.1687"></a>
-<span class="sourceLineNo">1688</span> /**<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span> * Create a table.<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span> * @return A Table instance for the created table.<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span> */<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span> public Table createTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span> throws IOException {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span> return createTable(tableName, families, numVersions, (byte[][]) null);<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span> }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span><a name="line.1696"></a>
-<span class="sourceLineNo">1697</span> /**<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span> * Create a table.<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span> * @return A Table instance for the created table.<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span> */<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span> public Table createTable(TableName tableName, byte[][] families, int numVersions,<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span> byte[][] splitKeys) throws IOException {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span> for (byte[] family : families) {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span> .setMaxVersions(numVersions);<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span> }<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span> }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span> if (splitKeys != null) {<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span> getAdmin().createTable(builder.build(), splitKeys);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span> } else {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span> getAdmin().createTable(builder.build());<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span> }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span> // assigned<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span> return getConnection().getTable(tableName);<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span> }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span><a name="line.1722"></a>
-<span class="sourceLineNo">1723</span> /**<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span> * Create a table with multiple regions.<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span> * @return A Table instance for the created table.<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span> */<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span> public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span> throws IOException {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span> return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span> }<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span><a name="line.1731"></a>
-<span class="sourceLineNo">1732</span> /**<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span> * Create a table.<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span> * @return A Table instance for the created table.<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span> */<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span> public Table createTable(TableName tableName, byte[][] families,<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span> int numVersions, int blockSize) throws IOException {<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span> for (byte[] family : families) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span> .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span> }<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span> }<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span> getAdmin().createTable(builder.build());<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span> // assigned<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span> return getConnection().getTable(tableName);<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span> }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span><a name="line.1753"></a>
-<span class="sourceLineNo">1754</span> public Table createTable(TableName tableName, byte[][] families,<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span> int numVersions, int blockSize, String cpName) throws IOException {<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span> for (byte[] family : families) {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span> .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span> }<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span> }<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span> if (cpName != null) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span> builder.setCoprocessor(cpName);<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span> }<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span> getAdmin().createTable(builder.build());<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span> // assigned<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span> return getConnection().getTable(tableName);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span> }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span><a name="line.1774"></a>
-<span class="sourceLineNo">1775</span> /**<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span> * Create a table.<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span> * @return A Table instance for the created table.<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span> */<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span> public Table createTable(TableName tableName, byte[][] families, int[] numVersions)<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span> throws IOException {<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span> int i = 0;<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span> for (byte[] family : families) {<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span> ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span> ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions[i]);<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span> }<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span> i++;<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span> }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span> getAdmin().createTable(builder.build());<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span> // assigned<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span> return getConnection().getTable(tableName);<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span> }<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span><a name="line.1798"></a>
-<span class="sourceLineNo">1799</span> /**<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span> * Create a table.<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span> * @return A Table instance for the created table.<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span> */<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span> public Table createTable(TableName tableName, byte[] family, byte[][] splitRows)<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span> throws IOException {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span> }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span> getAdmin().createTable(builder.build(), splitRows);<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span> // assigned<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span> return getConnection().getTable(tableName);<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span> }<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span><a name="line.1817"></a>
-<span class="sourceLineNo">1818</span> /**<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span> * Create a table with multiple regions.<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span> * @return A Table instance for the created table.<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span> */<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span> public Table createMultiRegionTable(TableName tableName, byte[] family) throws IOException {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span> return createTable(tableName, family, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span> }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span><a name="line.1825"></a>
-<span class="sourceLineNo">1826</span> /**<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span> * Modify a table, synchronous.<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span> * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span> * {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span> * @see Admin#modifyTable(TableDescriptor)<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-22002">HBASE-22002</a><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span> */<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span> @Deprecated<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span> public static void modifyTableSync(Admin admin, TableDescriptor desc)<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span> throws IOException, InterruptedException {<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span> admin.modifyTable(desc);<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span> }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span><a name="line.1838"></a>
-<span class="sourceLineNo">1839</span> /**<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span> * Set the number of Region replicas.<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span> */<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span> public static void setReplicas(Admin admin, TableName table, int replicaCount)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span> throws IOException, InterruptedException {<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span> TableDescriptor desc = TableDescriptorBuilder.newBuilder(admin.getDescriptor(table))<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span> .setRegionReplication(replicaCount).build();<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span> admin.modifyTable(desc);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span> }<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span><a name="line.1848"></a>
-<span class="sourceLineNo">1849</span> /**<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span> * Drop an existing table<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span> * @param tableName existing table<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span> */<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span> public void deleteTable(TableName tableName) throws IOException {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span> try {<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span> getAdmin().disableTable(tableName);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span> } catch (TableNotEnabledException e) {<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span> LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span> }<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span> getAdmin().deleteTable(tableName);<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span> }<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span><a name="line.1861"></a>
-<span class="sourceLineNo">1862</span> /**<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span> * Drop an existing table<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span> * @param tableName existing table<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span> */<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span> public void deleteTableIfAny(TableName tableName) throws IOException {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span> try {<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span> deleteTable(tableName);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span> } catch (TableNotFoundException e) {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span> // ignore<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span> }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span> }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span><a name="line.1873"></a>
-<span class="sourceLineNo">1874</span> // ==========================================================================<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span> // Canned table and table descriptor creation<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span> public final static byte [] fam1 = Bytes.toBytes("colfamily11");<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span> public final static byte [] fam2 = Bytes.toBytes("colfamily21");<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span> public final static byte [] fam3 = Bytes.toBytes("colfamily31");<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span> public static final byte[][] COLUMNS = {fam1, fam2, fam3};<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span> private static final int MAXVERSIONS = 3;<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span> public static final char FIRST_CHAR = 'a';<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span> public static final char LAST_CHAR = 'z';<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span> public static final byte [] START_KEY_BYTES = {FIRST_CHAR, FIRST_CHAR, FIRST_CHAR};<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span> public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span><a name="line.1887"></a>
-<span class="sourceLineNo">1888</span> public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span> return createModifyableTableDescriptor(TableName.valueOf(name),<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span> ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS, MAXVERSIONS, HConstants.FOREVER,<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span> ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span> }<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span><a name="line.1893"></a>
-<span class="sourceLineNo">1894</span> public TableDescriptor createTableDescriptor(final TableName name, final int minVersions,<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span> final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span> for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span> .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span> .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span> }<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span> }<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span> return builder.build();<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span> }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span><a name="line.1908"></a>
-<span class="sourceLineNo">1909</span> public TableDescriptorBuilder createModifyableTableDescriptor(final TableName name,<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span> final int minVersions, final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span> for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span> .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span> .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span> }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span> }<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span> return builder;<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span> }<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span><a name="line.1923"></a>
-<span class="sourceLineNo">1924</span> /**<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span> * Create a table of name <code>name</code>.<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span> * @param name Name to give table.<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span> * @return Column descriptor.<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span> */<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span> public TableDescriptor createTableDescriptor(final TableName name) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span> return createTableDescriptor(name, ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS,<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span> MAXVERSIONS, HConstants.FOREVER, ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span> }<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span><a name="line.1933"></a>
-<span class="sourceLineNo">1934</span> public TableDescriptor createTableDescriptor(final TableName tableName, byte[] family) {<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span> return createTableDescriptor(tableName, new byte[][] { family }, 1);<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span> }<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span><a name="line.1937"></a>
-<span class="sourceLineNo">1938</span> public TableDescriptor createTableDescriptor(final TableName tableName, byte[][] families,<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span> int maxVersions) {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span> for (byte[] family : families) {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span> ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span> ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(maxVersions);<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span> }<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span> }<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span> return builder.build();<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span> }<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span><a name="line.1951"></a>
-<span class="sourceLineNo">1952</span> /**<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span> * Create an HRegion that writes to the local tmp dirs<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span> * @param desc a table descriptor indicating which table the region belongs to<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span> * @param startKey the start boundary of the region<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span> * @param endKey the end boundary of the region<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span> * @return a region that writes to local dir for testing<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span> */<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span> public HRegion createLocalHRegion(TableDescriptor desc, byte[] startKey, byte[] endKey)<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span> throws IOException {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span> RegionInfo hri = RegionInfoBuilder.newBuilder(desc.getTableName()).setStartKey(startKey)<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span> .setEndKey(endKey).build();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span> return createLocalHRegion(hri, desc);<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span> }<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span><a name="line.1965"></a>
-<span class="sourceLineNo">1966</span> /**<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span> * Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when you're finished with it.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span> */<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span> public HRegion createLocalHRegion(RegionInfo info, TableDescriptor desc) throws IOException {<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span> return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), desc);<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span> }<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span><a name="line.1973"></a>
-<span class="sourceLineNo">1974</span> /**<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span> * Create an HRegion that writes to the local tmp dirs with specified wal<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span> * @param info regioninfo<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span> * @param conf configuration<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span> * @param desc table descriptor<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span> * @param wal wal for this region.<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span> * @return created hregion<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span> * @throws IOException<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span> */<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span> public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span> WAL wal) throws IOException {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span> return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span> }<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span><a name="line.1987"></a>
-<span class="sourceLineNo">1988</span> /**<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span> * @param tableName<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span> * @param startKey<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span> * @param stopKey<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span> * @param isReadOnly<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span> * @param families<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span> * @return A region on which you must call<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when done.<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span> * @throws IOException<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span> */<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span> public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span> Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span> throws IOException {<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span> return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span> durability, wal, null, families);<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span> }<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span><a name="line.2004"></a>
-<span class="sourceLineNo">2005</span> public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span> byte[] stopKey, Configuration conf, boolean isReadOnly, Durability durability, WAL wal,<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span> boolean[] compactedMemStore, byte[]... families) throws IOException {<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span> builder.setReadOnly(isReadOnly);<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span> int i = 0;<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span> for (byte[] family : families) {<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span> if (compactedMemStore != null && i < compactedMemStore.length) {<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span> cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.BASIC);<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span> } else {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span> cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.NONE);<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span><a name="line.2017"></a>
-<span class="sourceLineNo">2018</span> }<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span> i++;<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span> // Set default to be three versions.<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span> cfBuilder.setMaxVersions(Integer.MAX_VALUE);<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span> builder.setColumnFamily(cfBuilder.build());<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span> }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span> builder.setDurability(durability);<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span> RegionInfo info =<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span> RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(stopKey).build();<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span> return createLocalHRegion(info, conf, builder.build(), wal);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span> }<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span><a name="line.2029"></a>
-<span class="sourceLineNo">2030</span> //<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span> // ==========================================================================<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span> /**<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span> * Provide an existing table name to truncate.<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span> * Scans the table and issues a delete for each row read.<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span> * @param tableName existing table<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span> * @return HTable to that new table<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span> * @throws IOException<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span> */<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span> public Table deleteTableData(TableName tableName) throws IOException {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span> Table table = getConnection().getTable(tableName);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span> Scan scan = new Scan();<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span> ResultScanner resScan = table.getScanner(scan);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span> for(Result res : resScan) {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span> Delete del = new Delete(res.getRow());<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span> table.delete(del);<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span> }<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span> resScan = table.getScanner(scan);<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span> resScan.close();<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span> return table;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span> }<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span> /**<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span> * Truncate a table using the admin command.<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span> * Effectively disables, deletes, and recreates the table.<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span> * @param tableName table which must exist.<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span> * @param preserveRegions keep the existing split points<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span> * @return HTable for the new table<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span> */<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span> public Table truncateTable(final TableName tableName, final boolean preserveRegions) throws<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span> IOException {<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span> Admin admin = getAdmin();<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span> if (!admin.isTableDisabled(tableName)) {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span> admin.disableTable(tableName);<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span> }<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span> admin.truncateTable(tableName, preserveRegions);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span> return getConnection().getTable(tableName);<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span> }<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span><a name="line.2069"></a>
-<span class="sourceLineNo">2070</span> /**<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span> * Truncate a table using the admin command.<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span> * Effectively disables, deletes, and recreates the table.<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span> * For previous behavior of issuing row deletes, see<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span> * deleteTableData.<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span> * Expressly does not preserve regions of existing table.<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span> * @param tableName table which must exist.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span> * @return HTable for the new table<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span> */<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span> public Table truncateTable(final TableName tableName) throws IOException {<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span> return truncateTable(tableName, false);<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span> }<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span><a name="line.2082"></a>
-<span class="sourceLineNo">2083</span> /**<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span> * Load table with rows from 'aaa' to 'zzz'.<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span> * @param t Table<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span> * @param f Family<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span> * @return Count of rows loaded.<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span> * @throws IOException<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span> */<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span> public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span> return loadTable(t, new byte[][] {f});<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span> }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span> /**<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span> * Load table with rows from 'aaa' to 'zzz'.<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span> * @param t Table<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span> * @param f Family<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span> * @return Count of rows loaded.<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span> * @throws IOException<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span> */<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span> public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span> return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span> }<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span><a name="line.2104"></a>
-<span class="sourceLineNo">2105</span> /**<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span> * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span> * @param t Table<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span> * @param f Array of Families to load<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span> * @return Count of rows loaded.<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span> * @throws IOException<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span> */<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span> public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span> return loadTable(t, f, null);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span> }<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span><a name="line.2115"></a>
-<span class="sourceLineNo">2116</span> /**<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span> * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span> * @param t Table<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span> * @param f Array of Families to load<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span> * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span> * @return Count of rows loaded.<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span> * @throws IOException<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span> */<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span> public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span> return loadTable(t, f, value, true);<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span> }<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span><a name="line.2127"></a>
-<span class="sourceLineNo">2128</span> /**<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span> * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span> * @param t Table<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span> * @param f Array of Families to load<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span> * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span> * @return Count of rows loaded.<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span> * @throws IOException<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span> */<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span> public int loadTable(final Table t, final byte[][] f, byte[] value,<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span> boolean writeToWAL) throws IOException {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span> List<Put> puts = new ArrayList<>();<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span> for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span> Put put = new Put(row);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span> put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span> for (int i = 0; i < f.length; i++) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span> byte[] value1 = value != null ? value : row;<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span> put.addColumn(f[i], f[i], value1);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span> }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span> puts.add(put);<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span> }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span> t.put(puts);<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span> return puts.size();<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span> }<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span><a name="line.2151"></a>
-<span class="sourceLineNo">2152</span> /** A tracker for tracking and validating table rows<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span> * generated with {@link HBaseTestingUtility#loadTable(Table, byte[])}<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span> */<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span> public static class SeenRowTracker {<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span> int dim = 'z' - 'a' + 1;<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span> int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span> byte[] startRow;<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span> byte[] stopRow;<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span><a name="line.2160"></a>
-<span class="sourceLineNo">2161</span> public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span> this.startRow = startRow;<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span> this.stopRow = stopRow;<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span> }<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span><a name="line.2165"></a>
-<span class="sourceLineNo">2166</span> void reset() {<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span> for (byte[] row : ROWS) {<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span> seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span> }<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span> }<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span><a name="line.2171"></a>
-<span class="sourceLineNo">2172</span> int i(byte b) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span> return b - 'a';<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span> }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span> public void addRow(byte[] row) {<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span> seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span> }<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span><a name="line.2179"></a>
-<span class="sourceLineNo">2180</span> /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span> * all other rows none<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span> */<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span> public void validate() {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span> for (byte b1 = 'a'; b1 <= 'z'; b1++) {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span> for (byte b2 = 'a'; b2 <= 'z'; b2++) {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span> for (byte b3 = 'a'; b3 <= 'z'; b3++) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span> int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span> int expectedCount = 0;<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span> if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) >= 0<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span> && Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) < 0) {<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span> expectedCount = 1;<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span> }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span> if (count != expectedCount) {<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span> String row = new String(new byte[] {b1,b2,b3}, StandardCharsets.UTF_8);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span> throw new RuntimeException("Row:" + row + " has a seen count of " + count + " " +<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span> "instead of " + expectedCount);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span> }<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span> }<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span> }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span> }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span> }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span> }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span> public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span> return loadRegion(r, f, false);<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span> }<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span><a name="line.2207"></a>
-<span class="sourceLineNo">2208</span> public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span> return loadRegion((HRegion)r, f);<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span> }<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span><a name="line.2211"></a>
-<span class="sourceLineNo">2212</span> /**<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span> * Load region with rows from 'aaa' to 'zzz'.<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span> * @param r Region<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span> * @param f Family<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span> * @param flush flush the cache if true<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span> * @return Count of rows loaded.<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span> * @throws IOException<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span> */<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span> public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span> throws IOException {<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span> byte[] k = new byte[3];<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span> int rowCount = 0;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span> for (byte b1 = 'a'; b1 <= 'z'; b1++) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span> for (byte b2 = 'a'; b2 <= 'z'; b2++) {<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span> for (byte b3 = 'a'; b3 <= 'z'; b3++) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span> k[0] = b1;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span> k[1] = b2;<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span> k[2] = b3;<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span> Put put = new Put(k);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span> put.setDurability(Durability.SKIP_WAL);<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span> put.addColumn(f, null, k);<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span> if (r.getWAL() == null) {<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span> put.setDurability(Durability.SKIP_WAL);<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span> }<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span> int preRowCount = rowCount;<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span> int pause = 10;<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span> int maxPause = 1000;<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span> while (rowCount == preRowCount) {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span> try {<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span> r.put(put);<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span> rowCount++;<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span> } catch (RegionTooBusyException e) {<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span> pause = (pause * 2 >= maxPause) ? maxPause : pause * 2;<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span> Threads.sleep(pause);<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span> }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span> }<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span> }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span> }<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span> if (flush) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span> r.flush(true);<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span> }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span> }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span> return rowCount;<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span> }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span> public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span> throws IOException {<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span> for (int i = startRow; i < endRow; i++) {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span> byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span> Put put = new Put(data);<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span> put.addColumn(f, null, data);<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span> t.put(put);<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span> }<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span> }<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span><a name="line.2266"></a>
-<span class="sourceLineNo">2267</span> public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span> throws IOException {<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span> Random r = new Random();<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span> byte[] row = new byte[rowSize];<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span> for (int i = 0; i < totalRows; i++) {<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span> r.nextBytes(row);<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span> Put put = new Put(row);<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span> put.addColumn(f, new byte[]{0}, new byte[]{0});<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span> t.put(put);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span> }<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span> }<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span><a name="line.2278"></a>
-<span class="sourceLineNo">2279</span> public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span> int replicaId)<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span> throws IOException {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span> for (int i = startRow; i < endRow; i++) {<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span> String failMsg = "Failed verification of row :" + i;<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span> byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span> Get get = new Get(data);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span> get.setReplicaId(replicaId);<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span> get.setConsistency(Consistency.TIMELINE);<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span> Result result = table.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span> if (!result.containsColumn(f, null)) {<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span> throw new AssertionError(failMsg);<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span> }<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span> assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span> Cell cell = result.getColumnLatestCell(f, null);<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span> if (!Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span> cell.getValueLength())) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span> throw new AssertionError(failMsg);<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span> }<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span> }<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span> }<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span> public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span> throws IOException {<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span> verifyNumericRows((HRegion)region, f, startRow, endRow);<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span> }<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span><a name="line.2305"></a>
-<span class="sourceLineNo">2306</span> public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span> throws IOException {<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span> verifyNumericRows(region, f, startRow, endRow, true);<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span> }<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span><a name="line.2310"></a>
-<span class="sourceLineNo">2311</span> public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span> final boolean present) throws IOException {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span> verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span> }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span><a name="line.2315"></a>
-<span class="sourceLineNo">2316</span> public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span> final boolean present) throws IOException {<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span> for (int i = startRow; i < endRow; i++) {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span> String failMsg = "Failed verification of row :" + i;<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span> byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span> Result result = region.get(new Get(data));<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span> boolean hasResult = result != null && !result.isEmpty();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span> if (present != hasResult) {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span> throw new AssertionError(<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span> failMsg + result + " expected:<" + present + "> but was:<" + hasResult + ">");<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span> }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span> if (!present) continue;<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span><a name="line.2329"></a>
-<span class="sourceLineNo">2330</span> if (!result.containsColumn(f, null)) {<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span> throw new AssertionError(failMsg);<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span> }<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span> assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span> Cell cell = result.getColumnLatestCell(f, null);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span> if (!Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span> cell.getValueLength())) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span> throw new AssertionError(failMsg);<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span> }<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span> }<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span> }<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span><a name="line.2341"></a>
-<span class="sourceLineNo">2342</span> public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span> throws IOException {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span> for (int i = startRow; i < endRow; i++) {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span> byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span> Delete delete = new Delete(data);<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span> delete.addFamily(f);<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span> t.delete(delete);<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span> }<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span> }<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span><a name="line.2351"></a>
-<span class="sourceLineNo">2352</span> /**<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span> * Return the number of rows in the given table.<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span> * @param table to count rows<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span> * @return count of rows<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span> */<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span> public static int countRows(final Table table) throws IOException {<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span> return countRows(table, new Scan());<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span> }<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span><a name="line.2360"></a>
-<span class="sourceLineNo">2361</span> public static int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span> try (ResultScanner results = table.getScanner(scan)) {<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span> int count = 0;<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span> while (results.next() != null) {<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span> count++;<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span> }<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span> return count;<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span> }<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span> }<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span><a name="line.2370"></a>
-<span class="sourceLineNo">2371</span> public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span> Scan scan = new Scan();<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span> for (byte[] family: families) {<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span> scan.addFamily(family);<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span> }<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span> return countRows(table, scan);<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span> }<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span><a name="line.2378"></a>
-<span class="sourceLineNo">2379</span> /**<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span> * Return the number of rows in the given table.<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span> */<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span> public int countRows(final TableName tableName) throws IOException {<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span> Table table = getConnection().getTable(tableName);<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span> try {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span> return countRows(table);<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span> } finally {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span> table.close();<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span> }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span> }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span> public int countRows(final Region region) throws IOException {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span> return countRows(region, new Scan());<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span> }<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span> public int countRows(final Region region, final Scan scan) throws IOException {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span> InternalScanner scanner = region.getScanner(scan);<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span> try {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span> return countRows(scanner);<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span> } finally {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span> scanner.close();<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span> }<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span> }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span> public int countRows(final InternalScanner scanner) throws IOException {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span> int scannedCount = 0;<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span> List<Cell> results = new ArrayList<>();<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span> boolean hasMore = true;<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span> while (hasMore) {<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span> hasMore = scanner.next(results);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span> scannedCount += results.size();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span> results.clear();<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span> }<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span> return scannedCount;<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span> }<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span><a name="line.2415"></a>
-<span class="sourceLineNo">2416</span> /**<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span> * Return an md5 digest of the entire contents of a table.<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span> */<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span> public String checksumRows(final Table table) throws Exception {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span><a name="line.2420"></a>
-<span class="sourceLineNo">2421</span> Scan scan = new Scan();<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span> ResultScanner results = table.getScanner(scan);<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span> MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span> for (Result res : results) {<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span> digest.update(res.getRow());<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span> }<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span> results.close();<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span> return digest.toString();<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span> }<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span><a name="line.2430"></a>
-<span class="sourceLineNo">2431</span> /** All the row values for the data loaded by {@link #loadTable(Table, byte[])} */<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span> public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span> static {<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span> int i = 0;<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span> for (byte b1 = 'a'; b1 <= 'z'; b1++) {<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span> for (byte b2 = 'a'; b2 <= 'z'; b2++) {<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span> for (byte b3 = 'a'; b3 <= 'z'; b3++) {<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span> ROWS[i][0] = b1;<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span> ROWS[i][1] = b2;<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span> ROWS[i][2] = b3;<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span> i++;<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span> }<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span> }<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span> }<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span> }<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span><a name="line.2446"></a>
-<span class="sourceLineNo">2447</span> public static final byte[][] KEYS = {<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span> HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span> Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span> Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span> Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span> Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span> Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span> Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span> Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span> Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span> };<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span><a name="line.2458"></a>
-<span class="sourceLineNo">2459</span> public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span> Bytes.toBytes("bbb"),<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span> Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span> Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span> Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span> Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span> Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span> Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span> Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span> Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span> };<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span><a name="line.2470"></a>
-<span class="sourceLineNo">2471</span> /**<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span> * Create rows in hbase:meta for regions of the specified table with the specified<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span> * start keys. The first startKey should be a 0 length byte array if you<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span> * want to form a proper range of regions.<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span> * @param conf<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span> * @param htd<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span> * @param startKeys<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span> * @return list of region info for regions added to meta<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span> * @throws IOException<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span> */<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span> public List<RegionInfo> createMultiRegionsInMeta(final Configuration conf,<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span> final TableDescriptor htd, byte [][] startKeys)<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span> throws IOException {<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span> Table meta = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span> Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span> List<RegionInfo> newRegions = new ArrayList<>(startKeys.length);<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span> MetaTableAccessor<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span> .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span> // add custom ones<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span> for (int i = 0; i < startKeys.length; i++) {<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span> int j = (i + 1) % startKeys.length;<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span> RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName())<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span> .setStartKey(startKeys[i])<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span> .setEndKey(startKeys[j])<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span> .build();<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span> MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span> newRegions.add(hri);<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span> }<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span><a name="line.2499"></a>
-<span class="sourceLineNo">2500</span> meta.close();<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span> return newRegions;<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span> }<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span><a name="line.2503"></a>
-<span class="sourceLineNo">2504</span> /**<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span> * Create an unmanaged WAL. Be sure to close it when you're through.<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span> */<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span> public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span> throws IOException {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span> // The WAL subsystem will use the default rootDir rather than the passed in rootDir<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span> // unless I pass along via the conf.<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span> Configuration confForWAL = new Configuration(conf);<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span> confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span> return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span> }<a name="line.2514"></a>
+<span class="sourceLineNo">1127</span> getAdmin(); // create immediately the hbaseAdmin<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span> LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span><a name="line.1129"></a>
+<span class="sourceLineNo">1130</span> return (MiniHBaseCluster) hbaseCluster;<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span> }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span> /**<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span> * Starts up mini hbase cluster using default options.<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span> * Default options can be found in {@link StartMiniClusterOption.Builder}.<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span> * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span> * @see #shutdownMiniHBaseCluster()<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span> */<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span> public MiniHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span> return startMiniHBaseCluster(StartMiniClusterOption.builder().build());<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span> }<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span> /**<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span> * Starts up mini hbase cluster.<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span> * Usually you won't want this. You'll usually want {@link #startMiniCluster()}.<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span> * @param numMasters Master node number.<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span> * @param numRegionServers Number of region servers.<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span> * @return The mini HBase cluster created.<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span> * @see #shutdownMiniHBaseCluster()<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span> * {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span> * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.1154"></a>
+<span class="sourceLineNo">1155</span> */<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span> @Deprecated<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span> public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span> throws IOException, InterruptedException {<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span> .numMasters(numMasters).numRegionServers(numRegionServers).build();<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span> return startMiniHBaseCluster(option);<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span> }<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span> /**<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span> * Starts up mini hbase cluster.<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span> * Usually you won't want this. You'll usually want {@link #startMiniCluster()}.<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span> * @param numMasters Master node number.<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span> * @param numRegionServers Number of region servers.<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span> * @param rsPorts Ports that RegionServer should use.<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span> * @return The mini HBase cluster created.<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span> * @see #shutdownMiniHBaseCluster()<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span> * {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span> * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.1176"></a>
+<span class="sourceLineNo">1177</span> */<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span> @Deprecated<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span> public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span> List<Integer> rsPorts) throws IOException, InterruptedException {<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span> .numMasters(numMasters).numRegionServers(numRegionServers).rsPorts(rsPorts).build();<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span> return startMiniHBaseCluster(option);<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span> }<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span><a name="line.1185"></a>
+<span class="sourceLineNo">1186</span> /**<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span> * Starts up mini hbase cluster.<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span> * Usually you won't want this. You'll usually want {@link #startMiniCluster()}.<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span> * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span> * @param numMasters Master node number.<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span> * @param numRegionServers Number of region servers.<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span> * @param rsPorts Ports that RegionServer should use.<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span> * @param masterClass The class to use as HMaster, or null for default.<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span> * @param rsClass The class to use as HRegionServer, or null for default.<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span> * @param createRootDir Whether to create a new root or data directory path.<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span> * @param createWALDir Whether to create a new WAL directory.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span> * @return The mini HBase cluster created.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span> * @see #shutdownMiniHBaseCluster()<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span> * @deprecated since 2.2.0 and will be removed in 4.0.0. Use<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span> * {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span> * @see #startMiniHBaseCluster(StartMiniClusterOption)<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-21071">HBASE-21071</a><a name="line.1202"></a>
+<span class="sourceLineNo">1203</span> */<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span> @Deprecated<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span> public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span> List<Integer> rsPorts, Class<? extends HMaster> masterClass,<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span> Class<? extends MiniHBaseCluster.MiniHBaseClusterRegionServer> rsClass,<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span> boolean createRootDir, boolean createWALDir) throws IOException, InterruptedException {<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span> StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span> .numMasters(numMasters).masterClass(masterClass)<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span> .numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span> .createRootDir(createRootDir).createWALDir(createWALDir).build();<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span> return startMiniHBaseCluster(option);<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span> }<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span><a name="line.1215"></a>
+<span class="sourceLineNo">1216</span> /**<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span> * Starts the hbase cluster up again after shutting it down previously in a<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span> * test. Use this if you want to keep dfs/zk up and just stop/start hbase.<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span> * @param servers number of region servers<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span> */<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span> public void restartHBaseCluster(int servers) throws IOException, InterruptedException {<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span> this.restartHBaseCluster(servers, null);<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span> }<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span><a name="line.1224"></a>
+<span class="sourceLineNo">1225</span> public void restartHBaseCluster(int servers, List<Integer> ports)<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span> throws IOException, InterruptedException {<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span> StartMiniClusterOption option =<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span> StartMiniClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span> restartHBaseCluster(option);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span> invalidateConnection();<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span> }<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span><a name="line.1232"></a>
+<span class="sourceLineNo">1233</span> public void restartHBaseCluster(StartMiniClusterOption option)<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span> throws IOException, InterruptedException {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span> closeConnection();<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span> this.hbaseCluster =<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span> new MiniHBaseCluster(this.conf, option.getNumMasters(), option.getNumAlwaysStandByMasters(),<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span> option.getNumRegionServers(), option.getRsPorts(), option.getMasterClass(),<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span> option.getRsClass());<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span> // Don't leave here till we've done a successful scan of the hbase:meta<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span> Connection conn = ConnectionFactory.createConnection(this.conf);<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span> Table t = conn.getTable(TableName.META_TABLE_NAME);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span> ResultScanner s = t.getScanner(new Scan());<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span> while (s.next() != null) {<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span> // do nothing<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span> }<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span> LOG.info("HBase has been restarted");<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span> s.close();<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span> t.close();<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span> conn.close();<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span> }<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span><a name="line.1252"></a>
+<span class="sourceLineNo">1253</span> /**<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span> * @return Current mini hbase cluster. Only has something in it after a call<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span> * to {@link #startMiniCluster()}.<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span> * @see #startMiniCluster()<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span> */<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span> public MiniHBaseCluster getMiniHBaseCluster() {<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span> if (this.hbaseCluster == null || this.hbaseCluster instanceof MiniHBaseCluster) {<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span> return (MiniHBaseCluster)this.hbaseCluster;<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span> }<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span> throw new RuntimeException(hbaseCluster + " not an instance of " +<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span> MiniHBaseCluster.class.getName());<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span> }<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span><a name="line.1265"></a>
+<span class="sourceLineNo">1266</span> /**<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span> * Stops mini hbase, zk, and hdfs clusters.<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span> * @see #startMiniCluster(int)<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span> */<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span> public void shutdownMiniCluster() throws IOException {<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span> LOG.info("Shutting down minicluster");<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span> shutdownMiniHBaseCluster();<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span> shutdownMiniDFSCluster();<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span> shutdownMiniZKCluster();<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span><a name="line.1275"></a>
+<span class="sourceLineNo">1276</span> cleanupTestDir();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span> miniClusterRunning = false;<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span> LOG.info("Minicluster is down");<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span> }<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span><a name="line.1280"></a>
+<span class="sourceLineNo">1281</span> /**<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span> * Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span> * @throws java.io.IOException in case command is unsuccessful<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span> */<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span> public void shutdownMiniHBaseCluster() throws IOException {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span> cleanup();<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span> if (this.hbaseCluster != null) {<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span> this.hbaseCluster.shutdown();<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span> // Wait till hbase is down before going on to shutdown zk.<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span> this.hbaseCluster.waitUntilShutDown();<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span> this.hbaseCluster = null;<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span> }<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span> if (zooKeeperWatcher != null) {<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span> zooKeeperWatcher.close();<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span> zooKeeperWatcher = null;<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span> }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span> }<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span><a name="line.1298"></a>
+<span class="sourceLineNo">1299</span> /**<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span> * Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span> * @throws java.io.IOException throws in case command is unsuccessful<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span> */<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span> public void killMiniHBaseCluster() throws IOException {<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span> cleanup();<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span> if (this.hbaseCluster != null) {<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span> getMiniHBaseCluster().killAll();<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span> this.hbaseCluster = null;<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span> }<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span> if (zooKeeperWatcher != null) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span> zooKeeperWatcher.close();<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span> zooKeeperWatcher = null;<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span> }<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span> }<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span><a name="line.1314"></a>
+<span class="sourceLineNo">1315</span> // close hbase admin, close current connection and reset MIN MAX configs for RS.<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span> private void cleanup() throws IOException {<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span> closeConnection();<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span> // unset the configuration for MIN and MAX RS to start<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1);<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span> }<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span><a name="line.1322"></a>
+<span class="sourceLineNo">1323</span> /**<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span> * Returns the path to the default root dir the minicluster uses. If <code>create</code><a name="line.1324"></a>
+<span class="sourceLineNo">1325</span> * is true, a new root directory path is fetched irrespective of whether it has been fetched<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span> * before or not. If false, previous path is used.<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span> * Note: this does not cause the root dir to be created.<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span> * @return Fully qualified path for the default hbase root dir<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span> * @throws IOException<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span> */<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span> public Path getDefaultRootDirPath(boolean create) throws IOException {<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span> if (!create) {<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span> return getDataTestDirOnTestFS();<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span> } else {<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span> return getNewDataTestDirOnTestFS();<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span> }<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span> }<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span><a name="line.1338"></a>
+<span class="sourceLineNo">1339</span> /**<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span> * Same as {{@link HBaseTestingUtility#getDefaultRootDirPath(boolean create)}<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span> * except that <code>create</code> flag is false.<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span> * Note: this does not cause the root dir to be created.<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span> * @return Fully qualified path for the default hbase root dir<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span> * @throws IOException<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span> */<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span> public Path getDefaultRootDirPath() throws IOException {<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span> return getDefaultRootDirPath(false);<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span> }<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span><a name="line.1349"></a>
+<span class="sourceLineNo">1350</span> /**<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span> * Creates an hbase rootdir in user home directory. Also creates hbase<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span> * version file. Normally you won't make use of this method. Root hbasedir<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span> * is created for you as part of mini cluster startup. You'd only use this<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span> * method if you were doing manual operation.<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span> * @param create This flag decides whether to get a new<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span> * root or data directory path or not, if it has been fetched already.<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span> * Note : Directory will be made irrespective of whether path has been fetched or not.<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span> * If directory already exists, it will be overwritten<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span> * @return Fully qualified path to hbase root dir<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span> * @throws IOException<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span> */<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span> public Path createRootDir(boolean create) throws IOException {<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span> FileSystem fs = FileSystem.get(this.conf);<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span> Path hbaseRootdir = getDefaultRootDirPath(create);<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span> CommonFSUtils.setRootDir(this.conf, hbaseRootdir);<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span> fs.mkdirs(hbaseRootdir);<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span> FSUtils.setVersion(fs, hbaseRootdir);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span> return hbaseRootdir;<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span> }<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span><a name="line.1370"></a>
+<span class="sourceLineNo">1371</span> /**<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span> * Same as {@link HBaseTestingUtility#createRootDir(boolean create)}<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span> * except that <code>create</code> flag is false.<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span> * @return Fully qualified path to hbase root dir<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span> * @throws IOException<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span> */<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span> public Path createRootDir() throws IOException {<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span> return createRootDir(false);<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span> }<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span><a name="line.1380"></a>
+<span class="sourceLineNo">1381</span> /**<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span> * Creates a hbase walDir in the user's home directory.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span> * Normally you won't make use of this method. Root hbaseWALDir<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span> * is created for you as part of mini cluster startup. You'd only use this<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span> * method if you were doing manual operation.<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span> *<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span> * @return Fully qualified path to hbase root dir<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span> * @throws IOException<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span> */<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span> public Path createWALRootDir() throws IOException {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span> FileSystem fs = FileSystem.get(this.conf);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span> Path walDir = getNewDataTestDirOnTestFS();<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span> CommonFSUtils.setWALRootDir(this.conf, walDir);<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span> fs.mkdirs(walDir);<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span> return walDir;<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span> }<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span><a name="line.1397"></a>
+<span class="sourceLineNo">1398</span> private void setHBaseFsTmpDir() throws IOException {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span> String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span> if (hbaseFsTmpDirInString == null) {<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span> this.conf.set("hbase.fs.tmp.dir", getDataTestDirOnTestFS("hbase-staging").toString());<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span> LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span> } else {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span> LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span> }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span> }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span> /**<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span> * Flushes all caches in the mini hbase cluster<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span> * @throws IOException<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span> */<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span> public void flush() throws IOException {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span> getMiniHBaseCluster().flushcache();<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span> }<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span><a name="line.1415"></a>
+<span class="sourceLineNo">1416</span> /**<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span> * Flushes all caches in the mini hbase cluster<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span> * @throws IOException<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span> */<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span> public void flush(TableName tableName) throws IOException {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span> getMiniHBaseCluster().flushcache(tableName);<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span> }<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span><a name="line.1423"></a>
+<span class="sourceLineNo">1424</span> /**<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span> * Compact all regions in the mini hbase cluster<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span> * @throws IOException<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span> */<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span> public void compact(boolean major) throws IOException {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span> getMiniHBaseCluster().compact(major);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span> }<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span><a name="line.1431"></a>
+<span class="sourceLineNo">1432</span> /**<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span> * Compact all of a table's reagion in the mini hbase cluster<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span> * @throws IOException<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span> */<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span> public void compact(TableName tableName, boolean major) throws IOException {<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span> getMiniHBaseCluster().compact(tableName, major);<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span> }<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span> /**<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span> * Create a table.<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span> * @param tableName<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span> * @param family<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span> * @return A Table instance for the created table.<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span> * @throws IOException<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span> */<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span> public Table createTable(TableName tableName, String family)<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span> throws IOException{<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span> return createTable(tableName, new String[]{family});<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span> }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span><a name="line.1451"></a>
+<span class="sourceLineNo">1452</span> /**<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span> * Create a table.<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span> * @param tableName<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span> * @param families<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span> * @return A Table instance for the created table.<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span> * @throws IOException<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span> */<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span> public Table createTable(TableName tableName, String[] families)<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span> throws IOException {<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span> List<byte[]> fams = new ArrayList<>(families.length);<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span> for (String family : families) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span> fams.add(Bytes.toBytes(family));<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span> }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span> return createTable(tableName, fams.toArray(new byte[0][]));<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span> }<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span><a name="line.1467"></a>
+<span class="sourceLineNo">1468</span> /**<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span> * Create a table.<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span> * @param tableName<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span> * @param family<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span> * @return A Table instance for the created table.<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span> * @throws IOException<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span> */<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span> public Table createTable(TableName tableName, byte[] family)<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span> throws IOException{<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span> return createTable(tableName, new byte[][]{family});<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span> }<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span><a name="line.1479"></a>
+<span class="sourceLineNo">1480</span> /**<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span> * Create a table with multiple regions.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span> * @param tableName<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span> * @param family<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span> * @param numRegions<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span> * @return A Table instance for the created table.<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span> * @throws IOException<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span> */<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span> public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span> throws IOException {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span> if (numRegions < 3) throw new IOException("Must create at least 3 regions");<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span> byte[] startKey = Bytes.toBytes("aaaaa");<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span> byte[] endKey = Bytes.toBytes("zzzzz");<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span> byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span><a name="line.1494"></a>
+<span class="sourceLineNo">1495</span> return createTable(tableName, new byte[][] { family }, splitKeys);<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span> }<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span><a name="line.1497"></a>
+<span class="sourceLineNo">1498</span> /**<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span> * Create a table.<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span> * @param tableName<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span> * @param families<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span> * @return A Table instance for the created table.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span> * @throws IOException<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span> */<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span> public Table createTable(TableName tableName, byte[][] families)<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span> throws IOException {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span> return createTable(tableName, families, (byte[][]) null);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span> }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span> /**<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span> * Create a table with multiple regions.<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span> * @param tableName<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span> * @param families<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span> * @return A Table instance for the created table.<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span> * @throws IOException<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span> */<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span> public Table createMultiRegionTable(TableName tableName, byte[][] families) throws IOException {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span> return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span> }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span><a name="line.1520"></a>
+<span class="sourceLineNo">1521</span> /**<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span> * Create a table with multiple regions.<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span> * @param tableName<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span> * @param replicaCount replica count.<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span> * @param families<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span> * @return A Table instance for the created table.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span> * @throws IOException<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span> */<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span> public Table createMultiRegionTable(TableName tableName, int replicaCount, byte[][] families)<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span> throws IOException {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span> return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE, replicaCount);<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span> }<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span> /**<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span> * Create a table.<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span> * @param tableName<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span> * @param families<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span> * @param splitKeys<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span> * @return A Table instance for the created table.<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span> * @throws IOException<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span> */<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span> public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span> throws IOException {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span> return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span> }<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span><a name="line.1546"></a>
+<span class="sourceLineNo">1547</span> /**<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span> * Create a table.<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span> * @param tableName the table name<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span> * @param families the families<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span> * @param splitKeys the splitkeys<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span> * @param replicaCount the region replica count<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span> * @return A Table instance for the created table.<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span> * @throws IOException throws IOException<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span> */<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span> public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span> int replicaCount) throws IOException {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span> return createTable(tableName, families, splitKeys, replicaCount,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span> new Configuration(getConfiguration()));<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span> }<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span> public Table createTable(TableName tableName, byte[][] families, int numVersions, byte[] startKey,<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span> byte[] endKey, int numRegions) throws IOException {<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span> TableDescriptor desc = createTableDescriptor(tableName, families, numVersions);<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span><a name="line.1565"></a>
+<span class="sourceLineNo">1566</span> getAdmin().createTable(desc, startKey, endKey, numRegions);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span> // HBaseAdmin only waits for regions to appear in hbase:meta we<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span> // should wait until they are assigned<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span> return getConnection().getTable(tableName);<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span> }<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span><a name="line.1572"></a>
+<span class="sourceLineNo">1573</span> /**<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span> * Create a table.<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span> * @param c Configuration to use<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span> * @return A Table instance for the created table.<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span> */<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span> public Table createTable(TableDescriptor htd, byte[][] families, Configuration c)<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span> throws IOException {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span> return createTable(htd, families, null, c);<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span> }<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span><a name="line.1582"></a>
+<span class="sourceLineNo">1583</span> /**<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span> * Create a table.<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span> * @param htd table descriptor<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span> * @param families array of column families<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span> * @param splitKeys array of split keys<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span> * @param c Configuration to use<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span> * @return A Table instance for the created table.<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span> * @throws IOException if getAdmin or createTable fails<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span> */<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span> public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span> Configuration c) throws IOException {<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span> // Disable blooms (they are on by default as of 0.95) but we disable them here because<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span> // tests have hard coded counts of what to expect in block cache, etc., and blooms being<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span> // on is interfering.<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span> return createTable(htd, families, splitKeys, BloomType.NONE, HConstants.DEFAULT_BLOCKSIZE, c);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span> }<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span><a name="line.1599"></a>
+<span class="sourceLineNo">1600</span> /**<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span> * Create a table.<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span> * @param htd table descriptor<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span> * @param families array of column families<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span> * @param splitKeys array of split keys<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> * @param type Bloom type<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span> * @param blockSize block size<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span> * @param c Configuration to use<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span> * @return A Table instance for the created table.<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span> * @throws IOException if getAdmin or createTable fails<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span> */<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span><a name="line.1611"></a>
+<span class="sourceLineNo">1612</span> public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span> BloomType type, int blockSize, Configuration c) throws IOException {<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span> for (byte[] family : families) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span> ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span> .setBloomFilterType(type)<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span> .setBlocksize(blockSize);<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span> cfdb.setNewVersionBehavior(true);<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span> }<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span> builder.setColumnFamily(cfdb.build());<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span> }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span> TableDescriptor td = builder.build();<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span> if (splitKeys != null) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span> getAdmin().createTable(td, splitKeys);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span> } else {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span> getAdmin().createTable(td);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span> }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span> // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span> // we should wait until they are assigned<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span> waitUntilAllRegionsAssigned(td.getTableName());<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span> return getConnection().getTable(td.getTableName());<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span> }<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span><a name="line.1635"></a>
+<span class="sourceLineNo">1636</span> /**<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span> * Create a table.<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span> * @param htd table descriptor<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span> * @param splitRows array of split keys<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span> * @return A Table instance for the created table.<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span> * @throws IOException<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span> */<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span> public Table createTable(TableDescriptor htd, byte[][] splitRows)<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span> throws IOException {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span> for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span> builder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span> .setNewVersionBehavior(true).build());<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span> }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span> }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span> if (splitRows != null) {<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span> getAdmin().createTable(builder.build(), splitRows);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span> } else {<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span> getAdmin().createTable(builder.build());<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span> }<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span> // HBaseAdmin only waits for regions to appear in hbase:meta<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span> // we should wait until they are assigned<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span> waitUntilAllRegionsAssigned(htd.getTableName());<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span> return getConnection().getTable(htd.getTableName());<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span> }<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span><a name="line.1662"></a>
+<span class="sourceLineNo">1663</span> /**<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span> * Create a table.<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span> * @param tableName the table name<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span> * @param families the families<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span> * @param splitKeys the split keys<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span> * @param replicaCount the replica count<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span> * @param c Configuration to use<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span> * @return A Table instance for the created table.<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span> */<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span> public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span> int replicaCount, final Configuration c) throws IOException {<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span> TableDescriptor htd =<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span> TableDescriptorBuilder.newBuilder(tableName).setRegionReplication(replicaCount).build();<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span> return createTable(htd, families, splitKeys, c);<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span> }<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span><a name="line.1678"></a>
+<span class="sourceLineNo">1679</span> /**<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span> * Create a table.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span> * @return A Table instance for the created table.<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span> */<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span> public Table createTable(TableName tableName, byte[] family, int numVersions) throws IOException {<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span> return createTable(tableName, new byte[][] { family }, numVersions);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span> }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span> /**<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span> * Create a table.<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span> * @return A Table instance for the created table.<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span> */<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span> public Table createTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span> throws IOException {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span> return createTable(tableName, families, numVersions, (byte[][]) null);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span> }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span> /**<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span> * Create a table.<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span> * @return A Table instance for the created table.<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span> */<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span> public Table createTable(TableName tableName, byte[][] families, int numVersions,<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span> byte[][] splitKeys) throws IOException {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span> for (byte[] family : families) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span> .setMaxVersions(numVersions);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span> }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span> }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span> if (splitKeys != null) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span> getAdmin().createTable(builder.build(), splitKeys);<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span> } else {<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span> getAdmin().createTable(builder.build());<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span> }<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span> // assigned<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span> return getConnection().getTable(tableName);<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span> }<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span><a name="line.1721"></a>
+<span class="sourceLineNo">1722</span> /**<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span> * Create a table with multiple regions.<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span> * @return A Table instance for the created table.<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span> */<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span> public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span> throws IOException {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span> return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span> }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span> /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span> * Create a table.<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span> * @return A Table instance for the created table.<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span> */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span> public Table createTable(TableName tableName, byte[][] families,<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span> int numVersions, int blockSize) throws IOException {<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span> for (byte[] family : families) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span> .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span> }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span> }<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span> getAdmin().createTable(builder.build());<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span> // assigned<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span> return getConnection().getTable(tableName);<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span> }<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span><a name="line.1752"></a>
+<span class="sourceLineNo">1753</span> public Table createTable(TableName tableName, byte[][] families,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span> int numVersions, int blockSize, String cpName) throws IOException {<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span> for (byte[] family : families) {<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span> .setMaxVersions(numVersions).setBlocksize(blockSize);<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span> }<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span> }<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span> if (cpName != null) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span> builder.setCoprocessor(cpName);<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span> }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span> getAdmin().createTable(builder.build());<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span> // assigned<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span> return getConnection().getTable(tableName);<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span> }<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span><a name="line.1773"></a>
+<span class="sourceLineNo">1774</span> /**<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span> * Create a table.<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span> * @return A Table instance for the created table.<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span> */<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span> public Table createTable(TableName tableName, byte[][] families, int[] numVersions)<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span> throws IOException {<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span> int i = 0;<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span> for (byte[] family : families) {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span> ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span> ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions[i]);<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span> }<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span> i++;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span> }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span> getAdmin().createTable(builder.build());<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span> // assigned<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span> return getConnection().getTable(tableName);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span> }<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span><a name="line.1797"></a>
+<span class="sourceLineNo">1798</span> /**<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span> * Create a table.<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span> * @return A Table instance for the created table.<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span> */<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span> public Table createTable(TableName tableName, byte[] family, byte[][] splitRows)<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span> throws IOException {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span> }<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span> getAdmin().createTable(builder.build(), splitRows);<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span> // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span> // assigned<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span> waitUntilAllRegionsAssigned(tableName);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span> return getConnection().getTable(tableName);<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span> }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span> /**<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span> * Create a table with multiple regions.<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span> * @return A Table instance for the created table.<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span> */<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span> public Table createMultiRegionTable(TableName tableName, byte[] family) throws IOException {<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span> return createTable(tableName, family, KEYS_FOR_HBA_CREATE_TABLE);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span> }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span> /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span> * Modify a table, synchronous.<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span> * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span> * {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span> * @see Admin#modifyTable(TableDescriptor)<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span> * @see <a href="https://issues.apache.org/jira/browse/HBASE-22002">HBASE-22002</a><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span> */<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span> @Deprecated<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span> public static void modifyTableSync(Admin admin, TableDescriptor desc)<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span> throws IOException, InterruptedException {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span> admin.modifyTable(desc);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span> }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span> /**<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span> * Set the number of Region replicas.<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span> */<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span> public static void setReplicas(Admin admin, TableName table, int replicaCount)<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span> throws IOException, InterruptedException {<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span> TableDescriptor desc = TableDescriptorBuilder.newBuilder(admin.getDescriptor(table))<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span> .setRegionReplication(replicaCount).build();<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span> admin.modifyTable(desc);<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span> }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span> /**<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span> * Drop an existing table<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span> * @param tableName existing table<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span> */<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span> public void deleteTable(TableName tableName) throws IOException {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span> try {<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span> getAdmin().disableTable(tableName);<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span> } catch (TableNotEnabledException e) {<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span> LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span> }<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span> getAdmin().deleteTable(tableName);<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span> }<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span><a name="line.1860"></a>
+<span class="sourceLineNo">1861</span> /**<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span> * Drop an existing table<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span> * @param tableName existing table<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span> */<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span> public void deleteTableIfAny(TableName tableName) throws IOException {<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span> try {<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span> deleteTable(tableName);<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span> } catch (TableNotFoundException e) {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span> // ignore<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span> }<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span> }<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span><a name="line.1872"></a>
+<span class="sourceLineNo">1873</span> // ==========================================================================<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span> // Canned table and table descriptor creation<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span><a name="line.1875"></a>
+<span class="sourceLineNo">1876</span> public final static byte [] fam1 = Bytes.toBytes("colfamily11");<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span> public final static byte [] fam2 = Bytes.toBytes("colfamily21");<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span> public final static byte [] fam3 = Bytes.toBytes("colfamily31");<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span> public static final byte[][] COLUMNS = {fam1, fam2, fam3};<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span> private static final int MAXVERSIONS = 3;<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span><a name="line.1881"></a>
+<span class="sourceLineNo">1882</span> public static final char FIRST_CHAR = 'a';<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span> public static final char LAST_CHAR = 'z';<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span> public static final byte [] START_KEY_BYTES = {FIRST_CHAR, FIRST_CHAR, FIRST_CHAR};<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span> public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span><a name="line.1886"></a>
+<span class="sourceLineNo">1887</span> public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span> return createModifyableTableDescriptor(TableName.valueOf(name),<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span> ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS, MAXVERSIONS, HConstants.FOREVER,<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span> ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span> }<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span><a name="line.1892"></a>
+<span class="sourceLineNo">1893</span> public TableDescriptor createTableDescriptor(final TableName name, final int minVersions,<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span> final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span> for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span> .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span> .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span> }<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span> }<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span> return builder.build();<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span> }<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span><a name="line.1907"></a>
+<span class="sourceLineNo">1908</span> public TableDescriptorBuilder createModifyableTableDescriptor(final TableName name,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span> final int minVersions, final int versions, final int ttl, KeepDeletedCells keepDeleted) {<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span> for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span> .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span> .setBlockCacheEnabled(false).setTimeToLive(ttl);<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span> }<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span> }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span> return builder;<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span> }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span><a name="line.1922"></a>
+<span class="sourceLineNo">1923</span> /**<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span> * Create a table of name <code>name</code>.<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span> * @param name Name to give table.<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span> * @return Column descriptor.<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span> */<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span> public TableDescriptor createTableDescriptor(final TableName name) {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span> return createTableDescriptor(name, ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS,<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span> MAXVERSIONS, HConstants.FOREVER, ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span> }<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span><a name="line.1932"></a>
+<span class="sourceLineNo">1933</span> public TableDescriptor createTableDescriptor(final TableName tableName, byte[] family) {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span> return createTableDescriptor(tableName, new byte[][] { family }, 1);<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span> }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span> public TableDescriptor createTableDescriptor(final TableName tableName, byte[][] families,<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span> int maxVersions) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span> for (byte[] family : families) {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span> ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span> ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(maxVersions);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span> if (isNewVersionBehaviorEnabled()) {<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span> cfBuilder.setNewVersionBehavior(true);<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span> }<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span> builder.setColumnFamily(cfBuilder.build());<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span> }<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span> return builder.build();<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span> }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span><a name="line.1950"></a>
+<span class="sourceLineNo">1951</span> /**<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span> * Create an HRegion that writes to the local tmp dirs<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span> * @param desc a table descriptor indicating which table the region belongs to<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span> * @param startKey the start boundary of the region<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span> * @param endKey the end boundary of the region<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span> * @return a region that writes to local dir for testing<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span> */<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span> public HRegion createLocalHRegion(TableDescriptor desc, byte[] startKey, byte[] endKey)<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span> throws IOException {<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span> RegionInfo hri = RegionInfoBuilder.newBuilder(desc.getTableName()).setStartKey(startKey)<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span> .setEndKey(endKey).build();<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span> return createLocalHRegion(hri, desc);<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span> }<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span><a name="line.1964"></a>
+<span class="sourceLineNo">1965</span> /**<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span> * Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when you're finished with it.<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span> */<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span> public HRegion createLocalHRegion(RegionInfo info, TableDescriptor desc) throws IOException {<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span> return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), desc);<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span> }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span><a name="line.1972"></a>
+<span class="sourceLineNo">1973</span> /**<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span> * Create an HRegion that writes to the local tmp dirs with specified wal<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span> * @param info regioninfo<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span> * @param conf configuration<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span> * @param desc table descriptor<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span> * @param wal wal for this region.<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span> * @return created hregion<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span> * @throws IOException<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span> */<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span> public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span> WAL wal) throws IOException {<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span> return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span> }<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span><a name="line.1986"></a>
+<span class="sourceLineNo">1987</span> /**<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span> * @param tableName<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span> * @param startKey<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span> * @param stopKey<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span> * @param isReadOnly<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span> * @param families<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span> * @return A region on which you must call<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when done.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span> * @throws IOException<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span> */<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span> public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span> Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span> throws IOException {<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span> return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span> durability, wal, null, families);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span> }<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span> public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span> byte[] stopKey, Configuration conf, boolean isReadOnly, Durability durability, WAL wal,<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span> boolean[] compactedMemStore, byte[]... families) throws IOException {<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span> builder.setReadOnly(isReadOnly);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span> int i = 0;<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span> for (byte[] family : families) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span> ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span> if (compactedMemStore != null && i < compactedMemStore.length) {<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span> cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.BASIC);<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span> } else {<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span> cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.NONE);<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span><a name="line.2016"></a>
+<span class="sourceLineNo">2017</span> }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span> i++;<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span> // Set default to be three versions.<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span> cfBuilder.setMaxVersions(Integer.MAX_VALUE);<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span> builder.setColumnFamily(cfBuilder.build());<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span> }<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span> builder.setDurability(durability);<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span> RegionInfo info =<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span> RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(stopKey).build();<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span> return createLocalHRegion(info, conf, builder.build(), wal);<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span> }<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span><a name="line.2028"></a>
+<span class="sourceLineNo">2029</span> //<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span> // ==========================================================================<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span><a name="line.2031"></a>
+<span class="sourceLineNo">2032</span> /**<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span> * Provide an existing table name to truncate.<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span> * Scans the table and issues a delete for each row read.<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span> * @param tableName existing table<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span> * @return HTable to that new table<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span> * @throws IOException<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span> */<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span> public Table deleteTableData(TableName tableName) throws IOException {<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span> Table table = getConnection().getTable(tableName);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span> Scan scan = new Scan();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span> ResultScanner resScan = table.getScanner(scan);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span> for(Result res : resScan) {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span> Delete del = new Delete(res.getRow());<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span> table.delete(del);<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span> }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span> resScan = table.getScanner(scan);<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span> resScan.close();<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span> return table;<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span> }<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span><a name="line.2051"></a>
+<span class="sourceLineNo">2052</span> /**<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span> * Truncate a table using the admin command.<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span> * Effectively disables, deletes, and recreates the table.<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span> * @param tableName table which must exist.<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span> * @param preserveRegions keep the existing split points<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span> * @return HTable for the new table<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span> */<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span> public Table truncateTable(final TableName tableName, final boolean preserveRegions) throws<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span> IOException {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span> Admin admin = getAdmin();<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span> if (!admin.isTableDisabled(tableName)) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span> admin.disableTable(tableName);<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span> }<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span> admin.truncateTable(tableName, preserveRegions);<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span> return getConnection().getTable(tableName);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span> }<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span><a name="line.2068"></a>
+<span class="sourceLineNo">2069</span> /**<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span> * Truncate a table using the admin command.<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span> * Effectively disables, deletes, and recreates the table.<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span> * For previous behavior of issuing row deletes, see<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span> * deleteTableData.<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span> * Expressly does not preserve regions of existing table.<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span> * @param tableName table which must exist.<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span> * @return HTable for the new table<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span> */<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span> public Table truncateTable(final TableName tableName) throws IOException {<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span> return truncateTable(tableName, false);<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span> }<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span><a name="line.2081"></a>
+<span class="sourceLineNo">2082</span> /**<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span> * Load table with rows from 'aaa' to 'zzz'.<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span> * @param t Table<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span> * @param f Family<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span> * @return Count of rows loaded.<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span> * @throws IOException<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span> */<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span> public int loadTable(final Table t, final byte[] f) throws IOException {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span> return loadTable(t, new byte[][] {f});<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span> }<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span><a name="line.2092"></a>
+<span class="sourceLineNo">2093</span> /**<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span> * Load table with rows from 'aaa' to 'zzz'.<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span> * @param t Table<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span> * @param f Family<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span> * @return Count of rows loaded.<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span> * @throws IOException<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span> */<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span> public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span> return loadTable(t, new byte[][] {f}, null, writeToWAL);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span> }<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span><a name="line.2103"></a>
+<span class="sourceLineNo">2104</span> /**<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span> * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span> * @param t Table<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span> * @param f Array of Families to load<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span> * @return Count of rows loaded.<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span> * @throws IOException<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span> */<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span> public int loadTable(final Table t, final byte[][] f) throws IOException {<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span> return loadTable(t, f, null);<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span> }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span><a name="line.2114"></a>
+<span class="sourceLineNo">2115</span> /**<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span> * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span> * @param t Table<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span> * @param f Array of Families to load<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span> * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span> * @return Count of rows loaded.<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span> * @throws IOException<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span> */<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span> public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span> return loadTable(t, f, value, true);<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span> }<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span><a name="line.2126"></a>
+<span class="sourceLineNo">2127</span> /**<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span> * Load table of multiple column families with rows from 'aaa' to 'zzz'.<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span> * @param t Table<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span> * @param f Array of Families to load<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span> * @param value the values of the cells. If null is passed, the row key is used as value<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span> * @return Count of rows loaded.<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span> * @throws IOException<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span> */<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span> public int loadTable(final Table t, final byte[][] f, byte[] value,<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span> boolean writeToWAL) throws IOException {<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span> List<Put> puts = new ArrayList<>();<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span> for (byte[] row : HBaseTestingUtility.ROWS) {<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span> Put put = new Put(row);<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span> put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span> for (int i = 0; i < f.length; i++) {<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span> byte[] value1 = value != null ? value : row;<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span> put.addColumn(f[i], f[i], value1);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span> }<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span> puts.add(put);<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span> }<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span> t.put(puts);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span> return puts.size();<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span> }<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span><a name="line.2150"></a>
+<span class="sourceLineNo">2151</span> /** A tracker for tracking and validating table rows<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span> * generated with {@link HBaseTestingUtility#loadTable(Table, byte[])}<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span> */<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span> public static class SeenRowTracker {<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span> int dim = 'z' - 'a' + 1;<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span> int[][][] seenRows = new int[dim][dim][dim]; //count of how many times the row is seen<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span> byte[] startRow;<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span> byte[] stopRow;<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span><a name="line.2159"></a>
+<span class="sourceLineNo">2160</span> public SeenRowTracker(byte[] startRow, byte[] stopRow) {<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span> this.startRow = startRow;<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span> this.stopRow = stopRow;<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span> }<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span><a name="line.2164"></a>
+<span class="sourceLineNo">2165</span> void reset() {<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span> for (byte[] row : ROWS) {<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span> seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span> }<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span> }<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span><a name="line.2170"></a>
+<span class="sourceLineNo">2171</span> int i(byte b) {<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span> return b - 'a';<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span> }<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span><a name="line.2174"></a>
+<span class="sourceLineNo">2175</span> public void addRow(byte[] row) {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span> seenRows[i(row[0])][i(row[1])][i(row[2])]++;<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span> }<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span><a name="line.2178"></a>
+<span class="sourceLineNo">2179</span> /** Validate that all the rows between startRow and stopRow are seen exactly once, and<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span> * all other rows none<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span> */<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span> public void validate() {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span> for (byte b1 = 'a'; b1 <= 'z'; b1++) {<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span> for (byte b2 = 'a'; b2 <= 'z'; b2++) {<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span> for (byte b3 = 'a'; b3 <= 'z'; b3++) {<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span> int count = seenRows[i(b1)][i(b2)][i(b3)];<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span> int expectedCount = 0;<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span> if (Bytes.compareTo(new byte[] {b1,b2,b3}, startRow) >= 0<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span> && Bytes.compareTo(new byte[] {b1,b2,b3}, stopRow) < 0) {<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span> expectedCount = 1;<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span> }<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span> if (count != expectedCount) {<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span> String row = new String(new byte[] {b1,b2,b3}, StandardCharsets.UTF_8);<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span> throw new RuntimeException("Row:" + row + " has a seen count of " + count + " " +<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span> "instead of " + expectedCount);<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span> }<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span> }<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span> }<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span> }<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span> }<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span> }<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span><a name="line.2202"></a>
+<span class="sourceLineNo">2203</span> public int loadRegion(final HRegion r, final byte[] f) throws IOException {<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span> return loadRegion(r, f, false);<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span> }<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span><a name="line.2206"></a>
+<span class="sourceLineNo">2207</span> public int loadRegion(final Region r, final byte[] f) throws IOException {<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span> return loadRegion((HRegion)r, f);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span> }<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span><a name="line.2210"></a>
+<span class="sourceLineNo">2211</span> /**<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span> * Load region with rows from 'aaa' to 'zzz'.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span> * @param r Region<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span> * @param f Family<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span> * @param flush flush the cache if true<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span> * @return Count of rows loaded.<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span> * @throws IOException<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span> */<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span> public int loadRegion(final HRegion r, final byte[] f, final boolean flush)<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span> throws IOException {<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span> byte[] k = new byte[3];<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span> int rowCount = 0;<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span> for (byte b1 = 'a'; b1 <= 'z'; b1++) {<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span> for (byte b2 = 'a'; b2 <= 'z'; b2++) {<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span> for (byte b3 = 'a'; b3 <= 'z'; b3++) {<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span> k[0] = b1;<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span> k[1] = b2;<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span> k[2] = b3;<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span> Put put = new Put(k);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span> put.setDurability(Durability.SKIP_WAL);<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span> put.addColumn(f, null, k);<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span> if (r.getWAL() == null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span> put.setDurability(Durability.SKIP_WAL);<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span> }<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span> int preRowCount = rowCount;<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span> int pause = 10;<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span> int maxPause = 1000;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span> while (rowCount == preRowCount) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span> try {<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span> r.put(put);<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span> rowCount++;<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span> } catch (RegionTooBusyException e) {<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span> pause = (pause * 2 >= maxPause) ? maxPause : pause * 2;<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span> Threads.sleep(pause);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span> }<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span> }<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span> }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span> }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span> if (flush) {<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span> r.flush(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span> }<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span> }<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span> return rowCount;<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span> }<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span><a name="line.2255"></a>
+<span class="sourceLineNo">2256</span> public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span> throws IOException {<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span> for (int i = startRow; i < endRow; i++) {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span> byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span> Put put = new Put(data);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span> put.addColumn(f, null, data);<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span> t.put(put);<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span> }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span> }<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span><a name="line.2265"></a>
+<span class="sourceLineNo">2266</span> public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span> throws IOException {<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span> Random r = new Random();<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span> byte[] row = new byte[rowSize];<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span> for (int i = 0; i < totalRows; i++) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span> r.nextBytes(row);<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span> Put put = new Put(row);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span> put.addColumn(f, new byte[]{0}, new byte[]{0});<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span> t.put(put);<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span> }<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span> }<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span><a name="line.2277"></a>
+<span class="sourceLineNo">2278</span> public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span> int replicaId)<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span> throws IOException {<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span> for (int i = startRow; i < endRow; i++) {<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span> String failMsg = "Failed verification of row :" + i;<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span> byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span> Get get = new Get(data);<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span> get.setReplicaId(replicaId);<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span> get.setConsistency(Consistency.TIMELINE);<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span> Result result = table.get(get);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span> if (!result.containsColumn(f, null)) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span> throw new AssertionError(failMsg);<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span> }<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span> assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span> Cell cell = result.getColumnLatestCell(f, null);<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span> if (!Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span> cell.getValueLength())) {<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span> throw new AssertionError(failMsg);<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span> }<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span> }<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span> }<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span><a name="line.2299"></a>
+<span class="sourceLineNo">2300</span> public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span> throws IOException {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span> verifyNumericRows((HRegion)region, f, startRow, endRow);<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span> }<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span> public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span> throws IOException {<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span> verifyNumericRows(region, f, startRow, endRow, true);<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span> }<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span><a name="line.2309"></a>
+<span class="sourceLineNo">2310</span> public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span> final boolean present) throws IOException {<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span> verifyNumericRows((HRegion)region, f, startRow, endRow, present);<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span> }<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span><a name="line.2314"></a>
+<span class="sourceLineNo">2315</span> public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span> final boolean present) throws IOException {<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span> for (int i = startRow; i < endRow; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span> String failMsg = "Failed verification of row :" + i;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span> byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span> Result result = region.get(new Get(data));<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span><a name="line.2321"></a>
+<span class="sourceLineNo">2322</span> boolean hasResult = result != null && !result.isEmpty();<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span> if (present != hasResult) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span> throw new AssertionError(<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span> failMsg + result + " expected:<" + present + "> but was:<" + hasResult + ">");<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span> }<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span> if (!present) continue;<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span><a name="line.2328"></a>
+<span class="sourceLineNo">2329</span> if (!result.containsColumn(f, null)) {<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span> throw new AssertionError(failMsg);<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span> }<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span> assertEquals(failMsg, 1, result.getColumnCells(f, null).size());<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span> Cell cell = result.getColumnLatestCell(f, null);<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span> if (!Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span> cell.getValueLength())) {<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span> throw new AssertionError(failMsg);<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span> }<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span> }<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span> }<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span><a name="line.2340"></a>
+<span class="sourceLineNo">2341</span> public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span> throws IOException {<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span> for (int i = startRow; i < endRow; i++) {<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span> byte[] data = Bytes.toBytes(String.valueOf(i));<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span> Delete delete = new Delete(data);<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span> delete.addFamily(f);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span> t.delete(delete);<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span> }<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span> }<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span><a name="line.2350"></a>
+<span class="sourceLineNo">2351</span> /**<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span> * Return the number of rows in the given table.<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span> * @param table to count rows<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span> * @return count of rows<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span> */<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span> public static int countRows(final Table table) throws IOException {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span> return countRows(table, new Scan());<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span> }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span><a name="line.2359"></a>
+<span class="sourceLineNo">2360</span> public static int countRows(final Table table, final Scan scan) throws IOException {<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span> try (ResultScanner results = table.getScanner(scan)) {<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span> int count = 0;<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span> while (results.next() != null) {<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span> count++;<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span> }<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span> return count;<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span> }<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span> }<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span><a name="line.2369"></a>
+<span class="sourceLineNo">2370</span> public int countRows(final Table table, final byte[]... families) throws IOException {<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span> Scan scan = new Scan();<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span> for (byte[] family: families) {<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span> scan.addFamily(family);<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span> }<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span> return countRows(table, scan);<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span> }<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span><a name="line.2377"></a>
+<span class="sourceLineNo">2378</span> /**<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span> * Return the number of rows in the given table.<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span> */<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span> public int countRows(final TableName tableName) throws IOException {<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span> Table table = getConnection().getTable(tableName);<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span> try {<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span> return countRows(table);<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span> } finally {<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span> table.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span> }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span> }<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span><a name="line.2389"></a>
+<span class="sourceLineNo">2390</span> public int countRows(final Region region) throws IOException {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span> return countRows(region, new Scan());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span> }<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span><a name="line.2393"></a>
+<span class="sourceLineNo">2394</span> public int countRows(final Region region, final Scan scan) throws IOException {<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span> InternalScanner scanner = region.getScanner(scan);<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span> try {<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span> return countRows(scanner);<a name="line.2397"></a>
+<span class="sourceLineNo">2398</span> } finally {<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span> scanner.close();<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span> }<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span> }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span> public int countRows(final InternalScanner scanner) throws IOException {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span> int scannedCount = 0;<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span> List<Cell> results = new ArrayList<>();<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span> boolean hasMore = true;<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span> while (hasMore) {<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span> hasMore = scanner.next(results);<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span> scannedCount += results.size();<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span> results.clear();<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span> }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span> return scannedCount;<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span> }<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span><a name="line.2414"></a>
+<span class="sourceLineNo">2415</span> /**<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span> * Return an md5 digest of the entire contents of a table.<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span> */<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span> public String checksumRows(final Table table) throws Exception {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span><a name="line.2419"></a>
+<span class="sourceLineNo">2420</span> Scan scan = new Scan();<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span> ResultScanner results = table.getScanner(scan);<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span> MessageDigest digest = MessageDigest.getInstance("MD5");<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span> for (Result res : results) {<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span> digest.update(res.getRow());<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span> }<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span> results.close();<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span> return digest.toString();<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span> }<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span><a name="line.2429"></a>
+<span class="sourceLineNo">2430</span> /** All the row values for the data loaded by {@link #loadTable(Table, byte[])} */<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span> public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span> static {<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span> int i = 0;<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span> for (byte b1 = 'a'; b1 <= 'z'; b1++) {<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span> for (byte b2 = 'a'; b2 <= 'z'; b2++) {<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span> for (byte b3 = 'a'; b3 <= 'z'; b3++) {<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span> ROWS[i][0] = b1;<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span> ROWS[i][1] = b2;<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span> ROWS[i][2] = b3;<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span> i++;<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span> }<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span> }<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span> }<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span> }<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span><a name="line.2445"></a>
+<span class="sourceLineNo">2446</span> public static final byte[][] KEYS = {<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span> HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span> Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span> Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span> Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span> Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span> Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span> Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span> Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span> Bytes.toBytes("xxx"), Bytes.toBytes("yyy")<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span> };<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span><a name="line.2457"></a>
+<span class="sourceLineNo">2458</span> public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = {<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span> Bytes.toBytes("bbb"),<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span> Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"),<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span> Bytes.toBytes("fff"), Bytes.toBytes("ggg"), Bytes.toBytes("hhh"),<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span> Bytes.toBytes("iii"), Bytes.toBytes("jjj"), Bytes.toBytes("kkk"),<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span> Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span> Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"),<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span> Bytes.toBytes("rrr"), Bytes.toBytes("sss"), Bytes.toBytes("ttt"),<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span> Bytes.toBytes("uuu"), Bytes.toBytes("vvv"), Bytes.toBytes("www"),<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span> Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz")<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span> };<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span><a name="line.2469"></a>
+<span class="sourceLineNo">2470</span> /**<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span> * Create rows in hbase:meta for regions of the specified table with the specified<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span> * start keys. The first startKey should be a 0 length byte array if you<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span> * want to form a proper range of regions.<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span> * @param conf<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span> * @param htd<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span> * @param startKeys<a name="line.2476"></a>
+<span class="sourceLineNo">2477</span> * @return list of region info for regions added to meta<a name="line.2477"></a>
+<span class="sourceLineNo">2478</span> * @throws IOException<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span> */<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span> public List<RegionInfo> createMultiRegionsInMeta(final Configuration conf,<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span> final TableDescriptor htd, byte [][] startKeys)<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span> throws IOException {<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span> Table meta = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span> Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span> List<RegionInfo> newRegions = new ArrayList<>(startKeys.length);<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span> MetaTableAccessor<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span> .updateTableState(getConnection(), htd.getTableName(), TableState.State.ENABLED);<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span> // add custom ones<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span> for (int i = 0; i < startKeys.length; i++) {<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span> int j = (i + 1) % startKeys.length;<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span> RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName())<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span> .setStartKey(startKeys[i])<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span> .setEndKey(startKeys[j])<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span> .build();<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span> MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span> newRegions.add(hri);<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span> }<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span><a name="line.2498"></a>
+<span class="sourceLineNo">2499</span> meta.close();<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span> return newRegions;<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span> }<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span><a name="line.2502"></a>
+<span class="sourceLineNo">2503</span> /**<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span> * Create an unmanaged WAL. Be sure to close it when you're through.<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span> */<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span> public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span> throws IOException {<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span> // The WAL subsystem will use the default rootDir rather than the passed in rootDir<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span> // unless I pass along via the conf.<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span> Configuration confForWAL = new Configuration(conf);<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span> confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span> return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span> }<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span><a name="line.2514"></a>
<span class="sourceLineNo">2515</span><a name="line.2515"></a>
-<span class="sourceLineNo">2516</span><a name="line.2516"></a>
-<span class="sourceLineNo">2517</span> /**<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span> * Create a region with it's own WAL. Be sure to call<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span> */<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span> public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span> final Configuration conf, final TableDescriptor htd) throws IOException {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span> return createRegionAndWAL(info, rootDir, conf, htd, true);<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span> }<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span><a name="line.2525"></a>
-<span class="sourceLineNo">2526</span> /**<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span> * Create a region with it's own WAL. Be sure to call<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span> */<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span> public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span> final Configuration conf, final TableDescriptor htd, BlockCache blockCache)<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span> throws IOException {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span> HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span> region.setBlockCache(blockCache);<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span> region.initialize();<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span> return region;<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span> }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span> /**<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span> * Create a region with it's own WAL. Be sure to call<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span> */<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span> public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span> final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span> throws IOException {<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span> HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span> region.setMobFileCache(mobFileCache);<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span> region.initialize();<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span> return region;<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span> }<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span><a name="line.2550"></a>
-<span class="sourceLineNo">2551</span> /**<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span> * Create a region with it's own WAL. Be sure to call<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span> */<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span> public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span> final Configuration conf, final TableDescriptor htd, boolean initialize)<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span> throws IOException {<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span> ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0,<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span> 0, null, MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span> WAL wal = createWal(conf, rootDir, info);<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span> return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span> }<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span><a name="line.2563"></a>
-<span class="sourceLineNo">2564</span> /**<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span> * Returns all rows from the hbase:meta table.<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span> *<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span> * @throws IOException When reading the rows fails.<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span> */<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span> public List<byte[]> getMetaTableRows() throws IOException {<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span> // TODO: Redo using MetaTableAccessor class<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span> Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span> List<byte[]> rows = new ArrayList<>();<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span> ResultScanner s = t.getScanner(new Scan());<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span> for (Result result : s) {<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span> LOG.info("getMetaTableRows: row -> " +<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span> Bytes.toStringBinary(result.getRow()));<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span> rows.add(result.getRow());<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span> }<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span> s.close();<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span> t.close();<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span> return rows;<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span> }<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span><a name="line.2583"></a>
-<span class="sourceLineNo">2584</span> /**<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span> * Returns all rows from the hbase:meta table for a given user table<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span> *<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span> * @throws IOException When reading the rows fails.<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span> */<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span> public List<byte[]> getMetaTableRows(TableName tableName) throws IOException {<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span> // TODO: Redo using MetaTableAccessor.<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span> Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span> List<byte[]> rows = new ArrayList<>();<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span> ResultScanner s = t.getScanner(new Scan());<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span> for (Result result : s) {<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span> RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span> if (info == null) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span> LOG.error("No region info for row " + Bytes.toString(result.getRow()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span> // TODO figure out what to do for this new hosed case.<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span> continue;<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span> }<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span><a name="line.2601"></a>
-<span class="sourceLineNo">2602</span> if (info.getTable().equals(tableName)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span> LOG.info("getMetaTableRows: row -> " +<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span> Bytes.toStringBinary(result.getRow()) + info);<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span> rows.add(result.getRow());<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span> }<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span> }<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span> s.close();<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span> t.close();<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span> return rows;<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span> }<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span><a name="line.2612"></a>
-<span class="sourceLineNo">2613</span> /**<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span> * Returns all regions of the specified table<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span> *<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span> * @param tableName the table name<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span> * @return all regions of the specified table<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span> * @throws IOException when getting the regions fails.<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span> */<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span> private List<RegionInfo> getRegions(TableName tableName) throws IOException {<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span> try (Admin admin = getConnection().getAdmin()) {<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span> return admin.getRegions(tableName);<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span> }<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span> }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span> /*<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span> * Find any other region server which is different from the one identified by parameter<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span> * @param rs<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span> * @return another region server<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span> */<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span> public HRegionServer getOtherRegionServer(HRegionServer rs) {<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span> for (JVMClusterUtil.RegionServerThread rst :<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span> getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span> if (!(rst.getRegionServer() == rs)) {<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span> return rst.getRegionServer();<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span> }<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span> }<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span> return null;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span> }<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span><a name="line.2640"></a>
-<span class="sourceLineNo">2641</span> /**<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span> * Tool to get the reference to the region server object that holds the<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span> * region of the specified user table.<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span> * @param tableName user table to lookup in hbase:meta<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span> * @return region server that holds it, null if the row doesn't exist<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span> * @throws IOException<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span> * @throws InterruptedException<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span> */<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span> public HRegionServer getRSForFirstRegionInTable(TableName tableName)<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span> throws IOException, InterruptedException {<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span> List<RegionInfo> regions = getRegions(tableName);<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span> if (regions == null || regions.isEmpty()) {<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span> return null;<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span> }<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span> LOG.debug("Found " + regions.size() + " regions for table " +<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span> tableName);<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span><a name="line.2657"></a>
-<span class="sourceLineNo">2658</span> byte[] firstRegionName = regions.stream()<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span> .filter(r -> !r.isOffline())<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span> .map(RegionInfo::getRegionName)<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span> .findFirst()<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span> .orElseThrow(() -> new IOException("online regions not found in table " + tableName));<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span><a name="line.2663"></a>
-<span class="sourceLineNo">2664</span> LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span> long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span> HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span> int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span> HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span> RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span> while(retrier.shouldRetry()) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span> int index = getMiniHBaseCluster().getServerWith(firstRegionName);<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span> if (index != -1) {<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span> return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span> }<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span> // Came back -1. Region may not be online yet. Sleep a while.<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span> retrier.sleepUntilNextRetry();<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span> }<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span> return null;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span> }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span> /**<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span> * Starts a <code>MiniMRCluster</code> with a default number of<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span> * <code>TaskTracker</code>'s.<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span> *<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span> * @throws IOException When starting the cluster fails.<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span> */<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span> public MiniMRCluster startMiniMapReduceCluster() throws IOException {<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span> // Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span> conf.setIfUnset(<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span> "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span> "99.0");<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span> startMiniMapReduceCluster(2);<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span> return mrCluster;<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span> }<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span><a name="line.2695"></a>
-<span class="sourceLineNo">2696</span> /**<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span> * Tasktracker has a bug where changing the hadoop.log.dir system property<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span> * will not change its internal static LOG_DIR variable.<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span> */<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span> private void forceChangeTaskLogDir() {<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span> Field logDirField;<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span> try {<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span> logDirField = TaskLog.class.getDeclaredField("LOG_DIR");<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span> logDirField.setAccessible(true);<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span> Field modifiersField = ReflectionUtils.getModifiersField();<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span> modifiersField.setAccessible(true);<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span> modifiersField.setInt(logDirField, logDirField.getModifiers() & ~Modifier.FINAL);<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span><a name="line.2709"></a>
-<span class="sourceLineNo">2710</span> logDirField.set(null, new File(hadoopLogDir, "userlogs"));<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span> } catch (SecurityException e) {<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span> throw new RuntimeException(e);<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span> } catch (NoSuchFieldException e) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span> throw new RuntimeException(e);<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span> } catch (IllegalArgumentException e) {<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span> throw new RuntimeException(e);<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span> } catch (IllegalAccessException e) {<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span> throw new RuntimeException(e);<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span> }<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span> }<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span><a name="line.2721"></a>
-<span class="sourceLineNo">2722</span> /**<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span> * Starts a <code>MiniMRCluster</code>. Call {@link #setFileSystemURI(String)} to use a different<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span> * filesystem.<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span> * @param servers The number of <code>TaskTracker</code>'s to start.<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span> * @throws IOException When starting the cluster fails.<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span> */<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span> private void startMiniMapReduceCluster(final int servers) throws IOException {<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span> if (mrCluster != null) {<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span> throw new IllegalStateException("MiniMRCluster is already running");<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span> }<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span> LOG.info("Starting mini mapreduce cluster...");<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span> setupClusterTestDir();<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span> createDirsAndSetProperties();<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span><a name="line.2735"></a>
-<span class="sourceLineNo">2736</span> forceChangeTaskLogDir();<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span><a name="line.2737"></a>
-<span class="sourceLineNo">2738</span> //// hadoop2 specific settings<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span> // Tests were failing because this process used 6GB of virtual memory and was getting killed.<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span> // we up the VM usable so that processes don't get killed.<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span> conf.setFloat("yarn.nodemanager.vmem-pmem-ratio", 8.0f);<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span><a name="line.2742"></a>
-<span class="sourceLineNo">2743</span> // Tests were failing due to MAPREDUCE-4880 / MAPREDUCE-4607 against hadoop 2.0.2-alpha and<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span> // this avoids the problem by disabling speculative task execution in tests.<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span> conf.setBoolean("mapreduce.map.speculative", false);<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span> conf.setBoolean("mapreduce.reduce.speculative", false);<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span> ////<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span><a name="line.2748"></a>
-<span class="sourceLineNo">2749</span> // Allow the user to override FS URI for this map-reduce cluster to use.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span> mrCluster = new MiniMRCluster(servers,<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span> FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(), 1,<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span> null, null, new JobConf(this.conf));<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span> JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span> if (jobConf == null) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span> jobConf = mrCluster.createJobConf();<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span> }<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span><a name="line.2757"></a>
-<span class="sourceLineNo">2758</span> jobConf.set("mapreduce.cluster.local.dir",<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span> conf.get("mapreduce.cluster.local.dir")); //Hadoop MiniMR overwrites this while it should not<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span> LOG.info("Mini mapreduce cluster started");<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span><a name="line.2761"></a>
-<span class="sourceLineNo">2762</span> // In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span> // Our HBase MR jobs need several of these settings in order to properly run. So we copy the<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span> // necessary config properties here. YARN-129 required adding a few properties.<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span> conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span> // this for mrv2 support; mr1 ignores this<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span> conf.set("mapreduce.framework.name", "yarn");<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span> conf.setBoolean("yarn.is.minicluster", true);<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span> String rmAddress = jobConf.get("yarn.resourcemanager.address");<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span> if (rmAddress != null) {<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span> conf.set("yarn.resourcemanager.address", rmAddress);<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span> }<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span> String historyAddress = jobConf.get("mapreduce.jobhistory.address");<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span> if (historyAddress != null) {<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span> conf.set("mapreduce.jobhistory.address", historyAddress);<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span> }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span> String schedulerAddress =<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span> jobConf.get("yarn.resourcemanager.scheduler.address");<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span> if (schedulerAddress != null) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span> conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span> }<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span> String mrJobHistoryWebappAddress =<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span> jobConf.get("mapreduce.jobhistory.webapp.address");<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span> if (mrJobHistoryWebappAddress != null) {<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span> conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span> }<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span> String yarnRMWebappAddress =<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span> jobConf.get("yarn.resourcemanager.webapp.address");<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span> if (yarnRMWebappAddress != null) {<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span> conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span> }<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span> }<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span><a name="line.2793"></a>
-<span class="sourceLineNo">2794</span> /**<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span> * Stops the previously started <code>MiniMRCluster</code>.<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span> */<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span> public void shutdownMiniMapReduceCluster() {<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span> if (mrCluster != null) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span> LOG.info("Stopping mini mapreduce cluster...");<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span> mrCluster.shutdown();<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span> mrCluster = null;<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span> LOG.info("Mini mapreduce cluster stopped");<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span> }<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span> // Restore configuration to point to local jobtracker<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span> conf.set("mapreduce.jobtracker.address", "local");<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span> }<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span> /**<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span> * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span> */<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span> public RegionServerServices createMockRegionServerService() throws IOException {<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span> return createMockRegionServerService((ServerName)null);<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span> }<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span><a name="line.2814"></a>
-<span class="sourceLineNo">2815</span> /**<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span> * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span> * This version is used by TestTokenAuthentication<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span> */<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span> public RegionServerServices createMockRegionServerService(RpcServerInterface rpc) throws<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span> IOException {<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span> final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span> rss.setFileSystem(getTestFileSystem());<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span> rss.setRpcServer(rpc);<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span> return rss;<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span> }<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span><a name="line.2826"></a>
-<span class="sourceLineNo">2827</span> /**<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span> * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span> * This version is used by TestOpenRegionHandler<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span> */<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span> public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span> final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span> rss.setFileSystem(getTestFileSystem());<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span> return rss;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span> }<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span><a name="line.2836"></a>
-<span class="sourceLineNo">2837</span> /**<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span> * Switches the logger for the given class to DEBUG level.<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span> * @param clazz The class for which to switch to debug logging.<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span> * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span> * HBase only uses log4j. You should do this by your own as it you know which log<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span> * framework you are using then set the log level to debug is very easy.<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span> */<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span> @Deprecated<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span> public void enableDebug(Class<?> clazz) {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span> Log4jUtils.enableDebug(clazz);<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span> }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span><a name="line.2848"></a>
-<span class="sourceLineNo">2849</span> /**<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span> * Expire the Master's session<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span> * @throws Exception<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span> */<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span> public void expireMasterSession() throws Exception {<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span> HMaster master = getMiniHBaseCluster().getMaster();<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span> expireSession(master.getZooKeeper(), false);<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span> }<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span><a name="line.2857"></a>
-<span class="sourceLineNo">2858</span> /**<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span> * Expire a region server's session<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span> * @param index which RS<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span> */<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span> public void expireRegionServerSession(int index) throws Exception {<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span> HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span> expireSession(rs.getZooKeeper(), false);<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span> decrementMinRegionServerCount();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span> }<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span><a name="line.2867"></a>
-<span class="sourceLineNo">2868</span> private void decrementMinRegionServerCount() {<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span> // decrement the count for this.conf, for newly spwaned master<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span> // this.hbaseCluster shares this configuration too<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span> decrementMinRegionServerCount(getConfiguration());<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span><a name="line.2872"></a>
-<span class="sourceLineNo">2873</span> // each master thread keeps a copy of configuration<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span> for (MasterThread master : getHBaseCluster().getMasterThreads()) {<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span> decrementMinRegionServerCount(master.getMaster().getConfiguration());<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span> }<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span> }<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span><a name="line.2878"></a>
-<span class="sourceLineNo">2879</span> private void decrementMinRegionServerCount(Configuration conf) {<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span> int currentCount = conf.getInt(<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span> ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span> if (currentCount != -1) {<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span> Math.max(currentCount - 1, 1));<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span> }<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span> }<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span><a name="line.2887"></a>
-<span class="sourceLineNo">2888</span> public void expireSession(ZKWatcher nodeZK) throws Exception {<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span> expireSession(nodeZK, false);<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span> }<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span><a name="line.2891"></a>
-<span class="sourceLineNo">2892</span> /**<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span> * Expire a ZooKeeper session as recommended in ZooKeeper documentation<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span> * http://hbase.apache.org/book.html#trouble.zookeeper<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span> * There are issues when doing this:<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span> * [1] http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span> * [2] https://issues.apache.org/jira/browse/ZOOKEEPER-1105<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span> *<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span> * @param nodeZK - the ZK watcher to expire<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span> * @param checkStatus - true to check if we can create a Table with the<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span> * current configuration.<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span> */<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span> public void expireSession(ZKWatcher nodeZK, boolean checkStatus)<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span> throws Exception {<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span> Configuration c = new Configuration(this.conf);<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span> String quorumServers = ZKConfig.getZKQuorumServersString(c);<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span> ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span> byte[] password = zk.getSessionPasswd();<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span> long sessionID = zk.getSessionId();<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span><a name="line.2910"></a>
-<span class="sourceLineNo">2911</span> // Expiry seems to be asynchronous (see comment from P. Hunt in [1]),<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span> // so we create a first watcher to be sure that the<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span> // event was sent. We expect that if our watcher receives the event<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span> // other watchers on the same machine will get is as well.<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span> // When we ask to close the connection, ZK does not close it before<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span> // we receive all the events, so don't have to capture the event, just<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span> // closing the connection should be enough.<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span> ZooKeeper monitor = new ZooKeeper(quorumServers,<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span> 1000, new org.apache.zookeeper.Watcher(){<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span> @Override<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span> public void process(WatchedEvent watchedEvent) {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span> LOG.info("Monitor ZKW received event="+watchedEvent);<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span> }<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span> } , sessionID, password);<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span><a name="line.2925"></a>
-<span class="sourceLineNo">2926</span> // Making it expire<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span> ZooKeeper newZK = new ZooKeeper(quorumServers,<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span> 1000, EmptyWatcher.instance, sessionID, password);<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span><a name="line.2929"></a>
-<span class="sourceLineNo">2930</span> //ensure that we have connection to the server before closing down, otherwise<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span> //the close session event will be eaten out before we start CONNECTING state<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span> long start = EnvironmentEdgeManager.currentTime();<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span> while (newZK.getState() != States.CONNECTED<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span> && EnvironmentEdgeManager.currentTime() - start < 1000) {<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span> Thread.sleep(1);<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span> }<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span> newZK.close();<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span> LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span><a name="line.2939"></a>
-<span class="sourceLineNo">2940</span> // Now closing & waiting to be sure that the clients get it.<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span> monitor.close();<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span><a name="line.2942"></a>
-<span class="sourceLineNo">2943</span> if (checkStatus) {<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span> getConnection().getTable(TableName.META_TABLE_NAME).close();<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span> }<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span> }<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span><a name="line.2947"></a>
-<span class="sourceLineNo">2948</span> /**<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span> * Get the Mini HBase cluster.<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span> *<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span> * @return hbase cluster<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span> * @see #getHBaseClusterInterface()<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span> */<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span> public MiniHBaseCluster getHBaseCluster() {<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span> return getMiniHBaseCluster();<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span> }<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span><a name="line.2957"></a>
-<span class="sourceLineNo">2958</span> /**<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span> * Returns the HBaseCluster instance.<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span> * <p>Returned object can be any of the subclasses of HBaseCluster, and the<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span> * tests referring this should not assume that the cluster is a mini cluster or a<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span> * distributed one. If the test only works on a mini cluster, then specific<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span> * method {@link #getMiniHBaseCluster()} can be used instead w/o the<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span> * need to type-cast.<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span> */<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span> public HBaseCluster getHBaseClusterInterface() {<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span> //implementation note: we should rename this method as #getHBaseCluster(),<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span> //but this would require refactoring 90+ calls.<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span> return hbaseCluster;<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span> }<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span><a name="line.2971"></a>
-<span class="sourceLineNo">2972</span> /**<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span> * Resets the connections so that the next time getConnection() is called, a new connection is<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span> * created. This is needed in cases where the entire cluster / all the masters are shutdown and<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span> * the connection is not valid anymore.<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span> * TODO: There should be a more coherent way of doing this. Unfortunately the way tests are<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span> * written, not all start() stop() calls go through this class. Most tests directly operate on<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span> * the underlying mini/local hbase cluster. That makes it difficult for this wrapper class to<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span> * maintain the connection state automatically. Cleaning this is a much bigger refactor.<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span> */<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span> public void invalidateConnection() throws IOException {<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span> closeConnection();<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span> // Update the master addresses if they changed.<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span> final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span> final String masterConfAfter = getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span> LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span> masterConfigBefore, masterConfAfter);<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span> conf.set(HConstants.MASTER_ADDRS_KEY,<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span> getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY));<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span> }<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span><a name="line.2991"></a>
-<span class="sourceLineNo">2992</span> /**<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span> * Get a shared Connection to the cluster.<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span> * this method is thread safe.<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span> * @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span> */<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span> public Connection getConnection() throws IOException {<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span> return getAsyncConnection().toConnection();<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span> }<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span><a name="line.3000"></a>
-<span class="sourceLineNo">3001</span> /**<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span> * Get a assigned Connection to the cluster.<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span> * this method is thread safe.<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span> * @param user assigned user<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span> * @return A Connection with assigned user.<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span> */<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span> public Connection getConnection(User user) throws IOException {<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span> return getAsyncConnection(user).toConnection();<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span> }<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span><a name="line.3010"></a>
-<span class="sourceLineNo">3011</span> /**<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span> * Get a shared AsyncClusterConnection to the cluster.<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span> * this method is thread safe.<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span> * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span> */<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span> public AsyncClusterConnection getAsyncConnection() throws IOException {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span> try {<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span> return asyncConnection.updateAndGet(connection -> {<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span> if (connection == null) {<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span> try {<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span> User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span> connection = getAsyncConnection(user);<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span> } catch(IOException ioe) {<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span> throw new UncheckedIOException("Failed to create connection", ioe);<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span> }<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span> }<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span> return connection;<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span> });<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span> } catch (UncheckedIOException exception) {<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span> throw exception.getCause();<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span> }<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span> }<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span><a name="line.3033"></a>
-<span class="sourceLineNo">3034</span> /**<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span> * Get a assigned AsyncClusterConnection to the cluster.<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span> * this method is thread safe.<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span> * @param user assigned user<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span> * @return An AsyncClusterConnection with assigned user.<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span> */<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span> public AsyncClusterConnection getAsyncConnection(User user) throws IOException {<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span> return ClusterConnectionFactory.createAsyncClusterConnection(conf, null, user);<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span> }<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span><a name="line.3043"></a>
-<span class="sourceLineNo">3044</span> public void closeConnection() throws IOException {<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span> if (hbaseAdmin != null) {<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span> Closeables.close(hbaseAdmin, true);<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span> hbaseAdmin = null;<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span> }<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span> AsyncClusterConnection asyncConnection = this.asyncConnection.getAndSet(null);<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span> if (asyncConnection != null) {<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span> Closeables.close(asyncConnection, true);<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span> }<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span> }<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span><a name="line.3054"></a>
-<span class="sourceLineNo">3055</span> /**<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span> * Returns an Admin instance which is shared between HBaseTestingUtility instance users.<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span> * Closing it has no effect, it will be closed automatically when the cluster shutdowns<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span> */<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span> public Admin getAdmin() throws IOException {<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span> if (hbaseAdmin == null){<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span> this.hbaseAdmin = getConnection().getAdmin();<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span> }<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span> return hbaseAdmin;<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span> }<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span><a name="line.3065"></a>
-<span class="sourceLineNo">3066</span> private Admin hbaseAdmin = null;<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span><a name="line.3067"></a>
-<span class="sourceLineNo">3068</span> /**<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span> * Returns an {@link Hbck} instance. Needs be closed when done.<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span> */<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span> public Hbck getHbck() throws IOException {<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span> return getConnection().getHbck();<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span> }<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span> /**<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span> * Unassign the named region.<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span> *<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span> * @param regionName The region to unassign.<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span> */<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span> public void unassignRegion(String regionName) throws IOException {<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span> unassignRegion(Bytes.toBytes(regionName));<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span> }<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span><a name="line.3083"></a>
-<span class="sourceLineNo">3084</span> /**<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span> * Unassign the named region.<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span> *<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span> * @param regionName The region to unassign.<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span> */<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span> public void unassignRegion(byte[] regionName) throws IOException {<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span> getAdmin().unassign(regionName, true);<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span> }<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span><a name="line.3092"></a>
-<span class="sourceLineNo">3093</span> /**<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span> * Closes the region containing the given row.<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span> *<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span> * @param row The row to find the containing region.<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span> * @param table The table to find the region.<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span> */<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span> public void unassignRegionByRow(String row, RegionLocator table) throws IOException {<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span> unassignRegionByRow(Bytes.toBytes(row), table);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span> }<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span><a name="line.3102"></a>
-<span class="sourceLineNo">3103</span> /**<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span> * Closes the region containing the given row.<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span> *<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span> * @param row The row to find the containing region.<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span> * @param table The table to find the region.<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span> * @throws IOException<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span> */<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span> public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span> HRegionLocation hrl = table.getRegionLocation(row);<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span> unassignRegion(hrl.getRegion().getRegionName());<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span> }<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span><a name="line.3114"></a>
-<span class="sourceLineNo">3115</span> /**<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span> * Retrieves a splittable region randomly from tableName<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span> * @param tableName name of table<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span> * @param maxAttempts maximum number of attempts, unlimited for value of -1<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span> * @return the HRegion chosen, null if none was found within limit of maxAttempts<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span> */<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span> public HRegion getSplittableRegion(TableName tableName, int maxAttempts) {<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span> List<HRegion> regions = getHBaseCluster().getRegions(tableName);<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span> int regCount = regions.size();<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span> Set<Integer> attempted = new HashSet<>();<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span> int idx;<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span> int attempts = 0;<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span> do {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span> regions = getHBaseCluster().getRegions(tableName);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span> if (regCount != regions.size()) {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span> // if there was region movement, clear attempted Set<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span> attempted.clear();<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span> }<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span> regCount = regions.size();<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span> // There are chances that before we get the region for the table from an RS the region may<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span> // be going for CLOSE. This may be because online schema change is enabled<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span> if (regCount > 0) {<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span> idx = random.nextInt(regCount);<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span> // if we have just tried this region, there is no need to try again<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span> if (attempted.contains(idx)) {<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span> continue;<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span> }<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span> HRegion region = regions.get(idx);<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span> if (region.checkSplit().isPresent()) {<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span> return region;<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span> }<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span> attempted.add(idx);<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span> }<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span> attempts++;<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span> } while (maxAttempts == -1 || attempts < maxAttempts);<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span> return null;<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span> }<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span><a name="line.3152"></a>
-<span class="sourceLineNo">3153</span> public MiniDFSCluster getDFSCluster() {<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span> return dfsCluster;<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span> }<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span><a name="line.3156"></a>
-<span class="sourceLineNo">3157</span> public void setDFSCluster(MiniDFSCluster cluster) throws IllegalStateException, IOException {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span> setDFSCluster(cluster, true);<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span> }<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span><a name="line.3160"></a>
-<span class="sourceLineNo">3161</span> /**<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span> * Set the MiniDFSCluster<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span> * @param cluster cluster to use<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span> * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span> * it is set.<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span> * @throws IllegalStateException if the passed cluster is up when it is required to be down<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span> * @throws IOException if the FileSystem could not be set from the passed dfs cluster<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span> */<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span> public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span> throws IllegalStateException, IOException {<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span> if (dfsCluster != null && requireDown && dfsCluster.isClusterUp()) {<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span> throw new IllegalStateException("DFSCluster is already running! Shut it down first.");<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span> }<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span> this.dfsCluster = cluster;<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span> this.setFs();<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span> }<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span><a name="line.3177"></a>
-<span class="sourceLineNo">3178</span> public FileSystem getTestFileSystem() throws IOException {<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span> return HFileSystem.get(conf);<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span> }<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span><a name="line.3181"></a>
-<span class="sourceLineNo">3182</span> /**<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span> * Wait until all regions in a table have been assigned. Waits default timeout before giving up<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span> * (30 seconds).<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span> * @param table Table to wait on.<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span> * @throws InterruptedException<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span> * @throws IOException<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span> */<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span> public void waitTableAvailable(TableName table)<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span> throws InterruptedException, IOException {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span> waitTableAvailable(table.getName(), 30000);<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span> }<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span><a name="line.3193"></a>
-<span class="sourceLineNo">3194</span> public void waitTableAvailable(TableName table, long timeoutMillis)<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span> throws InterruptedException, IOException {<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span> waitFor(timeoutMillis, predicateTableAvailable(table));<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span> }<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span><a name="line.3198"></a>
-<span class="sourceLineNo">3199</span> /**<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span> * Wait until all regions in a table have been assigned<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span> * @param table Table to wait on.<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span> * @param timeoutMillis Timeout.<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span> */<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span> public void waitTableAvailable(byte[] table, long timeoutMillis)<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span> throws InterruptedException, IOException {<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span> waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span> }<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span><a name="line.3208"></a>
-<span class="sourceLineNo">3209</span> public String explainTableAvailability(TableName tableName) throws IOException {<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span> StringBuilder msg =<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span> new StringBuilder(explainTableState(tableName, TableState.State.ENABLED)).append(", ");<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span> if (getHBaseCluster().getMaster().isAlive()) {<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span> Map<RegionInfo, ServerName> assignments = getHBaseCluster().getMaster().getAssignmentManager()<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span> .getRegionStates().getRegionAssignments();<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span> final List<Pair<RegionInfo, ServerName>> metaLocations =<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span> MetaTableAccessor.getTableRegionsAndLocations(getConnection(), tableName);<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span> for (Pair<RegionInfo, ServerName> metaLocation : metaLocations) {<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span> RegionInfo hri = metaLocation.getFirst();<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span> ServerName sn = metaLocation.getSecond();<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span> if (!assignments.containsKey(hri)) {<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span> msg.append(", region ").append(hri)<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span> .append(" not assigned, but found in meta, it expected to be on ").append(sn);<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span> } else if (sn == null) {<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span> msg.append(", region ").append(hri).append(" assigned, but has no server in meta");<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span> } else if (!sn.equals(assignments.get(hri))) {<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span> msg.append(", region ").append(hri)<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span> .append(" assigned, but has different servers in meta and AM ( ").append(sn)<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span> .append(" <> ").append(assignments.get(hri));<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span> }<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span> }<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span> }<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span> return msg.toString();<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span> }<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span><a name="line.3234"></a>
-<span class="sourceLineNo">3235</span> public String explainTableState(final TableName table, TableState.State state)<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span> throws IOException {<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span> TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span> if (tableState == null) {<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span> return "TableState in META: No table state in META for table " + table +<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span> " last state in meta (including deleted is " + findLastTableState(table) + ")";<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span> } else if (!tableState.inStates(state)) {<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span> return "TableState in META: Not " + state + " state, but " + tableState;<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span> } else {<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span> return "TableState in META: OK";<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span> }<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span> }<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span><a name="line.3247"></a>
-<span class="sourceLineNo">3248</span> public TableState findLastTableState(final TableName table) throws IOException {<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span> final AtomicReference<TableState> lastTableState = new AtomicReference<>(null);<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span> ClientMetaTableAccessor.Visitor visitor = new ClientMetaTableAccessor.Visitor() {<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span> @Override<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span> public boolean visit(Result r) throws IOException {<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span> if (!Arrays.equals(r.getRow(), table.getName())) {<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span> return false;<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span> }<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span> TableState state = CatalogFamilyFormat.getTableState(r);<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span> if (state != null) {<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span> lastTableState.set(state);<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span> }<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span> return true;<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span> }<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span> };<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span> MetaTableAccessor.scanMeta(getConnection(), null, null,<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span> ClientMetaTableAccessor.QueryType.TABLE, Integer.MAX_VALUE, visitor);<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span> return lastTableState.get();<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span> }<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span><a name="line.3267"></a>
-<span class="sourceLineNo">3268</span> /**<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span> * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span> * regions have been all assigned. Will timeout after default period (30 seconds)<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span> * Tolerates nonexistent table.<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span> * @param table the table to wait on.<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span> * @throws InterruptedException if interrupted while waiting<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span> * @throws IOException if an IO problem is encountered<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span> */<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span> public void waitTableEnabled(TableName table)<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span> throws InterruptedException, IOException {<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span> waitTableEnabled(table, 30000);<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span> }<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span><a name="line.3280"></a>
-<span class="sourceLineNo">3281</span> /**<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span> * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span> * regions have been all assigned.<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span> * @see #waitTableEnabled(TableName, long)<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span> * @param table Table to wait on.<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span> * @param timeoutMillis Time to wait on it being marked enabled.<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span> * @throws InterruptedException<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span> * @throws IOException<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span> */<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span> public void waitTableEnabled(byte[] table, long timeoutMillis)<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span> throws InterruptedException, IOException {<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span> waitTableEnabled(TableName.valueOf(table), timeoutMillis);<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span> }<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span><a name="line.3294"></a>
-<span class="sourceLineNo">3295</span> public void waitTableEnabled(TableName table, long timeoutMillis)<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span> throws IOException {<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span> waitFor(timeoutMillis, predicateTableEnabled(table));<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span> }<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span><a name="line.3299"></a>
-<span class="sourceLineNo">3300</span> /**<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span> * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled'<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span> * Will timeout after default period (30 seconds)<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span> * @param table Table to wait on.<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span> * @throws InterruptedException<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span> * @throws IOException<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span> */<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span> public void waitTableDisabled(byte[] table)<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span> throws InterruptedException, IOException {<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span> waitTableDisabled(table, 30000);<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span> }<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span><a name="line.3311"></a>
-<span class="sourceLineNo">3312</span> public void waitTableDisabled(TableName table, long millisTimeout)<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span> throws InterruptedException, IOException {<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span> waitFor(millisTimeout, predicateTableDisabled(table));<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span> }<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span><a name="line.3316"></a>
-<span class="sourceLineNo">3317</span> /**<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span> * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled'<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span> * @param table Table to wait on.<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span> * @param timeoutMillis Time to wait on it being marked disabled.<a name="line.3320"></a>
-<span class="sourceLineNo">3321</span> * @throws InterruptedException<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span> * @throws IOException<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span> */<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span> public void waitTableDisabled(byte[] table, long timeoutMillis)<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span> throws InterruptedException, IOException {<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span> waitTableDisabled(TableName.valueOf(table), timeoutMillis);<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span> }<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span><a name="line.3328"></a>
-<span class="sourceLineNo">3329</span> /**<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span> * Make sure that at least the specified number of region servers<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span> * are running<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span> * @param num minimum number of region servers that should be running<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span> * @return true if we started some servers<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span> * @throws IOException<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span> */<a name="line.3335"></a>
-<span class="sourceLineNo">3336</span> public boolean ensureSomeRegionServersAvailable(final int num)<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span> throws IOException {<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span> boolean startedServer = false;<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span> MiniHBaseCluster hbaseCluster = getMiniHBaseCluster();<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span> for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i<num; ++i) {<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span> LOG.info("Started new server=" + hbaseCluster.startRegionServer());<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span> startedServer = true;<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span> }<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span><a name="line.3344"></a>
-<span class="sourceLineNo">3345</span> return startedServer;<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span> }<a name="line.3346"></a>
+<span class="sourceLineNo">2516</span> /**<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span> * Create a region with it's own WAL. Be sure to call<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span> */<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span> public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span> final Configuration conf, final TableDescriptor htd) throws IOException {<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span> return createRegionAndWAL(info, rootDir, conf, htd, true);<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span> }<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span><a name="line.2524"></a>
+<span class="sourceLineNo">2525</span> /**<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span> * Create a region with it's own WAL. Be sure to call<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span> */<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span> public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span> final Configuration conf, final TableDescriptor htd, BlockCache blockCache)<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span> throws IOException {<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span> HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span> region.setBlockCache(blockCache);<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span> region.initialize();<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span> return region;<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span> }<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span> /**<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span> * Create a region with it's own WAL. Be sure to call<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span> */<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span> public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span> final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span> throws IOException {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span> HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span> region.setMobFileCache(mobFileCache);<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span> region.initialize();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span> return region;<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span> }<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span><a name="line.2549"></a>
+<span class="sourceLineNo">2550</span> /**<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span> * Create a region with it's own WAL. Be sure to call<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span> * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span> */<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span> public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span> final Configuration conf, final TableDescriptor htd, boolean initialize)<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span> throws IOException {<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span> ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0,<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span> 0, null, MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span> WAL wal = createWal(conf, rootDir, info);<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span> return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span> }<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span><a name="line.2562"></a>
+<span class="sourceLineNo">2563</span> /**<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span> * Returns all rows from the hbase:meta table.<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span> *<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span> * @throws IOException When reading the rows fails.<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span> */<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span> public List<byte[]> getMetaTableRows() throws IOException {<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span> // TODO: Redo using MetaTableAccessor class<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span> Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span> List<byte[]> rows = new ArrayList<>();<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span> ResultScanner s = t.getScanner(new Scan());<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span> for (Result result : s) {<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span> LOG.info("getMetaTableRows: row -> " +<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span> Bytes.toStringBinary(result.getRow()));<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span> rows.add(result.getRow());<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span> }<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span> s.close();<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span> t.close();<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span> return rows;<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span> }<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span><a name="line.2582"></a>
+<span class="sourceLineNo">2583</span> /**<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span> * Returns all rows from the hbase:meta table for a given user table<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span> *<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span> * @throws IOException When reading the rows fails.<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span> */<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span> public List<byte[]> getMetaTableRows(TableName tableName) throws IOException {<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span> // TODO: Redo using MetaTableAccessor.<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span> Table t = getConnection().getTable(TableName.META_TABLE_NAME);<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span> List<byte[]> rows = new ArrayList<>();<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span> ResultScanner s = t.getScanner(new Scan());<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span> for (Result result : s) {<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span> RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span> if (info == null) {<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span> LOG.error("No region info for row " + Bytes.toString(result.getRow()));<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span> // TODO figure out what to do for this new hosed case.<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span> continue;<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span> }<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span><a name="line.2600"></a>
+<span class="sourceLineNo">2601</span> if (info.getTable().equals(tableName)) {<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span> LOG.info("getMetaTableRows: row -> " +<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span> Bytes.toStringBinary(result.getRow()) + info);<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span> rows.add(result.getRow());<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span> }<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span> }<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span> s.close();<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span> t.close();<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span> return rows;<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span> }<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span><a name="line.2611"></a>
+<span class="sourceLineNo">2612</span> /**<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span> * Returns all regions of the specified table<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span> *<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span> * @param tableName the table name<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span> * @return all regions of the specified table<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span> * @throws IOException when getting the regions fails.<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span> */<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span> private List<RegionInfo> getRegions(TableName tableName) throws IOException {<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span> try (Admin admin = getConnection().getAdmin()) {<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span> return admin.getRegions(tableName);<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span> }<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span> }<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span><a name="line.2624"></a>
+<span class="sourceLineNo">2625</span> /*<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span> * Find any other region server which is different from the one identified by parameter<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span> * @param rs<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span> * @return another region server<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span> */<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span> public HRegionServer getOtherRegionServer(HRegionServer rs) {<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span> for (JVMClusterUtil.RegionServerThread rst :<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span> getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span> if (!(rst.getRegionServer() == rs)) {<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span> return rst.getRegionServer();<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span> }<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span> }<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span> return null;<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span> }<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span><a name="line.2639"></a>
+<span class="sourceLineNo">2640</span> /**<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span> * Tool to get the reference to the region server object that holds the<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span> * region of the specified user table.<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span> * @param tableName user table to lookup in hbase:meta<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span> * @return region server that holds it, null if the row doesn't exist<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span> * @throws IOException<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span> * @throws InterruptedException<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span> */<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span> public HRegionServer getRSForFirstRegionInTable(TableName tableName)<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span> throws IOException, InterruptedException {<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span> List<RegionInfo> regions = getRegions(tableName);<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span> if (regions == null || regions.isEmpty()) {<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span> return null;<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span> }<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span> LOG.debug("Found " + regions.size() + " regions for table " +<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span> tableName);<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span><a name="line.2656"></a>
+<span class="sourceLineNo">2657</span> byte[] firstRegionName = regions.stream()<a name="line.2657"></a>
+<span class="sourceLineNo">2658</span> .filter(r -> !r.isOffline())<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span> .map(RegionInfo::getRegionName)<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span> .findFirst()<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span> .orElseThrow(() -> new IOException("online regions not found in table " + tableName));<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span><a name="line.2662"></a>
+<span class="sourceLineNo">2663</span> LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span> long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span> HConstants.DEFAULT_HBASE_CLIENT_PAUSE);<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span> int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span> HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span> RetryCounter retrier = new RetryCounter(numRetries+1, (int)pause, TimeUnit.MICROSECONDS);<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span> while(retrier.shouldRetry()) {<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span> int index = getMiniHBaseCluster().getServerWith(firstRegionName);<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span> if (index != -1) {<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span> return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span> }<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span> // Came back -1. Region may not be online yet. Sleep a while.<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span> retrier.sleepUntilNextRetry();<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span> }<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span> return null;<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span> }<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span><a name="line.2679"></a>
+<span class="sourceLineNo">2680</span> /**<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span> * Starts a <code>MiniMRCluster</code> with a default number of<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span> * <code>TaskTracker</code>'s.<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span> *<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span> * @throws IOException When starting the cluster fails.<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span> */<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span> public MiniMRCluster startMiniMapReduceCluster() throws IOException {<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span> // Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span> conf.setIfUnset(<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span> "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span> "99.0");<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span> startMiniMapReduceCluster(2);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span> return mrCluster;<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span> }<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span><a name="line.2694"></a>
+<span class="sourceLineNo">2695</span> /**<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span> * Tasktracker has a bug where changing the hadoop.log.dir system property<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span> * will not change its internal static LOG_DIR variable.<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span> */<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span> private void forceChangeTaskLogDir() {<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span> Field logDirField;<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span> try {<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span> logDirField = TaskLog.class.getDeclaredField("LOG_DIR");<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span> logDirField.setAccessible(true);<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span><a name="line.2704"></a>
+<span class="sourceLineNo">2705</span> Field modifiersField = ReflectionUtils.getModifiersField();<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span> modifiersField.setAccessible(true);<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span> modifiersField.setInt(logDirField, logDirField.getModifiers() & ~Modifier.FINAL);<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span><a name="line.2708"></a>
+<span class="sourceLineNo">2709</span> logDirField.set(null, new File(hadoopLogDir, "userlogs"));<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span> } catch (SecurityException e) {<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span> throw new RuntimeException(e);<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span> } catch (NoSuchFieldException e) {<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span> throw new RuntimeException(e);<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span> } catch (IllegalArgumentException e) {<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span> throw new RuntimeException(e);<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span> } catch (IllegalAccessException e) {<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span> throw new RuntimeException(e);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span> }<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span> }<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span><a name="line.2720"></a>
+<span class="sourceLineNo">2721</span> /**<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span> * Starts a <code>MiniMRCluster</code>. Call {@link #setFileSystemURI(String)} to use a different<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span> * filesystem.<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span> * @param servers The number of <code>TaskTracker</code>'s to start.<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span> * @throws IOException When starting the cluster fails.<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span> */<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span> private void startMiniMapReduceCluster(final int servers) throws IOException {<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span> if (mrCluster != null) {<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span> throw new IllegalStateException("MiniMRCluster is already running");<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span> }<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span> LOG.info("Starting mini mapreduce cluster...");<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span> setupClusterTestDir();<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span> createDirsAndSetProperties();<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span><a name="line.2734"></a>
+<span class="sourceLineNo">2735</span> forceChangeTaskLogDir();<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span><a name="line.2736"></a>
+<span class="sourceLineNo">2737</span> //// hadoop2 specific settings<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span> // Tests were failing because this process used 6GB of virtual memory and was getting killed.<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span> // we up the VM usable so that processes don't get killed.<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span> conf.setFloat("yarn.nodemanager.vmem-pmem-ratio", 8.0f);<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span><a name="line.2741"></a>
+<span class="sourceLineNo">2742</span> // Tests were failing due to MAPREDUCE-4880 / MAPREDUCE-4607 against hadoop 2.0.2-alpha and<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span> // this avoids the problem by disabling speculative task execution in tests.<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span> conf.setBoolean("mapreduce.map.speculative", false);<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span> conf.setBoolean("mapreduce.reduce.speculative", false);<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span> ////<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span><a name="line.2747"></a>
+<span class="sourceLineNo">2748</span> // Allow the user to override FS URI for this map-reduce cluster to use.<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span> mrCluster = new MiniMRCluster(servers,<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span> FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(), 1,<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span> null, null, new JobConf(this.conf));<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span> JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span> if (jobConf == null) {<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span> jobConf = mrCluster.createJobConf();<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span> }<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span><a name="line.2756"></a>
+<span class="sourceLineNo">2757</span> jobConf.set("mapreduce.cluster.local.dir",<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span> conf.get("mapreduce.cluster.local.dir")); //Hadoop MiniMR overwrites this while it should not<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span> LOG.info("Mini mapreduce cluster started");<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span><a name="line.2760"></a>
+<span class="sourceLineNo">2761</span> // In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span> // Our HBase MR jobs need several of these settings in order to properly run. So we copy the<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span> // necessary config properties here. YARN-129 required adding a few properties.<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span> conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span> // this for mrv2 support; mr1 ignores this<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span> conf.set("mapreduce.framework.name", "yarn");<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span> conf.setBoolean("yarn.is.minicluster", true);<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span> String rmAddress = jobConf.get("yarn.resourcemanager.address");<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span> if (rmAddress != null) {<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span> conf.set("yarn.resourcemanager.address", rmAddress);<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span> }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span> String historyAddress = jobConf.get("mapreduce.jobhistory.address");<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span> if (historyAddress != null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span> conf.set("mapreduce.jobhistory.address", historyAddress);<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span> }<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span> String schedulerAddress =<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span> jobConf.get("yarn.resourcemanager.scheduler.address");<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span> if (schedulerAddress != null) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span> conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span> }<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span> String mrJobHistoryWebappAddress =<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span> jobConf.get("mapreduce.jobhistory.webapp.address");<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span> if (mrJobHistoryWebappAddress != null) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span> conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span> }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span> String yarnRMWebappAddress =<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span> jobConf.get("yarn.resourcemanager.webapp.address");<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span> if (yarnRMWebappAddress != null) {<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span> conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span> }<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span> }<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span><a name="line.2792"></a>
+<span class="sourceLineNo">2793</span> /**<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span> * Stops the previously started <code>MiniMRCluster</code>.<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span> */<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span> public void shutdownMiniMapReduceCluster() {<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span> if (mrCluster != null) {<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span> LOG.info("Stopping mini mapreduce cluster...");<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span> mrCluster.shutdown();<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span> mrCluster = null;<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span> LOG.info("Mini mapreduce cluster stopped");<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span> }<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span> // Restore configuration to point to local jobtracker<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span> conf.set("mapreduce.jobtracker.address", "local");<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span> }<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span><a name="line.2806"></a>
+<span class="sourceLineNo">2807</span> /**<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span> * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span> */<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span> public RegionServerServices createMockRegionServerService() throws IOException {<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span> return createMockRegionServerService((ServerName)null);<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span> }<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span><a name="line.2813"></a>
+<span class="sourceLineNo">2814</span> /**<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span> * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span> * This version is used by TestTokenAuthentication<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span> */<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span> public RegionServerServices createMockRegionServerService(RpcServerInterface rpc) throws<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span> IOException {<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span> final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());<a name="line.2820"></a>
+<span class="sourceLineNo">2821</span> rss.setFileSystem(getTestFileSystem());<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span> rss.setRpcServer(rpc);<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span> return rss;<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span> }<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span><a name="line.2825"></a>
+<span class="sourceLineNo">2826</span> /**<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span> * Create a stubbed out RegionServerService, mainly for getting FS.<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span> * This version is used by TestOpenRegionHandler<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span> */<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span> public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span> final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span> rss.setFileSystem(getTestFileSystem());<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span> return rss;<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span> }<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span><a name="line.2835"></a>
+<span class="sourceLineNo">2836</span> /**<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span> * Switches the logger for the given class to DEBUG level.<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span> * @param clazz The class for which to switch to debug logging.<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span> * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span> * HBase only uses log4j. You should do this by your own as it you know which log<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span> * framework you are using then set the log level to debug is very easy.<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span> */<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span> @Deprecated<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span> public void enableDebug(Class<?> clazz) {<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span> Log4jUtils.enableDebug(clazz);<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span> }<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span><a name="line.2847"></a>
+<span class="sourceLineNo">2848</span> /**<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span> * Expire the Master's session<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span> * @throws Exception<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span> */<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span> public void expireMasterSession() throws Exception {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span> HMaster master = getMiniHBaseCluster().getMaster();<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span> expireSession(master.getZooKeeper(), false);<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span> }<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span><a name="line.2856"></a>
+<span class="sourceLineNo">2857</span> /**<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span> * Expire a region server's session<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span> * @param index which RS<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span> */<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span> public void expireRegionServerSession(int index) throws Exception {<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span> HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span> expireSession(rs.getZooKeeper(), false);<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span> decrementMinRegionServerCount();<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span> }<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span><a name="line.2866"></a>
+<span class="sourceLineNo">2867</span> private void decrementMinRegionServerCount() {<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span> // decrement the count for this.conf, for newly spwaned master<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span> // this.hbaseCluster shares this configuration too<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span> decrementMinRegionServerCount(getConfiguration());<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span><a name="line.2871"></a>
+<span class="sourceLineNo">2872</span> // each master thread keeps a copy of configuration<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span> for (MasterThread master : getHBaseCluster().getMasterThreads()) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span> decrementMinRegionServerCount(master.getMaster().getConfiguration());<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span> }<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span> }<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span><a name="line.2877"></a>
+<span class="sourceLineNo">2878</span> private void decrementMinRegionServerCount(Configuration conf) {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span> int currentCount = conf.getInt(<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span> ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span> if (currentCount != -1) {<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span> conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART,<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span> Math.max(currentCount - 1, 1));<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span> }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span> }<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span><a name="line.2886"></a>
+<span class="sourceLineNo">2887</span> public void expireSession(ZKWatcher nodeZK) throws Exception {<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span> expireSession(nodeZK, false);<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span> }<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span><a name="line.2890"></a>
+<span class="sourceLineNo">2891</span> /**<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span> * Expire a ZooKeeper session as recommended in ZooKeeper documentation<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span> * http://hbase.apache.org/book.html#trouble.zookeeper<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span> * There are issues when doing this:<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span> * [1] http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span> * [2] https://issues.apache.org/jira/browse/ZOOKEEPER-1105<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span> *<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span> * @param nodeZK - the ZK watcher to expire<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span> * @param checkStatus - true to check if we can create a Table with the<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span> * current configuration.<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span> */<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span> public void expireSession(ZKWatcher nodeZK, boolean checkStatus)<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span> throws Exception {<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span> Configuration c = new Configuration(this.conf);<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span> String quorumServers = ZKConfig.getZKQuorumServersString(c);<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span> ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span> byte[] password = zk.getSessionPasswd();<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span> long sessionID = zk.getSessionId();<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span><a name="line.2909"></a>
+<span class="sourceLineNo">2910</span> // Expiry seems to be asynchronous (see comment from P. Hunt in [1]),<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span> // so we create a first watcher to be sure that the<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span> // event was sent. We expect that if our watcher receives the event<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span> // other watchers on the same machine will get is as well.<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span> // When we ask to close the connection, ZK does not close it before<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span> // we receive all the events, so don't have to capture the event, just<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span> // closing the connection should be enough.<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span> ZooKeeper monitor = new ZooKeeper(quorumServers,<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span> 1000, new org.apache.zookeeper.Watcher(){<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span> @Override<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span> public void process(WatchedEvent watchedEvent) {<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span> LOG.info("Monitor ZKW received event="+watchedEvent);<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span> }<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span> } , sessionID, password);<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span><a name="line.2924"></a>
+<span class="sourceLineNo">2925</span> // Making it expire<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span> ZooKeeper newZK = new ZooKeeper(quorumServers,<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span> 1000, EmptyWatcher.instance, sessionID, password);<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span><a name="line.2928"></a>
+<span class="sourceLineNo">2929</span> //ensure that we have connection to the server before closing down, otherwise<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span> //the close session event will be eaten out before we start CONNECTING state<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span> long start = EnvironmentEdgeManager.currentTime();<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span> while (newZK.getState() != States.CONNECTED<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span> && EnvironmentEdgeManager.currentTime() - start < 1000) {<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span> Thread.sleep(1);<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span> }<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span> newZK.close();<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span> LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span><a name="line.2938"></a>
+<span class="sourceLineNo">2939</span> // Now closing & waiting to be sure that the clients get it.<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span> monitor.close();<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span><a name="line.2941"></a>
+<span class="sourceLineNo">2942</span> if (checkStatus) {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span> getConnection().getTable(TableName.META_TABLE_NAME).close();<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span> }<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span> }<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span><a name="line.2946"></a>
+<span class="sourceLineNo">2947</span> /**<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span> * Get the Mini HBase cluster.<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span> *<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span> * @return hbase cluster<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span> * @see #getHBaseClusterInterface()<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span> */<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span> public MiniHBaseCluster getHBaseCluster() {<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span> return getMiniHBaseCluster();<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span> }<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span><a name="line.2956"></a>
+<span class="sourceLineNo">2957</span> /**<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span> * Returns the HBaseCluster instance.<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span> * <p>Returned object can be any of the subclasses of HBaseCluster, and the<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span> * tests referring this should not assume that the cluster is a mini cluster or a<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span> * distributed one. If the test only works on a mini cluster, then specific<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span> * method {@link #getMiniHBaseCluster()} can be used instead w/o the<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span> * need to type-cast.<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span> */<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span> public HBaseCluster getHBaseClusterInterface() {<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span> //implementation note: we should rename this method as #getHBaseCluster(),<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span> //but this would require refactoring 90+ calls.<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span> return hbaseCluster;<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span> }<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span><a name="line.2970"></a>
+<span class="sourceLineNo">2971</span> /**<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span> * Resets the connections so that the next time getConnection() is called, a new connection is<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span> * created. This is needed in cases where the entire cluster / all the masters are shutdown and<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span> * the connection is not valid anymore.<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span> * TODO: There should be a more coherent way of doing this. Unfortunately the way tests are<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span> * written, not all start() stop() calls go through this class. Most tests directly operate on<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span> * the underlying mini/local hbase cluster. That makes it difficult for this wrapper class to<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span> * maintain the connection state automatically. Cleaning this is a much bigger refactor.<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span> */<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span> public void invalidateConnection() throws IOException {<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span> closeConnection();<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span> // Update the master addresses if they changed.<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span> final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span> final String masterConfAfter = getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY);<a name="line.2984"></a>
+<span class="sourceLineNo">2985</span> LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span> masterConfigBefore, masterConfAfter);<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span> conf.set(HConstants.MASTER_ADDRS_KEY,<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span> getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY));<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span> }<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span><a name="line.2990"></a>
+<span class="sourceLineNo">2991</span> /**<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span> * Get a shared Connection to the cluster.<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span> * this method is thread safe.<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span> * @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span> */<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span> public Connection getConnection() throws IOException {<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span> return getAsyncConnection().toConnection();<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span> }<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span><a name="line.2999"></a>
+<span class="sourceLineNo">3000</span> /**<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span> * Get a assigned Connection to the cluster.<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span> * this method is thread safe.<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span> * @param user assigned user<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span> * @return A Connection with assigned user.<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span> */<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span> public Connection getConnection(User user) throws IOException {<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span> return getAsyncConnection(user).toConnection();<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span> }<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span><a name="line.3009"></a>
+<span class="sourceLineNo">3010</span> /**<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span> * Get a shared AsyncClusterConnection to the cluster.<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span> * this method is thread safe.<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span> * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown of cluster.<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span> */<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span> public AsyncClusterConnection getAsyncConnection() throws IOException {<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span> try {<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span> return asyncConnection.updateAndGet(connection -> {<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span> if (connection == null) {<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span> try {<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span> User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span> connection = getAsyncConnection(user);<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span> } catch(IOException ioe) {<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span> throw new UncheckedIOException("Failed to create connection", ioe);<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span> }<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span> }<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span> return connection;<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span> });<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span> } catch (UncheckedIOException exception) {<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span> throw exception.getCause();<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span> }<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span> }<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span><a name="line.3032"></a>
+<span class="sourceLineNo">3033</span> /**<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span> * Get a assigned AsyncClusterConnection to the cluster.<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span> * this method is thread safe.<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span> * @param user assigned user<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span> * @return An AsyncClusterConnection with assigned user.<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span> */<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span> public AsyncClusterConnection getAsyncConnection(User user) throws IOException {<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span> return ClusterConnectionFactory.createAsyncClusterConnection(conf, null, user);<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span> }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span> public void closeConnection() throws IOException {<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span> if (hbaseAdmin != null) {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span> Closeables.close(hbaseAdmin, true);<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span> hbaseAdmin = null;<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span> }<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span> AsyncClusterConnection asyncConnection = this.asyncConnection.getAndSet(null);<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span> if (asyncConnection != null) {<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span> Closeables.close(asyncConnection, true);<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span> }<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span> }<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span><a name="line.3053"></a>
+<span class="sourceLineNo">3054</span> /**<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span> * Returns an Admin instance which is shared between HBaseTestingUtility instance users.<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span> * Closing it has no effect, it will be closed automatically when the cluster shutdowns<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span> */<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span> public Admin getAdmin() throws IOException {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span> if (hbaseAdmin == null){<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span> this.hbaseAdmin = getConnection().getAdmin();<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span> }<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span> return hbaseAdmin;<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span> }<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span><a name="line.3064"></a>
+<span class="sourceLineNo">3065</span> private Admin hbaseAdmin = null;<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span><a name="line.3066"></a>
+<span class="sourceLineNo">3067</span> /**<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span> * Returns an {@link Hbck} instance. Needs be closed when done.<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span> */<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span> public Hbck getHbck() throws IOException {<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span> return getConnection().getHbck();<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span> }<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span><a name="line.3073"></a>
+<span class="sourceLineNo">3074</span> /**<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span> * Unassign the named region.<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span> *<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span> * @param regionName The region to unassign.<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span> */<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span> public void unassignRegion(String regionName) throws IOException {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span> unassignRegion(Bytes.toBytes(regionName));<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span> }<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span><a name="line.3082"></a>
+<span class="sourceLineNo">3083</span> /**<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span> * Unassign the named region.<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span> *<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span> * @param regionName The region to unassign.<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span> */<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span> public void unassignRegion(byte[] regionName) throws IOException {<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span> getAdmin().unassign(regionName, true);<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span> }<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span><a name="line.3091"></a>
+<span class="sourceLineNo">3092</span> /**<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span> * Closes the region containing the given row.<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span> *<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span> * @param row The row to find the containing region.<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span> * @param table The table to find the region.<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span> */<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span> public void unassignRegionByRow(String row, RegionLocator table) throws IOException {<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span> unassignRegionByRow(Bytes.toBytes(row), table);<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span> }<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span><a name="line.3101"></a>
+<span class="sourceLineNo">3102</span> /**<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span> * Closes the region containing the given row.<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span> *<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span> * @param row The row to find the containing region.<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span> * @param table The table to find the region.<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span> * @throws IOException<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span> */<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span> public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span> HRegionLocation hrl = table.getRegionLocation(row);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span> unassignRegion(hrl.getRegion().getRegionName());<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span> }<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span><a name="line.3113"></a>
+<span class="sourceLineNo">3114</span> /**<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span> * Retrieves a splittable region randomly from tableName<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span> * @param tableName name of table<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span> * @param maxAttempts maximum number of attempts, unlimited for value of -1<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span> * @return the HRegion chosen, null if none was found within limit of maxAttempts<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span> */<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span> public HRegion getSplittableRegion(TableName tableName, int maxAttempts) {<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span> List<HRegion> regions = getHBaseCluster().getRegions(tableName);<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span> int regCount = regions.size();<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span> Set<Integer> attempted = new HashSet<>();<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span> int idx;<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span> int attempts = 0;<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span> do {<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span> regions = getHBaseCluster().getRegions(tableName);<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span> if (regCount != regions.size()) {<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span> // if there was region movement, clear attempted Set<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span> attempted.clear();<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span> }<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span> regCount = regions.size();<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span> // There are chances that before we get the region for the table from an RS the region may<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span> // be going for CLOSE. This may be because online schema change is enabled<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span> if (regCount > 0) {<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span> idx = random.nextInt(regCount);<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span> // if we have just tried this region, there is no need to try again<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span> if (attempted.contains(idx)) {<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span> continue;<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span> }<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span> HRegion region = regions.get(idx);<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span> if (region.checkSplit().isPresent()) {<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span> return region;<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span> }<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span> attempted.add(idx);<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span> }<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span> attempts++;<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span> } while (maxAttempts == -1 || attempts < maxAttempts);<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span> return null;<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span> }<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span><a name="line.3151"></a>
+<span class="sourceLineNo">3152</span> public MiniDFSCluster getDFSCluster() {<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span> return dfsCluster;<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span> }<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span><a name="line.3155"></a>
+<span class="sourceLineNo">3156</span> public void setDFSCluster(MiniDFSCluster cluster) throws IllegalStateException, IOException {<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span> setDFSCluster(cluster, true);<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span> }<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span><a name="line.3159"></a>
+<span class="sourceLineNo">3160</span> /**<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span> * Set the MiniDFSCluster<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span> * @param cluster cluster to use<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span> * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span> * it is set.<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span> * @throws IllegalStateException if the passed cluster is up when it is required to be down<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span> * @throws IOException if the FileSystem could not be set from the passed dfs cluster<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span> */<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span> public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span> throws IllegalStateException, IOException {<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span> if (dfsCluster != null && requireDown && dfsCluster.isClusterUp()) {<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span> throw new IllegalStateException("DFSCluster is already running! Shut it down first.");<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span> }<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span> this.dfsCluster = cluster;<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span> this.setFs();<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span> }<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span><a name="line.3176"></a>
+<span class="sourceLineNo">3177</span> public FileSystem getTestFileSystem() throws IOException {<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span> return HFileSystem.get(conf);<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span> }<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span><a name="line.3180"></a>
+<span class="sourceLineNo">3181</span> /**<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span> * Wait until all regions in a table have been assigned. Waits default timeout before giving up<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span> * (30 seconds).<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span> * @param table Table to wait on.<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span> * @throws InterruptedException<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span> * @throws IOException<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span> */<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span> public void waitTableAvailable(TableName table)<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span> throws InterruptedException, IOException {<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span> waitTableAvailable(table.getName(), 30000);<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span> }<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span><a name="line.3192"></a>
+<span class="sourceLineNo">3193</span> public void waitTableAvailable(TableName table, long timeoutMillis)<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span> throws InterruptedException, IOException {<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span> waitFor(timeoutMillis, predicateTableAvailable(table));<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span> }<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span><a name="line.3197"></a>
+<span class="sourceLineNo">3198</span> /**<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span> * Wait until all regions in a table have been assigned<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span> * @param table Table to wait on.<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span> * @param timeoutMillis Timeout.<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span> */<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span> public void waitTableAvailable(byte[] table, long timeoutMillis)<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span> throws InterruptedException, IOException {<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span> waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span> }<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span><a name="line.3207"></a>
+<span class="sourceLineNo">3208</span> public String explainTableAvailability(TableName tableName) throws IOException {<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span> StringBuilder msg =<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span> new StringBuilder(explainTableState(tableName, TableState.State.ENABLED)).append(", ");<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span> if (getHBaseCluster().getMaster().isAlive()) {<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span> Map<RegionInfo, ServerName> assignments = getHBaseCluster().getMaster().getAssignmentManager()<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span> .getRegionStates().getRegionAssignments();<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span> final List<Pair<RegionInfo, ServerName>> metaLocations =<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span> MetaTableAccessor.getTableRegionsAndLocations(getConnection(), tableName);<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span> for (Pair<RegionInfo, ServerName> metaLocation : metaLocations) {<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span> RegionInfo hri = metaLocation.getFirst();<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span> ServerName sn = metaLocation.getSecond();<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span> if (!assignments.containsKey(hri)) {<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span> msg.append(", region ").append(hri)<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span> .append(" not assigned, but found in meta, it expected to be on ").append(sn);<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span> } else if (sn == null) {<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span> msg.append(", region ").append(hri).append(" assigned, but has no server in meta");<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span> } else if (!sn.equals(assignments.get(hri))) {<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span> msg.append(", region ").append(hri)<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span> .append(" assigned, but has different servers in meta and AM ( ").append(sn)<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span> .append(" <> ").append(assignments.get(hri));<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span> }<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span> }<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span> }<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span> return msg.toString();<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span> }<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span><a name="line.3233"></a>
+<span class="sourceLineNo">3234</span> public String explainTableState(final TableName table, TableState.State state)<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span> throws IOException {<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span> TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span> if (tableState == null) {<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span> return "TableState in META: No table state in META for table " + table +<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span> " last state in meta (including deleted is " + findLastTableState(table) + ")";<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span> } else if (!tableState.inStates(state)) {<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span> return "TableState in META: Not " + state + " state, but " + tableState;<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span> } else {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span> return "TableState in META: OK";<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span> }<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span> }<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span><a name="line.3246"></a>
+<span class="sourceLineNo">3247</span> public TableState findLastTableState(final TableName table) throws IOException {<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span> final AtomicReference<TableState> lastTableState = new AtomicReference<>(null);<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span> ClientMetaTableAccessor.Visitor visitor = new ClientMetaTableAccessor.Visitor() {<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span> @Override<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span> public boolean visit(Result r) throws IOException {<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span> if (!Arrays.equals(r.getRow(), table.getName())) {<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span> return false;<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span> }<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span> TableState state = CatalogFamilyFormat.getTableState(r);<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span> if (state != null) {<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span> lastTableState.set(state);<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span> }<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span> return true;<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span> }<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span> };<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span> MetaTableAccessor.scanMeta(getConnection(), null, null,<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span> ClientMetaTableAccessor.QueryType.TABLE, Integer.MAX_VALUE, visitor);<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span> return lastTableState.get();<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span> }<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span><a name="line.3266"></a>
+<span class="sourceLineNo">3267</span> /**<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span> * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span> * regions have been all assigned. Will timeout after default period (30 seconds)<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span> * Tolerates nonexistent table.<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span> * @param table the table to wait on.<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span> * @throws InterruptedException if interrupted while waiting<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span> * @throws IOException if an IO problem is encountered<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span> */<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span> public void waitTableEnabled(TableName table)<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span> throws InterruptedException, IOException {<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span> waitTableEnabled(table, 30000);<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span> }<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span><a name="line.3279"></a>
+<span class="sourceLineNo">3280</span> /**<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span> * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span> * regions have been all assigned.<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span> * @see #waitTableEnabled(TableName, long)<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span> * @param table Table to wait on.<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span> * @param timeoutMillis Time to wait on it being marked enabled.<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span> * @throws InterruptedException<a name="line.3286"></a>
+<span class="sourceLineNo">3287</span> * @throws IOException<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span> */<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span> public void waitTableEnabled(byte[] table, long timeoutMillis)<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span> throws InterruptedException, IOException {<a name="line.3290"></a>
+<span class="sourceLineNo">3291</span> waitTableEnabled(TableName.valueOf(table), timeoutMillis);<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span> }<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span><a name="line.3293"></a>
+<span class="sourceLineNo">3294</span> public void waitTableEnabled(TableName table, long timeoutMillis)<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span> throws IOException {<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span> waitFor(timeoutMillis, predicateTableEnabled(table));<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span> }<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span><a name="line.3298"></a>
+<span class="sourceLineNo">3299</span> /**<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span> * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled'<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span> * Will timeout after default period (30 seconds)<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span> * @param table Table to wait on.<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span> * @throws InterruptedException<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span> * @throws IOException<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span> */<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span> public void waitTableDisabled(byte[] table)<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span> throws InterruptedException, IOException {<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span> waitTableDisabled(table, 30000);<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span> }<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span><a name="line.3310"></a>
+<span class="sourceLineNo">3311</span> public void waitTableDisabled(TableName table, long millisTimeout)<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span> throws InterruptedException, IOException {<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span> waitFor(millisTimeout, predicateTableDisabled(table));<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span> }<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span><a name="line.3315"></a>
+<span class="sourceLineNo">3316</span> /**<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span> * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled'<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span> * @param table Table to wait on.<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span> * @param timeoutMillis Time to wait on it being marked disabled.<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span> * @throws InterruptedException<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span> * @throws IOException<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span> */<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span> public void waitTableDisabled(byte[] table, long timeoutMillis)<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span> throws InterruptedException, IOException {<a name="line.3324"></a>
+<span class="sourceLineNo">3325</span> waitTableDisabled(TableName.valueOf(table), timeoutMillis);<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span> }<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span><a name="line.3327"></a>
+<span class="sourceLineNo">3328</span> /**<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span> * Make sure that at least the specified number of region servers<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span> * are running<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span> * @param num minimum number of region servers that should be running<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span> * @return true if we started some servers<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span> * @throws IOException<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span> */<a name="line.3334"></a>
+<span class="sourceLineNo">3335</span> public boolean ensureSomeRegionServersAvailable(final int num)<a name="line.3335"></a>
+<span class="sourceLineNo">3336</span> throws IOException {<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span> boolean startedServer = false;<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span> MiniHBaseCluster hbaseCluster = getMiniHBaseCluster();<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span> for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i<num; ++i) {<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span> LOG.info("Started new server=" + hbaseCluster.startRegionServer());<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span> startedServer = true;<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span> }<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span><a name="line.3343"></a>
+<span class="sourceLineNo">3344</span> return startedServer;<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span> }<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span><a name="line.3346"></a>
<span class="sourceLineNo">3347</span><a name="line.3347"></a>
-<span class="sourceLineNo">3348</span><a name="line.3348"></a>
-<span class="sourceLineNo">3349</span> /**<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span> * Make sure that at least the specified number of region servers<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span> * are running. We don't count the ones that are currently stopping or are<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span> * stopped.<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span> * @param num minimum number of region servers that should be running<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span> * @return true if we started some servers<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span> * @throws IOException<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span> */<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span> public boolean ensureSomeNonStoppedRegionServersAvailable(final int num)<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span> throws IOException {<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span> boolean startedServer = ensureSomeRegionServersAvailable(num);<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span><a name="line.3360"></a>
-<span class="sourceLineNo">3361</span> int nonStoppedServers = 0;<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span> for (JVMClusterUtil.RegionServerThread rst :<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span> getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span><a name="line.3364"></a>
-<span class="sourceLineNo">3365</span> HRegionServer hrs = rst.getRegionServer();<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span> if (hrs.isStopping() || hrs.isStopped()) {<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span> LOG.info("A region server is stopped or stopping:"+hrs);<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span> } else {<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span> nonStoppedServers++;<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span> }<a name="line.3370"></a>
-<span class="sourceLineNo">3371</span> }<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span> for (int i=nonStoppedServers; i<num; ++i) {<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span> LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span> startedServer = true;<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span> }<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span> return startedServer;<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span> }<a name="line.3377"></a>
+<span class="sourceLineNo">3348</span> /**<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span> * Make sure that at least the specified number of region servers<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span> * are running. We don't count the ones that are currently stopping or are<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span> * stopped.<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span> * @param num minimum number of region servers that should be running<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span> * @return true if we started some servers<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span> * @throws IOException<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span> */<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span> public boolean ensureSomeNonStoppedRegionServersAvailable(final int num)<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span> throws IOException {<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span> boolean startedServer = ensureSomeRegionServersAvailable(num);<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span><a name="line.3359"></a>
+<span class="sourceLineNo">3360</span> int nonStoppedServers = 0;<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span> for (JVMClusterUtil.RegionServerThread rst :<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span> getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span><a name="line.3363"></a>
+<span class="sourceLineNo">3364</span> HRegionServer hrs = rst.getRegionServer();<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span> if (hrs.isStopping() || hrs.isStopped()) {<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span> LOG.info("A region server is stopped or stopping:"+hrs);<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span> } else {<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span> nonStoppedServers++;<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span> }<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span> }<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span> for (int i=nonStoppedServers; i<num; ++i) {<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span> LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span> startedServer = true;<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span> }<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span> return startedServer;<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span> }<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span><a name="line.3377"></a>
<span class="sourceLineNo">3378</span><a name="line.3378"></a>
-<span class="sourceLineNo">3379</span><a name="line.3379"></a>
-<span class="sourceLineNo">3380</span> /**<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span> * This method clones the passed <code>c</code> configuration setting a new<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span> * user into the clone. Use it getting new instances of FileSystem. Only<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span> * works for DistributedFileSystem w/o Kerberos.<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span> * @param c Initial configuration<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span> * @param differentiatingSuffix Suffix to differentiate this user from others.<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span> * @return A new configuration instance with a different user set into it.<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span> * @throws IOException<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span> */<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span> public static User getDifferentUser(final Configuration c,<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span> final String differentiatingSuffix)<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span> throws IOException {<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span> FileSystem currentfs = FileSystem.get(c);<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span> if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span> return User.getCurrent();<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span> }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span> // Else distributed filesystem. Make a new instance per daemon. Below<a name="line.3396"></a>
-<span class="sourceLineNo">3397</span> // code is taken from the AppendTestUtil over in hdfs.<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span> String username = User.getCurrent().getName() +<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span> differentiatingSuffix;<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span> User user = User.createUserForTesting(c, username,<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span> new String[]{"supergroup"});<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span> return user;<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span> }<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span><a name="line.3404"></a>
-<span class="sourceLineNo">3405</span> public static NavigableSet<String> getAllOnlineRegions(MiniHBaseCluster cluster)<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span> throws IOException {<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span> NavigableSet<String> online = new TreeSet<>();<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span> for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span> try {<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span> for (RegionInfo region :<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span> ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span> online.add(region.getRegionNameAsString());<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span> }<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span> } catch (RegionServerStoppedException e) {<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span> // That's fine.<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span> }<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span> }<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span> for (MasterThread mt : cluster.getLiveMasterThreads()) {<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span> try {<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span> for (RegionInfo region :<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span> ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) {<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span> online.add(region.getRegionNameAsString());<a name="line.3422"></a>
-<span class="sourceLineNo">3423</span> }<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span> } catch (RegionServerStoppedException e) {<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span> // That's fine.<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span> } catch (ServerNotRunningYetException e) {<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span> // That's fine.<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span> }<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span> }<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span> return online;<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span> }<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span><a name="line.3432"></a>
-<span class="sourceLineNo">3433</span> /**<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span> * Set maxRecoveryErrorCount in DFSClient. In 0.20 pre-append its hard-coded to 5 and<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span> * makes tests linger. Here is the exception you'll see:<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span> * <pre><a name="line.3436"></a>
-<span class="sourceLineNo">3437</span> * 2010-06-15 11:52:28,511 WARN [DataStreamer for file /hbase/.logs/wal.1276627923013 block<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span> * blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span> * blk_928005470262850423_1021 failed because recovery from primary datanode 127.0.0.1:53683<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span> * failed 4 times. Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span> * </pre><a name="line.3441"></a>
-<span class="sourceLineNo">3442</span> * @param stream A DFSClient.DFSOutputStream.<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span> * @param max<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span> * @throws NoSuchFieldException<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span> * @throws SecurityException<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span> * @throws IllegalAccessException<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span> * @throws IllegalArgumentException<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span> */<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span> public static void setMaxRecoveryErrorCount(final OutputStream stream,<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span> final int max) {<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span> try {<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span> Class<?> [] clazzes = DFSClient.class.getDeclaredClasses();<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span> for (Class<?> clazz: clazzes) {<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span> String className = clazz.getSimpleName();<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span> if (className.equals("DFSOutputStream")) {<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span> if (clazz.isInstance(stream)) {<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span> Field maxRecoveryErrorCountField =<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span> stream.getClass().getDeclaredField("maxRecoveryErrorCount");<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span> maxRecoveryErrorCountField.setAccessible(true);<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span> maxRecoveryErrorCountField.setInt(stream, max);<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span> break;<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span> }<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span> }<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span> }<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span> } catch (Exception e) {<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span> LOG.info("Could not set max recovery field", e);<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span> }<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span> }<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span><a name="line.3469"></a>
-<span class="sourceLineNo">3470</span> /**<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span> * Uses directly the assignment manager to assign the region. and waits until the specified region<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span> * has completed assignment.<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span> * @return true if the region is assigned false otherwise.<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span> */<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span> public boolean assignRegion(final RegionInfo regionInfo)<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span> throws IOException, InterruptedException {<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span> final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span> am.assign(regionInfo);<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span> return AssignmentTestingUtil.waitForAssignment(am, regionInfo);<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span> }<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span><a name="line.3481"></a>
-<span class="sourceLineNo">3482</span> /**<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span> * Move region to destination server and wait till region is completely moved and online<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span> *<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span> * @param destRegion region to move<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span> * @param destServer destination server of the region<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span> * @throws InterruptedException<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span> * @throws IOException<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span> */<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span> public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span> throws InterruptedException, IOException {<a name="line.3491"></a>
-<span class="sourceLineNo">3492</span> HMaster master = getMiniHBaseCluster().getMaster();<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span> // TODO: Here we start the move. The move can take a while.<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span> getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span> while (true) {<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span> ServerName serverName = master.getAssignmentManager().getRegionStates()<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span> .getRegionServerOfRegion(destRegion);<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span> if (serverName != null && serverName.equals(destServer)) {<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span> assertRegionOnServer(destRegion, serverName, 2000);<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span> break;<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span> }<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span> Thread.sleep(10);<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span> }<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span> }<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span><a name="line.3505"></a>
-<span class="sourceLineNo">3506</span> /**<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span> * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span> * info:server, up to a configuable timeout value (default is 60 seconds)<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span> * This means all regions have been deployed,<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span> * master has been informed and updated hbase:meta with the regions deployed<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span> * server.<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span> * @param tableName the table name<a name="line.3512"></a>
-<span class="sourceLineNo">3513</span> * @throws IOException<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span> */<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span> public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span> waitUntilAllRegionsAssigned(tableName,<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span> this.conf.getLong("hbase.client.sync.wait.timeout.msec", 60000));<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span> }<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span><a name="line.3519"></a>
-<span class="sourceLineNo">3520</span> /**<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span> * Waith until all system table's regions get assigned<a name="line.3521"></a>
+<span class="sourceLineNo">3379</span> /**<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span> * This method clones the passed <code>c</code> configuration setting a new<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span> * user into the clone. Use it getting new instances of FileSystem. Only<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span> * works for DistributedFileSystem w/o Kerberos.<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span> * @param c Initial configuration<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span> * @param differentiatingSuffix Suffix to differentiate this user from others.<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span> * @return A new configuration instance with a different user set into it.<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span> * @throws IOException<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span> */<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span> public static User getDifferentUser(final Configuration c,<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span> final String differentiatingSuffix)<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span> throws IOException {<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span> FileSystem currentfs = FileSystem.get(c);<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span> if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span> return User.getCurrent();<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span> }<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span> // Else distributed filesystem. Make a new instance per daemon. Below<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span> // code is taken from the AppendTestUtil over in hdfs.<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span> String username = User.getCurrent().getName() +<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span> differentiatingSuffix;<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span> User user = User.createUserForTesting(c, username,<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span> new String[]{"supergroup"});<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span> return user;<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span> }<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span><a name="line.3403"></a>
+<span class="sourceLineNo">3404</span> public static NavigableSet<String> getAllOnlineRegions(MiniHBaseCluster cluster)<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span> throws IOException {<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span> NavigableSet<String> online = new TreeSet<>();<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span> for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span> try {<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span> for (RegionInfo region :<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span> ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span> online.add(region.getRegionNameAsString());<a name="line.3411"></a>
+<span class="sourceLineNo">3412</span> }<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span> } catch (RegionServerStoppedException e) {<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span> // That's fine.<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span> }<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span> }<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span> return online;<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span> }<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span><a name="line.3419"></a>
+<span class="sourceLineNo">3420</span> /**<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span> * Set maxRecoveryErrorCount in DFSClient. In 0.20 pre-append its hard-coded to 5 and<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span> * makes tests linger. Here is the exception you'll see:<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span> * <pre><a name="line.3423"></a>
+<span class="sourceLineNo">3424</span> * 2010-06-15 11:52:28,511 WARN [DataStreamer for file /hbase/.logs/wal.1276627923013 block<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span> * blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span> * blk_928005470262850423_1021 failed because recovery from primary datanode 127.0.0.1:53683<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span> * failed 4 times. Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span> * </pre><a name="line.3428"></a>
+<span class="sourceLineNo">3429</span> * @param stream A DFSClient.DFSOutputStream.<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span> * @param max<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span> * @throws NoSuchFieldException<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span> * @throws SecurityException<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span> * @throws IllegalAccessException<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span> * @throws IllegalArgumentException<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span> */<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span> public static void setMaxRecoveryErrorCount(final OutputStream stream,<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span> final int max) {<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span> try {<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span> Class<?> [] clazzes = DFSClient.class.getDeclaredClasses();<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span> for (Class<?> clazz: clazzes) {<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span> String className = clazz.getSimpleName();<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span> if (className.equals("DFSOutputStream")) {<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span> if (clazz.isInstance(stream)) {<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span> Field maxRecoveryErrorCountField =<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span> stream.getClass().getDeclaredField("maxRecoveryErrorCount");<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span> maxRecoveryErrorCountField.setAccessible(true);<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span> maxRecoveryErrorCountField.setInt(stream, max);<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span> break;<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span> }<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span> }<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span> }<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span> } catch (Exception e) {<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span> LOG.info("Could not set max recovery field", e);<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span> }<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span> }<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span><a name="line.3456"></a>
+<span class="sourceLineNo">3457</span> /**<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span> * Uses directly the assignment manager to assign the region. and waits until the specified region<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span> * has completed assignment.<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span> * @return true if the region is assigned false otherwise.<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span> */<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span> public boolean assignRegion(final RegionInfo regionInfo)<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span> throws IOException, InterruptedException {<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span> final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span> am.assign(regionInfo);<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span> return AssignmentTestingUtil.waitForAssignment(am, regionInfo);<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span> }<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span><a name="line.3468"></a>
+<span class="sourceLineNo">3469</span> /**<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span> * Move region to destination server and wait till region is completely moved and online<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span> *<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span> * @param destRegion region to move<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span> * @param destServer destination server of the region<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span> * @throws InterruptedException<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span> * @throws IOException<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span> */<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span> public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span> throws InterruptedException, IOException {<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span> HMaster master = getMiniHBaseCluster().getMaster();<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span> // TODO: Here we start the move. The move can take a while.<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span> getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span> while (true) {<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span> ServerName serverName = master.getAssignmentManager().getRegionStates()<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span> .getRegionServerOfRegion(destRegion);<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span> if (serverName != null && serverName.equals(destServer)) {<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span> assertRegionOnServer(destRegion, serverName, 2000);<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span> break;<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span> }<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span> Thread.sleep(10);<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span> }<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span> }<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span><a name="line.3492"></a>
+<span class="sourceLineNo">3493</span> /**<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span> * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span> * info:server, up to a configuable timeout value (default is 60 seconds)<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span> * This means all regions have been deployed,<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span> * master has been informed and updated hbase:meta with the regions deployed<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span> * server.<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span> * @param tableName the table name<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span> * @throws IOException<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span> */<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span> public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span> waitUntilAllRegionsAssigned(tableName,<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span> this.conf.getLong("hbase.client.sync.wait.timeout.msec", 60000));<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span> }<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span><a name="line.3506"></a>
+<span class="sourceLineNo">3507</span> /**<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span> * Waith until all system table's regions get assigned<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span> * @throws IOException<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span> */<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span> public void waitUntilAllSystemRegionsAssigned() throws IOException {<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span> waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span> }<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span><a name="line.3514"></a>
+<span class="sourceLineNo">3515</span> /**<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span> * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span> * info:server, or until timeout. This means all regions have been deployed,<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span> * master has been informed and updated hbase:meta with the regions deployed<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span> * server.<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span> * @param tableName the table name<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span> * @param timeout timeout, in milliseconds<a name="line.3521"></a>
<span class="sourceLineNo">3522</span> * @throws IOException<a name="line.3522"></a>
<span class="sourceLineNo">3523</span> */<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span> public void waitUntilAllSystemRegionsAssigned() throws IOException {<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span> waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span> }<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span><a name="line.3527"></a>
-<span class="sourceLineNo">3528</span> /**<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span> * Wait until all regions for a table in hbase:meta have a non-empty<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span> * info:server, or until timeout. This means all regions have been deployed,<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span> * master has been informed and updated hbase:meta with the regions deployed<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span> * server.<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span> * @param tableName the table name<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span> * @param timeout timeout, in milliseconds<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span> * @throws IOException<a name="line.3535"></a>
-<span class="sourceLineNo">3536</span> */<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span> public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span> throws IOException {<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span> if (!TableName.isMetaTableName(tableName)) {<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span> try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span> LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = " +<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span> timeout + "ms");<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span> waitFor(timeout, 200, true, new ExplainingPredicate<IOException>() {<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span> @Override<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span> public String explainFailure() throws IOException {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span> return explainTableAvailability(tableName);<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span> }<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span><a name="line.3548"></a>
-<span class="sourceLineNo">3549</span> @Override<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span> public boolean evaluate() throws IOException {<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span> Scan scan = new Scan();<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span> scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span> boolean tableFound = false;<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span> try (ResultScanner s = meta.getScanner(scan)) {<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span> for (Result r; (r = s.next()) != null;) {<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span> byte[] b = r.getValue(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.3556"></a>
-<span class="sourceLineNo">3557</span> RegionInfo info = RegionInfo.parseFromOrNull(b);<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span> if (info != null && info.getTable().equals(tableName)) {<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span> // Get server hosting this region from catalog family. Return false if no server<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span> // hosting this region, or if the server hosting this region was recently killed<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span> // (for fault tolerance testing).<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span> tableFound = true;<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span> byte[] server =<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span> r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span> if (server == null) {<a name="line.3565"></a>
+<span class="sourceLineNo">3524</span> public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span> throws IOException {<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span> if (!TableName.isMetaTableName(tableName)) {<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span> try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span> LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = " +<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span> timeout + "ms");<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span> waitFor(timeout, 200, true, new ExplainingPredicate<IOException>() {<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span> @Override<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span> public String explainFailure() throws IOException {<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span> return explainTableAvailability(tableName);<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span> }<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span><a name="line.3535"></a>
+<span class="sourceLineNo">3536</span> @Override<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span> public boolean evaluate() throws IOException {<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span> Scan scan = new Scan();<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span> scan.addFamily(HConstants.CATALOG_FAMILY);<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span> boolean tableFound = false;<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span> try (ResultScanner s = meta.getScanner(scan)) {<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span> for (Result r; (r = s.next()) != null;) {<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span> byte[] b = r.getValue(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span> RegionInfo info = RegionInfo.parseFromOrNull(b);<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span> if (info != null && info.getTable().equals(tableName)) {<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span> // Get server hosting this region from catalog family. Return false if no server<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span> // hosting this region, or if the server hosting this region was recently killed<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span> // (for fault tolerance testing).<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span> tableFound = true;<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span> byte[] server =<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span> r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span> if (server == null) {<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span> return false;<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span> } else {<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span> byte[] startCode =<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span> r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.3556"></a>
+<span class="sourceLineNo">3557</span> ServerName serverName =<a name="line.3557"></a>
+<span class="sourceLineNo">3558</span> ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span> Bytes.toLong(startCode));<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span> if (!getHBaseClusterInterface().isDistributedCluster() &&<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span> getHBaseCluster().isKilledRS(serverName)) {<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span> return false;<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span> }<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span> }<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span> if (RegionStateStore.getRegionState(r, info) != RegionState.State.OPEN) {<a name="line.3565"></a>
<span class="sourceLineNo">3566</span> return false;<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span> } else {<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span> byte[] startCode =<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span> r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span> ServerName serverName =<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span> ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + "," +<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span> Bytes.toLong(startCode));<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span> if (!getHBaseClusterInterface().isDistributedCluster() &&<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span> getHBaseCluster().isKilledRS(serverName)) {<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span> return false;<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span> }<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span> }<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span> if (RegionStateStore.getRegionState(r, info) != RegionState.State.OPEN) {<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span> return false;<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span> }<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span> }<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span> }<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span> }<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span> if (!tableFound) {<a name="line.3584"></a>
-<span class="sourceLineNo">3585</span> LOG.warn("Didn't find the entries for table " + tableName + " in meta, already deleted?");<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span> }<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span> return tableFound;<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span> }<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span> });<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span> }<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span> }<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span> LOG.info("All regions for table " + tableName + " assigned to meta. Checking AM states.");<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span> // check from the master state if we are using a mini cluster<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span> if (!getHBaseClusterInterface().isDistributedCluster()) {<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span> // So, all regions are in the meta table but make sure master knows of the assignments before<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span> // returning -- sometimes this can lag.<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span> HMaster master = getHBaseCluster().getMaster();<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span> final RegionStates states = master.getAssignmentManager().getRegionStates();<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span> waitFor(timeout, 200, new ExplainingPredicate<IOException>() {<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span> @Override<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span> public String explainFailure() throws IOException {<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span> return explainTableAvailability(tableName);<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span> }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span><a name="line.3604"></a>
-<span class="sourceLineNo">3605</span> @Override<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span> public boolean evaluate() throws IOException {<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span> List<RegionInfo> hris = states.getRegionsOfTable(tableName);<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span> return hris != null && !hris.isEmpty();<a name="line.3608"></a>
-<span class="sourceLineNo">3609</span> }<a name="line.3609"></a>
-<span class="sourceLineNo">3610</span> });<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span> }<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span> LOG.info("All regions for table " + tableName + " assigned.");<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span> }<a name="line.3613"></a>
+<span class="sourceLineNo">3567</span> }<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span> }<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span> }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span> }<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span> if (!tableFound) {<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span> LOG.warn("Didn't find the entries for table " + tableName + " in meta, already deleted?");<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span> }<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span> return tableFound;<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span> }<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span> });<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span> }<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span> }<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span> LOG.info("All regions for table " + tableName + " assigned to meta. Checking AM states.");<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span> // check from the master state if we are using a mini cluster<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span> if (!getHBaseClusterInterface().isDistributedCluster()) {<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span> // So, all regions are in the meta table but make sure master knows of the assignments before<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span> // returning -- sometimes this can lag.<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span> HMaster master = getHBaseCluster().getMaster();<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span> final RegionStates states = master.getAssignmentManager().getRegionStates();<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span> waitFor(timeout, 200, new ExplainingPredicate<IOException>() {<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span> @Override<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span> public String explainFailure() throws IOException {<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span> return explainTableAvailability(tableName);<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span> }<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span><a name="line.3591"></a>
+<span class="sourceLineNo">3592</span> @Override<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span> public boolean evaluate() throws IOException {<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span> List<RegionInfo> hris = states.getRegionsOfTable(tableName);<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span> return hris != null && !hris.isEmpty();<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span> }<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span> });<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span> }<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span> LOG.info("All regions for table " + tableName + " assigned.");<a name="line.3599"></a>
+<span class="sourceLineNo">3600</span> }<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span><a name="line.3601"></a>
+<span class="sourceLineNo">3602</span> /**<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span> * Do a small get/scan against one store. This is required because store<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span> * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3604"></a>
+<span class="sourceLineNo">3605</span> */<a name="line.3605"></a>
+<span class="sourceLineNo">3606</span> public static List<Cell> getFromStoreFile(HStore store,<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span> Get get) throws IOException {<a name="line.3607"></a>
+<span class="sourceLineNo">3608</span> Scan scan = new Scan(get);<a name="line.3608"></a>
+<span class="sourceLineNo">3609</span> InternalScanner scanner = (InternalScanner) store.getScanner(scan,<a name="line.3609"></a>
+<span class="sourceLineNo">3610</span> scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span> // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span> // readpoint 0.<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span> 0);<a name="line.3613"></a>
<span class="sourceLineNo">3614</span><a name="line.3614"></a>
-<span class="sourceLineNo">3615</span> /**<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span> * Do a small get/scan against one store. This is required because store<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span> * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span> */<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span> public static List<Cell> getFromStoreFile(HStore store,<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span> Get get) throws IOException {<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span> Scan scan = new Scan(get);<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span> InternalScanner scanner = (InternalScanner) store.getScanner(scan,<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span> scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span> // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span> // readpoint 0.<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span> 0);<a name="line.3626"></a>
+<span class="sourceLineNo">3615</span> List<Cell> result = new ArrayList<>();<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span> scanner.next(result);<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span> if (!result.isEmpty()) {<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span> // verify that we are on the row we want:<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span> Cell kv = result.get(0);<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span> if (!CellUtil.matchingRows(kv, get.getRow())) {<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span> result.clear();<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span> }<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span> }<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span> scanner.close();<a name="line.3624"></a>
+<span class="sourceLineNo">3625</span> return result;<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span> }<a name="line.3626"></a>
<span class="sourceLineNo">3627</span><a name="line.3627"></a>
-<span class="sourceLineNo">3628</span> List<Cell> result = new ArrayList<>();<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span> scanner.next(result);<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span> if (!result.isEmpty()) {<a name="line.3630"></a>
-<span class="sourceLineNo">3631</span> // verify that we are on the row we want:<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span> Cell kv = result.get(0);<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span> if (!CellUtil.matchingRows(kv, get.getRow())) {<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span> result.clear();<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span> }<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span> }<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span> scanner.close();<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span> return result;<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span> }<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span><a name="line.3640"></a>
-<span class="sourceLineNo">3641</span> /**<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span> * Create region split keys between startkey and endKey<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span> *<a name="line.3643"></a>
-<span class="sourceLineNo">3644</span> * @param startKey<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span> * @param endKey<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span> * @param numRegions the number of regions to be created. it has to be greater than 3.<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span> * @return resulting split keys<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span> */<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span> public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions){<a name="line.3649"></a>
-<span class="sourceLineNo">3650</span> if (numRegions <= 3) {<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span> throw new AssertionError();<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span> }<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span> byte [][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span> byte [][] result = new byte[tmpSplitKeys.length+1][];<a name="line.3654"></a>
-<span class="sourceLineNo">3655</span> System.arraycopy(tmpSplitKeys, 0, result, 1, tmpSplitKeys.length);<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span> result[0] = HConstants.EMPTY_BYTE_ARRAY;<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span> return result;<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span> }<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span><a name="line.3659"></a>
-<span class="sourceLineNo">3660</span> /**<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span> * Do a small get/scan against one store. This is required because store<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span> * has no actual methods of querying itself, and relies on StoreScanner.<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span> */<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span> public static List<Cell> getFromStoreFile(HStore store,<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span> byte [] row,<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span> NavigableSet<byte[]> columns<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span> ) throws IOException {<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span> Get get = new Get(row);<a name="line.3668"></a>
-<span class="sourceLineNo">3669</span> Map<byte[], NavigableSet<byte[]>> s = get.getFamilyMap();<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span> s.put(store.getColumnFamilyDescriptor().getName(), columns);<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span><a name="line.3671"></a>
-<span class="sourceLineNo">3672</span> return getFromStoreFile(store,get);<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span> }<a name="line.3673"></a>
-<span class="sourceLineNo">3674</span><a name="line.3674"></a>
-<span class="sourceLineNo">3675</span> public static void assertKVListsEqual(String additionalMsg,<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span> final List<? extends Cell> expected,<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span> final List<? extends Cell> actual) {<a name="line.3677"></a>
-<span class="sourceLineNo">3678</span> final int eLen = expected.size();<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span> final int aLen = actual.size();<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span> final int minLen = Math.min(eLen, aLen);<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span><a name="line.3681"></a>
-<span class="sourceLineNo">3682</span> int i;<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span> for (i = 0; i < minLen<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span> && CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0;<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span> ++i) {}<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span><a name="line.3686"></a>
-<span class="sourceLineNo">3687</span> if (additionalMsg == null) {<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span> additionalMsg = "";<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span> }<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span> if (!additionalMsg.isEmpty()) {<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span> additionalMsg = ". " + additionalMsg;<a name="line.3691"></a>
-<span class="sourceLineNo">3692</span> }<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span><a name="line.3693"></a>
-<span class="sourceLineNo">3694</span> if (eLen != aLen || i != minLen) {<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span> throw new AssertionError(<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span> "Expected and actual KV arrays differ at position " + i + ": " +<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span> safeGetAsStr(expected, i) + " (length " + eLen +") vs. " +<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span> safeGetAsStr(actual, i) + " (length " + aLen + ")" + additionalMsg);<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span> }<a name="line.3699"></a>
-<span class="sourceLineNo">3700</span> }<a name="line.3700"></a>
-<span class="sourceLineNo">3701</span><a name="line.3701"></a>
-<span class="sourceLineNo">3702</span> public static <T> String safeGetAsStr(List<T> lst, int i) {<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span> if (0 <= i && i < lst.size()) {<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span> return lst.get(i).toString();<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span> } else {<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span> return "<out_of_range>";<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span> }<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span> }<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span><a name="line.3709"></a>
-<span class="sourceLineNo">3710</span> public String getClusterKey() {<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span> return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":"<a name="line.3711"></a>
-<span class="sourceLineNo">3712</span> + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT) + ":"<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span> + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT,<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span> HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);<a name="line.3714"></a>
-<span class="sourceLineNo">3715</span> }<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span><a name="line.3716"></a>
-<span class="sourceLineNo">3717</span> /** Creates a random table with the given parameters */<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span> public Table createRandomTable(TableName tableName,<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span> final Collection<String> families,<a name="line.3719"></a>
-<span class="sourceLineNo">3720</span> final int maxVersions,<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span> final int numColsPerRow,<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span> final int numFlushes,<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span> final int numRegions,<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span> final int numRowsPerFlush)<a name="line.3724"></a>
-<span class="sourceLineNo">3725</span> throws IOException, InterruptedException {<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span><a name="line.3726"></a>
-<span class="sourceLineNo">3727</span> LOG.info("\n\nCreating random table " + tableName + " with " + numRegions +<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span> " regions, " + numFlushes + " storefiles per region, " +<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span> numRowsPerFlush + " rows per flush, maxVersions=" + maxVersions +<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span> "\n");<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span><a name="line.3731"></a>
-<span class="sourceLineNo">3732</span> final Random rand = new Random(tableName.hashCode() * 17L + 12938197137L);<a name="line.3732"></a>
-<span class="sourceLineNo">3733</span> final int numCF = families.size();<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span> final byte[][] cfBytes = new byte[numCF][];<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span> {<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span> int cfIndex = 0;<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span> for (String cf : families) {<a name="line.3737"></a>
-<span class="sourceLineNo">3738</span> cfBytes[cfIndex++] = Bytes.toBytes(cf);<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span> }<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span> }<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span><a name="line.3741"></a>
-<span class="sourceLineNo">3742</span> final int actualStartKey = 0;<a name="line.3742"></a>
-<span class="sourceLineNo">3743</span> final int actualEndKey = Integer.MAX_VALUE;<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span> final int keysPerRegion = (actualEndKey - actualStartKey) / numRegions;<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span> final int splitStartKey = actualStartKey + keysPerRegion;<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span> final int splitEndKey = actualEndKey - keysPerRegion;<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span> final String keyFormat = "%08x";<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span> final Table table = createTable(tableName, cfBytes,<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span> maxVersions,<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span> Bytes.toBytes(String.format(keyFormat, splitStartKey)),<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span> Bytes.toBytes(String.format(keyFormat, splitEndKey)),<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span> numRegions);<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span><a name="line.3753"></a>
-<span class="sourceLineNo">3754</span> if (hbaseCluster != null) {<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span> getMiniHBaseCluster().flushcache(TableName.META_TABLE_NAME);<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span> }<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span><a name="line.3757"></a>
-<span class="sourceLineNo">3758</span> BufferedMutator mutator = getConnection().getBufferedMutator(tableName);<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span><a name="line.3759"></a>
-<span class="sourceLineNo">3760</span> for (int iFlush = 0; iFlush < numFlushes; ++iFlush) {<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span> for (int iRow = 0; iRow < numRowsPerFlush; ++iRow) {<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span> final byte[] row = Bytes.toBytes(String.format(keyFormat,<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span> actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span><a name="line.3764"></a>
-<span class="sourceLineNo">3765</span> Put put = new Put(row);<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span> Delete del = new Delete(row);<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span> for (int iCol = 0; iCol < numColsPerRow; ++iCol) {<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span> final byte[] cf = cfBytes[rand.nextInt(numCF)];<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span> final long ts = rand.nextInt();<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span> final byte[] qual = Bytes.toBytes("col" + iCol);<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span> if (rand.nextBoolean()) {<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span> final byte[] value = Bytes.toBytes("value_for_row_" + iRow +<a name="line.3772"></a>
-<span class="sourceLineNo">3773</span> "_cf_" + Bytes.toStringBinary(cf) + "_col_" + iCol + "_ts_" +<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span> ts + "_random_" + rand.nextLong());<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span> put.addColumn(cf, qual, ts, value);<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span> } else if (rand.nextDouble() < 0.8) {<a name="line.3776"></a>
-<span class="sourceLineNo">3777</span> del.addColumn(cf, qual, ts);<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span> } else {<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span> del.addColumns(cf, qual, ts);<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span> }<a name="line.3780"></a>
-<span class="sourceLineNo">3781</span> }<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span><a name="line.3782"></a>
-<span class="sourceLineNo">3783</span> if (!put.isEmpty()) {<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span> mutator.mutate(put);<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span> }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span><a name="line.3786"></a>
-<span class="sourceLineNo">3787</span> if (!del.isEmpty()) {<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span> mutator.mutate(del);<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span> }<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span> }<a name="line.3790"></a>
-<span class="sourceLineNo">3791</span> LOG.info("Initiating flush #" + iFlush + " for table " + tableName);<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span> mutator.flush();<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span> if (hbaseCluster != null) {<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span> getMiniHBaseCluster().flushcache(table.getName());<a name="line.3794"></a>
-<span class="sourceLineNo">3795</span> }<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span> }<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span> mutator.close();<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span><a name="line.3798"></a>
-<span class="sourceLineNo">3799</span> return table;<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span> }<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span><a name="line.3801"></a>
-<span class="sourceLineNo">3802</span> public static int randomFreePort() {<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span> return HBaseCommonTestingUtility.randomFreePort();<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span> }<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span> public static String randomMultiCastAddress() {<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span> return "226.1.1." + random.nextInt(254);<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span> }<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span><a name="line.3808"></a>
-<span class="sourceLineNo">3809</span> public static void waitForHostPort(String host, int port)<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span> throws IOException {<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span> final int maxTimeMs = 10000;<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span> final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span> IOException savedException = null;<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span> LOG.info("Waiting for server at " + host + ":" + port);<a name="line.3814"></a>
-<span class="sourceLineNo">3815</span> for (int attempt = 0; attempt < maxNumAttempts; ++attempt) {<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span> try {<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span> Socket sock = new Socket(InetAddress.getByName(host), port);<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span> sock.close();<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span> savedException = null;<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span> LOG.info("Server at " + host + ":" + port + " is available");<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span> break;<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span> } catch (UnknownHostException e) {<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span> throw new IOException("Failed to look up " + host, e);<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span> } catch (IOException e) {<a name="line.3824"></a>
-<span class="sourceLineNo">3825</span> savedException = e;<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span> }<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span> Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span> }<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span><a name="line.3829"></a>
-<span class="sourceLineNo">3830</span> if (savedException != null) {<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span> throw savedException;<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span> }<a name="line.3832"></a>
+<span class="sourceLineNo">3628</span> /**<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span> * Create region split keys between startkey and endKey<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span> *<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span> * @param startKey<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span> * @param endKey<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span> * @param numRegions the number of regions to be created. it has to be greater than 3.<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span> * @return resulting split keys<a name="line.3634"></a>
... 304668 lines suppressed ...