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 2026/04/12 23:57:52 UTC
(hbase-site) branch asf-site updated: Published site at b5f648b6d8d5449740112590b8d49d33f5c5ce5d.
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 65e8941f794 Published site at b5f648b6d8d5449740112590b8d49d33f5c5ce5d.
65e8941f794 is described below
commit 65e8941f794546e885dea44a1b75b7ddb88b88b7
Author: HBase <de...@hbase.apache.org>
AuthorDate: Sun Apr 12 23:53:56 2026 +0000
Published site at b5f648b6d8d5449740112590b8d49d33f5c5ce5d.
---
books/apache-hbase-reference-guide-dark-mode.pdf | Bin 38886598 -> 38886598 bytes
books/apache-hbase-reference-guide.pdf | Bin 38776474 -> 38776474 bytes
checkstyle-aggregate.html | 36 +-
dependency-convergence.html | 2 +-
dependency-info.html | 2 +-
dependency-management.html | 2 +-
hbase-website/dependency-convergence.html | 2 +-
hbase-website/dependency-info.html | 2 +-
hbase-website/dependency-management.html | 2 +-
hbase-website/index.html | 2 +-
hbase-website/issue-management.html | 2 +-
hbase-website/licenses.html | 2 +-
hbase-website/mailing-lists.html | 2 +-
hbase-website/plugin-management.html | 2 +-
hbase-website/plugins.html | 2 +-
hbase-website/project-info.html | 2 +-
hbase-website/scm.html | 2 +-
hbase-website/summary.html | 2 +-
hbase-website/team.html | 2 +-
issue-management.html | 2 +-
licenses.html | 2 +-
mailing-lists.html | 2 +-
plugin-management.html | 2 +-
plugins.html | 2 +-
project-info.html | 2 +-
project-reports.html | 2 +-
scm.html | 2 +-
summary.html | 2 +-
team.html | 2 +-
testapidocs/index-all.html | 220 +-
testapidocs/member-search-index.js | 2 +-
.../hadoop/hbase/class-use/HBaseClassTestRule.html | 251 +-
.../hadoop/hbase/class-use/TableNameTestRule.html | 19 -
.../org/apache/hadoop/hbase/package-use.html | 72 +-
.../hadoop/hbase/backup/TestHFileArchiving.html | 1296 ++++-----
.../hadoop/hbase/codec/CodecPerformance.html | 4 +-
.../hadoop/hbase/codec/TestCellMessageCodec.html | 205 +-
.../hbase/coprocessor/SimpleRegionObserver.html | 8 +-
.../TestAppendTimeRange.MyObserver.html | 263 +-
.../hbase/coprocessor/TestAppendTimeRange.html | 263 +-
.../TestClientMetaCoprocessor.TestCoprocessor.html | 320 +--
.../coprocessor/TestClientMetaCoprocessor.html | 320 +--
...CoprocessorConfiguration.SystemCoprocessor.html | 331 ++-
...tCoprocessorConfiguration.TableCoprocessor.html | 331 ++-
.../coprocessor/TestCoprocessorConfiguration.html | 331 ++-
...TestCoprocessorHost.SimpleRegionObserverV2.html | 433 ++-
...TestCoprocessorHost.SimpleRegionObserverV3.html | 433 ++-
.../hbase/coprocessor/TestCoprocessorHost.html | 433 ++-
.../TestCoprocessorInterface.CoprocessorII.html | 869 +++---
.../TestCoprocessorInterface.CoprocessorImpl.html | 869 +++---
.../coprocessor/TestCoprocessorInterface.html | 869 +++---
...estCoprocessorMetrics.CustomMasterObserver.html | 1026 ++++---
...estCoprocessorMetrics.CustomRegionEndpoint.html | 1026 ++++---
...estCoprocessorMetrics.CustomRegionObserver.html | 1026 ++++---
...stCoprocessorMetrics.CustomRegionObserver2.html | 1026 ++++---
...rocessorMetrics.CustomRegionServerObserver.html | 1026 ++++---
.../TestCoprocessorMetrics.CustomWALObserver.html | 1026 ++++---
.../hbase/coprocessor/TestCoprocessorMetrics.html | 1026 ++++---
...ssorSharedConnection.TestMasterCoprocessor.html | 180 +-
...ssorSharedConnection.TestRegionCoprocessor.html | 180 +-
...aredConnection.TestRegionServerCoprocessor.html | 180 +-
.../TestCoprocessorSharedConnection.html | 180 +-
.../TestCoprocessorStop.FooCoprocessor.html | 193 +-
.../hbase/coprocessor/TestCoprocessorStop.html | 193 +-
...oreMasterCoprocessor.CoreMasterCoprocessor.html | 141 +-
...MasterCoprocessor.NotCoreMasterCoprocessor.html | 141 +-
.../coprocessor/TestCoreMasterCoprocessor.html | 141 +-
...oreRegionCoprocessor.CoreRegionCoprocessor.html | 192 +-
...RegionCoprocessor.NotCoreRegionCoprocessor.html | 192 +-
.../coprocessor/TestCoreRegionCoprocessor.html | 192 +-
...verCoprocessor.CoreRegionServerCoprocessor.html | 154 +-
...Coprocessor.NotCoreRegionServerCoprocessor.html | 154 +-
.../TestCoreRegionServerCoprocessor.html | 154 +-
...ncrementAndAppendWithNullResult.MyObserver.html | 245 +-
.../TestIncrementAndAppendWithNullResult.html | 245 +-
.../TestIncrementTimeRange.MyObserver.html | 337 ++-
.../hbase/coprocessor/TestIncrementTimeRange.html | 337 ++-
...ssorExceptionWithAbort.BuggyMasterObserver.html | 403 ++-
...cessorExceptionWithAbort.CreateTableThread.html | 403 ++-
...oprocessorExceptionWithAbort.MasterTracker.html | 403 ++-
.../TestMasterCoprocessorExceptionWithAbort.html | 403 ++-
...sorExceptionWithRemove.BuggyMasterObserver.html | 393 ++-
...processorExceptionWithRemove.MasterTracker.html | 393 ++-
.../TestMasterCoprocessorExceptionWithRemove.html | 393 ++-
.../TestMasterObserver.CPMasterObserver.html | 3025 ++++++++++----------
.../hbase/coprocessor/TestMasterObserver.html | 3025 ++++++++++----------
...Schema.OnlyOneVersionAllowedMasterObserver.html | 190 +-
.../TestMasterObserverToModifyTableSchema.html | 190 +-
.../hbase/coprocessor/TestMetaTableMetrics.html | 603 ++--
...WithSlowCoprocessor.FlushingRegionObserver.html | 172 +-
...estNegativeMemStoreSizeWithSlowCoprocessor.html | 172 +-
...eInCoprocessor.CustomThreadPoolCoprocessor.html | 335 ++-
...eInCoprocessor.SendToOtherTableCoprocessor.html | 335 ++-
.../coprocessor/TestOpenTableInCoprocessor.html | 335 ++-
...pendBeforeWAL.ChangeCellWithACLTagObserver.html | 677 +++--
...ChangeCellWithDifferntColumnFamilyObserver.html | 677 +++--
...ChangeCellWithNotExistColumnFamilyObserver.html | 677 +++--
.../TestPostIncrementAndAppendBeforeWAL.html | 677 +++--
.../coprocessor/TestReadOnlyConfiguration.html | 40 +-
...stRegionCoprocessorHost.TempRegionObserver.html | 381 ++-
.../coprocessor/TestRegionCoprocessorHost.html | 381 ++-
...tRegionCoprocessorQuotaUsage.MyCoprocessor.html | 197 +-
...gionCoprocessorQuotaUsage.MyRegionObserver.html | 197 +-
.../TestRegionCoprocessorQuotaUsage.html | 197 +-
.../TestRegionObserverBypass.TestCoprocessor.html | 499 ++--
.../TestRegionObserverBypass.TestCoprocessor2.html | 499 ++--
.../TestRegionObserverBypass.TestCoprocessor3.html | 499 ++--
.../coprocessor/TestRegionObserverBypass.html | 499 ++--
...FromCoprocessors.TestDeleteCellCoprocessor.html | 569 ++--
...omCoprocessors.TestDeleteFamilyCoprocessor.html | 569 ++--
...sFromCoprocessors.TestDeleteRowCoprocessor.html | 569 ++--
...mCoprocessors.TestMultiMutationCoprocessor.html | 569 ++--
...FromCoprocessors.TestPutWithTTLCoprocessor.html | 569 ++--
...gMutationsFromCoprocessors.TestWALObserver.html | 569 ++--
...ObserverForAddingMutationsFromCoprocessors.html | 569 ++--
...tRegionObserverInterface.EvenOnlyCompactor.html | 1814 ++++++------
.../coprocessor/TestRegionObserverInterface.html | 1814 ++++++------
...erPreFlushAndPreCompact.TestRegionObserver.html | 168 +-
.../TestRegionObserverPreFlushAndPreCompact.html | 168 +-
...enHook.CompactionCompletionNotifyingRegion.html | 677 +++--
...ObserverScannerOpenHook.EmptyRegionObsever.html | 677 +++--
...RegionObserverScannerOpenHook.NoDataFilter.html | 677 +++--
...serverScannerOpenHook.NoDataFromCompaction.html | 677 +++--
...ionObserverScannerOpenHook.NoDataFromFlush.html | 677 +++--
...gionObserverScannerOpenHook.NoDataFromScan.html | 677 +++--
.../TestRegionObserverScannerOpenHook.html | 677 +++--
.../TestRegionObserverStacking.ObserverA.html | 259 +-
.../TestRegionObserverStacking.ObserverB.html | 259 +-
.../TestRegionObserverStacking.ObserverC.html | 259 +-
.../coprocessor/TestRegionObserverStacking.html | 259 +-
...ssorExceptionWithAbort.BuggyRegionObserver.html | 259 +-
...tionWithAbort.FailedInitializationObserver.html | 259 +-
...tRegionServerCoprocessorExceptionWithAbort.html | 259 +-
...sorExceptionWithRemove.BuggyRegionObserver.html | 211 +-
...RegionServerCoprocessorExceptionWithRemove.html | 211 +-
...estRpcCoprocessor.AuthorizationRpcObserver.html | 149 +-
.../hbase/coprocessor/TestRpcCoprocessor.html | 149 +-
.../hadoop/hbase/coprocessor/TestWALObserver.html | 858 +++---
.../TestForeignExceptionDispatcher.html | 217 +-
.../TestForeignExceptionSerialization.html | 150 +-
.../TestTimeoutExceptionInjector.html | 173 +-
.../hadoop/hbase/http/TestDebugDumpRedaction.html | 373 ++-
.../hadoop/hbase/http/TestInfoServersACL.html | 835 +++---
.../MobSnapshotTestingUtils.SnapshotMock.html | 48 +-
.../hbase/snapshot/MobSnapshotTestingUtils.html | 48 +-
...tTestingUtils.SnapshotMock.SnapshotBuilder.html | 1419 ++++-----
.../SnapshotTestingUtils.SnapshotMock.html | 1419 ++++-----
.../hbase/snapshot/SnapshotTestingUtils.html | 1419 ++++-----
.../TestConcurrentFlushSnapshotFromClient.html | 55 +-
.../snapshot/TestFlushSnapshotFromClient.html | 855 +++---
.../snapshot/TestMobFlushSnapshotFromClient.html | 95 +-
.../TestMobRestoreFlushSnapshotFromClient.html | 91 +-
.../snapshot/TestMobRestoreSnapshotHelper.html | 78 +-
.../hbase/snapshot/TestRegionSnapshotTask.html | 325 ++-
.../TestRestoreFlushSnapshotFromClient.html | 408 +--
.../hbase/snapshot/TestRestoreSnapshotHelper.html | 751 +++--
...stSnapshotClientRetries.MasterSyncObserver.html | 213 +-
.../hbase/snapshot/TestSnapshotClientRetries.html | 213 +-
.../snapshot/TestSnapshotDescriptionUtils.html | 412 ++-
.../hbase/snapshot/TestSnapshotManifest.html | 359 ++-
.../hbase/snapshot/TestSnapshotStoreFileSize.html | 220 +-
.../snapshot/TestSnapshotWhenChoreCleaning.html | 357 ++-
testdevapidocs/index-all.html | 666 ++---
testdevapidocs/member-search-index.js | 2 +-
.../TestHFileArchiving.ArchivingFunction.html | 4 +-
.../hadoop/hbase/backup/TestHFileArchiving.html | 163 +-
...stZooKeeperTableArchiveClient.MockRegistry.html | 6 +-
.../example/TestZooKeeperTableArchiveClient.html | 108 +-
.../hbase/class-use/ConnectionExtension.html | 16 +
.../hadoop/hbase/class-use/ConnectionRule.html | 16 -
.../hadoop/hbase/class-use/HBaseClassTestRule.html | 600 +---
.../class-use/HBaseParameterizedTestTemplate.html | 34 +-
.../hbase/class-use/MiniClusterExtension.html | 16 +
.../hadoop/hbase/class-use/MiniClusterRule.html | 16 -
.../hbase/class-use/TableNameTestExtension.html | 18 +-
.../hadoop/hbase/class-use/TableNameTestRule.html | 53 +-
.../hadoop/hbase/codec/TestCellMessageCodec.html | 29 +-
.../TestConstraint.CheckWasRunConstraint.html | 8 +-
.../hadoop/hbase/constraint/TestConstraint.html | 74 +-
.../constraint/TestConstraints.AlsoWorks.html | 6 +-
.../hadoop/hbase/constraint/TestConstraints.html | 114 +-
.../TestAppendTimeRange.MyObserver.html | 12 +-
.../hbase/coprocessor/TestAppendTimeRange.html | 87 +-
.../TestClientMetaCoprocessor.TestCoprocessor.html | 10 +-
.../coprocessor/TestClientMetaCoprocessor.html | 57 +-
...CoprocessorConfiguration.SystemCoprocessor.html | 8 +-
...tCoprocessorConfiguration.TableCoprocessor.html | 8 +-
.../coprocessor/TestCoprocessorConfiguration.html | 75 +-
...TestCoprocessorHost.CoprocessorHostForTest.html | 10 +-
...TestCoprocessorHost.SimpleRegionObserverV2.html | 4 +-
...TestCoprocessorHost.SimpleRegionObserverV3.html | 4 +-
.../TestCoprocessorHost.TestAbortable.html | 10 +-
.../hbase/coprocessor/TestCoprocessorHost.html | 34 +-
.../TestCoprocessorInterface.CoprocessorII.html | 14 +-
.../TestCoprocessorInterface.CoprocessorImpl.html | 64 +-
.../TestCoprocessorInterface.CustomScanner.html | 30 +-
.../coprocessor/TestCoprocessorInterface.html | 58 +-
...estCoprocessorMetrics.CustomMasterObserver.html | 16 +-
...estCoprocessorMetrics.CustomRegionEndpoint.html | 10 +-
...estCoprocessorMetrics.CustomRegionObserver.html | 12 +-
...stCoprocessorMetrics.CustomRegionObserver2.html | 4 +-
...rocessorMetrics.CustomRegionServerObserver.html | 12 +-
.../TestCoprocessorMetrics.CustomWALObserver.html | 12 +-
.../hbase/coprocessor/TestCoprocessorMetrics.html | 78 +-
...ssorSharedConnection.TestMasterCoprocessor.html | 6 +-
...ssorSharedConnection.TestRegionCoprocessor.html | 6 +-
...aredConnection.TestRegionServerCoprocessor.html | 6 +-
.../TestCoprocessorSharedConnection.html | 40 +-
.../TestCoprocessorStop.FooCoprocessor.html | 8 +-
.../hbase/coprocessor/TestCoprocessorStop.html | 45 +-
...oreMasterCoprocessor.CoreMasterCoprocessor.html | 4 +-
...MasterCoprocessor.NotCoreMasterCoprocessor.html | 4 +-
.../coprocessor/TestCoreMasterCoprocessor.html | 50 +-
...oreRegionCoprocessor.CoreRegionCoprocessor.html | 4 +-
...RegionCoprocessor.NotCoreRegionCoprocessor.html | 4 +-
.../coprocessor/TestCoreRegionCoprocessor.html | 51 +-
...verCoprocessor.CoreRegionServerCoprocessor.html | 4 +-
...Coprocessor.NotCoreRegionServerCoprocessor.html | 4 +-
.../TestCoreRegionServerCoprocessor.html | 51 +-
...ncrementAndAppendWithNullResult.MyObserver.html | 16 +-
.../TestIncrementAndAppendWithNullResult.html | 68 +-
.../TestIncrementTimeRange.MyObserver.html | 10 +-
.../hbase/coprocessor/TestIncrementTimeRange.html | 93 +-
...ssorExceptionWithAbort.BuggyMasterObserver.html | 26 +-
...cessorExceptionWithAbort.CreateTableThread.html | 8 +-
...oprocessorExceptionWithAbort.MasterTracker.html | 8 +-
.../TestMasterCoprocessorExceptionWithAbort.html | 39 +-
...sorExceptionWithRemove.BuggyMasterObserver.html | 26 +-
...processorExceptionWithRemove.MasterTracker.html | 8 +-
.../TestMasterCoprocessorExceptionWithRemove.html | 47 +-
.../TestMasterObserver.CPMasterObserver.html | 508 ++--
.../hbase/coprocessor/TestMasterObserver.html | 157 +-
...Schema.OnlyOneVersionAllowedMasterObserver.html | 10 +-
.../TestMasterObserverToModifyTableSchema.html | 38 +-
.../TestMetaTableMetrics.GetThread.html | 10 +-
.../TestMetaTableMetrics.PutThread.html | 10 +-
.../hbase/coprocessor/TestMetaTableMetrics.html | 120 +-
...WithSlowCoprocessor.FlushingRegionObserver.html | 6 +-
...estNegativeMemStoreSizeWithSlowCoprocessor.html | 49 +-
...eInCoprocessor.CustomThreadPoolCoprocessor.html | 10 +-
...eInCoprocessor.SendToOtherTableCoprocessor.html | 8 +-
.../coprocessor/TestOpenTableInCoprocessor.html | 65 +-
...pendBeforeWAL.ChangeCellWithACLTagObserver.html | 10 +-
...ChangeCellWithDifferntColumnFamilyObserver.html | 12 +-
...ChangeCellWithNotExistColumnFamilyObserver.html | 12 +-
.../TestPostIncrementAndAppendBeforeWAL.html | 140 +-
.../coprocessor/TestReadOnlyConfiguration.html | 50 +-
...stRegionCoprocessorHost.TempRegionObserver.html | 6 +-
.../coprocessor/TestRegionCoprocessorHost.html | 93 +-
...tRegionCoprocessorQuotaUsage.MyCoprocessor.html | 8 +-
...gionCoprocessorQuotaUsage.MyRegionObserver.html | 6 +-
.../TestRegionCoprocessorQuotaUsage.html | 67 +-
.../TestRegionObserverBypass.TestCoprocessor.html | 12 +-
.../TestRegionObserverBypass.TestCoprocessor2.html | 4 +-
.../TestRegionObserverBypass.TestCoprocessor3.html | 4 +-
.../coprocessor/TestRegionObserverBypass.html | 70 +-
...FromCoprocessors.TestDeleteCellCoprocessor.html | 8 +-
...omCoprocessors.TestDeleteFamilyCoprocessor.html | 8 +-
...sFromCoprocessors.TestDeleteRowCoprocessor.html | 8 +-
...mCoprocessors.TestMultiMutationCoprocessor.html | 8 +-
...FromCoprocessors.TestPutWithTTLCoprocessor.html | 8 +-
...gMutationsFromCoprocessors.TestWALObserver.html | 10 +-
...ObserverForAddingMutationsFromCoprocessors.html | 95 +-
...tRegionObserverInterface.EvenOnlyCompactor.html | 16 +-
...erInterface.PreWALAppendWALActionsListener.html | 10 +-
.../coprocessor/TestRegionObserverInterface.html | 205 +-
...erPreFlushAndPreCompact.TestRegionObserver.html | 10 +-
.../TestRegionObserverPreFlushAndPreCompact.html | 55 +-
...enHook.CompactionCompletionNotifyingRegion.html | 12 +-
...ObserverScannerOpenHook.EmptyRegionObsever.html | 6 +-
...RegionObserverScannerOpenHook.NoDataFilter.html | 10 +-
...serverScannerOpenHook.NoDataFromCompaction.html | 8 +-
...ionObserverScannerOpenHook.NoDataFromFlush.html | 8 +-
...gionObserverScannerOpenHook.NoDataFromScan.html | 10 +-
.../TestRegionObserverScannerOpenHook.html | 71 +-
.../TestRegionObserverStacking.ObserverA.html | 10 +-
.../TestRegionObserverStacking.ObserverB.html | 10 +-
.../TestRegionObserverStacking.ObserverC.html | 10 +-
.../coprocessor/TestRegionObserverStacking.html | 31 +-
...ssorExceptionWithAbort.BuggyRegionObserver.html | 6 +-
...tionWithAbort.FailedInitializationObserver.html | 6 +-
...tRegionServerCoprocessorExceptionWithAbort.html | 38 +-
...sorExceptionWithRemove.BuggyRegionObserver.html | 6 +-
...RegionServerCoprocessorExceptionWithRemove.html | 29 +-
...estRpcCoprocessor.AuthorizationRpcObserver.html | 16 +-
.../hbase/coprocessor/TestRpcCoprocessor.html | 32 +-
.../hadoop/hbase/coprocessor/TestWALObserver.html | 149 +-
.../TestForeignExceptionDispatcher.html | 45 +-
.../TestForeignExceptionSerialization.html | 28 +-
.../TestTimeoutExceptionInjector.html | 32 +-
.../TestExecutorService.TestEventHandler.html | 10 +-
.../hadoop/hbase/executor/TestExecutorService.html | 31 +-
.../apache/hadoop/hbase/fs/TestBlockReorder.html | 78 +-
.../hbase/fs/TestBlockReorderBlockLocation.html | 72 +-
.../hbase/fs/TestBlockReorderMultiBlocks.html | 84 +-
.../hadoop/hbase/http/TestDebugDumpRedaction.html | 98 +-
.../hadoop/hbase/http/TestInfoServersACL.html | 123 +-
.../MasterFailoverWithProceduresTestBase.html | 6 +-
.../procedure/TestCloneSnapshotProcedure.html | 100 +-
.../TestCloneSnapshotProcedureFileBasedSFT.html | 74 +-
.../TestCreateDeleteTableProcedureWithRetry.html | 37 +-
.../procedure/TestCreateNamespaceProcedure.html | 65 +-
...stCreateTableNoRegionServer.HMasterForTest.html | 8 +-
.../procedure/TestCreateTableNoRegionServer.html | 55 +-
...rocedure.CreateTableProcedureOnHDFSFailure.html | 10 +-
.../master/procedure/TestCreateTableProcedure.html | 153 +-
.../TestCreateTableProcedureMuitipleRegions.html | 39 +-
.../TestCreateTableWithMasterFailover.html | 35 +-
.../TestDeleteColumnFamilyProcedureFromClient.html | 50 +-
.../procedure/TestDeleteNamespaceProcedure.html | 118 +-
.../master/procedure/TestDeleteTableProcedure.html | 123 +-
...reWithRecovery.FailingDeleteTableProcedure.html | 10 +-
.../TestDeleteTableProcedureWithRecovery.html | 58 +-
.../TestDeleteTableWithMasterFailover.html | 35 +-
.../procedure/TestDisableTableProcedure.html | 93 +-
.../TestDisableTableWithMasterFailover.html | 35 +-
.../master/procedure/TestEnableTableProcedure.html | 98 +-
.../TestEnableTableWithMasterFailover.html | 35 +-
.../TestFastFailOnProcedureNotRegistered.html | 67 +-
.../master/procedure/TestFlushTableProcedure.html | 40 +-
.../procedure/TestFlushTableProcedureBase.html | 30 +-
.../TestFlushTableProcedureMasterRestarts.html | 36 +-
...shTableMaster.DoNotSupportFlushTableMaster.html | 6 +-
...eProcedureWithDoNotSupportFlushTableMaster.html | 41 +-
.../procedure/TestHBCKSCP.HBCKSCPScheduler.html | 8 +-
.../TestHBCKSCP.PrimaryNotMetaRegionSelector.html | 8 +-
.../procedure/TestHBCKSCP.RegionSelector.html | 10 +-
.../TestHBCKSCP.ReplicaNonMetaRegionSelector.html | 8 +-
.../TestHBCKSCP.ScheduleSCPsForUnknownServers.html | 6 +-
.../TestHBCKSCP.ScheduleServerCrashProcedure.html | 6 +-
.../hadoop/hbase/master/procedure/TestHBCKSCP.html | 66 +-
.../master/procedure/TestIgnoreUnknownFamily.html | 87 +-
.../master/procedure/TestLogRollProcedure.html | 64 +-
...dingPolicy.ThrowingTableDescriptorConsumer.html | 4 +-
.../TestManageTableErasureCodingPolicy.html | 87 +-
...terObserverPostCalls.MasterObserverForTest.html | 24 +-
.../procedure/TestMasterObserverPostCalls.html | 55 +-
.../procedure/TestMasterProcedureEvents.html | 84 +-
...sterProcedureScheduler.TestGlobalProcedure.html | 8 +-
...rProcedureScheduler.TestNamespaceProcedure.html | 16 +-
...MasterProcedureScheduler.TestPeerProcedure.html | 12 +-
...sterProcedureScheduler.TestRegionProcedure.html | 16 +-
...asterProcedureScheduler.TestTableProcedure.html | 20 +-
...edureScheduler.TestTableProcedureWithEvent.html | 8 +-
.../procedure/TestMasterProcedureScheduler.html | 237 +-
...eSchedulerConcurrency.TestPeerProcedureSet.html | 12 +-
...edureSchedulerConcurrency.TestTableProcSet.html | 18 +-
.../TestMasterProcedureSchedulerConcurrency.html | 41 +-
.../procedure/TestModifyNamespaceProcedure.html | 62 +-
.../master/procedure/TestModifyTableProcedure.html | 156 +-
...reWithRecovery.FailingModifyTableProcedure.html | 10 +-
.../TestModifyTableProcedureWithRecovery.html | 58 +-
.../hbase/master/procedure/TestProcedureAdmin.html | 103 +-
.../procedure/TestProcedurePriority.MyCP.html | 10 +-
.../master/procedure/TestProcedurePriority.html | 61 +-
.../master/procedure/TestProcedureTracing.html | 95 +-
...AndWake.MyPeerProcedure.MySubPeerProcedure.html | 14 +-
.../TestProcedureWaitAndWake.MyPeerProcedure.html | 22 +-
.../master/procedure/TestProcedureWaitAndWake.html | 29 +-
.../TestRaceBetweenSCPAndDTP.HMasterForTest.html | 6 +-
.../master/procedure/TestRaceBetweenSCPAndDTP.html | 53 +-
.../procedure/TestRecoverySnapshotUtils.html | 47 +-
.../procedure/TestReloadQuotasProcedure.html | 98 +-
.../TestReopenTableRegionsIntegration.html | 40 +-
.../TestReopenTableRegionsProcedureBackoff.html | 43 +-
...estReopenTableRegionsProcedureBatchBackoff.html | 56 +-
...nTableRegionsProcedureBatching.StuckRegion.html | 10 +-
.../TestReopenTableRegionsProcedureBatching.html | 63 +-
...estReopenTableRegionsProcedureInfiniteLoop.html | 37 +-
...ReopenTableRegionsProcedureSpecificRegions.html | 81 +-
.../procedure/TestRestoreSnapshotProcedure.html | 159 +-
.../hadoop/hbase/master/procedure/TestSCP.html | 26 +-
.../hadoop/hbase/master/procedure/TestSCPBase.html | 6 +-
.../hbase/master/procedure/TestSCPWithMeta.html | 33 +-
.../procedure/TestSCPWithMetaWithReplicas.html | 34 +-
...CPWithMetaWithReplicasWithoutZKCoordinated.html | 32 +-
.../TestSCPWithMetaWithoutZKCoordinated.html | 32 +-
.../master/procedure/TestSCPWithReplicas.html | 34 +-
.../procedure/TestSCPWithReplicasWithRSGroup.html | 39 +-
.../TestSCPWithReplicasWithoutZKCoordinated.html | 32 +-
.../hbase/master/procedure/TestSCPWithoutMeta.html | 33 +-
.../procedure/TestSCPWithoutMetaWithReplicas.html | 34 +-
...ithoutMetaWithReplicasWithoutZKCoordinated.html | 32 +-
.../TestSCPWithoutMetaWithoutZKCoordinated.html | 32 +-
.../procedure/TestSCPWithoutZKCoordinated.html | 32 +-
.../procedure/TestSafemodeBringsDownMaster.html | 47 +-
...dulerQueueDeadLock.TableExclusiveProcedure.html | 18 +-
...ueueDeadLock.TableExclusiveProcedureWithId.html | 6 +-
...lerQueueDeadLock.TableShardParentProcedure.html | 18 +-
...chedulerQueueDeadLock.TableSharedProcedure.html | 18 +-
...erQueueDeadLock.TableSharedProcedureWithId.html | 6 +-
.../TestSchedulerQueueDeadLock.TestEnv.html | 8 +-
.../procedure/TestSchedulerQueueDeadLock.html | 50 +-
.../TestServerRemoteProcedure.MockRSExecutor.html | 4 +-
...e.MockRSProcedureDispatcher.MockRemoteCall.html | 6 +-
...rRemoteProcedure.MockRSProcedureDispatcher.html | 10 +-
.../TestServerRemoteProcedure.NoopRSExecutor.html | 8 +-
...rRemoteProcedure.NoopServerRemoteProcedure.html | 26 +-
.../procedure/TestServerRemoteProcedure.html | 97 +-
...stSnapshotProcedure.DelaySnapshotProcedure.html | 8 +-
.../master/procedure/TestSnapshotProcedure.html | 70 +-
.../TestSnapshotProcedureBasicSnapshot.html | 37 +-
...edureConcurrently.TestEnableTableProcedure.html | 10 +-
.../TestSnapshotProcedureConcurrently.html | 39 +-
.../TestSnapshotProcedureEarlyExpiration.html | 36 +-
.../TestSnapshotProcedureForSnapshotType.html | 44 +-
.../TestSnapshotProcedureMasterRestarts.html | 33 +-
.../master/procedure/TestSnapshotProcedureRIT.html | 33 +-
.../procedure/TestSnapshotProcedureRSCrashes.html | 36 +-
.../TestSnapshotProcedureSnapshotCorrupted.html | 33 +-
.../TestSnapshotProcedureWithLockTimeout.html | 57 +-
.../procedure/TestSnapshotRegionProcedure.html | 70 +-
.../procedure/TestSnapshotVerifyProcedure.html | 58 +-
.../master/procedure/TestSplitWALProcedure.html | 56 +-
...tSuspendTRSPWhenHoldingRegionStateNodeLock.html | 43 +-
.../procedure/TestTableDDLProcedureBase.html | 36 +-
.../TestTableDescriptorModificationFromClient.html | 75 +-
...dureWaitingQueueCleanup.MetaTableProcedure.html | 20 +-
...edureWaitingQueueCleanup.NonTableProcedure.html | 20 +-
.../TestTableProcedureWaitingQueueCleanup.html | 40 +-
.../procedure/TestTruncateRegionProcedure.html | 92 +-
...ithRecovery.FailingTruncateRegionProcedure.html | 10 +-
.../TestTruncateRegionProcedureWithRecovery.html | 80 +-
...cedure.TruncateTableProcedureOnHDFSFailure.html | 10 +-
.../procedure/TestTruncateTableProcedure.html | 156 +-
...WithRecovery.FailingTruncateTableProcedure.html | 10 +-
.../TestTruncateTableProcedureWithRecovery.html | 58 +-
.../TestTruncateTableWithMasterFailover.html | 35 +-
.../procedure/TestWALProcedureStoreOnHDFS.html | 54 +-
.../TestMemoryBoundedLogMessageBuffer.html | 32 +-
.../monitoring/TestTaskMonitor.TestParam.html | 10 +-
.../hadoop/hbase/monitoring/TestTaskMonitor.html | 47 +-
.../org/apache/hadoop/hbase/package-use.html | 265 +-
...apshotTestingUtils.SnapshotMock.RegionData.html | 10 +-
...tTestingUtils.SnapshotMock.SnapshotBuilder.html | 46 +-
.../SnapshotTestingUtils.SnapshotMock.html | 36 +-
.../hbase/snapshot/SnapshotTestingUtils.html | 46 +-
.../TestConcurrentFlushSnapshotFromClient.html | 27 +-
.../snapshot/TestFlushSnapshotFromClient.html | 102 +-
.../snapshot/TestMobFlushSnapshotFromClient.html | 33 +-
.../TestMobRestoreFlushSnapshotFromClient.html | 33 +-
.../snapshot/TestMobRestoreSnapshotHelper.html | 26 +-
.../hbase/snapshot/TestRegionSnapshotTask.html | 59 +-
.../TestRestoreFlushSnapshotFromClient.html | 107 +-
.../hbase/snapshot/TestRestoreSnapshotHelper.html | 110 +-
...stSnapshotClientRetries.MasterSyncObserver.html | 14 +-
.../hbase/snapshot/TestSnapshotClientRetries.html | 61 +-
.../snapshot/TestSnapshotDescriptionUtils.html | 59 +-
.../hbase/snapshot/TestSnapshotManifest.html | 98 +-
.../hbase/snapshot/TestSnapshotStoreFileSize.html | 59 +-
.../snapshot/TestSnapshotWhenChoreCleaning.html | 92 +-
.../trace/class-use/OpenTelemetryClassRule.html | 18 +-
.../trace/class-use/OpenTelemetryTestRule.html | 16 -
.../org/apache/hadoop/hbase/trace/package-use.html | 23 +-
.../TestHFileArchiving.ArchivingFunction.html | 1296 ++++-----
.../hadoop/hbase/backup/TestHFileArchiving.html | 1296 ++++-----
...stZooKeeperTableArchiveClient.MockRegistry.html | 876 +++---
.../example/TestZooKeeperTableArchiveClient.html | 876 +++---
.../hadoop/hbase/codec/CodecPerformance.html | 4 +-
.../hadoop/hbase/codec/TestCellMessageCodec.html | 205 +-
.../TestConstraint.CheckWasRunConstraint.html | 473 ++-
.../hadoop/hbase/constraint/TestConstraint.html | 473 ++-
.../constraint/TestConstraints.AlsoWorks.html | 340 ++-
.../hadoop/hbase/constraint/TestConstraints.html | 340 ++-
.../hbase/coprocessor/SimpleRegionObserver.html | 8 +-
.../TestAppendTimeRange.MyObserver.html | 263 +-
.../hbase/coprocessor/TestAppendTimeRange.html | 263 +-
.../TestClientMetaCoprocessor.TestCoprocessor.html | 320 +--
.../coprocessor/TestClientMetaCoprocessor.html | 320 +--
...CoprocessorConfiguration.SystemCoprocessor.html | 331 ++-
...tCoprocessorConfiguration.TableCoprocessor.html | 331 ++-
.../coprocessor/TestCoprocessorConfiguration.html | 331 ++-
...TestCoprocessorHost.CoprocessorHostForTest.html | 433 ++-
...TestCoprocessorHost.SimpleRegionObserverV2.html | 433 ++-
...TestCoprocessorHost.SimpleRegionObserverV3.html | 433 ++-
.../TestCoprocessorHost.TestAbortable.html | 433 ++-
.../hbase/coprocessor/TestCoprocessorHost.html | 433 ++-
.../TestCoprocessorInterface.CoprocessorII.html | 869 +++---
.../TestCoprocessorInterface.CoprocessorImpl.html | 869 +++---
.../TestCoprocessorInterface.CustomScanner.html | 869 +++---
.../coprocessor/TestCoprocessorInterface.html | 869 +++---
...estCoprocessorMetrics.CustomMasterObserver.html | 1026 ++++---
...estCoprocessorMetrics.CustomRegionEndpoint.html | 1026 ++++---
...estCoprocessorMetrics.CustomRegionObserver.html | 1026 ++++---
...stCoprocessorMetrics.CustomRegionObserver2.html | 1026 ++++---
...rocessorMetrics.CustomRegionServerObserver.html | 1026 ++++---
.../TestCoprocessorMetrics.CustomWALObserver.html | 1026 ++++---
.../hbase/coprocessor/TestCoprocessorMetrics.html | 1026 ++++---
...ssorSharedConnection.TestMasterCoprocessor.html | 180 +-
...ssorSharedConnection.TestRegionCoprocessor.html | 180 +-
...aredConnection.TestRegionServerCoprocessor.html | 180 +-
.../TestCoprocessorSharedConnection.html | 180 +-
.../TestCoprocessorStop.FooCoprocessor.html | 193 +-
.../hbase/coprocessor/TestCoprocessorStop.html | 193 +-
...oreMasterCoprocessor.CoreMasterCoprocessor.html | 141 +-
...MasterCoprocessor.NotCoreMasterCoprocessor.html | 141 +-
.../coprocessor/TestCoreMasterCoprocessor.html | 141 +-
...oreRegionCoprocessor.CoreRegionCoprocessor.html | 192 +-
...RegionCoprocessor.NotCoreRegionCoprocessor.html | 192 +-
.../coprocessor/TestCoreRegionCoprocessor.html | 192 +-
...verCoprocessor.CoreRegionServerCoprocessor.html | 154 +-
...Coprocessor.NotCoreRegionServerCoprocessor.html | 154 +-
.../TestCoreRegionServerCoprocessor.html | 154 +-
...ncrementAndAppendWithNullResult.MyObserver.html | 245 +-
.../TestIncrementAndAppendWithNullResult.html | 245 +-
.../TestIncrementTimeRange.MyObserver.html | 337 ++-
.../hbase/coprocessor/TestIncrementTimeRange.html | 337 ++-
...ssorExceptionWithAbort.BuggyMasterObserver.html | 403 ++-
...cessorExceptionWithAbort.CreateTableThread.html | 403 ++-
...oprocessorExceptionWithAbort.MasterTracker.html | 403 ++-
.../TestMasterCoprocessorExceptionWithAbort.html | 403 ++-
...sorExceptionWithRemove.BuggyMasterObserver.html | 393 ++-
...processorExceptionWithRemove.MasterTracker.html | 393 ++-
.../TestMasterCoprocessorExceptionWithRemove.html | 393 ++-
.../TestMasterObserver.CPMasterObserver.html | 3025 ++++++++++----------
.../hbase/coprocessor/TestMasterObserver.html | 3025 ++++++++++----------
...Schema.OnlyOneVersionAllowedMasterObserver.html | 190 +-
.../TestMasterObserverToModifyTableSchema.html | 190 +-
.../TestMetaTableMetrics.GetThread.html | 603 ++--
.../TestMetaTableMetrics.PutThread.html | 603 ++--
.../hbase/coprocessor/TestMetaTableMetrics.html | 603 ++--
...WithSlowCoprocessor.FlushingRegionObserver.html | 172 +-
...estNegativeMemStoreSizeWithSlowCoprocessor.html | 172 +-
...eInCoprocessor.CustomThreadPoolCoprocessor.html | 335 ++-
...eInCoprocessor.SendToOtherTableCoprocessor.html | 335 ++-
.../coprocessor/TestOpenTableInCoprocessor.html | 335 ++-
...pendBeforeWAL.ChangeCellWithACLTagObserver.html | 677 +++--
...ChangeCellWithDifferntColumnFamilyObserver.html | 677 +++--
...ChangeCellWithNotExistColumnFamilyObserver.html | 677 +++--
.../TestPostIncrementAndAppendBeforeWAL.html | 677 +++--
.../coprocessor/TestReadOnlyConfiguration.html | 40 +-
...stRegionCoprocessorHost.TempRegionObserver.html | 381 ++-
.../coprocessor/TestRegionCoprocessorHost.html | 381 ++-
...tRegionCoprocessorQuotaUsage.MyCoprocessor.html | 197 +-
...gionCoprocessorQuotaUsage.MyRegionObserver.html | 197 +-
.../TestRegionCoprocessorQuotaUsage.html | 197 +-
.../TestRegionObserverBypass.TestCoprocessor.html | 499 ++--
.../TestRegionObserverBypass.TestCoprocessor2.html | 499 ++--
.../TestRegionObserverBypass.TestCoprocessor3.html | 499 ++--
.../coprocessor/TestRegionObserverBypass.html | 499 ++--
...FromCoprocessors.TestDeleteCellCoprocessor.html | 569 ++--
...omCoprocessors.TestDeleteFamilyCoprocessor.html | 569 ++--
...sFromCoprocessors.TestDeleteRowCoprocessor.html | 569 ++--
...mCoprocessors.TestMultiMutationCoprocessor.html | 569 ++--
...FromCoprocessors.TestPutWithTTLCoprocessor.html | 569 ++--
...gMutationsFromCoprocessors.TestWALObserver.html | 569 ++--
...ObserverForAddingMutationsFromCoprocessors.html | 569 ++--
...tRegionObserverInterface.EvenOnlyCompactor.html | 1814 ++++++------
...erInterface.PreWALAppendWALActionsListener.html | 1814 ++++++------
.../coprocessor/TestRegionObserverInterface.html | 1814 ++++++------
...erPreFlushAndPreCompact.TestRegionObserver.html | 168 +-
.../TestRegionObserverPreFlushAndPreCompact.html | 168 +-
...enHook.CompactionCompletionNotifyingRegion.html | 677 +++--
...ObserverScannerOpenHook.EmptyRegionObsever.html | 677 +++--
...RegionObserverScannerOpenHook.NoDataFilter.html | 677 +++--
...serverScannerOpenHook.NoDataFromCompaction.html | 677 +++--
...ionObserverScannerOpenHook.NoDataFromFlush.html | 677 +++--
...gionObserverScannerOpenHook.NoDataFromScan.html | 677 +++--
.../TestRegionObserverScannerOpenHook.html | 677 +++--
.../TestRegionObserverStacking.ObserverA.html | 259 +-
.../TestRegionObserverStacking.ObserverB.html | 259 +-
.../TestRegionObserverStacking.ObserverC.html | 259 +-
.../coprocessor/TestRegionObserverStacking.html | 259 +-
...ssorExceptionWithAbort.BuggyRegionObserver.html | 259 +-
...tionWithAbort.FailedInitializationObserver.html | 259 +-
...tRegionServerCoprocessorExceptionWithAbort.html | 259 +-
...sorExceptionWithRemove.BuggyRegionObserver.html | 211 +-
...RegionServerCoprocessorExceptionWithRemove.html | 211 +-
...estRpcCoprocessor.AuthorizationRpcObserver.html | 149 +-
.../hbase/coprocessor/TestRpcCoprocessor.html | 149 +-
.../hadoop/hbase/coprocessor/TestWALObserver.html | 858 +++---
.../TestForeignExceptionDispatcher.html | 217 +-
.../TestForeignExceptionSerialization.html | 150 +-
.../TestTimeoutExceptionInjector.html | 173 +-
.../TestExecutorService.TestEventHandler.html | 416 ++-
.../hadoop/hbase/executor/TestExecutorService.html | 416 ++-
.../apache/hadoop/hbase/fs/TestBlockReorder.html | 409 ++-
.../hbase/fs/TestBlockReorderBlockLocation.html | 250 +-
.../hbase/fs/TestBlockReorderMultiBlocks.html | 487 ++--
.../hadoop/hbase/http/TestDebugDumpRedaction.html | 373 ++-
.../hadoop/hbase/http/TestInfoServersACL.html | 835 +++---
.../MasterFailoverWithProceduresTestBase.html | 8 +-
...reTestingUtility.InjectAbortOnLoadListener.html | 24 +-
.../MasterProcedureTestingUtility.StepHook.html | 24 +-
.../procedure/MasterProcedureTestingUtility.html | 24 +-
.../procedure/TestCloneSnapshotProcedure.html | 367 +--
.../TestCloneSnapshotProcedureFileBasedSFT.html | 32 +-
.../TestCreateDeleteTableProcedureWithRetry.html | 130 +-
.../procedure/TestCreateNamespaceProcedure.html | 413 ++-
...stCreateTableNoRegionServer.HMasterForTest.html | 281 +-
.../procedure/TestCreateTableNoRegionServer.html | 281 +-
...rocedure.CreateTableProcedureOnHDFSFailure.html | 543 ++--
.../master/procedure/TestCreateTableProcedure.html | 543 ++--
.../TestCreateTableProcedureMuitipleRegions.html | 81 +-
.../TestCreateTableWithMasterFailover.html | 101 +-
.../TestDeleteColumnFamilyProcedureFromClient.html | 439 ++-
.../procedure/TestDeleteNamespaceProcedure.html | 406 ++-
.../master/procedure/TestDeleteTableProcedure.html | 308 +-
...reWithRecovery.FailingDeleteTableProcedure.html | 267 +-
.../TestDeleteTableProcedureWithRecovery.html | 267 +-
.../TestDeleteTableWithMasterFailover.html | 105 +-
.../procedure/TestDisableTableProcedure.html | 242 +-
.../TestDisableTableWithMasterFailover.html | 101 +-
.../master/procedure/TestEnableTableProcedure.html | 223 +-
.../TestEnableTableWithMasterFailover.html | 101 +-
.../TestFastFailOnProcedureNotRegistered.html | 63 +-
.../master/procedure/TestFlushTableProcedure.html | 92 +-
.../procedure/TestFlushTableProcedureBase.html | 154 +-
.../TestFlushTableProcedureMasterRestarts.html | 105 +-
...shTableMaster.DoNotSupportFlushTableMaster.html | 111 +-
...eProcedureWithDoNotSupportFlushTableMaster.html | 111 +-
.../procedure/TestHBCKSCP.HBCKSCPScheduler.html | 516 ++--
.../TestHBCKSCP.PrimaryNotMetaRegionSelector.html | 516 ++--
.../procedure/TestHBCKSCP.RegionSelector.html | 516 ++--
.../TestHBCKSCP.ReplicaNonMetaRegionSelector.html | 516 ++--
.../TestHBCKSCP.ScheduleSCPsForUnknownServers.html | 516 ++--
.../TestHBCKSCP.ScheduleServerCrashProcedure.html | 516 ++--
.../hadoop/hbase/master/procedure/TestHBCKSCP.html | 516 ++--
.../master/procedure/TestIgnoreUnknownFamily.html | 196 +-
.../master/procedure/TestLogRollProcedure.html | 152 +-
...dingPolicy.ThrowingTableDescriptorConsumer.html | 517 ++--
.../TestManageTableErasureCodingPolicy.html | 517 ++--
...terObserverPostCalls.MasterObserverForTest.html | 661 +++--
.../procedure/TestMasterObserverPostCalls.html | 661 +++--
.../procedure/TestMasterProcedureEvents.html | 274 +-
...sterProcedureScheduler.TestGlobalProcedure.html | 2267 ++++++++-------
...rProcedureScheduler.TestNamespaceProcedure.html | 2267 ++++++++-------
...MasterProcedureScheduler.TestPeerProcedure.html | 2267 ++++++++-------
...sterProcedureScheduler.TestRegionProcedure.html | 2267 ++++++++-------
...asterProcedureScheduler.TestTableProcedure.html | 2267 ++++++++-------
...edureScheduler.TestTableProcedureWithEvent.html | 2267 ++++++++-------
.../procedure/TestMasterProcedureScheduler.html | 2267 ++++++++-------
...eSchedulerConcurrency.TestPeerProcedureSet.html | 663 +++--
...edureSchedulerConcurrency.TestTableProcSet.html | 663 +++--
.../TestMasterProcedureSchedulerConcurrency.html | 663 +++--
.../procedure/TestModifyNamespaceProcedure.html | 461 ++-
.../master/procedure/TestModifyTableProcedure.html | 1502 +++++-----
...reWithRecovery.FailingModifyTableProcedure.html | 297 +-
.../TestModifyTableProcedureWithRecovery.html | 297 +-
.../hbase/master/procedure/TestProcedureAdmin.html | 426 ++-
.../procedure/TestProcedurePriority.MyCP.html | 319 +--
.../master/procedure/TestProcedurePriority.html | 319 +--
.../master/procedure/TestProcedureTracing.html | 282 +-
...AndWake.MyPeerProcedure.MySubPeerProcedure.html | 241 +-
.../TestProcedureWaitAndWake.MyPeerProcedure.html | 241 +-
.../master/procedure/TestProcedureWaitAndWake.html | 241 +-
.../TestRaceBetweenSCPAndDTP.HMasterForTest.html | 247 +-
.../master/procedure/TestRaceBetweenSCPAndDTP.html | 247 +-
.../procedure/TestRecoverySnapshotUtils.html | 141 +-
.../procedure/TestReloadQuotasProcedure.html | 301 +-
.../TestReopenTableRegionsIntegration.html | 591 ++--
.../TestReopenTableRegionsProcedureBackoff.html | 205 +-
...estReopenTableRegionsProcedureBatchBackoff.html | 157 +-
...nTableRegionsProcedureBatching.StuckRegion.html | 431 ++-
.../TestReopenTableRegionsProcedureBatching.html | 431 ++-
...estReopenTableRegionsProcedureInfiniteLoop.html | 131 +-
...ReopenTableRegionsProcedureSpecificRegions.html | 769 +++--
.../procedure/TestRestoreSnapshotProcedure.html | 453 +--
.../hadoop/hbase/master/procedure/TestSCP.html | 136 +-
.../hadoop/hbase/master/procedure/TestSCPBase.html | 14 +-
.../hbase/master/procedure/TestSCPWithMeta.html | 33 +-
.../procedure/TestSCPWithMetaWithReplicas.html | 45 +-
...CPWithMetaWithReplicasWithoutZKCoordinated.html | 35 +-
.../TestSCPWithMetaWithoutZKCoordinated.html | 35 +-
.../master/procedure/TestSCPWithReplicas.html | 45 +-
.../procedure/TestSCPWithReplicasWithRSGroup.html | 74 +-
.../TestSCPWithReplicasWithoutZKCoordinated.html | 35 +-
.../hbase/master/procedure/TestSCPWithoutMeta.html | 33 +-
.../procedure/TestSCPWithoutMetaWithReplicas.html | 45 +-
...ithoutMetaWithReplicasWithoutZKCoordinated.html | 39 +-
.../TestSCPWithoutMetaWithoutZKCoordinated.html | 31 +-
.../procedure/TestSCPWithoutZKCoordinated.html | 35 +-
.../procedure/TestSafemodeBringsDownMaster.html | 194 +-
...dulerQueueDeadLock.TableExclusiveProcedure.html | 498 ++--
...ueueDeadLock.TableExclusiveProcedureWithId.html | 498 ++--
...lerQueueDeadLock.TableShardParentProcedure.html | 498 ++--
...chedulerQueueDeadLock.TableSharedProcedure.html | 498 ++--
...erQueueDeadLock.TableSharedProcedureWithId.html | 498 ++--
.../TestSchedulerQueueDeadLock.TestEnv.html | 498 ++--
.../procedure/TestSchedulerQueueDeadLock.html | 498 ++--
.../TestServerRemoteProcedure.MockRSExecutor.html | 515 ++--
...e.MockRSProcedureDispatcher.MockRemoteCall.html | 515 ++--
...rRemoteProcedure.MockRSProcedureDispatcher.html | 515 ++--
.../TestServerRemoteProcedure.NoopRSExecutor.html | 515 ++--
...rRemoteProcedure.NoopServerRemoteProcedure.html | 515 ++--
.../procedure/TestServerRemoteProcedure.html | 515 ++--
...stSnapshotProcedure.DelaySnapshotProcedure.html | 255 +-
.../master/procedure/TestSnapshotProcedure.html | 255 +-
.../TestSnapshotProcedureBasicSnapshot.html | 116 +-
...edureConcurrently.TestEnableTableProcedure.html | 335 ++-
.../TestSnapshotProcedureConcurrently.html | 335 ++-
.../TestSnapshotProcedureEarlyExpiration.html | 160 +-
.../TestSnapshotProcedureForSnapshotType.html | 136 +-
.../TestSnapshotProcedureMasterRestarts.html | 123 +-
.../master/procedure/TestSnapshotProcedureRIT.html | 71 +-
.../procedure/TestSnapshotProcedureRSCrashes.html | 115 +-
.../TestSnapshotProcedureSnapshotCorrupted.html | 97 +-
.../TestSnapshotProcedureWithLockTimeout.html | 269 +-
.../procedure/TestSnapshotRegionProcedure.html | 245 +-
.../procedure/TestSnapshotVerifyProcedure.html | 305 +-
.../master/procedure/TestSplitWALProcedure.html | 225 +-
...tSuspendTRSPWhenHoldingRegionStateNodeLock.html | 207 +-
.../procedure/TestTableDDLProcedureBase.html | 108 +-
.../TestTableDescriptorModificationFromClient.html | 514 ++--
...dureWaitingQueueCleanup.MetaTableProcedure.html | 257 +-
...edureWaitingQueueCleanup.NonTableProcedure.html | 257 +-
.../TestTableProcedureWaitingQueueCleanup.html | 257 +-
.../procedure/TestTruncateRegionProcedure.html | 328 ++-
...ithRecovery.FailingTruncateRegionProcedure.html | 384 ++-
.../TestTruncateRegionProcedureWithRecovery.html | 384 ++-
...cedure.TruncateTableProcedureOnHDFSFailure.html | 676 ++---
.../procedure/TestTruncateTableProcedure.html | 676 ++---
...WithRecovery.FailingTruncateTableProcedure.html | 279 +-
.../TestTruncateTableProcedureWithRecovery.html | 279 +-
.../TestTruncateTableWithMasterFailover.html | 155 +-
.../procedure/TestWALProcedureStoreOnHDFS.html | 342 ++-
.../TestMemoryBoundedLogMessageBuffer.html | 99 +-
.../monitoring/TestTaskMonitor.TestParam.html | 559 ++--
.../hadoop/hbase/monitoring/TestTaskMonitor.html | 559 ++--
.../MobSnapshotTestingUtils.SnapshotMock.html | 48 +-
.../hbase/snapshot/MobSnapshotTestingUtils.html | 48 +-
...apshotTestingUtils.SnapshotMock.RegionData.html | 1419 ++++-----
...tTestingUtils.SnapshotMock.SnapshotBuilder.html | 1419 ++++-----
.../SnapshotTestingUtils.SnapshotMock.html | 1419 ++++-----
.../hbase/snapshot/SnapshotTestingUtils.html | 1419 ++++-----
.../TestConcurrentFlushSnapshotFromClient.html | 55 +-
.../snapshot/TestFlushSnapshotFromClient.html | 855 +++---
.../snapshot/TestMobFlushSnapshotFromClient.html | 95 +-
.../TestMobRestoreFlushSnapshotFromClient.html | 91 +-
.../snapshot/TestMobRestoreSnapshotHelper.html | 78 +-
.../hbase/snapshot/TestRegionSnapshotTask.html | 325 ++-
.../TestRestoreFlushSnapshotFromClient.html | 408 +--
.../hbase/snapshot/TestRestoreSnapshotHelper.html | 751 +++--
...stSnapshotClientRetries.MasterSyncObserver.html | 213 +-
.../hbase/snapshot/TestSnapshotClientRetries.html | 213 +-
.../snapshot/TestSnapshotDescriptionUtils.html | 412 ++-
.../hbase/snapshot/TestSnapshotManifest.html | 359 ++-
.../hbase/snapshot/TestSnapshotStoreFileSize.html | 220 +-
.../snapshot/TestSnapshotWhenChoreCleaning.html | 357 ++-
739 files changed, 101869 insertions(+), 105668 deletions(-)
diff --git a/books/apache-hbase-reference-guide-dark-mode.pdf b/books/apache-hbase-reference-guide-dark-mode.pdf
index 48c38748ee4..2030c5c3782 100644
Binary files a/books/apache-hbase-reference-guide-dark-mode.pdf and b/books/apache-hbase-reference-guide-dark-mode.pdf differ
diff --git a/books/apache-hbase-reference-guide.pdf b/books/apache-hbase-reference-guide.pdf
index b5f5e46eb2b..110459e1bca 100644
Binary files a/books/apache-hbase-reference-guide.pdf and b/books/apache-hbase-reference-guide.pdf differ
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 63f19ecf529..0cf697c848a 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-checkstyle-plugin:3.6.0:checkstyle-aggregate at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-checkstyle-plugin:3.6.0:checkstyle-aggregate at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
@@ -6846,7 +6846,7 @@
<td>design</td>
<td>FinalClass</td>
<td>Class TestAbortable should be declared as final.</td>
-<td>51</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2FTestCoprocessorInterface.java"></a>
+<td>46</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2FTestCoprocessorInterface.java"></a>
<h3>org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -6860,7 +6860,7 @@
<td>coding</td>
<td>InnerAssignment</td>
<td>Inner assignments should be avoided.</td>
-<td>352</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2FTestRegionObserverInterface.java"></a>
+<td>351</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2FTestRegionObserverInterface.java"></a>
<h3>org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -6874,37 +6874,37 @@
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>499</td></tr>
+<td>498</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>525</td></tr>
+<td>524</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>562</td></tr>
+<td>561</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>917</td></tr>
+<td>915</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>918</td></tr>
+<td>916</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>design</td>
<td>FinalClass</td>
<td>Class PreWALAppendWALActionsListener should be declared as final.</td>
-<td>964</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2FTestRegionObserverPreFlushAndPreCompact.java"></a>
+<td>962</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2FTestRegionObserverPreFlushAndPreCompact.java"></a>
<h3>org/apache/hadoop/hbase/coprocessor/TestRegionObserverPreFlushAndPreCompact.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -6918,7 +6918,7 @@
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 134).</td>
-<td>53</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2FTestRegionObserverScannerOpenHook.java"></a>
+<td>50</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2FTestRegionObserverScannerOpenHook.java"></a>
<h3>org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -6932,7 +6932,7 @@
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>302</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2Fpackage-info.java"></a>
+<td>297</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fcoprocessor.2Fpackage-info.java"></a>
<h3>org/apache/hadoop/hbase/coprocessor/package-info.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -12016,25 +12016,25 @@
<td>design</td>
<td>FinalClass</td>
<td>Class ScheduleServerCrashProcedure should be declared as final.</td>
-<td>220</td></tr>
+<td>216</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>design</td>
<td>FinalClass</td>
<td>Class ScheduleSCPsForUnknownServers should be declared as final.</td>
-<td>234</td></tr>
+<td>230</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>design</td>
<td>FinalClass</td>
<td>Class PrimaryNotMetaRegionSelector should be declared as final.</td>
-<td>262</td></tr>
+<td>258</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>design</td>
<td>FinalClass</td>
<td>Class ReplicaNonMetaRegionSelector should be declared as final.</td>
-<td>278</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fmaster.2Fprocedure.2FTestMasterProcedureEvents.java"></a>
+<td>274</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fmaster.2Fprocedure.2FTestMasterProcedureEvents.java"></a>
<h3>org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -12048,7 +12048,7 @@
<td>blocks</td>
<td>NeedBraces</td>
<td>'while' construct must use '{}'s.</td>
-<td>138</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fmaster.2Fregion.2FMasterRegionFactory.java"></a>
+<td>136</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fmaster.2Fregion.2FMasterRegionFactory.java"></a>
<h3>org/apache/hadoop/hbase/master/region/MasterRegionFactory.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -17430,13 +17430,13 @@
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>556</td></tr>
+<td>557</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>589</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Ftest.2FIntegrationTestBigLinkedList.java"></a>
+<td>590</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Ftest.2FIntegrationTestBigLinkedList.java"></a>
<h3>org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java</h3>
<table class="table table-striped">
<tr class="a">
diff --git a/dependency-convergence.html b/dependency-convergence.html
index f2d4d8bb22a..750ebac2477 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/dependency-info.html b/dependency-info.html
index 505cd62b5a6..09fbf2b8b6c 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/dependency-management.html b/dependency-management.html
index fdac0dd0aa4..0db5211180f 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/dependency-convergence.html b/hbase-website/dependency-convergence.html
index a8faa76a0ed..2266e2d8a0a 100644
--- a/hbase-website/dependency-convergence.html
+++ b/hbase-website/dependency-convergence.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/dependency-info.html b/hbase-website/dependency-info.html
index 926b4b18344..32817466dc4 100644
--- a/hbase-website/dependency-info.html
+++ b/hbase-website/dependency-info.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/dependency-management.html b/hbase-website/dependency-management.html
index 5ea454d4530..83f131dc693 100644
--- a/hbase-website/dependency-management.html
+++ b/hbase-website/dependency-management.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/index.html b/hbase-website/index.html
index 201fb7e466d..5d65b89976e 100644
--- a/hbase-website/index.html
+++ b/hbase-website/index.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:index at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:index at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/issue-management.html b/hbase-website/issue-management.html
index 84a124bcc8f..5f22938aa5d 100644
--- a/hbase-website/issue-management.html
+++ b/hbase-website/issue-management.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/licenses.html b/hbase-website/licenses.html
index 3df05e66ff7..dd9167ea073 100644
--- a/hbase-website/licenses.html
+++ b/hbase-website/licenses.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/mailing-lists.html b/hbase-website/mailing-lists.html
index a92c9a41059..74b3edc09f7 100644
--- a/hbase-website/mailing-lists.html
+++ b/hbase-website/mailing-lists.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/plugin-management.html b/hbase-website/plugin-management.html
index 063168d101f..97b7a7a9451 100644
--- a/hbase-website/plugin-management.html
+++ b/hbase-website/plugin-management.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/plugins.html b/hbase-website/plugins.html
index 600ba6853ea..6b6aa46a865 100644
--- a/hbase-website/plugins.html
+++ b/hbase-website/plugins.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/project-info.html b/hbase-website/project-info.html
index b05e97c0bb5..0085d416678 100644
--- a/hbase-website/project-info.html
+++ b/hbase-website/project-info.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/scm.html b/hbase-website/scm.html
index 2f363a66e60..2727d3d0f39 100644
--- a/hbase-website/scm.html
+++ b/hbase-website/scm.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/summary.html b/hbase-website/summary.html
index 5890892853d..31442fa172f 100644
--- a/hbase-website/summary.html
+++ b/hbase-website/summary.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/team.html b/hbase-website/team.html
index 7b326841d21..c4781c40e31 100644
--- a/hbase-website/team.html
+++ b/hbase-website/team.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/issue-management.html b/issue-management.html
index 1df011e5c27..26e157b126b 100644
--- a/issue-management.html
+++ b/issue-management.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/licenses.html b/licenses.html
index df577549277..d6a8ad5887b 100644
--- a/licenses.html
+++ b/licenses.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/mailing-lists.html b/mailing-lists.html
index 0caba0a12c0..b4dd8cbb501 100644
--- a/mailing-lists.html
+++ b/mailing-lists.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/plugin-management.html b/plugin-management.html
index 649fa315236..459bbb5adcd 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/plugins.html b/plugins.html
index 149cb075df5..08455164f84 100644
--- a/plugins.html
+++ b/plugins.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/project-info.html b/project-info.html
index 523d2d163e5..0c2e12fe66e 100644
--- a/project-info.html
+++ b/project-info.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/project-reports.html b/project-reports.html
index 04ade8367f5..74e174dc094 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-reports at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-reports at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/scm.html b/scm.html
index 94b3e876ff6..0e05fa428ea 100644
--- a/scm.html
+++ b/scm.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/summary.html b/summary.html
index 0cb4bea1b1b..8f4b4876ac2 100644
--- a/summary.html
+++ b/summary.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/team.html b/team.html
index 7535c4372bd..ef7f54b61b1 100644
--- a/team.html
+++ b/team.html
@@ -2,7 +2,7 @@
<!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-04-10
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-04-12
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/testapidocs/index-all.html b/testapidocs/index-all.html
index 93760ef019d..11dfd5837c2 100644
--- a/testapidocs/index-all.html
+++ b/testapidocs/index-all.html
@@ -1275,10 +1275,6 @@ loadScripts(document, 'script');</script>
</dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.html#before()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">before()</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoreMasterCoprocessor</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.html#before()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">before()</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoreRegionCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.html#before()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">before()</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoreRegionServerCoprocessor [...]
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestIncrementTimeRange.html#before()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">before()</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestIncrementTimeRange.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestIncrementTimeRange</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestHFileBlockHeaderCorruption.HFileTestRule.html#before()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.hfile">before()</a> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestHFileBlockHeaderCorruption.HFileTestRule.html" title="class or interface in org.apache.hadoop.hbase.io.hfile" class="external-link">TestHFileBlockHeader [...]
@@ -1357,6 +1353,10 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/TestRegionRebalancing.html#before()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">before()</a> - Method in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/TestRegionRebalancing.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TestRegionRebalancing</a></dt>
<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.html#before(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">before(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestC [...]
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.html#before(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">before(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external [...]
+<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/master/AbstractTestDLS.html#before(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.master">before(TestInfo)</a> - Method in class org.apache.hadoop.hbase.master.<a href="../apidocs/org/apache/hadoop/hbase/master/AbstractTestDLS.html" title="class or interface in org.apache.hadoop.hbase.master" class="external-link">AbstractTestDLS</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/TestRESTApiClusterManager.html#before(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">before(TestInfo)</a> - Method in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/TestRESTApiClusterManager.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TestRESTApiClusterManager</a></dt>
@@ -2119,8 +2119,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.html#chunkCreator" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">chunkCreator</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class="external-link">TestDefaultMemStore</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/locking/TestEntityLocks.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client.locking">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.client.locking.<a href="../apidocs/org/apache/hadoop/hbase/client/locking/TestEntityLocks.html" title="class or interface in org.apache.hadoop.hbase.client.locking" class="external-link">TestEntityLocks</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/replication/TestBadReplicationPeer.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client.replication">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.client.replication.<a href="../apidocs/org/apache/hadoop/hbase/client/replication/TestBadReplicationPeer.html" title="class or interface in org.apache.hadoop.hbase.client.replication" class="external-link">T [...]
@@ -2491,8 +2489,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/codec/TestCellCodecWithTags.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.codec.<a href="../apidocs/org/apache/hadoop/hbase/codec/TestCellCodecWithTags.html" title="class or interface in org.apache.hadoop.hbase.codec" class="external-link">TestCellCodecWithTags</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/codec/TestCellMessageCodec.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.codec.<a href="../apidocs/org/apache/hadoop/hbase/codec/TestCellMessageCodec.html" title="class or interface in org.apache.hadoop.hbase.codec" class="external-link">TestCellMessageCodec</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/codec/TestKeyValueCodec.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.codec.<a href="../apidocs/org/apache/hadoop/hbase/codec/TestKeyValueCodec.html" title="class or interface in org.apache.hadoop.hbase.codec" class="external-link">TestKeyValueCodec</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/codec/TestKeyValueCodecWithTags.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.codec.<a href="../apidocs/org/apache/hadoop/hbase/codec/TestKeyValueCodecWithTags.html" title="class or interface in org.apache.hadoop.hbase.codec" class="external-link">TestKeyValueCodecWithTags</a></dt>
@@ -2501,84 +2497,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/conf/TestConfigurationManager.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.conf">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.conf.<a href="../apidocs/org/apache/hadoop/hbase/conf/TestConfigurationManager.html" title="class or interface in org.apache.hadoop.hbase.conf" class="external-link">TestConfigurationManager</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestAppendTimeRange</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestClientMetaCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorConfigura [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorHost</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorInterface</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorMetrics</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorSharedConnection.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorSharedConnection.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorSha [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorStop.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorStop.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorStop</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoreMasterCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoreRegionCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoreRegionServ [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestIncrementAndAppendWithNullResult.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestIncrementAndAppendWithNullResult.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestIncr [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestIncrementTimeRange.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestIncrementTimeRange.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestIncrementTimeRange</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithAbort.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithAbort.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">Te [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithRemove.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithRemove.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link"> [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestMasterObserver</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserverToModifyTableSchema.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserverToModifyTableSchema.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestMa [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMetaTableMetrics.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMetaTableMetrics.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestMetaTableMetrics</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestNegativeMemStoreSizeWithSlowCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestNegativeMemStoreSizeWithSlowCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external- [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestOpenTableInCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestOpenTableInCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestOpenTableInCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestPostIn [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestReadOnlyConfiguration.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestReadOnlyConfiguration.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestReadOnlyConfiguration</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionCoprocessorHost</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorQuotaUsage.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorQuotaUsage.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionCoproces [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionObserverBypass</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.html" title="class or interface in org.apache.hadoop.hbase.coprocessor [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionObserverInterfac [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverPreFlushAndPreCompact.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverPreFlushAndPreCompact.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">Te [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionObse [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverStacking.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverStacking.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionObserverStacking</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithAbort.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithAbort.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="exter [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithRemove.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithRemove.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="ext [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRpcCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRpcCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRpcCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestWALObserver.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestWALObserver.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestWALObserver</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/errorhandling/TestForeignExceptionDispatcher.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.errorhandling">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.errorhandling.<a href="../apidocs/org/apache/hadoop/hbase/errorhandling/TestForeignExceptionDispatcher.html" title="class or interface in org.apache.hadoop.hbase.errorhandling" class="external-link">TestForeig [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/errorhandling/TestForeignExceptionSerialization.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.errorhandling">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.errorhandling.<a href="../apidocs/org/apache/hadoop/hbase/errorhandling/TestForeignExceptionSerialization.html" title="class or interface in org.apache.hadoop.hbase.errorhandling" class="external-link">Test [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/errorhandling/TestTimeoutExceptionInjector.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.errorhandling">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.errorhandling.<a href="../apidocs/org/apache/hadoop/hbase/errorhandling/TestTimeoutExceptionInjector.html" title="class or interface in org.apache.hadoop.hbase.errorhandling" class="external-link">TestTimeoutExc [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/http/TestDebugDumpRedaction.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.http">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.http.<a href="../apidocs/org/apache/hadoop/hbase/http/TestDebugDumpRedaction.html" title="class or interface in org.apache.hadoop.hbase.http" class="external-link">TestDebugDumpRedaction</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/http/TestInfoServersACL.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.http">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.http.<a href="../apidocs/org/apache/hadoop/hbase/http/TestInfoServersACL.html" title="class or interface in org.apache.hadoop.hbase.http" class="external-link">TestInfoServersACL</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/compress/TestCodecPool.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.compress">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.io.compress.<a href="../apidocs/org/apache/hadoop/hbase/io/compress/TestCodecPool.html" title="class or interface in org.apache.hadoop.hbase.io.compress" class="external-link">TestCodecPool</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/crypto/aes/TestAES.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.crypto.aes">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.io.crypto.aes.<a href="../apidocs/org/apache/hadoop/hbase/io/crypto/aes/TestAES.html" title="class or interface in org.apache.hadoop.hbase.io.crypto.aes" class="external-link">TestAES</a></dt>
@@ -3529,32 +3447,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.security">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.security.<a href="../apidocs/org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.html" title="class or interface in org.apache.hadoop.hbase.security" class="external-link">TestUsersOperationsWithSe [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestConcurrentFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestConcurrentFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestConcurrentFlushSn [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestFlushSnapshotFromClient</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestMobFlushSnapshotFromClient</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobRestoreFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobRestoreFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestMobRestoreFlushSn [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobRestoreSnapshotHelper.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobRestoreSnapshotHelper.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestMobRestoreSnapshotHelper</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestRegionSnapshotTask</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestRestoreFlushSnapshotFro [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestRestoreSnapshotHelper</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestSnapshotClientRetries</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotDescriptionUtils.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotDescriptionUtils.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestSnapshotDescriptionUtils</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotManifest.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotManifest.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestSnapshotManifest</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotStoreFileSize.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotStoreFileSize.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestSnapshotStoreFileSize</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotWhenChoreCleaning.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotWhenChoreCleaning.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestSnapshotWhenChoreCleaning</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/TestByteBufferKeyValue.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/TestByteBufferKeyValue.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TestByteBufferKeyValue</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/TestCellBuilder.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">CLASS_RULE</a> - Static variable in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/TestCellBuilder.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TestCellBuilder</a></dt>
@@ -5618,8 +5510,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestCompactionArchiveConcurrentClose.WaitingStoreFileTracker.html#ctx" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">ctx</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestCompactionArchiveConcurrentClose.WaitingStoreFileTracker.html" title="class or interface in org.apache.hadoop.hbase.regionserver [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestWALObserver.html#currentTest" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">currentTest</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestWALObserver.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestWALObserver</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.html#currentTest" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver.wal">currentTest</a> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.html" title="class or interface in org.apache.hadoop.hbase.regionserver.wal" class="external-link">AbstractTestFSWAL</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.html#currentTest" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver.wal">currentTest</a> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.html" title="class or interface in org.apache.hadoop.hbase.regionserver.wal" class="external-link">AbstractTestPr [...]
@@ -13159,8 +13049,6 @@ loadScripts(document, 'script');</script>
</dl>
<h2 class="title" id="I:N">N</h2>
<dl class="index">
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">name</a> - Variable in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/AbstractTestCITimeout.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">name</a> - Variable in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/AbstractTestCITimeout.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">AbstractTestCITimeout</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/CloneSnapshotFromClientTestBase.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">name</a> - Variable in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/CloneSnapshotFromClientTestBase.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">CloneSnapshotFromClientTestBase</a></dt>
@@ -13251,42 +13139,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestUpdateConfiguration.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">name</a> - Variable in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestUpdateConfiguration.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestUpdateConfiguration</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestAppendTimeRange</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestClientMetaCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorInterface</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorMetrics</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorSharedConnection.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorSharedConnection.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorSharedConnection</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoreMasterCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoreRegionCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoreRegionServerCoprocessor</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestMasterObserver</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserverToModifyTableSchema.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserverToModifyTableSchema.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestMasterObserverToModif [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestPostIncrementAndAppendBef [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestReadOnlyConfiguration.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestReadOnlyConfiguration.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestReadOnlyConfiguration</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionCoprocessorHost</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-l [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionObserverInterface</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverPreFlushAndPreCompact.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverPreFlushAndPreCompact.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionObserverPre [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">name</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionObserverScannerOpenHook [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/http/TestInfoServersACL.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.http">name</a> - Variable in class org.apache.hadoop.hbase.http.<a href="../apidocs/org/apache/hadoop/hbase/http/TestInfoServersACL.html" title="class or interface in org.apache.hadoop.hbase.http" class="external-link">TestInfoServersACL</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestBytesReadFromFs.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.hfile">name</a> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestBytesReadFromFs.html" title="class or interface in org.apache.hadoop.hbase.io.hfile" class="external-link">TestBytesReadFromFs</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestHFileBlockUnpack.html#name" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.hfile">name</a> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="../apidocs/org/apache/hadoop/hbase/io/hfile/TestHFileBlockUnpack.html" title="class or interface in org.apache.hadoop.hbase.io.hfile" class="external-link">TestHFileBlockUnpack</a></dt>
@@ -17612,10 +17464,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestUpdateConfiguration.html#setup()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">setup()</a> - Static method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestUpdateConfiguration.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestUpdateConfiguration</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html#setup()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setup()</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorMetrics</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html#setup()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setup()</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionCoprocessorHost</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/hbtop/screen/field/TestFieldScreenPresenter.html#setup()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.hbtop.screen.field">setup()</a> - Method in class org.apache.hadoop.hbase.hbtop.screen.field.<a href="../apidocs/org/apache/hadoop/hbase/hbtop/screen/field/TestFieldScreenPresenter.html" title="class or interface in org.apache.hadoop.hbase.hbtop.screen.field" class="external-link">TestFieldScr [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/hbtop/screen/help/TestHelpScreenPresenter.html#setup()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.hbtop.screen.help">setup()</a> - Method in class org.apache.hadoop.hbase.hbtop.screen.help.<a href="../apidocs/org/apache/hadoop/hbase/hbtop/screen/help/TestHelpScreenPresenter.html" title="class or interface in org.apache.hadoop.hbase.hbtop.screen.help" class="external-link">TestHelpScreenPrese [...]
@@ -17828,6 +17676,10 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html#setup(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">setup(TestInfo)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestRegionInfoBuilder.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestRegionInfoBuilder</a></dt>
<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html#setup(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setup(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocess [...]
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html#setup(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setup(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestReg [...]
+<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/quotas/TestFileArchiverNotifierImpl.html#setup(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.quotas">setup(TestInfo)</a> - Method in class org.apache.hadoop.hbase.quotas.<a href="../apidocs/org/apache/hadoop/hbase/quotas/TestFileArchiverNotifierImpl.html" title="class or interface in org.apache.hadoop.hbase.quotas" class="external-link">TestFileArchiverNotifierIm [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/quotas/TestSnapshotQuotaObserverChore.html#setup(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.quotas">setup(TestInfo)</a> - Method in class org.apache.hadoop.hbase.quotas.<a href="../apidocs/org/apache/hadoop/hbase/quotas/TestSnapshotQuotaObserverChore.html" title="class or interface in org.apache.hadoop.hbase.quotas" class="external-link">TestSnapshotQuotaObser [...]
@@ -18064,10 +17916,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.html#setUp()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp()</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestRegionObserverBypass</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.html#setUp()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp()</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="extern [...]
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestWALObserver.html#setUp()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp()</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestWALObserver.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestWALObserver</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/filter/FilterTestingCluster.html#setUp()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.filter">setUp()</a> - Static method in class org.apache.hadoop.hbase.filter.<a href="../apidocs/org/apache/hadoop/hbase/filter/FilterTestingCluster.html" title="class or interface in org.apache.hadoop.hbase.filter" class="external-link">FilterTestingCluster</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/filter/TestColumnPaginationFilter.html#setUp()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.filter">setUp()</a> - Method in class org.apache.hadoop.hbase.filter.<a href="../apidocs/org/apache/hadoop/hbase/filter/TestColumnPaginationFilter.html" title="class or interface in org.apache.hadoop.hbase.filter" class="external-link">TestColumnPaginationFilter</a></dt>
@@ -18794,6 +18642,22 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncTableRpcPriority.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncTableRpcPriority.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestAsyncTableRpcPriority</a></dt>
<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestAppendTimeRange [...]
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCopro [...]
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestMasterObserver</a></dt>
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="ex [...]
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.html" title="class or interface in org.apache.h [...]
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">Tes [...]
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="extern [...]
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestWALObserver.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestWALObserver.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestWALObserver</a></dt>
+<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/asyncfs/TestSaslFanOutOneBlockAsyncDFSOutput.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io.asyncfs">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.io.asyncfs.<a href="../apidocs/org/apache/hadoop/hbase/io/asyncfs/TestSaslFanOutOneBlockAsyncDFSOutput.html" title="class or interface in org.apache.hadoop.hbase.io.asyncfs" class="exter [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/io/TestFileChangeWatcher.html#setUp(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.io">setUp(TestInfo)</a> - Method in class org.apache.hadoop.hbase.io.<a href="../apidocs/org/apache/hadoop/hbase/io/TestFileChangeWatcher.html" title="class or interface in org.apache.hadoop.hbase.io" class="external-link">TestFileChangeWatcher</a></dt>
@@ -19674,18 +19538,18 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestConcurrentFlushSnapshotFromClient.html#setupCluster()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">setupCluster()</a> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestConcurrentFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestConcurrentF [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#setupCluster()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">setupCluster()</a> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestFlushSnapshotFromClient</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobFlushSnapshotFromClient.html#setupCluster()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">setupCluster()</a> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestMobFlushSnapshotFromClien [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobRestoreFlushSnapshotFromClient.html#setupCluster()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">setupCluster()</a> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestMobRestoreFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestMobRestoreF [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html#setupCluster()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">setupCluster()</a> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestRestoreFlushSnaps [...]
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#setupCluster()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">setupCluster()</a> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestRestoreSnapshotHelper</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/mapreduce/MRIncrementalLoadTestBase.html#setupCluster(boolean)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.mapreduce">setupCluster(boolean)</a> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="../apidocs/org/apache/hadoop/hbase/mapreduce/MRIncrementalLoadTestBase.html" title="class or interface in org.apache.hadoop.hbase.mapreduce" class="external-link">MRIncrementalLoadTes [...]
<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#setupCluster(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">setupCluster(TestInfo)</a> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-lin [...]
+<dd> </dd>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html#setupCluster(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">setupCluster(TestInfo)</a> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class [...]
+<dd> </dd>
<dt>setUpCluster() - Method in class org.apache.hadoop.hbase.chaos.util.ChaosMonkeyRunner</dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/IntegrationTestAcidGuarantees.html#setUpCluster()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">setUpCluster()</a> - Method in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/IntegrationTestAcidGuarantees.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">IntegrationTestAcidGuarantees</a></dt>
@@ -23679,9 +23543,9 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/util/TestStrings.html#testApplyURIQueriesToConf()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.util">testApplyURIQueriesToConf()</a> - Method in class org.apache.hadoop.hbase.util.<a href="../apidocs/org/apache/hadoop/hbase/util/TestStrings.html" title="class or interface in org.apache.hadoop.hbase.util" class="external-link">TestStrings</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveOnTableDelete()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveOnTableDelete()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveOnTableDelete(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveOnTableDelete(TestInfo)</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFil [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveOnTableFamilyDelete()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveOnTableFamilyDelete()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveOnTableFamilyDelete(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveOnTableFamilyDelete(TestInfo)</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-li [...]
<dd>
<div class="block">Test that the store files are archived when a column family is removed.</div>
</dd>
@@ -23695,15 +23559,15 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRecoveredEditsWrongFS()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRecoveredEditsWrongFS()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRegions()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRegions()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRegions(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRegions(TestInfo)</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRegionsWhenPermissionDenied()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRegionsWhenPermissionDenied()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRegionsWhenPermissionDenied(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRegionsWhenPermissionDenied(TestInfo)</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" cl [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRegionTableAndRegionDirsNull()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRegionTableAndRegionDirsNull()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchivi [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRegionWithRegionDirNull()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRegionWithRegionDirNull()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRegionWithRegionDirNull(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRegionWithRegionDirNull(TestInfo)</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="ext [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRegionWithTableDirNull()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRegionWithTableDirNull()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveRegionWithTableDirNull(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveRegionWithTableDirNull(TestInfo)</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="exter [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testArchiveStoreFilesDifferentFileSystemsArchiveFileMatchCurrent()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testArchiveStoreFilesDifferentFileSystemsArchiveFileMatchCurrent()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hb [...]
<dd> </dd>
@@ -26073,7 +25937,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/mob/TestRSMobFileCleanerChore.html#testCleaningAndStoreFileReaderCreatedByOtherThreads()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.mob">testCleaningAndStoreFileReaderCreatedByOtherThreads()</a> - Method in class org.apache.hadoop.hbase.mob.<a href="../apidocs/org/apache/hadoop/hbase/mob/TestRSMobFileCleanerChore.html" title="class or interface in org.apache.hadoop.hbase.mob" class="external [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testCleaningRace()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testCleaningRace()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testCleaningRace(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testCleaningRace(TestInfo)</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
<dd>
<div class="block">Test HFileArchiver.resolveAndArchive() race condition HBASE-7643</div>
</dd>
@@ -26298,7 +26162,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html#testCloneNonExistentSnapshot()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">testCloneNonExistentSnapshot()</a> - Method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-li [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#testCloneNonExistentSnapshot()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">testCloneNonExistentSnapshot()</a> - Method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestSnapshotCl [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#testCloneNonExistentSnapshot(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">testCloneNonExistentSnapshot(TestInfo)</a> - Method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class or interface in org.apache.hadoop.hbase.snapshot [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/CloneSnapshotFromClientErrorTestBase.html#testCloneOnMissingNamespace()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">testCloneOnMissingNamespace()</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/CloneSnapshotFromClientErrorTestBase.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">Clon [...]
<dd> </dd>
@@ -28342,7 +28206,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/TestCustomPriorityRpcControllerFactory.html#testDeletePriority()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase">testDeletePriority()</a> - Method in class org.apache.hadoop.hbase.<a href="../apidocs/org/apache/hadoop/hbase/TestCustomPriorityRpcControllerFactory.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TestCustomPriorityRpcControllerFactory</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testDeleteRegionWithNoStoreFiles()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testDeleteRegionWithNoStoreFiles()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testDeleteRegionWithNoStoreFiles(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testDeleteRegionWithNoStoreFiles(TestInfo)</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="externa [...]
<dd>
<div class="block">Test that the region directory is removed when we archive a region without store files, but
still has hidden files.</div>
@@ -38893,7 +38757,7 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.html#testRemovePeerTableCFs()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">testRemovePeerTableCFs()</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestAsyncReplicationAdminApi</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testRemoveRegionDirOnArchive()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testRemoveRegionDirOnArchive()</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link">TestHFileArchiving</a></dt>
+<dt><a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#testRemoveRegionDirOnArchive(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">testRemoveRegionDirOnArchive(TestInfo)</a> - Method in class org.apache.hadoop.hbase.backup.<a href="../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class or interface in org.apache.hadoop.hbase.backup" class="external-link"> [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestRemoveRegionMetrics.html" class="type-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">TestRemoveRegionMetrics</a> - Class in <a href="org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
<dd> </dd>
@@ -42144,7 +42008,7 @@ loadScripts(document, 'script');</script>
</dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/quotas/TestBlockBytesScannedQuota.html#testSmallScanNeverBlockedByLargeEstimate()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.quotas">testSmallScanNeverBlockedByLargeEstimate()</a> - Method in class org.apache.hadoop.hbase.quotas.<a href="../apidocs/org/apache/hadoop/hbase/quotas/TestBlockBytesScannedQuota.html" title="class or interface in org.apache.hadoop.hbase.quotas" class="external-link [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#testSnapshotAlreadyExist()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">testSnapshotAlreadyExist()</a> - Method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestSnapshotClientRetr [...]
+<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#testSnapshotAlreadyExist(org.junit.jupiter.api.TestInfo)" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">testSnapshotAlreadyExist(TestInfo)</a> - Method in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class= [...]
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestAdmin2.html#testSnapshotCleanupAsync()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">testSnapshotCleanupAsync()</a> - Method in class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestAdmin2.html" title="class or interface in org.apache.hadoop.hbase.client" class="external-link">TestAdmin2</a></dt>
<dd> </dd>
@@ -43071,10 +42935,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html#testTable" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">testTable</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class="external-link">TestScannerRetriableFailure</a></dt>
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#testTable" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">testTable</a> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestSnapshotClientRetries</a></dt>
-<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotWhenChoreCleaning.html#testTable" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">testTable</a> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotWhenChoreCleaning.html" title="class or interface in org.apache.hadoop.hbase.snapshot" class="external-link">TestSnapshotWhenChoreCleaning</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/http/TestInfoServersACL.html#testTableActionsAvailableForAdmins()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.http">testTableActionsAvailableForAdmins()</a> - Method in class org.apache.hadoop.hbase.http.<a href="../apidocs/org/apache/hadoop/hbase/http/TestInfoServersACL.html" title="class or interface in org.apache.hadoop.hbase.http" class="external-link">TestInfoServersACL</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/replication/TestPerTableCFReplication.html#testTableCFsHelperConverter()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.replication">testTableCFsHelperConverter()</a> - Method in class org.apache.hadoop.hbase.replication.<a href="../apidocs/org/apache/hadoop/hbase/replication/TestPerTableCFReplication.html" title="class or interface in org.apache.hadoop.hbase.replication" class="external-link">T [...]
@@ -45186,8 +45046,6 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/client/TestTableOperationException.ThrowIOExceptionCoprocessor.html#%3Cinit%3E()" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.client">ThrowIOExceptionCoprocessor()</a> - Constructor for class org.apache.hadoop.hbase.client.<a href="../apidocs/org/apache/hadoop/hbase/client/TestTableOperationException.ThrowIOExceptionCoprocessor.html" title="class or interface in org.apache.hadoop.hbase.client" [...]
<dd> </dd>
-<dt><a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.html#thrown" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">thrown</a> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.html" title="class or interface in org.apache.hadoop.hbase.coprocessor" class="external-link">TestCoprocessorConfiguration</a></dt>
-<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestHRegion.html#thrown" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">thrown</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestHRegion.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class="external-link">TestHRegion</a></dt>
<dd> </dd>
<dt><a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestRegionMove.html#thrown" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.regionserver">thrown</a> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="../apidocs/org/apache/hadoop/hbase/regionserver/TestRegionMove.html" title="class or interface in org.apache.hadoop.hbase.regionserver" class="external-link">TestRegionMove</a></dt>
diff --git a/testapidocs/member-search-index.js b/testapidocs/member-search-index.js
index 53352f74100..d5a89aebaff 100644
--- a/testapidocs/member-search-index.js
+++ b/testapidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"TestRegionObserverInterface","l":"A"},{"p":"org.apache.hadoop.hbase.client","c":"TestGetProcedureResult.DummyProcedure","l":"abort(MasterProcedureEnv)","u":"abort(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)"},{"p":"org.apache.hadoop.hbase.master","c":"TestMigrateNamespaceTable.SuspendProcedure","l" [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.backup","c":"TestSystemTableSnapshot","l":"_testBackupRestoreSystemTable()"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"TestRegionObserverInterface","l":"A"},{"p":"org.apache.hadoop.hbase.client","c":"TestGetProcedureResult.DummyProcedure","l":"abort(MasterProcedureEnv)","u":"abort(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)"},{"p":"org.apache.hadoop.hbase.master","c":"TestMigrateNamespaceTable.SuspendProcedure","l" [...]
\ No newline at end of file
diff --git a/testapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index 9b641042168..d3da82a1aa3 100644
--- a/testapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -57,23 +57,15 @@ loadScripts(document, 'script');</script>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase">org.apache.hadoop.hbase</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.backup">org.apache.hadoop.hbase.backup</a></div>
+<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.client">org.apache.hadoop.hbase.client</a></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.client">org.apache.hadoop.hbase.client</a></div>
+<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.client.locking">org.apache.hadoop.hbase.client.locking</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.client.locking">org.apache.hadoop.hbase.client.locking</a></div>
+<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.client.replication">org.apache.hadoop.hbase.client.replication</a></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.client.replication">org.apache.hadoop.hbase.client.replication</a></div>
+<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.codec">org.apache.hadoop.hbase.codec</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.codec">org.apache.hadoop.hbase.codec</a></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.conf">org.apache.hadoop.hbase.conf</a></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.coprocessor">org.apache.hadoop.hbase.coprocessor</a></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.errorhandling">org.apache.hadoop.hbase.errorhandling</a></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.http">org.apache.hadoop.hbase.http</a></div>
+<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.conf">org.apache.hadoop.hbase.conf</a></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.io">org.apache.hadoop.hbase.io</a></div>
<div class="col-last even-row-color"> </div>
@@ -127,18 +119,16 @@ loadScripts(document, 'script');</script>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.security">org.apache.hadoop.hbase.security</a></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.snapshot">org.apache.hadoop.hbase.snapshot</a></div>
+<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.testing">org.apache.hadoop.hbase.testing</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.testing">org.apache.hadoop.hbase.testing</a></div>
+<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.types">org.apache.hadoop.hbase.types</a></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.types">org.apache.hadoop.hbase.types</a></div>
+<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></div>
+<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.zookeeper">org.apache.hadoop.hbase.zookeeper</a></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.zookeeper">org.apache.hadoop.hbase.zookeeper</a></div>
+<div class="col-first even-row-color"><a href="#org.apache.hbase.shaded">org.apache.hbase.shaded</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hbase.shaded">org.apache.hbase.shaded</a></div>
-<div class="col-last odd-row-color"> </div>
</div>
<section class="class-uses">
<ul class="block-list">
@@ -225,20 +215,6 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
-<section class="detail" id="org.apache.hadoop.hbase.backup">
-<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a> in <a href="../backup/package-summary.html">org.apache.hadoop.hbase.backup</a></h2>
-<div class="caption"><span>Fields in <a href="../backup/package-summary.html">org.apache.hadoop.hbase.backup</a> declared as <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></span></div>
-<div class="summary-table three-column-summary">
-<div class="table-header col-first">Modifier and Type</div>
-<div class="table-header col-second">Field</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestHFileArchiving.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/backup/TestHFileArchiving.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.backup">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-</div>
-</section>
-</li>
-<li>
<section class="detail" id="org.apache.hadoop.hbase.client">
<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a> in <a href="../client/package-summary.html">org.apache.hadoop.hbase.client</a></h2>
<div class="caption"><span>Fields in <a href="../client/package-summary.html">org.apache.hadoop.hbase.client</a> declared as <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></span></div>
@@ -835,14 +811,11 @@ loadScripts(document, 'script');</script>
<div class="col-second odd-row-color"><span class="type-name-label">TestCellCodecWithTags.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/codec/TestCellCodecWithTags.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestCellMessageCodec.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/codec/TestCellMessageCodec.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TestKeyValueCodec.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/codec/TestKeyValueCodec.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a></code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestKeyValueCodec.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/codec/TestKeyValueCodec.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TestKeyValueCodecWithTags.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/codec/TestKeyValueCodecWithTags.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a></code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestKeyValueCodecWithTags.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/codec/TestKeyValueCodecWithTags.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.codec">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
</div>
</section>
</li>
@@ -864,156 +837,6 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
-<section class="detail" id="org.apache.hadoop.hbase.coprocessor">
-<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a> in <a href="../coprocessor/package-summary.html">org.apache.hadoop.hbase.coprocessor</a></h2>
-<div class="caption"><span>Fields in <a href="../coprocessor/package-summary.html">org.apache.hadoop.hbase.coprocessor</a> declared as <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></span></div>
-<div class="summary-table three-column-summary">
-<div class="table-header col-first">Modifier and Type</div>
-<div class="table-header col-second">Field</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestAppendTimeRange.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestClientMetaCoprocessor.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestCoprocessorConfiguration.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestCoprocessorHost.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestCoprocessorInterface.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestCoprocessorMetrics.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestCoprocessorSharedConnection.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorSharedConnection.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestCoprocessorStop.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoprocessorStop.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestCoreMasterCoprocessor.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestCoreRegionCoprocessor.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestCoreRegionServerCoprocessor.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestIncrementAndAppendWithNullResult.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestIncrementAndAppendWithNullResult.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestIncrementTimeRange.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestIncrementTimeRange.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestMasterCoprocessorExceptionWithAbort.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithAbort.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestMasterCoprocessorExceptionWithRemove.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithRemove.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestMasterObserver.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserver.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestMasterObserverToModifyTableSchema.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestMasterObserverToModifyTableSchema.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestMetaTableMetrics.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestMetaTableMetrics.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestNegativeMemStoreSizeWithSlowCoprocessor.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestNegativeMemStoreSizeWithSlowCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestOpenTableInCoprocessor.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestOpenTableInCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestPostIncrementAndAppendBeforeWAL.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestPostIncrementAndAppendBeforeWAL.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestReadOnlyConfiguration.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestReadOnlyConfiguration.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRegionCoprocessorHost.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorHost.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRegionCoprocessorQuotaUsage.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionCoprocessorQuotaUsage.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRegionObserverBypass.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRegionObserverForAddingMutationsFromCoprocessors.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRegionObserverInterface.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRegionObserverPreFlushAndPreCompact.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverPreFlushAndPreCompact.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRegionObserverScannerOpenHook.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRegionObserverStacking.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionObserverStacking.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRegionServerCoprocessorExceptionWithAbort.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithAbort.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRegionServerCoprocessorExceptionWithRemove.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorExceptionWithRemove.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRpcCoprocessor.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestRpcCoprocessor.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestWALObserver.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/coprocessor/TestWALObserver.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.coprocessor">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-</div>
-</section>
-</li>
-<li>
-<section class="detail" id="org.apache.hadoop.hbase.errorhandling">
-<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a> in <a href="../errorhandling/package-summary.html">org.apache.hadoop.hbase.errorhandling</a></h2>
-<div class="caption"><span>Fields in <a href="../errorhandling/package-summary.html">org.apache.hadoop.hbase.errorhandling</a> declared as <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></span></div>
-<div class="summary-table three-column-summary">
-<div class="table-header col-first">Modifier and Type</div>
-<div class="table-header col-second">Field</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestForeignExceptionDispatcher.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/errorhandling/TestForeignExceptionDispatcher.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.errorhandling">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestForeignExceptionSerialization.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/errorhandling/TestForeignExceptionSerialization.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.errorhandling">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestTimeoutExceptionInjector.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/errorhandling/TestTimeoutExceptionInjector.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.errorhandling">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-</div>
-</section>
-</li>
-<li>
-<section class="detail" id="org.apache.hadoop.hbase.http">
-<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a> in <a href="../http/package-summary.html">org.apache.hadoop.hbase.http</a></h2>
-<div class="caption"><span>Fields in <a href="../http/package-summary.html">org.apache.hadoop.hbase.http</a> declared as <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></span></div>
-<div class="summary-table three-column-summary">
-<div class="table-header col-first">Modifier and Type</div>
-<div class="table-header col-second">Field</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestDebugDumpRedaction.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/http/TestDebugDumpRedaction.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.http">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestInfoServersACL.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/http/TestInfoServersACL.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.http">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-</div>
-</section>
-</li>
-<li>
<section class="detail" id="org.apache.hadoop.hbase.io">
<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a> in <a href="../io/package-summary.html">org.apache.hadoop.hbase.io</a></h2>
<div class="caption"><span>Fields in <a href="../io/package-summary.html">org.apache.hadoop.hbase.io</a> declared as <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></span></div>
@@ -2725,56 +2548,6 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
-<section class="detail" id="org.apache.hadoop.hbase.snapshot">
-<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a> in <a href="../snapshot/package-summary.html">org.apache.hadoop.hbase.snapshot</a></h2>
-<div class="caption"><span>Fields in <a href="../snapshot/package-summary.html">org.apache.hadoop.hbase.snapshot</a> declared as <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></span></div>
-<div class="summary-table three-column-summary">
-<div class="table-header col-first">Modifier and Type</div>
-<div class="table-header col-second">Field</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestConcurrentFlushSnapshotFromClient.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestConcurrentFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestFlushSnapshotFromClient.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestMobFlushSnapshotFromClient.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestMobFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestMobRestoreFlushSnapshotFromClient.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestMobRestoreFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestMobRestoreSnapshotHelper.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestMobRestoreSnapshotHelper.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRegionSnapshotTask.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestRestoreFlushSnapshotFromClient.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestRestoreSnapshotHelper.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestSnapshotClientRetries.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestSnapshotDescriptionUtils.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotDescriptionUtils.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestSnapshotManifest.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotManifest.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestSnapshotStoreFileSize.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotStoreFileSize.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>static final <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestSnapshotWhenChoreCleaning.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotWhenChoreCleaning.html#CLASS_RULE" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">CLASS_RULE</a></code></div>
-<div class="col-last even-row-color"> </div>
-</div>
-</section>
-</li>
-<li>
<section class="detail" id="org.apache.hadoop.hbase.testing">
<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a> in <a href="../testing/package-summary.html">org.apache.hadoop.hbase.testing</a></h2>
<div class="caption"><span>Fields in <a href="../testing/package-summary.html">org.apache.hadoop.hbase.testing</a> declared as <a href="../../../../../../apidocs/org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">HBaseClassTestRule</a></span></div>
diff --git a/testapidocs/org/apache/hadoop/hbase/class-use/TableNameTestRule.html b/testapidocs/org/apache/hadoop/hbase/class-use/TableNameTestRule.html
index 0a9798bd843..44be443c268 100644
--- a/testapidocs/org/apache/hadoop/hbase/class-use/TableNameTestRule.html
+++ b/testapidocs/org/apache/hadoop/hbase/class-use/TableNameTestRule.html
@@ -65,8 +65,6 @@ loadScripts(document, 'script');</script>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.regionserver.storefiletracker">org.apache.hadoop.hbase.regionserver.storefiletracker</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.snapshot">org.apache.hadoop.hbase.snapshot</a></div>
-<div class="col-last odd-row-color"> </div>
</div>
<section class="class-uses">
<ul class="block-list">
@@ -191,23 +189,6 @@ loadScripts(document, 'script');</script>
</div>
</section>
</li>
-<li>
-<section class="detail" id="org.apache.hadoop.hbase.snapshot">
-<h2>Uses of <a href="../../../../../../apidocs/org/apache/hadoop/hbase/TableNameTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TableNameTestRule</a> in <a href="../snapshot/package-summary.html">org.apache.hadoop.hbase.snapshot</a></h2>
-<div class="caption"><span>Fields in <a href="../snapshot/package-summary.html">org.apache.hadoop.hbase.snapshot</a> declared as <a href="../../../../../../apidocs/org/apache/hadoop/hbase/TableNameTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TableNameTestRule</a></span></div>
-<div class="summary-table three-column-summary">
-<div class="table-header col-first">Modifier and Type</div>
-<div class="table-header col-second">Field</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/TableNameTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TableNameTestRule</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TestSnapshotClientRetries.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#testTable" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">testTable</a></code></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/TableNameTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link">TableNameTestRule</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TestSnapshotWhenChoreCleaning.</span><code><a href="../../../../../../apidocs/org/apache/hadoop/hbase/snapshot/TestSnapshotWhenChoreCleaning.html#testTable" class="member-name-link external-link" title="class or interface in org.apache.hadoop.hbase.snapshot">testTable</a></code></div>
-<div class="col-last odd-row-color"> </div>
-</div>
-</section>
-</li>
</ul>
</section>
</main>
diff --git a/testapidocs/org/apache/hadoop/hbase/package-use.html b/testapidocs/org/apache/hadoop/hbase/package-use.html
index 3dfb20abc1b..4828845a13d 100644
--- a/testapidocs/org/apache/hadoop/hbase/package-use.html
+++ b/testapidocs/org/apache/hadoop/hbase/package-use.html
@@ -81,11 +81,7 @@ loadScripts(document, 'script');</script>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.coprocessor">org.apache.hadoop.hbase.coprocessor</a></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.errorhandling">org.apache.hadoop.hbase.errorhandling</a></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.filter">org.apache.hadoop.hbase.filter</a></div>
-<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.http">org.apache.hadoop.hbase.http</a></div>
+<div class="col-first odd-row-color"><a href="#org.apache.hadoop.hbase.filter">org.apache.hadoop.hbase.filter</a></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><a href="#org.apache.hadoop.hbase.io">org.apache.hadoop.hbase.io</a></div>
<div class="col-last even-row-color"> </div>
@@ -342,20 +338,16 @@ loadScripts(document, 'script');</script>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><a href="class-use/HBaseClassTestRule.html#org.apache.hadoop.hbase.backup">HBaseClassTestRule</a></div>
+<div class="col-first even-row-color"><a href="class-use/HBaseParameterizedTestTemplate.html#org.apache.hadoop.hbase.backup">HBaseParameterizedTestTemplate</a></div>
<div class="col-last even-row-color">
-<div class="block">The class level TestRule for all the tests.</div>
-</div>
-<div class="col-first odd-row-color"><a href="class-use/HBaseParameterizedTestTemplate.html#org.apache.hadoop.hbase.backup">HBaseParameterizedTestTemplate</a></div>
-<div class="col-last odd-row-color">
<div class="block">The annotation for running JUnit4 like parameterized tests with JUnit5.</div>
</div>
-<div class="col-first even-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.backup">HBaseTestingUtil</a></div>
-<div class="col-last even-row-color">
+<div class="col-first odd-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.backup">HBaseTestingUtil</a></div>
+<div class="col-last odd-row-color">
<div class="block">Facility for testing HBase.</div>
</div>
-<div class="col-first odd-row-color"><a href="class-use/SingleProcessHBaseCluster.html#org.apache.hadoop.hbase.backup">SingleProcessHBaseCluster</a></div>
-<div class="col-last odd-row-color">
+<div class="col-first even-row-color"><a href="class-use/SingleProcessHBaseCluster.html#org.apache.hadoop.hbase.backup">SingleProcessHBaseCluster</a></div>
+<div class="col-last even-row-color">
<div class="block">This class creates a single process HBase cluster.</div>
</div>
</div>
@@ -544,31 +536,14 @@ loadScripts(document, 'script');</script>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><a href="class-use/HBaseClassTestRule.html#org.apache.hadoop.hbase.coprocessor">HBaseClassTestRule</a></div>
+<div class="col-first even-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.coprocessor">HBaseTestingUtil</a></div>
<div class="col-last even-row-color">
-<div class="block">The class level TestRule for all the tests.</div>
-</div>
-<div class="col-first odd-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.coprocessor">HBaseTestingUtil</a></div>
-<div class="col-last odd-row-color">
<div class="block">Facility for testing HBase.</div>
</div>
</div>
</section>
</li>
<li>
-<section class="detail" id="org.apache.hadoop.hbase.errorhandling">
-<div class="caption"><span>Classes in <a href="package-summary.html">org.apache.hadoop.hbase</a> used by <a href="errorhandling/package-summary.html">org.apache.hadoop.hbase.errorhandling</a></span></div>
-<div class="summary-table two-column-summary">
-<div class="table-header col-first">Class</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><a href="class-use/HBaseClassTestRule.html#org.apache.hadoop.hbase.errorhandling">HBaseClassTestRule</a></div>
-<div class="col-last even-row-color">
-<div class="block">The class level TestRule for all the tests.</div>
-</div>
-</div>
-</section>
-</li>
-<li>
<section class="detail" id="org.apache.hadoop.hbase.filter">
<div class="caption"><span>Classes in <a href="package-summary.html">org.apache.hadoop.hbase</a> used by <a href="filter/package-summary.html">org.apache.hadoop.hbase.filter</a></span></div>
<div class="summary-table two-column-summary">
@@ -582,19 +557,6 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
-<section class="detail" id="org.apache.hadoop.hbase.http">
-<div class="caption"><span>Classes in <a href="package-summary.html">org.apache.hadoop.hbase</a> used by <a href="http/package-summary.html">org.apache.hadoop.hbase.http</a></span></div>
-<div class="summary-table two-column-summary">
-<div class="table-header col-first">Class</div>
-<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><a href="class-use/HBaseClassTestRule.html#org.apache.hadoop.hbase.http">HBaseClassTestRule</a></div>
-<div class="col-last even-row-color">
-<div class="block">The class level TestRule for all the tests.</div>
-</div>
-</div>
-</section>
-</li>
-<li>
<section class="detail" id="org.apache.hadoop.hbase.io">
<div class="caption"><span>Classes in <a href="package-summary.html">org.apache.hadoop.hbase</a> used by <a href="io/package-summary.html">org.apache.hadoop.hbase.io</a></span></div>
<div class="summary-table two-column-summary">
@@ -1188,27 +1150,13 @@ loadScripts(document, 'script');</script>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Class</div>
<div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><a href="class-use/HBaseClassTestRule.html#org.apache.hadoop.hbase.snapshot">HBaseClassTestRule</a></div>
+<div class="col-first even-row-color"><a href="class-use/HBaseParameterizedTestTemplate.html#org.apache.hadoop.hbase.snapshot">HBaseParameterizedTestTemplate</a></div>
<div class="col-last even-row-color">
-<div class="block">The class level TestRule for all the tests.</div>
-</div>
-<div class="col-first odd-row-color"><a href="class-use/HBaseParameterizedTestTemplate.html#org.apache.hadoop.hbase.snapshot">HBaseParameterizedTestTemplate</a></div>
-<div class="col-last odd-row-color">
<div class="block">The annotation for running JUnit4 like parameterized tests with JUnit5.</div>
</div>
-<div class="col-first even-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.snapshot">HBaseTestingUtil</a></div>
-<div class="col-last even-row-color">
-<div class="block">Facility for testing HBase.</div>
-</div>
-<div class="col-first odd-row-color"><a href="class-use/TableNameTestRule.html#org.apache.hadoop.hbase.snapshot">TableNameTestRule</a></div>
+<div class="col-first odd-row-color"><a href="class-use/HBaseTestingUtil.html#org.apache.hadoop.hbase.snapshot">HBaseTestingUtil</a></div>
<div class="col-last odd-row-color">
-<div class="block"><span class="deprecated-label">Deprecated.</span>
-<div class="deprecation-comment">Use <a href="../../../../../apidocs/org/apache/hadoop/hbase/TableNameTestExtension.html" title="class or interface in org.apache.hadoop.hbase" class="external-link"><code>TableNameTestExtension</code></a> instead, once we finish the migration of JUnit5,
- which means we do not need <a href="../../../../../apidocs/org/apache/hadoop/hbase/TableNameTestRule.html" title="class or interface in org.apache.hadoop.hbase" class="external-link"><code>TableNameTestRule</code></a> any more, we can remove these
- dependencies, see
- <a href="https://issues.apache.org/jira/browse/HBASE-23671">HBASE-23671</a> for more
- details.</div>
-</div>
+<div class="block">Facility for testing HBase.</div>
</div>
</div>
</section>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/backup/TestHFileArchiving.html b/testapidocs/src-html/org/apache/hadoop/hbase/backup/TestHFileArchiving.html
index 7f7425ad05d..b2b645d5bff 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/backup/TestHFileArchiving.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/backup/TestHFileArchiving.html
@@ -30,35 +30,35 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.backup;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">023</span><span id="line-23">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">024</span><span id="line-24">import static org.junit.Assert.fail;</span>
-<span class="source-line-no">025</span><span id="line-25">import static org.mockito.ArgumentMatchers.any;</span>
-<span class="source-line-no">026</span><span id="line-26">import static org.mockito.Mockito.mock;</span>
-<span class="source-line-no">027</span><span id="line-27">import static org.mockito.Mockito.never;</span>
-<span class="source-line-no">028</span><span id="line-28">import static org.mockito.Mockito.times;</span>
-<span class="source-line-no">029</span><span id="line-29">import static org.mockito.Mockito.verify;</span>
-<span class="source-line-no">030</span><span id="line-30">import static org.mockito.Mockito.when;</span>
-<span class="source-line-no">031</span><span id="line-31"></span>
-<span class="source-line-no">032</span><span id="line-32">import java.io.IOException;</span>
-<span class="source-line-no">033</span><span id="line-33">import java.security.PrivilegedExceptionAction;</span>
-<span class="source-line-no">034</span><span id="line-34">import java.util.ArrayList;</span>
-<span class="source-line-no">035</span><span id="line-35">import java.util.Collection;</span>
-<span class="source-line-no">036</span><span id="line-36">import java.util.Collections;</span>
-<span class="source-line-no">037</span><span id="line-37">import java.util.HashMap;</span>
-<span class="source-line-no">038</span><span id="line-38">import java.util.List;</span>
-<span class="source-line-no">039</span><span id="line-39">import java.util.Map;</span>
-<span class="source-line-no">040</span><span id="line-40">import java.util.Objects;</span>
-<span class="source-line-no">041</span><span id="line-41">import java.util.stream.Collectors;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.fs.FileStatus;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.fs.FileSystem;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.fs.Path;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.fs.PathFilter;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.ChoreService;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">024</span><span id="line-24">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">025</span><span id="line-25">import static org.junit.jupiter.api.Assertions.fail;</span>
+<span class="source-line-no">026</span><span id="line-26">import static org.mockito.ArgumentMatchers.any;</span>
+<span class="source-line-no">027</span><span id="line-27">import static org.mockito.Mockito.mock;</span>
+<span class="source-line-no">028</span><span id="line-28">import static org.mockito.Mockito.never;</span>
+<span class="source-line-no">029</span><span id="line-29">import static org.mockito.Mockito.times;</span>
+<span class="source-line-no">030</span><span id="line-30">import static org.mockito.Mockito.verify;</span>
+<span class="source-line-no">031</span><span id="line-31">import static org.mockito.Mockito.when;</span>
+<span class="source-line-no">032</span><span id="line-32"></span>
+<span class="source-line-no">033</span><span id="line-33">import java.io.IOException;</span>
+<span class="source-line-no">034</span><span id="line-34">import java.security.PrivilegedExceptionAction;</span>
+<span class="source-line-no">035</span><span id="line-35">import java.util.ArrayList;</span>
+<span class="source-line-no">036</span><span id="line-36">import java.util.Collection;</span>
+<span class="source-line-no">037</span><span id="line-37">import java.util.Collections;</span>
+<span class="source-line-no">038</span><span id="line-38">import java.util.HashMap;</span>
+<span class="source-line-no">039</span><span id="line-39">import java.util.List;</span>
+<span class="source-line-no">040</span><span id="line-40">import java.util.Map;</span>
+<span class="source-line-no">041</span><span id="line-41">import java.util.Objects;</span>
+<span class="source-line-no">042</span><span id="line-42">import java.util.stream.Collectors;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.fs.FileStatus;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.fs.FileSystem;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.fs.Path;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.fs.PathFilter;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.ChoreService;</span>
<span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
<span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.HConstants;</span>
<span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.Stoppable;</span>
@@ -83,637 +83,637 @@
<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.util.HFileArchiveUtil;</span>
<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.util.StoppableImplementation;</span>
<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.security.UserGroupInformation;</span>
-<span class="source-line-no">073</span><span id="line-73">import org.junit.After;</span>
-<span class="source-line-no">074</span><span id="line-74">import org.junit.AfterClass;</span>
-<span class="source-line-no">075</span><span id="line-75">import org.junit.Assert;</span>
-<span class="source-line-no">076</span><span id="line-76">import org.junit.BeforeClass;</span>
-<span class="source-line-no">077</span><span id="line-77">import org.junit.ClassRule;</span>
-<span class="source-line-no">078</span><span id="line-78">import org.junit.Rule;</span>
-<span class="source-line-no">079</span><span id="line-79">import org.junit.Test;</span>
-<span class="source-line-no">080</span><span id="line-80">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">081</span><span id="line-81">import org.junit.rules.TestName;</span>
-<span class="source-line-no">082</span><span id="line-82">import org.mockito.ArgumentCaptor;</span>
-<span class="source-line-no">083</span><span id="line-83">import org.slf4j.Logger;</span>
-<span class="source-line-no">084</span><span id="line-84">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">085</span><span id="line-85"></span>
-<span class="source-line-no">086</span><span id="line-86">/**</span>
-<span class="source-line-no">087</span><span id="line-87"> * Test that the {@link HFileArchiver} correctly removes all the parts of a region when cleaning up</span>
-<span class="source-line-no">088</span><span id="line-88"> * a region</span>
-<span class="source-line-no">089</span><span id="line-89"> */</span>
-<span class="source-line-no">090</span><span id="line-90">@Category({ LargeTests.class, MiscTests.class })</span>
-<span class="source-line-no">091</span><span id="line-91">public class TestHFileArchiving {</span>
-<span class="source-line-no">092</span><span id="line-92"></span>
-<span class="source-line-no">093</span><span id="line-93"> @ClassRule</span>
-<span class="source-line-no">094</span><span id="line-94"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">095</span><span id="line-95"> HBaseClassTestRule.forClass(TestHFileArchiving.class);</span>
+<span class="source-line-no">073</span><span id="line-73">import org.junit.jupiter.api.AfterAll;</span>
+<span class="source-line-no">074</span><span id="line-74">import org.junit.jupiter.api.AfterEach;</span>
+<span class="source-line-no">075</span><span id="line-75">import org.junit.jupiter.api.BeforeAll;</span>
+<span class="source-line-no">076</span><span id="line-76">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">077</span><span id="line-77">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">078</span><span id="line-78">import org.junit.jupiter.api.TestInfo;</span>
+<span class="source-line-no">079</span><span id="line-79">import org.mockito.ArgumentCaptor;</span>
+<span class="source-line-no">080</span><span id="line-80">import org.slf4j.Logger;</span>
+<span class="source-line-no">081</span><span id="line-81">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">082</span><span id="line-82"></span>
+<span class="source-line-no">083</span><span id="line-83">/**</span>
+<span class="source-line-no">084</span><span id="line-84"> * Test that the {@link HFileArchiver} correctly removes all the parts of a region when cleaning up</span>
+<span class="source-line-no">085</span><span id="line-85"> * a region</span>
+<span class="source-line-no">086</span><span id="line-86"> */</span>
+<span class="source-line-no">087</span><span id="line-87">@Tag(LargeTests.TAG)</span>
+<span class="source-line-no">088</span><span id="line-88">@Tag(MiscTests.TAG)</span>
+<span class="source-line-no">089</span><span id="line-89">public class TestHFileArchiving {</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> private static final Logger LOG = LoggerFactory.getLogger(TestHFileArchiving.class);</span>
+<span class="source-line-no">092</span><span id="line-92"> private static final HBaseTestingUtil UTIL = new HBaseTestingUtil();</span>
+<span class="source-line-no">093</span><span id="line-93"> private static final byte[] TEST_FAM = Bytes.toBytes("fam");</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95"> private static DirScanPool POOL;</span>
<span class="source-line-no">096</span><span id="line-96"></span>
-<span class="source-line-no">097</span><span id="line-97"> private static final Logger LOG = LoggerFactory.getLogger(TestHFileArchiving.class);</span>
-<span class="source-line-no">098</span><span id="line-98"> private static final HBaseTestingUtil UTIL = new HBaseTestingUtil();</span>
-<span class="source-line-no">099</span><span id="line-99"> private static final byte[] TEST_FAM = Bytes.toBytes("fam");</span>
+<span class="source-line-no">097</span><span id="line-97"> private String testMethodName(TestInfo testInfo) {</span>
+<span class="source-line-no">098</span><span id="line-98"> return testInfo.getTestMethod().get().getName();</span>
+<span class="source-line-no">099</span><span id="line-99"> }</span>
<span class="source-line-no">100</span><span id="line-100"></span>
-<span class="source-line-no">101</span><span id="line-101"> private static DirScanPool POOL;</span>
-<span class="source-line-no">102</span><span id="line-102"> @Rule</span>
-<span class="source-line-no">103</span><span id="line-103"> public TestName name = new TestName();</span>
-<span class="source-line-no">104</span><span id="line-104"></span>
-<span class="source-line-no">105</span><span id="line-105"> /**</span>
-<span class="source-line-no">106</span><span id="line-106"> * Setup the config for the cluster</span>
-<span class="source-line-no">107</span><span id="line-107"> */</span>
-<span class="source-line-no">108</span><span id="line-108"> @BeforeClass</span>
-<span class="source-line-no">109</span><span id="line-109"> public static void setupCluster() throws Exception {</span>
-<span class="source-line-no">110</span><span id="line-110"> setupConf(UTIL.getConfiguration());</span>
-<span class="source-line-no">111</span><span id="line-111"> UTIL.startMiniCluster();</span>
-<span class="source-line-no">112</span><span id="line-112"></span>
-<span class="source-line-no">113</span><span id="line-113"> // We don't want the cleaner to remove files. The tests do that.</span>
-<span class="source-line-no">114</span><span id="line-114"> UTIL.getMiniHBaseCluster().getMaster().getHFileCleaner().cancel(true);</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116"> POOL = DirScanPool.getHFileCleanerScanPool(UTIL.getConfiguration());</span>
-<span class="source-line-no">117</span><span id="line-117"> }</span>
-<span class="source-line-no">118</span><span id="line-118"></span>
-<span class="source-line-no">119</span><span id="line-119"> private static void setupConf(Configuration conf) {</span>
-<span class="source-line-no">120</span><span id="line-120"> // disable the ui</span>
-<span class="source-line-no">121</span><span id="line-121"> conf.setInt("hbase.regionsever.info.port", -1);</span>
-<span class="source-line-no">122</span><span id="line-122"> // drop the memstore size so we get flushes</span>
-<span class="source-line-no">123</span><span id="line-123"> conf.setInt("hbase.hregion.memstore.flush.size", 25000);</span>
-<span class="source-line-no">124</span><span id="line-124"> // disable major compactions</span>
-<span class="source-line-no">125</span><span id="line-125"> conf.setInt(HConstants.MAJOR_COMPACTION_PERIOD, 0);</span>
-<span class="source-line-no">126</span><span id="line-126"></span>
-<span class="source-line-no">127</span><span id="line-127"> // prevent aggressive region split</span>
-<span class="source-line-no">128</span><span id="line-128"> conf.set(HConstants.HBASE_REGION_SPLIT_POLICY_KEY,</span>
-<span class="source-line-no">129</span><span id="line-129"> ConstantSizeRegionSplitPolicy.class.getName());</span>
-<span class="source-line-no">130</span><span id="line-130"> }</span>
-<span class="source-line-no">131</span><span id="line-131"></span>
-<span class="source-line-no">132</span><span id="line-132"> @After</span>
-<span class="source-line-no">133</span><span id="line-133"> public void tearDown() throws Exception {</span>
-<span class="source-line-no">134</span><span id="line-134"> // cleanup the archive directory</span>
-<span class="source-line-no">135</span><span id="line-135"> clearArchiveDirectory();</span>
-<span class="source-line-no">136</span><span id="line-136"> }</span>
-<span class="source-line-no">137</span><span id="line-137"></span>
-<span class="source-line-no">138</span><span id="line-138"> @AfterClass</span>
-<span class="source-line-no">139</span><span id="line-139"> public static void cleanupTest() throws Exception {</span>
-<span class="source-line-no">140</span><span id="line-140"> UTIL.shutdownMiniCluster();</span>
-<span class="source-line-no">141</span><span id="line-141"> POOL.shutdownNow();</span>
-<span class="source-line-no">142</span><span id="line-142"> }</span>
-<span class="source-line-no">143</span><span id="line-143"></span>
-<span class="source-line-no">144</span><span id="line-144"> @Test</span>
-<span class="source-line-no">145</span><span id="line-145"> public void testArchiveStoreFilesDifferentFileSystemsWallWithSchemaPlainRoot() throws Exception {</span>
-<span class="source-line-no">146</span><span id="line-146"> String walDir = "mockFS://mockFSAuthority:9876/mockDir/wals/";</span>
-<span class="source-line-no">147</span><span id="line-147"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
-<span class="source-line-no">148</span><span id="line-148"> testArchiveStoreFilesDifferentFileSystems(walDir, baseDir, HFileArchiver::archiveStoreFiles);</span>
-<span class="source-line-no">149</span><span id="line-149"> }</span>
-<span class="source-line-no">150</span><span id="line-150"></span>
-<span class="source-line-no">151</span><span id="line-151"> @Test</span>
-<span class="source-line-no">152</span><span id="line-152"> public void testArchiveStoreFilesDifferentFileSystemsWallNullPlainRoot() throws Exception {</span>
-<span class="source-line-no">153</span><span id="line-153"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
-<span class="source-line-no">154</span><span id="line-154"> testArchiveStoreFilesDifferentFileSystems(null, baseDir, HFileArchiver::archiveStoreFiles);</span>
-<span class="source-line-no">155</span><span id="line-155"> }</span>
-<span class="source-line-no">156</span><span id="line-156"></span>
-<span class="source-line-no">157</span><span id="line-157"> @Test</span>
-<span class="source-line-no">158</span><span id="line-158"> public void testArchiveStoreFilesDifferentFileSystemsWallAndRootSame() throws Exception {</span>
-<span class="source-line-no">159</span><span id="line-159"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
-<span class="source-line-no">160</span><span id="line-160"> testArchiveStoreFilesDifferentFileSystems("/hbase/wals/", baseDir,</span>
-<span class="source-line-no">161</span><span id="line-161"> HFileArchiver::archiveStoreFiles);</span>
-<span class="source-line-no">162</span><span id="line-162"> }</span>
-<span class="source-line-no">163</span><span id="line-163"></span>
-<span class="source-line-no">164</span><span id="line-164"> @Test</span>
-<span class="source-line-no">165</span><span id="line-165"> public void testArchiveStoreFilesDifferentFileSystemsFileAlreadyArchived() throws Exception {</span>
-<span class="source-line-no">166</span><span id="line-166"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
-<span class="source-line-no">167</span><span id="line-167"> testArchiveStoreFilesDifferentFileSystems("/hbase/wals/", baseDir, true, false, false,</span>
-<span class="source-line-no">168</span><span id="line-168"> HFileArchiver::archiveStoreFiles);</span>
-<span class="source-line-no">169</span><span id="line-169"> }</span>
-<span class="source-line-no">170</span><span id="line-170"></span>
-<span class="source-line-no">171</span><span id="line-171"> @Test</span>
-<span class="source-line-no">172</span><span id="line-172"> public void testArchiveStoreFilesDifferentFileSystemsArchiveFileMatchCurrent() throws Exception {</span>
-<span class="source-line-no">173</span><span id="line-173"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
-<span class="source-line-no">174</span><span id="line-174"> testArchiveStoreFilesDifferentFileSystems("/hbase/wals/", baseDir, true, true, false,</span>
-<span class="source-line-no">175</span><span id="line-175"> HFileArchiver::archiveStoreFiles);</span>
-<span class="source-line-no">176</span><span id="line-176"> }</span>
-<span class="source-line-no">177</span><span id="line-177"></span>
-<span class="source-line-no">178</span><span id="line-178"> @Test(expected = IOException.class)</span>
-<span class="source-line-no">179</span><span id="line-179"> public void testArchiveStoreFilesDifferentFileSystemsArchiveFileMismatch() throws Exception {</span>
-<span class="source-line-no">180</span><span id="line-180"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
-<span class="source-line-no">181</span><span id="line-181"> testArchiveStoreFilesDifferentFileSystems("/hbase/wals/", baseDir, true, true, true,</span>
-<span class="source-line-no">182</span><span id="line-182"> HFileArchiver::archiveStoreFiles);</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"></span>
-<span class="source-line-no">185</span><span id="line-185"> private void testArchiveStoreFilesDifferentFileSystems(String walDir, String expectedBase,</span>
-<span class="source-line-no">186</span><span id="line-186"> ArchivingFunction<Configuration, FileSystem, RegionInfo, Path, byte[],</span>
-<span class="source-line-no">187</span><span id="line-187"> Collection<HStoreFile>> archivingFunction)</span>
-<span class="source-line-no">188</span><span id="line-188"> throws IOException {</span>
-<span class="source-line-no">189</span><span id="line-189"> testArchiveStoreFilesDifferentFileSystems(walDir, expectedBase, false, true, false,</span>
-<span class="source-line-no">190</span><span id="line-190"> archivingFunction);</span>
-<span class="source-line-no">191</span><span id="line-191"> }</span>
-<span class="source-line-no">192</span><span id="line-192"></span>
-<span class="source-line-no">193</span><span id="line-193"> private void testArchiveStoreFilesDifferentFileSystems(String walDir, String expectedBase,</span>
-<span class="source-line-no">194</span><span id="line-194"> boolean archiveFileExists, boolean sourceFileExists, boolean archiveFileDifferentLength,</span>
-<span class="source-line-no">195</span><span id="line-195"> ArchivingFunction<Configuration, FileSystem, RegionInfo, Path, byte[],</span>
-<span class="source-line-no">196</span><span id="line-196"> Collection<HStoreFile>> archivingFunction)</span>
-<span class="source-line-no">197</span><span id="line-197"> throws IOException {</span>
-<span class="source-line-no">198</span><span id="line-198"> FileSystem mockedFileSystem = mock(FileSystem.class);</span>
-<span class="source-line-no">199</span><span id="line-199"> Configuration conf = new Configuration(UTIL.getConfiguration());</span>
-<span class="source-line-no">200</span><span id="line-200"> if (walDir != null) {</span>
-<span class="source-line-no">201</span><span id="line-201"> conf.set(CommonFSUtils.HBASE_WAL_DIR, walDir);</span>
-<span class="source-line-no">202</span><span id="line-202"> }</span>
-<span class="source-line-no">203</span><span id="line-203"> when(mockedFileSystem.getScheme()).thenReturn("mockFS");</span>
-<span class="source-line-no">204</span><span id="line-204"> when(mockedFileSystem.mkdirs(any())).thenReturn(true);</span>
-<span class="source-line-no">205</span><span id="line-205"> HashMap<Path, Boolean> existsTracker = new HashMap<>();</span>
-<span class="source-line-no">206</span><span id="line-206"> Path filePath = new Path("/mockDir/wals/mockFile");</span>
-<span class="source-line-no">207</span><span id="line-207"> String expectedDir = expectedBase</span>
-<span class="source-line-no">208</span><span id="line-208"> + "archive/data/default/mockTable/mocked-region-encoded-name/testfamily/mockFile";</span>
-<span class="source-line-no">209</span><span id="line-209"> existsTracker.put(new Path(expectedDir), archiveFileExists);</span>
-<span class="source-line-no">210</span><span id="line-210"> existsTracker.put(filePath, sourceFileExists);</span>
-<span class="source-line-no">211</span><span id="line-211"> when(mockedFileSystem.exists(any()))</span>
-<span class="source-line-no">212</span><span id="line-212"> .thenAnswer(invocation -> existsTracker.getOrDefault((Path) invocation.getArgument(0), true));</span>
-<span class="source-line-no">213</span><span id="line-213"> FileStatus mockedStatus = mock(FileStatus.class);</span>
-<span class="source-line-no">214</span><span id="line-214"> when(mockedStatus.getLen()).thenReturn(12L).thenReturn(archiveFileDifferentLength ? 34L : 12L);</span>
-<span class="source-line-no">215</span><span id="line-215"> when(mockedFileSystem.getFileStatus(any())).thenReturn(mockedStatus);</span>
-<span class="source-line-no">216</span><span id="line-216"> RegionInfo mockedRegion = mock(RegionInfo.class);</span>
-<span class="source-line-no">217</span><span id="line-217"> TableName tableName = TableName.valueOf("mockTable");</span>
-<span class="source-line-no">218</span><span id="line-218"> when(mockedRegion.getTable()).thenReturn(tableName);</span>
-<span class="source-line-no">219</span><span id="line-219"> when(mockedRegion.getEncodedName()).thenReturn("mocked-region-encoded-name");</span>
-<span class="source-line-no">220</span><span id="line-220"> Path tableDir = new Path("mockFS://mockDir/tabledir");</span>
-<span class="source-line-no">221</span><span id="line-221"> byte[] family = Bytes.toBytes("testfamily");</span>
-<span class="source-line-no">222</span><span id="line-222"> HStoreFile mockedFile = mock(HStoreFile.class);</span>
-<span class="source-line-no">223</span><span id="line-223"> List<HStoreFile> list = new ArrayList<>();</span>
-<span class="source-line-no">224</span><span id="line-224"> list.add(mockedFile);</span>
-<span class="source-line-no">225</span><span id="line-225"> when(mockedFile.getPath()).thenReturn(filePath);</span>
-<span class="source-line-no">226</span><span id="line-226"> when(mockedFileSystem.rename(any(), any())).thenReturn(true);</span>
-<span class="source-line-no">227</span><span id="line-227"> archivingFunction.apply(conf, mockedFileSystem, mockedRegion, tableDir, family, list);</span>
-<span class="source-line-no">228</span><span id="line-228"></span>
-<span class="source-line-no">229</span><span id="line-229"> if (sourceFileExists) {</span>
-<span class="source-line-no">230</span><span id="line-230"> ArgumentCaptor<Path> srcPath = ArgumentCaptor.forClass(Path.class);</span>
-<span class="source-line-no">231</span><span id="line-231"> ArgumentCaptor<Path> destPath = ArgumentCaptor.forClass(Path.class);</span>
-<span class="source-line-no">232</span><span id="line-232"> if (archiveFileExists) {</span>
-<span class="source-line-no">233</span><span id="line-233"> // Verify we renamed the archived file to sideline, and then renamed the source file.</span>
-<span class="source-line-no">234</span><span id="line-234"> verify(mockedFileSystem, times(2)).rename(srcPath.capture(), destPath.capture());</span>
-<span class="source-line-no">235</span><span id="line-235"> assertEquals(expectedDir, srcPath.getAllValues().get(0).toString());</span>
-<span class="source-line-no">236</span><span id="line-236"> assertEquals(filePath, srcPath.getAllValues().get(1));</span>
-<span class="source-line-no">237</span><span id="line-237"> assertEquals(expectedDir, destPath.getAllValues().get(1).toString());</span>
-<span class="source-line-no">238</span><span id="line-238"> } else {</span>
-<span class="source-line-no">239</span><span id="line-239"> // Verify we renamed the source file to the archived file.</span>
-<span class="source-line-no">240</span><span id="line-240"> verify(mockedFileSystem, times(1)).rename(srcPath.capture(), destPath.capture());</span>
-<span class="source-line-no">241</span><span id="line-241"> assertEquals(filePath, srcPath.getAllValues().get(0));</span>
-<span class="source-line-no">242</span><span id="line-242"> assertEquals(expectedDir, destPath.getAllValues().get(0).toString());</span>
-<span class="source-line-no">243</span><span id="line-243"> }</span>
-<span class="source-line-no">244</span><span id="line-244"> } else {</span>
-<span class="source-line-no">245</span><span id="line-245"> if (archiveFileExists) {</span>
-<span class="source-line-no">246</span><span id="line-246"> // Verify we did not rename. No source file with a present archive file should be a no-op.</span>
-<span class="source-line-no">247</span><span id="line-247"> verify(mockedFileSystem, never()).rename(any(), any());</span>
-<span class="source-line-no">248</span><span id="line-248"> } else {</span>
-<span class="source-line-no">249</span><span id="line-249"> fail("Unsupported test conditions: sourceFileExists and archiveFileExists both false.");</span>
-<span class="source-line-no">250</span><span id="line-250"> }</span>
-<span class="source-line-no">251</span><span id="line-251"> }</span>
-<span class="source-line-no">252</span><span id="line-252"> }</span>
-<span class="source-line-no">253</span><span id="line-253"></span>
-<span class="source-line-no">254</span><span id="line-254"> @FunctionalInterface</span>
-<span class="source-line-no">255</span><span id="line-255"> private interface ArchivingFunction<Configuration, FS, Region, Dir, Family, Files> {</span>
-<span class="source-line-no">256</span><span id="line-256"> void apply(Configuration config, FS fs, Region region, Dir dir, Family family, Files files)</span>
-<span class="source-line-no">257</span><span id="line-257"> throws IOException;</span>
-<span class="source-line-no">258</span><span id="line-258"> }</span>
-<span class="source-line-no">259</span><span id="line-259"></span>
-<span class="source-line-no">260</span><span id="line-260"> @Test</span>
-<span class="source-line-no">261</span><span id="line-261"> public void testArchiveRecoveredEditsWalDirNull() throws Exception {</span>
-<span class="source-line-no">262</span><span id="line-262"> testArchiveRecoveredEditsWalDirNullOrSame(null);</span>
-<span class="source-line-no">263</span><span id="line-263"> }</span>
-<span class="source-line-no">264</span><span id="line-264"></span>
-<span class="source-line-no">265</span><span id="line-265"> @Test</span>
-<span class="source-line-no">266</span><span id="line-266"> public void testArchiveRecoveredEditsWalDirSameFsStoreFiles() throws Exception {</span>
-<span class="source-line-no">267</span><span id="line-267"> testArchiveRecoveredEditsWalDirNullOrSame("/wal-dir");</span>
-<span class="source-line-no">268</span><span id="line-268"> }</span>
-<span class="source-line-no">269</span><span id="line-269"></span>
-<span class="source-line-no">270</span><span id="line-270"> private void testArchiveRecoveredEditsWalDirNullOrSame(String walDir) throws Exception {</span>
-<span class="source-line-no">271</span><span id="line-271"> String originalRootDir = UTIL.getConfiguration().get(HConstants.HBASE_DIR);</span>
-<span class="source-line-no">272</span><span id="line-272"> try {</span>
-<span class="source-line-no">273</span><span id="line-273"> String baseDir = "mockFS://mockFSAuthority:9876/hbase/";</span>
-<span class="source-line-no">274</span><span id="line-274"> UTIL.getConfiguration().set(HConstants.HBASE_DIR, baseDir);</span>
-<span class="source-line-no">275</span><span id="line-275"> testArchiveStoreFilesDifferentFileSystems(walDir, baseDir, (conf, fs, region, dir, family,</span>
-<span class="source-line-no">276</span><span id="line-276"> list) -> HFileArchiver.archiveRecoveredEdits(conf, fs, region, family, list));</span>
-<span class="source-line-no">277</span><span id="line-277"> } finally {</span>
-<span class="source-line-no">278</span><span id="line-278"> UTIL.getConfiguration().set(HConstants.HBASE_DIR, originalRootDir);</span>
-<span class="source-line-no">279</span><span id="line-279"> }</span>
-<span class="source-line-no">280</span><span id="line-280"> }</span>
-<span class="source-line-no">281</span><span id="line-281"></span>
-<span class="source-line-no">282</span><span id="line-282"> @Test(expected = IOException.class)</span>
-<span class="source-line-no">283</span><span id="line-283"> public void testArchiveRecoveredEditsWrongFS() throws Exception {</span>
-<span class="source-line-no">284</span><span id="line-284"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
-<span class="source-line-no">285</span><span id="line-285"> // Internally, testArchiveStoreFilesDifferentFileSystems will pass a "mockedFS"</span>
-<span class="source-line-no">286</span><span id="line-286"> // to HFileArchiver.archiveRecoveredEdits, but since wal-dir is supposedly on same FS</span>
-<span class="source-line-no">287</span><span id="line-287"> // as root dir it would lead to conflicting FSes and an IOException is expected.</span>
-<span class="source-line-no">288</span><span id="line-288"> testArchiveStoreFilesDifferentFileSystems("/wal-dir", baseDir, (conf, fs, region, dir, family,</span>
-<span class="source-line-no">289</span><span id="line-289"> list) -> HFileArchiver.archiveRecoveredEdits(conf, fs, region, family, list));</span>
-<span class="source-line-no">290</span><span id="line-290"> }</span>
-<span class="source-line-no">291</span><span id="line-291"></span>
-<span class="source-line-no">292</span><span id="line-292"> @Test</span>
-<span class="source-line-no">293</span><span id="line-293"> public void testArchiveRecoveredEditsWalDirDifferentFS() throws Exception {</span>
-<span class="source-line-no">294</span><span id="line-294"> String walDir = "mockFS://mockFSAuthority:9876/mockDir/wals/";</span>
-<span class="source-line-no">295</span><span id="line-295"> testArchiveStoreFilesDifferentFileSystems(walDir, walDir, (conf, fs, region, dir, family,</span>
-<span class="source-line-no">296</span><span id="line-296"> list) -> HFileArchiver.archiveRecoveredEdits(conf, fs, region, family, list));</span>
-<span class="source-line-no">297</span><span id="line-297"> }</span>
-<span class="source-line-no">298</span><span id="line-298"></span>
-<span class="source-line-no">299</span><span id="line-299"> @Test</span>
-<span class="source-line-no">300</span><span id="line-300"> public void testRemoveRegionDirOnArchive() throws Exception {</span>
-<span class="source-line-no">301</span><span id="line-301"> final TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">302</span><span id="line-302"> UTIL.createTable(tableName, TEST_FAM);</span>
-<span class="source-line-no">303</span><span id="line-303"></span>
-<span class="source-line-no">304</span><span id="line-304"> final Admin admin = UTIL.getAdmin();</span>
-<span class="source-line-no">305</span><span id="line-305"></span>
-<span class="source-line-no">306</span><span id="line-306"> // get the current store files for the region</span>
-<span class="source-line-no">307</span><span id="line-307"> List<HRegion> servingRegions = UTIL.getHBaseCluster().getRegions(tableName);</span>
-<span class="source-line-no">308</span><span id="line-308"> // make sure we only have 1 region serving this table</span>
-<span class="source-line-no">309</span><span id="line-309"> assertEquals(1, servingRegions.size());</span>
-<span class="source-line-no">310</span><span id="line-310"> HRegion region = servingRegions.get(0);</span>
+<span class="source-line-no">101</span><span id="line-101"> /**</span>
+<span class="source-line-no">102</span><span id="line-102"> * Setup the config for the cluster</span>
+<span class="source-line-no">103</span><span id="line-103"> */</span>
+<span class="source-line-no">104</span><span id="line-104"> @BeforeAll</span>
+<span class="source-line-no">105</span><span id="line-105"> public static void setupCluster() throws Exception {</span>
+<span class="source-line-no">106</span><span id="line-106"> setupConf(UTIL.getConfiguration());</span>
+<span class="source-line-no">107</span><span id="line-107"> UTIL.startMiniCluster();</span>
+<span class="source-line-no">108</span><span id="line-108"></span>
+<span class="source-line-no">109</span><span id="line-109"> // We don't want the cleaner to remove files. The tests do that.</span>
+<span class="source-line-no">110</span><span id="line-110"> UTIL.getMiniHBaseCluster().getMaster().getHFileCleaner().cancel(true);</span>
+<span class="source-line-no">111</span><span id="line-111"></span>
+<span class="source-line-no">112</span><span id="line-112"> POOL = DirScanPool.getHFileCleanerScanPool(UTIL.getConfiguration());</span>
+<span class="source-line-no">113</span><span id="line-113"> }</span>
+<span class="source-line-no">114</span><span id="line-114"></span>
+<span class="source-line-no">115</span><span id="line-115"> private static void setupConf(Configuration conf) {</span>
+<span class="source-line-no">116</span><span id="line-116"> // disable the ui</span>
+<span class="source-line-no">117</span><span id="line-117"> conf.setInt("hbase.regionsever.info.port", -1);</span>
+<span class="source-line-no">118</span><span id="line-118"> // drop the memstore size so we get flushes</span>
+<span class="source-line-no">119</span><span id="line-119"> conf.setInt("hbase.hregion.memstore.flush.size", 25000);</span>
+<span class="source-line-no">120</span><span id="line-120"> // disable major compactions</span>
+<span class="source-line-no">121</span><span id="line-121"> conf.setInt(HConstants.MAJOR_COMPACTION_PERIOD, 0);</span>
+<span class="source-line-no">122</span><span id="line-122"></span>
+<span class="source-line-no">123</span><span id="line-123"> // prevent aggressive region split</span>
+<span class="source-line-no">124</span><span id="line-124"> conf.set(HConstants.HBASE_REGION_SPLIT_POLICY_KEY,</span>
+<span class="source-line-no">125</span><span id="line-125"> ConstantSizeRegionSplitPolicy.class.getName());</span>
+<span class="source-line-no">126</span><span id="line-126"> }</span>
+<span class="source-line-no">127</span><span id="line-127"></span>
+<span class="source-line-no">128</span><span id="line-128"> @AfterEach</span>
+<span class="source-line-no">129</span><span id="line-129"> public void tearDown() throws Exception {</span>
+<span class="source-line-no">130</span><span id="line-130"> // cleanup the archive directory</span>
+<span class="source-line-no">131</span><span id="line-131"> clearArchiveDirectory();</span>
+<span class="source-line-no">132</span><span id="line-132"> }</span>
+<span class="source-line-no">133</span><span id="line-133"></span>
+<span class="source-line-no">134</span><span id="line-134"> @AfterAll</span>
+<span class="source-line-no">135</span><span id="line-135"> public static void cleanupTest() throws Exception {</span>
+<span class="source-line-no">136</span><span id="line-136"> UTIL.shutdownMiniCluster();</span>
+<span class="source-line-no">137</span><span id="line-137"> POOL.shutdownNow();</span>
+<span class="source-line-no">138</span><span id="line-138"> }</span>
+<span class="source-line-no">139</span><span id="line-139"></span>
+<span class="source-line-no">140</span><span id="line-140"> @Test</span>
+<span class="source-line-no">141</span><span id="line-141"> public void testArchiveStoreFilesDifferentFileSystemsWallWithSchemaPlainRoot() throws Exception {</span>
+<span class="source-line-no">142</span><span id="line-142"> String walDir = "mockFS://mockFSAuthority:9876/mockDir/wals/";</span>
+<span class="source-line-no">143</span><span id="line-143"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
+<span class="source-line-no">144</span><span id="line-144"> testArchiveStoreFilesDifferentFileSystems(walDir, baseDir, HFileArchiver::archiveStoreFiles);</span>
+<span class="source-line-no">145</span><span id="line-145"> }</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147"> @Test</span>
+<span class="source-line-no">148</span><span id="line-148"> public void testArchiveStoreFilesDifferentFileSystemsWallNullPlainRoot() throws Exception {</span>
+<span class="source-line-no">149</span><span id="line-149"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
+<span class="source-line-no">150</span><span id="line-150"> testArchiveStoreFilesDifferentFileSystems(null, baseDir, HFileArchiver::archiveStoreFiles);</span>
+<span class="source-line-no">151</span><span id="line-151"> }</span>
+<span class="source-line-no">152</span><span id="line-152"></span>
+<span class="source-line-no">153</span><span id="line-153"> @Test</span>
+<span class="source-line-no">154</span><span id="line-154"> public void testArchiveStoreFilesDifferentFileSystemsWallAndRootSame() throws Exception {</span>
+<span class="source-line-no">155</span><span id="line-155"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
+<span class="source-line-no">156</span><span id="line-156"> testArchiveStoreFilesDifferentFileSystems("/hbase/wals/", baseDir,</span>
+<span class="source-line-no">157</span><span id="line-157"> HFileArchiver::archiveStoreFiles);</span>
+<span class="source-line-no">158</span><span id="line-158"> }</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160"> @Test</span>
+<span class="source-line-no">161</span><span id="line-161"> public void testArchiveStoreFilesDifferentFileSystemsFileAlreadyArchived() throws Exception {</span>
+<span class="source-line-no">162</span><span id="line-162"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
+<span class="source-line-no">163</span><span id="line-163"> testArchiveStoreFilesDifferentFileSystems("/hbase/wals/", baseDir, true, false, false,</span>
+<span class="source-line-no">164</span><span id="line-164"> HFileArchiver::archiveStoreFiles);</span>
+<span class="source-line-no">165</span><span id="line-165"> }</span>
+<span class="source-line-no">166</span><span id="line-166"></span>
+<span class="source-line-no">167</span><span id="line-167"> @Test</span>
+<span class="source-line-no">168</span><span id="line-168"> public void testArchiveStoreFilesDifferentFileSystemsArchiveFileMatchCurrent() throws Exception {</span>
+<span class="source-line-no">169</span><span id="line-169"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
+<span class="source-line-no">170</span><span id="line-170"> testArchiveStoreFilesDifferentFileSystems("/hbase/wals/", baseDir, true, true, false,</span>
+<span class="source-line-no">171</span><span id="line-171"> HFileArchiver::archiveStoreFiles);</span>
+<span class="source-line-no">172</span><span id="line-172"> }</span>
+<span class="source-line-no">173</span><span id="line-173"></span>
+<span class="source-line-no">174</span><span id="line-174"> @Test</span>
+<span class="source-line-no">175</span><span id="line-175"> public void testArchiveStoreFilesDifferentFileSystemsArchiveFileMismatch() throws Exception {</span>
+<span class="source-line-no">176</span><span id="line-176"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
+<span class="source-line-no">177</span><span id="line-177"> assertThrows(IOException.class, () -> testArchiveStoreFilesDifferentFileSystems("/hbase/wals/",</span>
+<span class="source-line-no">178</span><span id="line-178"> baseDir, true, true, true, HFileArchiver::archiveStoreFiles));</span>
+<span class="source-line-no">179</span><span id="line-179"> }</span>
+<span class="source-line-no">180</span><span id="line-180"></span>
+<span class="source-line-no">181</span><span id="line-181"> private void testArchiveStoreFilesDifferentFileSystems(String walDir, String expectedBase,</span>
+<span class="source-line-no">182</span><span id="line-182"> ArchivingFunction<Configuration, FileSystem, RegionInfo, Path, byte[],</span>
+<span class="source-line-no">183</span><span id="line-183"> Collection<HStoreFile>> archivingFunction)</span>
+<span class="source-line-no">184</span><span id="line-184"> throws IOException {</span>
+<span class="source-line-no">185</span><span id="line-185"> testArchiveStoreFilesDifferentFileSystems(walDir, expectedBase, false, true, false,</span>
+<span class="source-line-no">186</span><span id="line-186"> archivingFunction);</span>
+<span class="source-line-no">187</span><span id="line-187"> }</span>
+<span class="source-line-no">188</span><span id="line-188"></span>
+<span class="source-line-no">189</span><span id="line-189"> private void testArchiveStoreFilesDifferentFileSystems(String walDir, String expectedBase,</span>
+<span class="source-line-no">190</span><span id="line-190"> boolean archiveFileExists, boolean sourceFileExists, boolean archiveFileDifferentLength,</span>
+<span class="source-line-no">191</span><span id="line-191"> ArchivingFunction<Configuration, FileSystem, RegionInfo, Path, byte[],</span>
+<span class="source-line-no">192</span><span id="line-192"> Collection<HStoreFile>> archivingFunction)</span>
+<span class="source-line-no">193</span><span id="line-193"> throws IOException {</span>
+<span class="source-line-no">194</span><span id="line-194"> FileSystem mockedFileSystem = mock(FileSystem.class);</span>
+<span class="source-line-no">195</span><span id="line-195"> Configuration conf = new Configuration(UTIL.getConfiguration());</span>
+<span class="source-line-no">196</span><span id="line-196"> if (walDir != null) {</span>
+<span class="source-line-no">197</span><span id="line-197"> conf.set(CommonFSUtils.HBASE_WAL_DIR, walDir);</span>
+<span class="source-line-no">198</span><span id="line-198"> }</span>
+<span class="source-line-no">199</span><span id="line-199"> when(mockedFileSystem.getScheme()).thenReturn("mockFS");</span>
+<span class="source-line-no">200</span><span id="line-200"> when(mockedFileSystem.mkdirs(any())).thenReturn(true);</span>
+<span class="source-line-no">201</span><span id="line-201"> HashMap<Path, Boolean> existsTracker = new HashMap<>();</span>
+<span class="source-line-no">202</span><span id="line-202"> Path filePath = new Path("/mockDir/wals/mockFile");</span>
+<span class="source-line-no">203</span><span id="line-203"> String expectedDir = expectedBase</span>
+<span class="source-line-no">204</span><span id="line-204"> + "archive/data/default/mockTable/mocked-region-encoded-name/testfamily/mockFile";</span>
+<span class="source-line-no">205</span><span id="line-205"> existsTracker.put(new Path(expectedDir), archiveFileExists);</span>
+<span class="source-line-no">206</span><span id="line-206"> existsTracker.put(filePath, sourceFileExists);</span>
+<span class="source-line-no">207</span><span id="line-207"> when(mockedFileSystem.exists(any()))</span>
+<span class="source-line-no">208</span><span id="line-208"> .thenAnswer(invocation -> existsTracker.getOrDefault((Path) invocation.getArgument(0), true));</span>
+<span class="source-line-no">209</span><span id="line-209"> FileStatus mockedStatus = mock(FileStatus.class);</span>
+<span class="source-line-no">210</span><span id="line-210"> when(mockedStatus.getLen()).thenReturn(12L).thenReturn(archiveFileDifferentLength ? 34L : 12L);</span>
+<span class="source-line-no">211</span><span id="line-211"> when(mockedFileSystem.getFileStatus(any())).thenReturn(mockedStatus);</span>
+<span class="source-line-no">212</span><span id="line-212"> RegionInfo mockedRegion = mock(RegionInfo.class);</span>
+<span class="source-line-no">213</span><span id="line-213"> TableName tableName = TableName.valueOf("mockTable");</span>
+<span class="source-line-no">214</span><span id="line-214"> when(mockedRegion.getTable()).thenReturn(tableName);</span>
+<span class="source-line-no">215</span><span id="line-215"> when(mockedRegion.getEncodedName()).thenReturn("mocked-region-encoded-name");</span>
+<span class="source-line-no">216</span><span id="line-216"> Path tableDir = new Path("mockFS://mockDir/tabledir");</span>
+<span class="source-line-no">217</span><span id="line-217"> byte[] family = Bytes.toBytes("testfamily");</span>
+<span class="source-line-no">218</span><span id="line-218"> HStoreFile mockedFile = mock(HStoreFile.class);</span>
+<span class="source-line-no">219</span><span id="line-219"> List<HStoreFile> list = new ArrayList<>();</span>
+<span class="source-line-no">220</span><span id="line-220"> list.add(mockedFile);</span>
+<span class="source-line-no">221</span><span id="line-221"> when(mockedFile.getPath()).thenReturn(filePath);</span>
+<span class="source-line-no">222</span><span id="line-222"> when(mockedFileSystem.rename(any(), any())).thenReturn(true);</span>
+<span class="source-line-no">223</span><span id="line-223"> archivingFunction.apply(conf, mockedFileSystem, mockedRegion, tableDir, family, list);</span>
+<span class="source-line-no">224</span><span id="line-224"></span>
+<span class="source-line-no">225</span><span id="line-225"> if (sourceFileExists) {</span>
+<span class="source-line-no">226</span><span id="line-226"> ArgumentCaptor<Path> srcPath = ArgumentCaptor.forClass(Path.class);</span>
+<span class="source-line-no">227</span><span id="line-227"> ArgumentCaptor<Path> destPath = ArgumentCaptor.forClass(Path.class);</span>
+<span class="source-line-no">228</span><span id="line-228"> if (archiveFileExists) {</span>
+<span class="source-line-no">229</span><span id="line-229"> // Verify we renamed the archived file to sideline, and then renamed the source file.</span>
+<span class="source-line-no">230</span><span id="line-230"> verify(mockedFileSystem, times(2)).rename(srcPath.capture(), destPath.capture());</span>
+<span class="source-line-no">231</span><span id="line-231"> assertEquals(expectedDir, srcPath.getAllValues().get(0).toString());</span>
+<span class="source-line-no">232</span><span id="line-232"> assertEquals(filePath, srcPath.getAllValues().get(1));</span>
+<span class="source-line-no">233</span><span id="line-233"> assertEquals(expectedDir, destPath.getAllValues().get(1).toString());</span>
+<span class="source-line-no">234</span><span id="line-234"> } else {</span>
+<span class="source-line-no">235</span><span id="line-235"> // Verify we renamed the source file to the archived file.</span>
+<span class="source-line-no">236</span><span id="line-236"> verify(mockedFileSystem, times(1)).rename(srcPath.capture(), destPath.capture());</span>
+<span class="source-line-no">237</span><span id="line-237"> assertEquals(filePath, srcPath.getAllValues().get(0));</span>
+<span class="source-line-no">238</span><span id="line-238"> assertEquals(expectedDir, destPath.getAllValues().get(0).toString());</span>
+<span class="source-line-no">239</span><span id="line-239"> }</span>
+<span class="source-line-no">240</span><span id="line-240"> } else {</span>
+<span class="source-line-no">241</span><span id="line-241"> if (archiveFileExists) {</span>
+<span class="source-line-no">242</span><span id="line-242"> // Verify we did not rename. No source file with a present archive file should be a no-op.</span>
+<span class="source-line-no">243</span><span id="line-243"> verify(mockedFileSystem, never()).rename(any(), any());</span>
+<span class="source-line-no">244</span><span id="line-244"> } else {</span>
+<span class="source-line-no">245</span><span id="line-245"> fail("Unsupported test conditions: sourceFileExists and archiveFileExists both false.");</span>
+<span class="source-line-no">246</span><span id="line-246"> }</span>
+<span class="source-line-no">247</span><span id="line-247"> }</span>
+<span class="source-line-no">248</span><span id="line-248"> }</span>
+<span class="source-line-no">249</span><span id="line-249"></span>
+<span class="source-line-no">250</span><span id="line-250"> @FunctionalInterface</span>
+<span class="source-line-no">251</span><span id="line-251"> private interface ArchivingFunction<Configuration, FS, Region, Dir, Family, Files> {</span>
+<span class="source-line-no">252</span><span id="line-252"> void apply(Configuration config, FS fs, Region region, Dir dir, Family family, Files files)</span>
+<span class="source-line-no">253</span><span id="line-253"> throws IOException;</span>
+<span class="source-line-no">254</span><span id="line-254"> }</span>
+<span class="source-line-no">255</span><span id="line-255"></span>
+<span class="source-line-no">256</span><span id="line-256"> @Test</span>
+<span class="source-line-no">257</span><span id="line-257"> public void testArchiveRecoveredEditsWalDirNull() throws Exception {</span>
+<span class="source-line-no">258</span><span id="line-258"> testArchiveRecoveredEditsWalDirNullOrSame(null);</span>
+<span class="source-line-no">259</span><span id="line-259"> }</span>
+<span class="source-line-no">260</span><span id="line-260"></span>
+<span class="source-line-no">261</span><span id="line-261"> @Test</span>
+<span class="source-line-no">262</span><span id="line-262"> public void testArchiveRecoveredEditsWalDirSameFsStoreFiles() throws Exception {</span>
+<span class="source-line-no">263</span><span id="line-263"> testArchiveRecoveredEditsWalDirNullOrSame("/wal-dir");</span>
+<span class="source-line-no">264</span><span id="line-264"> }</span>
+<span class="source-line-no">265</span><span id="line-265"></span>
+<span class="source-line-no">266</span><span id="line-266"> private void testArchiveRecoveredEditsWalDirNullOrSame(String walDir) throws Exception {</span>
+<span class="source-line-no">267</span><span id="line-267"> String originalRootDir = UTIL.getConfiguration().get(HConstants.HBASE_DIR);</span>
+<span class="source-line-no">268</span><span id="line-268"> try {</span>
+<span class="source-line-no">269</span><span id="line-269"> String baseDir = "mockFS://mockFSAuthority:9876/hbase/";</span>
+<span class="source-line-no">270</span><span id="line-270"> UTIL.getConfiguration().set(HConstants.HBASE_DIR, baseDir);</span>
+<span class="source-line-no">271</span><span id="line-271"> testArchiveStoreFilesDifferentFileSystems(walDir, baseDir, (conf, fs, region, dir, family,</span>
+<span class="source-line-no">272</span><span id="line-272"> list) -> HFileArchiver.archiveRecoveredEdits(conf, fs, region, family, list));</span>
+<span class="source-line-no">273</span><span id="line-273"> } finally {</span>
+<span class="source-line-no">274</span><span id="line-274"> UTIL.getConfiguration().set(HConstants.HBASE_DIR, originalRootDir);</span>
+<span class="source-line-no">275</span><span id="line-275"> }</span>
+<span class="source-line-no">276</span><span id="line-276"> }</span>
+<span class="source-line-no">277</span><span id="line-277"></span>
+<span class="source-line-no">278</span><span id="line-278"> @Test</span>
+<span class="source-line-no">279</span><span id="line-279"> public void testArchiveRecoveredEditsWrongFS() throws Exception {</span>
+<span class="source-line-no">280</span><span id="line-280"> String baseDir = CommonFSUtils.getRootDir(UTIL.getConfiguration()).toString() + "/";</span>
+<span class="source-line-no">281</span><span id="line-281"> // Internally, testArchiveStoreFilesDifferentFileSystems will pass a "mockedFS"</span>
+<span class="source-line-no">282</span><span id="line-282"> // to HFileArchiver.archiveRecoveredEdits, but since wal-dir is supposedly on same FS</span>
+<span class="source-line-no">283</span><span id="line-283"> // as root dir it would lead to conflicting FSes and an IOException is expected.</span>
+<span class="source-line-no">284</span><span id="line-284"> assertThrows(IOException.class,</span>
+<span class="source-line-no">285</span><span id="line-285"> () -> testArchiveStoreFilesDifferentFileSystems("/wal-dir", baseDir, (conf, fs, region, dir,</span>
+<span class="source-line-no">286</span><span id="line-286"> family, list) -> HFileArchiver.archiveRecoveredEdits(conf, fs, region, family, list)));</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"></span>
+<span class="source-line-no">289</span><span id="line-289"> @Test</span>
+<span class="source-line-no">290</span><span id="line-290"> public void testArchiveRecoveredEditsWalDirDifferentFS() throws Exception {</span>
+<span class="source-line-no">291</span><span id="line-291"> String walDir = "mockFS://mockFSAuthority:9876/mockDir/wals/";</span>
+<span class="source-line-no">292</span><span id="line-292"> testArchiveStoreFilesDifferentFileSystems(walDir, walDir, (conf, fs, region, dir, family,</span>
+<span class="source-line-no">293</span><span id="line-293"> list) -> HFileArchiver.archiveRecoveredEdits(conf, fs, region, family, list));</span>
+<span class="source-line-no">294</span><span id="line-294"> }</span>
+<span class="source-line-no">295</span><span id="line-295"></span>
+<span class="source-line-no">296</span><span id="line-296"> @Test</span>
+<span class="source-line-no">297</span><span id="line-297"> public void testRemoveRegionDirOnArchive(TestInfo testInfo) throws Exception {</span>
+<span class="source-line-no">298</span><span id="line-298"> final TableName tableName = TableName.valueOf(testMethodName(testInfo));</span>
+<span class="source-line-no">299</span><span id="line-299"> UTIL.createTable(tableName, TEST_FAM);</span>
+<span class="source-line-no">300</span><span id="line-300"></span>
+<span class="source-line-no">301</span><span id="line-301"> final Admin admin = UTIL.getAdmin();</span>
+<span class="source-line-no">302</span><span id="line-302"></span>
+<span class="source-line-no">303</span><span id="line-303"> // get the current store files for the region</span>
+<span class="source-line-no">304</span><span id="line-304"> List<HRegion> servingRegions = UTIL.getHBaseCluster().getRegions(tableName);</span>
+<span class="source-line-no">305</span><span id="line-305"> // make sure we only have 1 region serving this table</span>
+<span class="source-line-no">306</span><span id="line-306"> assertEquals(1, servingRegions.size());</span>
+<span class="source-line-no">307</span><span id="line-307"> HRegion region = servingRegions.get(0);</span>
+<span class="source-line-no">308</span><span id="line-308"></span>
+<span class="source-line-no">309</span><span id="line-309"> // and load the table</span>
+<span class="source-line-no">310</span><span id="line-310"> UTIL.loadRegion(region, TEST_FAM);</span>
<span class="source-line-no">311</span><span id="line-311"></span>
-<span class="source-line-no">312</span><span id="line-312"> // and load the table</span>
-<span class="source-line-no">313</span><span id="line-313"> UTIL.loadRegion(region, TEST_FAM);</span>
+<span class="source-line-no">312</span><span id="line-312"> // shutdown the table so we can manipulate the files</span>
+<span class="source-line-no">313</span><span id="line-313"> admin.disableTable(tableName);</span>
<span class="source-line-no">314</span><span id="line-314"></span>
-<span class="source-line-no">315</span><span id="line-315"> // shutdown the table so we can manipulate the files</span>
-<span class="source-line-no">316</span><span id="line-316"> admin.disableTable(tableName);</span>
-<span class="source-line-no">317</span><span id="line-317"></span>
-<span class="source-line-no">318</span><span id="line-318"> FileSystem fs = UTIL.getTestFileSystem();</span>
-<span class="source-line-no">319</span><span id="line-319"></span>
-<span class="source-line-no">320</span><span id="line-320"> // now attempt to depose the region</span>
-<span class="source-line-no">321</span><span id="line-321"> Path rootDir = region.getRegionFileSystem().getTableDir().getParent();</span>
-<span class="source-line-no">322</span><span id="line-322"> Path regionDir = FSUtils.getRegionDirFromRootDir(rootDir, region.getRegionInfo());</span>
-<span class="source-line-no">323</span><span id="line-323"></span>
-<span class="source-line-no">324</span><span id="line-324"> HFileArchiver.archiveRegion(UTIL.getConfiguration(), fs, region.getRegionInfo());</span>
-<span class="source-line-no">325</span><span id="line-325"></span>
-<span class="source-line-no">326</span><span id="line-326"> // check for the existence of the archive directory and some files in it</span>
-<span class="source-line-no">327</span><span id="line-327"> Path archiveDir = HFileArchiveTestingUtil.getRegionArchiveDir(UTIL.getConfiguration(), region);</span>
-<span class="source-line-no">328</span><span id="line-328"> assertTrue(fs.exists(archiveDir));</span>
-<span class="source-line-no">329</span><span id="line-329"></span>
-<span class="source-line-no">330</span><span id="line-330"> // check to make sure the store directory was copied</span>
-<span class="source-line-no">331</span><span id="line-331"> FileStatus[] stores = fs.listStatus(archiveDir, new PathFilter() {</span>
-<span class="source-line-no">332</span><span id="line-332"> @Override</span>
-<span class="source-line-no">333</span><span id="line-333"> public boolean accept(Path p) {</span>
-<span class="source-line-no">334</span><span id="line-334"> if (p.getName().contains(HConstants.RECOVERED_EDITS_DIR)) {</span>
-<span class="source-line-no">335</span><span id="line-335"> return false;</span>
-<span class="source-line-no">336</span><span id="line-336"> }</span>
-<span class="source-line-no">337</span><span id="line-337"> return true;</span>
-<span class="source-line-no">338</span><span id="line-338"> }</span>
-<span class="source-line-no">339</span><span id="line-339"> });</span>
-<span class="source-line-no">340</span><span id="line-340"> assertTrue(stores.length == 1);</span>
-<span class="source-line-no">341</span><span id="line-341"></span>
-<span class="source-line-no">342</span><span id="line-342"> // make sure we archived the store files</span>
-<span class="source-line-no">343</span><span id="line-343"> FileStatus[] storeFiles = fs.listStatus(stores[0].getPath());</span>
-<span class="source-line-no">344</span><span id="line-344"> assertTrue(storeFiles.length > 0);</span>
+<span class="source-line-no">315</span><span id="line-315"> FileSystem fs = UTIL.getTestFileSystem();</span>
+<span class="source-line-no">316</span><span id="line-316"></span>
+<span class="source-line-no">317</span><span id="line-317"> // now attempt to depose the region</span>
+<span class="source-line-no">318</span><span id="line-318"> Path rootDir = region.getRegionFileSystem().getTableDir().getParent();</span>
+<span class="source-line-no">319</span><span id="line-319"> Path regionDir = FSUtils.getRegionDirFromRootDir(rootDir, region.getRegionInfo());</span>
+<span class="source-line-no">320</span><span id="line-320"></span>
+<span class="source-line-no">321</span><span id="line-321"> HFileArchiver.archiveRegion(UTIL.getConfiguration(), fs, region.getRegionInfo());</span>
+<span class="source-line-no">322</span><span id="line-322"></span>
+<span class="source-line-no">323</span><span id="line-323"> // check for the existence of the archive directory and some files in it</span>
+<span class="source-line-no">324</span><span id="line-324"> Path archiveDir = HFileArchiveTestingUtil.getRegionArchiveDir(UTIL.getConfiguration(), region);</span>
+<span class="source-line-no">325</span><span id="line-325"> assertTrue(fs.exists(archiveDir));</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327"> // check to make sure the store directory was copied</span>
+<span class="source-line-no">328</span><span id="line-328"> FileStatus[] stores = fs.listStatus(archiveDir, new PathFilter() {</span>
+<span class="source-line-no">329</span><span id="line-329"> @Override</span>
+<span class="source-line-no">330</span><span id="line-330"> public boolean accept(Path p) {</span>
+<span class="source-line-no">331</span><span id="line-331"> if (p.getName().contains(HConstants.RECOVERED_EDITS_DIR)) {</span>
+<span class="source-line-no">332</span><span id="line-332"> return false;</span>
+<span class="source-line-no">333</span><span id="line-333"> }</span>
+<span class="source-line-no">334</span><span id="line-334"> return true;</span>
+<span class="source-line-no">335</span><span id="line-335"> }</span>
+<span class="source-line-no">336</span><span id="line-336"> });</span>
+<span class="source-line-no">337</span><span id="line-337"> assertTrue(stores.length == 1);</span>
+<span class="source-line-no">338</span><span id="line-338"></span>
+<span class="source-line-no">339</span><span id="line-339"> // make sure we archived the store files</span>
+<span class="source-line-no">340</span><span id="line-340"> FileStatus[] storeFiles = fs.listStatus(stores[0].getPath());</span>
+<span class="source-line-no">341</span><span id="line-341"> assertTrue(storeFiles.length > 0);</span>
+<span class="source-line-no">342</span><span id="line-342"></span>
+<span class="source-line-no">343</span><span id="line-343"> // then ensure the region's directory isn't present</span>
+<span class="source-line-no">344</span><span id="line-344"> assertFalse(fs.exists(regionDir));</span>
<span class="source-line-no">345</span><span id="line-345"></span>
-<span class="source-line-no">346</span><span id="line-346"> // then ensure the region's directory isn't present</span>
-<span class="source-line-no">347</span><span id="line-347"> assertFalse(fs.exists(regionDir));</span>
+<span class="source-line-no">346</span><span id="line-346"> UTIL.deleteTable(tableName);</span>
+<span class="source-line-no">347</span><span id="line-347"> }</span>
<span class="source-line-no">348</span><span id="line-348"></span>
-<span class="source-line-no">349</span><span id="line-349"> UTIL.deleteTable(tableName);</span>
-<span class="source-line-no">350</span><span id="line-350"> }</span>
-<span class="source-line-no">351</span><span id="line-351"></span>
-<span class="source-line-no">352</span><span id="line-352"> /**</span>
-<span class="source-line-no">353</span><span id="line-353"> * Test that the region directory is removed when we archive a region without store files, but</span>
-<span class="source-line-no">354</span><span id="line-354"> * still has hidden files.</span>
-<span class="source-line-no">355</span><span id="line-355"> * @throws IOException throws an IOException if there's problem creating a table or if there's an</span>
-<span class="source-line-no">356</span><span id="line-356"> * issue with accessing FileSystem.</span>
-<span class="source-line-no">357</span><span id="line-357"> */</span>
-<span class="source-line-no">358</span><span id="line-358"> @Test</span>
-<span class="source-line-no">359</span><span id="line-359"> public void testDeleteRegionWithNoStoreFiles() throws IOException {</span>
-<span class="source-line-no">360</span><span id="line-360"> final TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">361</span><span id="line-361"> UTIL.createTable(tableName, TEST_FAM);</span>
-<span class="source-line-no">362</span><span id="line-362"></span>
-<span class="source-line-no">363</span><span id="line-363"> // get the current store files for the region</span>
-<span class="source-line-no">364</span><span id="line-364"> List<HRegion> servingRegions = UTIL.getHBaseCluster().getRegions(tableName);</span>
-<span class="source-line-no">365</span><span id="line-365"> // make sure we only have 1 region serving this table</span>
-<span class="source-line-no">366</span><span id="line-366"> assertEquals(1, servingRegions.size());</span>
-<span class="source-line-no">367</span><span id="line-367"> HRegion region = servingRegions.get(0);</span>
-<span class="source-line-no">368</span><span id="line-368"></span>
-<span class="source-line-no">369</span><span id="line-369"> FileSystem fs = region.getRegionFileSystem().getFileSystem();</span>
-<span class="source-line-no">370</span><span id="line-370"></span>
-<span class="source-line-no">371</span><span id="line-371"> // make sure there are some files in the regiondir</span>
-<span class="source-line-no">372</span><span id="line-372"> Path rootDir = CommonFSUtils.getRootDir(fs.getConf());</span>
-<span class="source-line-no">373</span><span id="line-373"> Path regionDir = FSUtils.getRegionDirFromRootDir(rootDir, region.getRegionInfo());</span>
-<span class="source-line-no">374</span><span id="line-374"> FileStatus[] regionFiles = CommonFSUtils.listStatus(fs, regionDir, null);</span>
-<span class="source-line-no">375</span><span id="line-375"> Assert.assertNotNull("No files in the region directory", regionFiles);</span>
-<span class="source-line-no">376</span><span id="line-376"> if (LOG.isDebugEnabled()) {</span>
-<span class="source-line-no">377</span><span id="line-377"> List<Path> files = new ArrayList<>();</span>
-<span class="source-line-no">378</span><span id="line-378"> for (FileStatus file : regionFiles) {</span>
-<span class="source-line-no">379</span><span id="line-379"> files.add(file.getPath());</span>
-<span class="source-line-no">380</span><span id="line-380"> }</span>
-<span class="source-line-no">381</span><span id="line-381"> LOG.debug("Current files:" + files);</span>
-<span class="source-line-no">382</span><span id="line-382"> }</span>
-<span class="source-line-no">383</span><span id="line-383"> // delete the visible folders so we just have hidden files/folders</span>
-<span class="source-line-no">384</span><span id="line-384"> final PathFilter dirFilter = new FSUtils.DirFilter(fs);</span>
-<span class="source-line-no">385</span><span id="line-385"> PathFilter nonHidden = new PathFilter() {</span>
-<span class="source-line-no">386</span><span id="line-386"> @Override</span>
-<span class="source-line-no">387</span><span id="line-387"> public boolean accept(Path file) {</span>
-<span class="source-line-no">388</span><span id="line-388"> return dirFilter.accept(file) && !file.getName().startsWith(".");</span>
-<span class="source-line-no">389</span><span id="line-389"> }</span>
-<span class="source-line-no">390</span><span id="line-390"> };</span>
-<span class="source-line-no">391</span><span id="line-391"> FileStatus[] storeDirs = CommonFSUtils.listStatus(fs, regionDir, nonHidden);</span>
-<span class="source-line-no">392</span><span id="line-392"> for (FileStatus store : storeDirs) {</span>
-<span class="source-line-no">393</span><span id="line-393"> LOG.debug("Deleting store for test");</span>
-<span class="source-line-no">394</span><span id="line-394"> fs.delete(store.getPath(), true);</span>
-<span class="source-line-no">395</span><span id="line-395"> }</span>
+<span class="source-line-no">349</span><span id="line-349"> /**</span>
+<span class="source-line-no">350</span><span id="line-350"> * Test that the region directory is removed when we archive a region without store files, but</span>
+<span class="source-line-no">351</span><span id="line-351"> * still has hidden files.</span>
+<span class="source-line-no">352</span><span id="line-352"> * @throws IOException throws an IOException if there's problem creating a table or if there's an</span>
+<span class="source-line-no">353</span><span id="line-353"> * issue with accessing FileSystem.</span>
+<span class="source-line-no">354</span><span id="line-354"> */</span>
+<span class="source-line-no">355</span><span id="line-355"> @Test</span>
+<span class="source-line-no">356</span><span id="line-356"> public void testDeleteRegionWithNoStoreFiles(TestInfo testInfo) throws IOException {</span>
+<span class="source-line-no">357</span><span id="line-357"> final TableName tableName = TableName.valueOf(testMethodName(testInfo));</span>
+<span class="source-line-no">358</span><span id="line-358"> UTIL.createTable(tableName, TEST_FAM);</span>
+<span class="source-line-no">359</span><span id="line-359"></span>
+<span class="source-line-no">360</span><span id="line-360"> // get the current store files for the region</span>
+<span class="source-line-no">361</span><span id="line-361"> List<HRegion> servingRegions = UTIL.getHBaseCluster().getRegions(tableName);</span>
+<span class="source-line-no">362</span><span id="line-362"> // make sure we only have 1 region serving this table</span>
+<span class="source-line-no">363</span><span id="line-363"> assertEquals(1, servingRegions.size());</span>
+<span class="source-line-no">364</span><span id="line-364"> HRegion region = servingRegions.get(0);</span>
+<span class="source-line-no">365</span><span id="line-365"></span>
+<span class="source-line-no">366</span><span id="line-366"> FileSystem fs = region.getRegionFileSystem().getFileSystem();</span>
+<span class="source-line-no">367</span><span id="line-367"></span>
+<span class="source-line-no">368</span><span id="line-368"> // make sure there are some files in the regiondir</span>
+<span class="source-line-no">369</span><span id="line-369"> Path rootDir = CommonFSUtils.getRootDir(fs.getConf());</span>
+<span class="source-line-no">370</span><span id="line-370"> Path regionDir = FSUtils.getRegionDirFromRootDir(rootDir, region.getRegionInfo());</span>
+<span class="source-line-no">371</span><span id="line-371"> FileStatus[] regionFiles = CommonFSUtils.listStatus(fs, regionDir, null);</span>
+<span class="source-line-no">372</span><span id="line-372"> assertNotNull(regionFiles, "No files in the region directory");</span>
+<span class="source-line-no">373</span><span id="line-373"> if (LOG.isDebugEnabled()) {</span>
+<span class="source-line-no">374</span><span id="line-374"> List<Path> files = new ArrayList<>();</span>
+<span class="source-line-no">375</span><span id="line-375"> for (FileStatus file : regionFiles) {</span>
+<span class="source-line-no">376</span><span id="line-376"> files.add(file.getPath());</span>
+<span class="source-line-no">377</span><span id="line-377"> }</span>
+<span class="source-line-no">378</span><span id="line-378"> LOG.debug("Current files:" + files);</span>
+<span class="source-line-no">379</span><span id="line-379"> }</span>
+<span class="source-line-no">380</span><span id="line-380"> // delete the visible folders so we just have hidden files/folders</span>
+<span class="source-line-no">381</span><span id="line-381"> final PathFilter dirFilter = new FSUtils.DirFilter(fs);</span>
+<span class="source-line-no">382</span><span id="line-382"> PathFilter nonHidden = new PathFilter() {</span>
+<span class="source-line-no">383</span><span id="line-383"> @Override</span>
+<span class="source-line-no">384</span><span id="line-384"> public boolean accept(Path file) {</span>
+<span class="source-line-no">385</span><span id="line-385"> return dirFilter.accept(file) && !file.getName().startsWith(".");</span>
+<span class="source-line-no">386</span><span id="line-386"> }</span>
+<span class="source-line-no">387</span><span id="line-387"> };</span>
+<span class="source-line-no">388</span><span id="line-388"> FileStatus[] storeDirs = CommonFSUtils.listStatus(fs, regionDir, nonHidden);</span>
+<span class="source-line-no">389</span><span id="line-389"> for (FileStatus store : storeDirs) {</span>
+<span class="source-line-no">390</span><span id="line-390"> LOG.debug("Deleting store for test");</span>
+<span class="source-line-no">391</span><span id="line-391"> fs.delete(store.getPath(), true);</span>
+<span class="source-line-no">392</span><span id="line-392"> }</span>
+<span class="source-line-no">393</span><span id="line-393"></span>
+<span class="source-line-no">394</span><span id="line-394"> // then archive the region</span>
+<span class="source-line-no">395</span><span id="line-395"> HFileArchiver.archiveRegion(UTIL.getConfiguration(), fs, region.getRegionInfo());</span>
<span class="source-line-no">396</span><span id="line-396"></span>
-<span class="source-line-no">397</span><span id="line-397"> // then archive the region</span>
-<span class="source-line-no">398</span><span id="line-398"> HFileArchiver.archiveRegion(UTIL.getConfiguration(), fs, region.getRegionInfo());</span>
+<span class="source-line-no">397</span><span id="line-397"> // and check to make sure the region directoy got deleted</span>
+<span class="source-line-no">398</span><span id="line-398"> assertFalse(fs.exists(regionDir), "Region directory (" + regionDir + "), still exists.");</span>
<span class="source-line-no">399</span><span id="line-399"></span>
-<span class="source-line-no">400</span><span id="line-400"> // and check to make sure the region directoy got deleted</span>
-<span class="source-line-no">401</span><span id="line-401"> assertFalse("Region directory (" + regionDir + "), still exists.", fs.exists(regionDir));</span>
+<span class="source-line-no">400</span><span id="line-400"> UTIL.deleteTable(tableName);</span>
+<span class="source-line-no">401</span><span id="line-401"> }</span>
<span class="source-line-no">402</span><span id="line-402"></span>
-<span class="source-line-no">403</span><span id="line-403"> UTIL.deleteTable(tableName);</span>
-<span class="source-line-no">404</span><span id="line-404"> }</span>
-<span class="source-line-no">405</span><span id="line-405"></span>
-<span class="source-line-no">406</span><span id="line-406"> private List<HRegion> initTableForArchivingRegions(TableName tableName) throws IOException {</span>
-<span class="source-line-no">407</span><span id="line-407"> final byte[][] splitKeys =</span>
-<span class="source-line-no">408</span><span id="line-408"> new byte[][] { Bytes.toBytes("b"), Bytes.toBytes("c"), Bytes.toBytes("d") };</span>
-<span class="source-line-no">409</span><span id="line-409"></span>
-<span class="source-line-no">410</span><span id="line-410"> UTIL.createTable(tableName, TEST_FAM, splitKeys);</span>
-<span class="source-line-no">411</span><span id="line-411"></span>
-<span class="source-line-no">412</span><span id="line-412"> // get the current store files for the regions</span>
-<span class="source-line-no">413</span><span id="line-413"> List<HRegion> regions = UTIL.getHBaseCluster().getRegions(tableName);</span>
-<span class="source-line-no">414</span><span id="line-414"> // make sure we have 4 regions serving this table</span>
-<span class="source-line-no">415</span><span id="line-415"> assertEquals(4, regions.size());</span>
-<span class="source-line-no">416</span><span id="line-416"></span>
-<span class="source-line-no">417</span><span id="line-417"> // and load the table</span>
-<span class="source-line-no">418</span><span id="line-418"> try (Table table = UTIL.getConnection().getTable(tableName)) {</span>
-<span class="source-line-no">419</span><span id="line-419"> UTIL.loadTable(table, TEST_FAM);</span>
-<span class="source-line-no">420</span><span id="line-420"> }</span>
+<span class="source-line-no">403</span><span id="line-403"> private List<HRegion> initTableForArchivingRegions(TableName tableName) throws IOException {</span>
+<span class="source-line-no">404</span><span id="line-404"> final byte[][] splitKeys =</span>
+<span class="source-line-no">405</span><span id="line-405"> new byte[][] { Bytes.toBytes("b"), Bytes.toBytes("c"), Bytes.toBytes("d") };</span>
+<span class="source-line-no">406</span><span id="line-406"></span>
+<span class="source-line-no">407</span><span id="line-407"> UTIL.createTable(tableName, TEST_FAM, splitKeys);</span>
+<span class="source-line-no">408</span><span id="line-408"></span>
+<span class="source-line-no">409</span><span id="line-409"> // get the current store files for the regions</span>
+<span class="source-line-no">410</span><span id="line-410"> List<HRegion> regions = UTIL.getHBaseCluster().getRegions(tableName);</span>
+<span class="source-line-no">411</span><span id="line-411"> // make sure we have 4 regions serving this table</span>
+<span class="source-line-no">412</span><span id="line-412"> assertEquals(4, regions.size());</span>
+<span class="source-line-no">413</span><span id="line-413"></span>
+<span class="source-line-no">414</span><span id="line-414"> // and load the table</span>
+<span class="source-line-no">415</span><span id="line-415"> try (Table table = UTIL.getConnection().getTable(tableName)) {</span>
+<span class="source-line-no">416</span><span id="line-416"> UTIL.loadTable(table, TEST_FAM);</span>
+<span class="source-line-no">417</span><span id="line-417"> }</span>
+<span class="source-line-no">418</span><span id="line-418"></span>
+<span class="source-line-no">419</span><span id="line-419"> // disable the table so that we can manipulate the files</span>
+<span class="source-line-no">420</span><span id="line-420"> UTIL.getAdmin().disableTable(tableName);</span>
<span class="source-line-no">421</span><span id="line-421"></span>
-<span class="source-line-no">422</span><span id="line-422"> // disable the table so that we can manipulate the files</span>
-<span class="source-line-no">423</span><span id="line-423"> UTIL.getAdmin().disableTable(tableName);</span>
+<span class="source-line-no">422</span><span id="line-422"> return regions;</span>
+<span class="source-line-no">423</span><span id="line-423"> }</span>
<span class="source-line-no">424</span><span id="line-424"></span>
-<span class="source-line-no">425</span><span id="line-425"> return regions;</span>
-<span class="source-line-no">426</span><span id="line-426"> }</span>
-<span class="source-line-no">427</span><span id="line-427"></span>
-<span class="source-line-no">428</span><span id="line-428"> @Test</span>
-<span class="source-line-no">429</span><span id="line-429"> public void testArchiveRegions() throws Exception {</span>
-<span class="source-line-no">430</span><span id="line-430"> final TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">431</span><span id="line-431"> List<HRegion> regions = initTableForArchivingRegions(tableName);</span>
-<span class="source-line-no">432</span><span id="line-432"></span>
-<span class="source-line-no">433</span><span id="line-433"> FileSystem fs = UTIL.getTestFileSystem();</span>
-<span class="source-line-no">434</span><span id="line-434"></span>
-<span class="source-line-no">435</span><span id="line-435"> // now attempt to depose the regions</span>
-<span class="source-line-no">436</span><span id="line-436"> Path rootDir = CommonFSUtils.getRootDir(UTIL.getConfiguration());</span>
-<span class="source-line-no">437</span><span id="line-437"> Path tableDir = CommonFSUtils.getTableDir(rootDir, regions.get(0).getRegionInfo().getTable());</span>
-<span class="source-line-no">438</span><span id="line-438"> List<Path> regionDirList = regions.stream()</span>
-<span class="source-line-no">439</span><span id="line-439"> .map(region -> FSUtils.getRegionDirFromTableDir(tableDir, region.getRegionInfo()))</span>
-<span class="source-line-no">440</span><span id="line-440"> .collect(Collectors.toList());</span>
-<span class="source-line-no">441</span><span id="line-441"></span>
-<span class="source-line-no">442</span><span id="line-442"> HFileArchiver.archiveRegions(UTIL.getConfiguration(), fs, rootDir, tableDir, regionDirList);</span>
-<span class="source-line-no">443</span><span id="line-443"></span>
-<span class="source-line-no">444</span><span id="line-444"> // check for the existence of the archive directory and some files in it</span>
-<span class="source-line-no">445</span><span id="line-445"> for (HRegion region : regions) {</span>
-<span class="source-line-no">446</span><span id="line-446"> Path archiveDir =</span>
-<span class="source-line-no">447</span><span id="line-447"> HFileArchiveTestingUtil.getRegionArchiveDir(UTIL.getConfiguration(), region);</span>
-<span class="source-line-no">448</span><span id="line-448"> assertTrue(fs.exists(archiveDir));</span>
-<span class="source-line-no">449</span><span id="line-449"></span>
-<span class="source-line-no">450</span><span id="line-450"> // check to make sure the store directory was copied</span>
-<span class="source-line-no">451</span><span id="line-451"> FileStatus[] stores =</span>
-<span class="source-line-no">452</span><span id="line-452"> fs.listStatus(archiveDir, p -> !p.getName().contains(HConstants.RECOVERED_EDITS_DIR));</span>
-<span class="source-line-no">453</span><span id="line-453"> assertTrue(stores.length == 1);</span>
-<span class="source-line-no">454</span><span id="line-454"></span>
-<span class="source-line-no">455</span><span id="line-455"> // make sure we archived the store files</span>
-<span class="source-line-no">456</span><span id="line-456"> FileStatus[] storeFiles = fs.listStatus(stores[0].getPath());</span>
-<span class="source-line-no">457</span><span id="line-457"> assertTrue(storeFiles.length > 0);</span>
-<span class="source-line-no">458</span><span id="line-458"> }</span>
-<span class="source-line-no">459</span><span id="line-459"></span>
-<span class="source-line-no">460</span><span id="line-460"> // then ensure the region's directories aren't present</span>
-<span class="source-line-no">461</span><span id="line-461"> for (Path regionDir : regionDirList) {</span>
-<span class="source-line-no">462</span><span id="line-462"> assertFalse(fs.exists(regionDir));</span>
-<span class="source-line-no">463</span><span id="line-463"> }</span>
+<span class="source-line-no">425</span><span id="line-425"> @Test</span>
+<span class="source-line-no">426</span><span id="line-426"> public void testArchiveRegions(TestInfo testInfo) throws Exception {</span>
+<span class="source-line-no">427</span><span id="line-427"> final TableName tableName = TableName.valueOf(testMethodName(testInfo));</span>
+<span class="source-line-no">428</span><span id="line-428"> List<HRegion> regions = initTableForArchivingRegions(tableName);</span>
+<span class="source-line-no">429</span><span id="line-429"></span>
+<span class="source-line-no">430</span><span id="line-430"> FileSystem fs = UTIL.getTestFileSystem();</span>
+<span class="source-line-no">431</span><span id="line-431"></span>
+<span class="source-line-no">432</span><span id="line-432"> // now attempt to depose the regions</span>
+<span class="source-line-no">433</span><span id="line-433"> Path rootDir = CommonFSUtils.getRootDir(UTIL.getConfiguration());</span>
+<span class="source-line-no">434</span><span id="line-434"> Path tableDir = CommonFSUtils.getTableDir(rootDir, regions.get(0).getRegionInfo().getTable());</span>
+<span class="source-line-no">435</span><span id="line-435"> List<Path> regionDirList = regions.stream()</span>
+<span class="source-line-no">436</span><span id="line-436"> .map(region -> FSUtils.getRegionDirFromTableDir(tableDir, region.getRegionInfo()))</span>
+<span class="source-line-no">437</span><span id="line-437"> .collect(Collectors.toList());</span>
+<span class="source-line-no">438</span><span id="line-438"></span>
+<span class="source-line-no">439</span><span id="line-439"> HFileArchiver.archiveRegions(UTIL.getConfiguration(), fs, rootDir, tableDir, regionDirList);</span>
+<span class="source-line-no">440</span><span id="line-440"></span>
+<span class="source-line-no">441</span><span id="line-441"> // check for the existence of the archive directory and some files in it</span>
+<span class="source-line-no">442</span><span id="line-442"> for (HRegion region : regions) {</span>
+<span class="source-line-no">443</span><span id="line-443"> Path archiveDir =</span>
+<span class="source-line-no">444</span><span id="line-444"> HFileArchiveTestingUtil.getRegionArchiveDir(UTIL.getConfiguration(), region);</span>
+<span class="source-line-no">445</span><span id="line-445"> assertTrue(fs.exists(archiveDir));</span>
+<span class="source-line-no">446</span><span id="line-446"></span>
+<span class="source-line-no">447</span><span id="line-447"> // check to make sure the store directory was copied</span>
+<span class="source-line-no">448</span><span id="line-448"> FileStatus[] stores =</span>
+<span class="source-line-no">449</span><span id="line-449"> fs.listStatus(archiveDir, p -> !p.getName().contains(HConstants.RECOVERED_EDITS_DIR));</span>
+<span class="source-line-no">450</span><span id="line-450"> assertTrue(stores.length == 1);</span>
+<span class="source-line-no">451</span><span id="line-451"></span>
+<span class="source-line-no">452</span><span id="line-452"> // make sure we archived the store files</span>
+<span class="source-line-no">453</span><span id="line-453"> FileStatus[] storeFiles = fs.listStatus(stores[0].getPath());</span>
+<span class="source-line-no">454</span><span id="line-454"> assertTrue(storeFiles.length > 0);</span>
+<span class="source-line-no">455</span><span id="line-455"> }</span>
+<span class="source-line-no">456</span><span id="line-456"></span>
+<span class="source-line-no">457</span><span id="line-457"> // then ensure the region's directories aren't present</span>
+<span class="source-line-no">458</span><span id="line-458"> for (Path regionDir : regionDirList) {</span>
+<span class="source-line-no">459</span><span id="line-459"> assertFalse(fs.exists(regionDir));</span>
+<span class="source-line-no">460</span><span id="line-460"> }</span>
+<span class="source-line-no">461</span><span id="line-461"></span>
+<span class="source-line-no">462</span><span id="line-462"> UTIL.deleteTable(tableName);</span>
+<span class="source-line-no">463</span><span id="line-463"> }</span>
<span class="source-line-no">464</span><span id="line-464"></span>
-<span class="source-line-no">465</span><span id="line-465"> UTIL.deleteTable(tableName);</span>
-<span class="source-line-no">466</span><span id="line-466"> }</span>
-<span class="source-line-no">467</span><span id="line-467"></span>
-<span class="source-line-no">468</span><span id="line-468"> @Test(expected = IOException.class)</span>
-<span class="source-line-no">469</span><span id="line-469"> public void testArchiveRegionsWhenPermissionDenied() throws Exception {</span>
-<span class="source-line-no">470</span><span id="line-470"> final TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">471</span><span id="line-471"> List<HRegion> regions = initTableForArchivingRegions(tableName);</span>
-<span class="source-line-no">472</span><span id="line-472"></span>
-<span class="source-line-no">473</span><span id="line-473"> // now attempt to depose the regions</span>
-<span class="source-line-no">474</span><span id="line-474"> Path rootDir = CommonFSUtils.getRootDir(UTIL.getConfiguration());</span>
-<span class="source-line-no">475</span><span id="line-475"> Path tableDir = CommonFSUtils.getTableDir(rootDir, regions.get(0).getRegionInfo().getTable());</span>
-<span class="source-line-no">476</span><span id="line-476"> List<Path> regionDirList = regions.stream()</span>
-<span class="source-line-no">477</span><span id="line-477"> .map(region -> FSUtils.getRegionDirFromTableDir(tableDir, region.getRegionInfo()))</span>
-<span class="source-line-no">478</span><span id="line-478"> .collect(Collectors.toList());</span>
-<span class="source-line-no">479</span><span id="line-479"></span>
-<span class="source-line-no">480</span><span id="line-480"> // To create a permission denied error, we do archive regions as a non-current user</span>
-<span class="source-line-no">481</span><span id="line-481"> UserGroupInformation ugi =</span>
-<span class="source-line-no">482</span><span id="line-482"> UserGroupInformation.createUserForTesting("foo1234", new String[] { "group1" });</span>
-<span class="source-line-no">483</span><span id="line-483"></span>
-<span class="source-line-no">484</span><span id="line-484"> try {</span>
-<span class="source-line-no">485</span><span id="line-485"> ugi.doAs((PrivilegedExceptionAction<Void>) () -> {</span>
-<span class="source-line-no">486</span><span id="line-486"> FileSystem fs = UTIL.getTestFileSystem();</span>
-<span class="source-line-no">487</span><span id="line-487"> HFileArchiver.archiveRegions(UTIL.getConfiguration(), fs, rootDir, tableDir, regionDirList);</span>
-<span class="source-line-no">488</span><span id="line-488"> return null;</span>
-<span class="source-line-no">489</span><span id="line-489"> });</span>
-<span class="source-line-no">490</span><span id="line-490"> } catch (IOException e) {</span>
-<span class="source-line-no">491</span><span id="line-491"> assertTrue(e.getCause().getMessage().contains("Permission denied"));</span>
-<span class="source-line-no">492</span><span id="line-492"> throw e;</span>
-<span class="source-line-no">493</span><span id="line-493"> } finally {</span>
-<span class="source-line-no">494</span><span id="line-494"> UTIL.deleteTable(tableName);</span>
-<span class="source-line-no">495</span><span id="line-495"> }</span>
-<span class="source-line-no">496</span><span id="line-496"> }</span>
-<span class="source-line-no">497</span><span id="line-497"></span>
-<span class="source-line-no">498</span><span id="line-498"> @Test</span>
-<span class="source-line-no">499</span><span id="line-499"> public void testArchiveOnTableDelete() throws Exception {</span>
-<span class="source-line-no">500</span><span id="line-500"> final TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">501</span><span id="line-501"> UTIL.createTable(tableName, TEST_FAM);</span>
-<span class="source-line-no">502</span><span id="line-502"></span>
-<span class="source-line-no">503</span><span id="line-503"> List<HRegion> servingRegions = UTIL.getHBaseCluster().getRegions(tableName);</span>
-<span class="source-line-no">504</span><span id="line-504"> // make sure we only have 1 region serving this table</span>
-<span class="source-line-no">505</span><span id="line-505"> assertEquals(1, servingRegions.size());</span>
-<span class="source-line-no">506</span><span id="line-506"> HRegion region = servingRegions.get(0);</span>
-<span class="source-line-no">507</span><span id="line-507"></span>
-<span class="source-line-no">508</span><span id="line-508"> // get the parent RS and monitor</span>
-<span class="source-line-no">509</span><span id="line-509"> HRegionServer hrs = UTIL.getRSForFirstRegionInTable(tableName);</span>
-<span class="source-line-no">510</span><span id="line-510"> FileSystem fs = hrs.getFileSystem();</span>
-<span class="source-line-no">511</span><span id="line-511"></span>
-<span class="source-line-no">512</span><span id="line-512"> // put some data on the region</span>
-<span class="source-line-no">513</span><span id="line-513"> LOG.debug("-------Loading table");</span>
-<span class="source-line-no">514</span><span id="line-514"> UTIL.loadRegion(region, TEST_FAM);</span>
-<span class="source-line-no">515</span><span id="line-515"></span>
-<span class="source-line-no">516</span><span id="line-516"> // get the hfiles in the region</span>
-<span class="source-line-no">517</span><span id="line-517"> List<HRegion> regions = hrs.getRegions(tableName);</span>
-<span class="source-line-no">518</span><span id="line-518"> assertEquals("More that 1 region for test table.", 1, regions.size());</span>
-<span class="source-line-no">519</span><span id="line-519"></span>
-<span class="source-line-no">520</span><span id="line-520"> region = regions.get(0);</span>
-<span class="source-line-no">521</span><span id="line-521"> // wait for all the compactions to complete</span>
-<span class="source-line-no">522</span><span id="line-522"> region.waitForFlushesAndCompactions();</span>
-<span class="source-line-no">523</span><span id="line-523"></span>
-<span class="source-line-no">524</span><span id="line-524"> // disable table to prevent new updates</span>
-<span class="source-line-no">525</span><span id="line-525"> UTIL.getAdmin().disableTable(tableName);</span>
-<span class="source-line-no">526</span><span id="line-526"> LOG.debug("Disabled table");</span>
+<span class="source-line-no">465</span><span id="line-465"> @Test</span>
+<span class="source-line-no">466</span><span id="line-466"> public void testArchiveRegionsWhenPermissionDenied(TestInfo testInfo) throws Exception {</span>
+<span class="source-line-no">467</span><span id="line-467"> final TableName tableName = TableName.valueOf(testMethodName(testInfo));</span>
+<span class="source-line-no">468</span><span id="line-468"> List<HRegion> regions = initTableForArchivingRegions(tableName);</span>
+<span class="source-line-no">469</span><span id="line-469"></span>
+<span class="source-line-no">470</span><span id="line-470"> // now attempt to depose the regions</span>
+<span class="source-line-no">471</span><span id="line-471"> Path rootDir = CommonFSUtils.getRootDir(UTIL.getConfiguration());</span>
+<span class="source-line-no">472</span><span id="line-472"> Path tableDir = CommonFSUtils.getTableDir(rootDir, regions.get(0).getRegionInfo().getTable());</span>
+<span class="source-line-no">473</span><span id="line-473"> List<Path> regionDirList = regions.stream()</span>
+<span class="source-line-no">474</span><span id="line-474"> .map(region -> FSUtils.getRegionDirFromTableDir(tableDir, region.getRegionInfo()))</span>
+<span class="source-line-no">475</span><span id="line-475"> .collect(Collectors.toList());</span>
+<span class="source-line-no">476</span><span id="line-476"></span>
+<span class="source-line-no">477</span><span id="line-477"> // To create a permission denied error, we do archive regions as a non-current user</span>
+<span class="source-line-no">478</span><span id="line-478"> UserGroupInformation ugi =</span>
+<span class="source-line-no">479</span><span id="line-479"> UserGroupInformation.createUserForTesting("foo1234", new String[] { "group1" });</span>
+<span class="source-line-no">480</span><span id="line-480"></span>
+<span class="source-line-no">481</span><span id="line-481"> try {</span>
+<span class="source-line-no">482</span><span id="line-482"> IOException e =</span>
+<span class="source-line-no">483</span><span id="line-483"> assertThrows(IOException.class, () -> ugi.doAs((PrivilegedExceptionAction<Void>) () -> {</span>
+<span class="source-line-no">484</span><span id="line-484"> FileSystem fs = UTIL.getTestFileSystem();</span>
+<span class="source-line-no">485</span><span id="line-485"> HFileArchiver.archiveRegions(UTIL.getConfiguration(), fs, rootDir, tableDir,</span>
+<span class="source-line-no">486</span><span id="line-486"> regionDirList);</span>
+<span class="source-line-no">487</span><span id="line-487"> return null;</span>
+<span class="source-line-no">488</span><span id="line-488"> }));</span>
+<span class="source-line-no">489</span><span id="line-489"> assertTrue(e.getCause().getMessage().contains("Permission denied"));</span>
+<span class="source-line-no">490</span><span id="line-490"> } finally {</span>
+<span class="source-line-no">491</span><span id="line-491"> UTIL.deleteTable(tableName);</span>
+<span class="source-line-no">492</span><span id="line-492"> }</span>
+<span class="source-line-no">493</span><span id="line-493"> }</span>
+<span class="source-line-no">494</span><span id="line-494"></span>
+<span class="source-line-no">495</span><span id="line-495"> @Test</span>
+<span class="source-line-no">496</span><span id="line-496"> public void testArchiveOnTableDelete(TestInfo testInfo) throws Exception {</span>
+<span class="source-line-no">497</span><span id="line-497"> final TableName tableName = TableName.valueOf(testMethodName(testInfo));</span>
+<span class="source-line-no">498</span><span id="line-498"> UTIL.createTable(tableName, TEST_FAM);</span>
+<span class="source-line-no">499</span><span id="line-499"></span>
+<span class="source-line-no">500</span><span id="line-500"> List<HRegion> servingRegions = UTIL.getHBaseCluster().getRegions(tableName);</span>
+<span class="source-line-no">501</span><span id="line-501"> // make sure we only have 1 region serving this table</span>
+<span class="source-line-no">502</span><span id="line-502"> assertEquals(1, servingRegions.size());</span>
+<span class="source-line-no">503</span><span id="line-503"> HRegion region = servingRegions.get(0);</span>
+<span class="source-line-no">504</span><span id="line-504"></span>
+<span class="source-line-no">505</span><span id="line-505"> // get the parent RS and monitor</span>
+<span class="source-line-no">506</span><span id="line-506"> HRegionServer hrs = UTIL.getRSForFirstRegionInTable(tableName);</span>
+<span class="source-line-no">507</span><span id="line-507"> FileSystem fs = hrs.getFileSystem();</span>
+<span class="source-line-no">508</span><span id="line-508"></span>
+<span class="source-line-no">509</span><span id="line-509"> // put some data on the region</span>
+<span class="source-line-no">510</span><span id="line-510"> LOG.debug("-------Loading table");</span>
+<span class="source-line-no">511</span><span id="line-511"> UTIL.loadRegion(region, TEST_FAM);</span>
+<span class="source-line-no">512</span><span id="line-512"></span>
+<span class="source-line-no">513</span><span id="line-513"> // get the hfiles in the region</span>
+<span class="source-line-no">514</span><span id="line-514"> List<HRegion> regions = hrs.getRegions(tableName);</span>
+<span class="source-line-no">515</span><span id="line-515"> assertEquals(1, regions.size(), "More that 1 region for test table.");</span>
+<span class="source-line-no">516</span><span id="line-516"></span>
+<span class="source-line-no">517</span><span id="line-517"> region = regions.get(0);</span>
+<span class="source-line-no">518</span><span id="line-518"> // wait for all the compactions to complete</span>
+<span class="source-line-no">519</span><span id="line-519"> region.waitForFlushesAndCompactions();</span>
+<span class="source-line-no">520</span><span id="line-520"></span>
+<span class="source-line-no">521</span><span id="line-521"> // disable table to prevent new updates</span>
+<span class="source-line-no">522</span><span id="line-522"> UTIL.getAdmin().disableTable(tableName);</span>
+<span class="source-line-no">523</span><span id="line-523"> LOG.debug("Disabled table");</span>
+<span class="source-line-no">524</span><span id="line-524"></span>
+<span class="source-line-no">525</span><span id="line-525"> // remove all the files from the archive to get a fair comparison</span>
+<span class="source-line-no">526</span><span id="line-526"> clearArchiveDirectory();</span>
<span class="source-line-no">527</span><span id="line-527"></span>
-<span class="source-line-no">528</span><span id="line-528"> // remove all the files from the archive to get a fair comparison</span>
-<span class="source-line-no">529</span><span id="line-529"> clearArchiveDirectory();</span>
-<span class="source-line-no">530</span><span id="line-530"></span>
-<span class="source-line-no">531</span><span id="line-531"> // then get the current store files</span>
-<span class="source-line-no">532</span><span id="line-532"> byte[][] columns = region.getTableDescriptor().getColumnFamilyNames().toArray(new byte[0][]);</span>
-<span class="source-line-no">533</span><span id="line-533"> List<String> storeFiles = region.getStoreFileList(columns);</span>
-<span class="source-line-no">534</span><span id="line-534"></span>
-<span class="source-line-no">535</span><span id="line-535"> // then delete the table so the hfiles get archived</span>
-<span class="source-line-no">536</span><span id="line-536"> UTIL.deleteTable(tableName);</span>
-<span class="source-line-no">537</span><span id="line-537"> LOG.debug("Deleted table");</span>
+<span class="source-line-no">528</span><span id="line-528"> // then get the current store files</span>
+<span class="source-line-no">529</span><span id="line-529"> byte[][] columns = region.getTableDescriptor().getColumnFamilyNames().toArray(new byte[0][]);</span>
+<span class="source-line-no">530</span><span id="line-530"> List<String> storeFiles = region.getStoreFileList(columns);</span>
+<span class="source-line-no">531</span><span id="line-531"></span>
+<span class="source-line-no">532</span><span id="line-532"> // then delete the table so the hfiles get archived</span>
+<span class="source-line-no">533</span><span id="line-533"> UTIL.deleteTable(tableName);</span>
+<span class="source-line-no">534</span><span id="line-534"> LOG.debug("Deleted table");</span>
+<span class="source-line-no">535</span><span id="line-535"></span>
+<span class="source-line-no">536</span><span id="line-536"> assertArchiveFiles(fs, storeFiles, 30000);</span>
+<span class="source-line-no">537</span><span id="line-537"> }</span>
<span class="source-line-no">538</span><span id="line-538"></span>
-<span class="source-line-no">539</span><span id="line-539"> assertArchiveFiles(fs, storeFiles, 30000);</span>
-<span class="source-line-no">540</span><span id="line-540"> }</span>
-<span class="source-line-no">541</span><span id="line-541"></span>
-<span class="source-line-no">542</span><span id="line-542"> private void assertArchiveFiles(FileSystem fs, List<String> storeFiles, long timeout)</span>
-<span class="source-line-no">543</span><span id="line-543"> throws IOException {</span>
-<span class="source-line-no">544</span><span id="line-544"> long end = EnvironmentEdgeManager.currentTime() + timeout;</span>
-<span class="source-line-no">545</span><span id="line-545"> Path archiveDir = HFileArchiveUtil.getArchivePath(UTIL.getConfiguration());</span>
-<span class="source-line-no">546</span><span id="line-546"> List<String> archivedFiles = new ArrayList<>();</span>
-<span class="source-line-no">547</span><span id="line-547"></span>
-<span class="source-line-no">548</span><span id="line-548"> // We have to ensure that the DeleteTableHandler is finished. HBaseAdmin.deleteXXX()</span>
-<span class="source-line-no">549</span><span id="line-549"> // can return before all files</span>
-<span class="source-line-no">550</span><span id="line-550"> // are archived. We should fix HBASE-5487 and fix synchronous operations from admin.</span>
-<span class="source-line-no">551</span><span id="line-551"> while (EnvironmentEdgeManager.currentTime() < end) {</span>
-<span class="source-line-no">552</span><span id="line-552"> archivedFiles = getAllFileNames(fs, archiveDir);</span>
-<span class="source-line-no">553</span><span id="line-553"> if (archivedFiles.size() >= storeFiles.size()) {</span>
-<span class="source-line-no">554</span><span id="line-554"> break;</span>
-<span class="source-line-no">555</span><span id="line-555"> }</span>
-<span class="source-line-no">556</span><span id="line-556"> }</span>
+<span class="source-line-no">539</span><span id="line-539"> private void assertArchiveFiles(FileSystem fs, List<String> storeFiles, long timeout)</span>
+<span class="source-line-no">540</span><span id="line-540"> throws IOException {</span>
+<span class="source-line-no">541</span><span id="line-541"> long end = EnvironmentEdgeManager.currentTime() + timeout;</span>
+<span class="source-line-no">542</span><span id="line-542"> Path archiveDir = HFileArchiveUtil.getArchivePath(UTIL.getConfiguration());</span>
+<span class="source-line-no">543</span><span id="line-543"> List<String> archivedFiles = new ArrayList<>();</span>
+<span class="source-line-no">544</span><span id="line-544"></span>
+<span class="source-line-no">545</span><span id="line-545"> // We have to ensure that the DeleteTableHandler is finished. HBaseAdmin.deleteXXX()</span>
+<span class="source-line-no">546</span><span id="line-546"> // can return before all files</span>
+<span class="source-line-no">547</span><span id="line-547"> // are archived. We should fix HBASE-5487 and fix synchronous operations from admin.</span>
+<span class="source-line-no">548</span><span id="line-548"> while (EnvironmentEdgeManager.currentTime() < end) {</span>
+<span class="source-line-no">549</span><span id="line-549"> archivedFiles = getAllFileNames(fs, archiveDir);</span>
+<span class="source-line-no">550</span><span id="line-550"> if (archivedFiles.size() >= storeFiles.size()) {</span>
+<span class="source-line-no">551</span><span id="line-551"> break;</span>
+<span class="source-line-no">552</span><span id="line-552"> }</span>
+<span class="source-line-no">553</span><span id="line-553"> }</span>
+<span class="source-line-no">554</span><span id="line-554"></span>
+<span class="source-line-no">555</span><span id="line-555"> Collections.sort(storeFiles);</span>
+<span class="source-line-no">556</span><span id="line-556"> Collections.sort(archivedFiles);</span>
<span class="source-line-no">557</span><span id="line-557"></span>
-<span class="source-line-no">558</span><span id="line-558"> Collections.sort(storeFiles);</span>
-<span class="source-line-no">559</span><span id="line-559"> Collections.sort(archivedFiles);</span>
-<span class="source-line-no">560</span><span id="line-560"></span>
-<span class="source-line-no">561</span><span id="line-561"> LOG.debug("Store files:");</span>
-<span class="source-line-no">562</span><span id="line-562"> for (int i = 0; i < storeFiles.size(); i++) {</span>
-<span class="source-line-no">563</span><span id="line-563"> LOG.debug(i + " - " + storeFiles.get(i));</span>
-<span class="source-line-no">564</span><span id="line-564"> }</span>
-<span class="source-line-no">565</span><span id="line-565"> LOG.debug("Archive files:");</span>
-<span class="source-line-no">566</span><span id="line-566"> for (int i = 0; i < archivedFiles.size(); i++) {</span>
-<span class="source-line-no">567</span><span id="line-567"> LOG.debug(i + " - " + archivedFiles.get(i));</span>
-<span class="source-line-no">568</span><span id="line-568"> }</span>
-<span class="source-line-no">569</span><span id="line-569"></span>
-<span class="source-line-no">570</span><span id="line-570"> assertTrue("Archived files are missing some of the store files!",</span>
-<span class="source-line-no">571</span><span id="line-571"> archivedFiles.containsAll(storeFiles));</span>
-<span class="source-line-no">572</span><span id="line-572"> }</span>
-<span class="source-line-no">573</span><span id="line-573"></span>
-<span class="source-line-no">574</span><span id="line-574"> /**</span>
-<span class="source-line-no">575</span><span id="line-575"> * Test that the store files are archived when a column family is removed.</span>
-<span class="source-line-no">576</span><span id="line-576"> * @throws java.io.IOException if there's a problem creating a table.</span>
-<span class="source-line-no">577</span><span id="line-577"> * @throws java.lang.InterruptedException problem getting a RegionServer.</span>
-<span class="source-line-no">578</span><span id="line-578"> */</span>
-<span class="source-line-no">579</span><span id="line-579"> @Test</span>
-<span class="source-line-no">580</span><span id="line-580"> public void testArchiveOnTableFamilyDelete() throws IOException, InterruptedException {</span>
-<span class="source-line-no">581</span><span id="line-581"> final TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">582</span><span id="line-582"> UTIL.createTable(tableName, new byte[][] { TEST_FAM, Bytes.toBytes("fam2") });</span>
-<span class="source-line-no">583</span><span id="line-583"></span>
-<span class="source-line-no">584</span><span id="line-584"> List<HRegion> servingRegions = UTIL.getHBaseCluster().getRegions(tableName);</span>
-<span class="source-line-no">585</span><span id="line-585"> // make sure we only have 1 region serving this table</span>
-<span class="source-line-no">586</span><span id="line-586"> assertEquals(1, servingRegions.size());</span>
-<span class="source-line-no">587</span><span id="line-587"> HRegion region = servingRegions.get(0);</span>
-<span class="source-line-no">588</span><span id="line-588"></span>
-<span class="source-line-no">589</span><span id="line-589"> // get the parent RS and monitor</span>
-<span class="source-line-no">590</span><span id="line-590"> HRegionServer hrs = UTIL.getRSForFirstRegionInTable(tableName);</span>
-<span class="source-line-no">591</span><span id="line-591"> FileSystem fs = hrs.getFileSystem();</span>
-<span class="source-line-no">592</span><span id="line-592"></span>
-<span class="source-line-no">593</span><span id="line-593"> // put some data on the region</span>
-<span class="source-line-no">594</span><span id="line-594"> LOG.debug("-------Loading table");</span>
-<span class="source-line-no">595</span><span id="line-595"> UTIL.loadRegion(region, TEST_FAM);</span>
-<span class="source-line-no">596</span><span id="line-596"></span>
-<span class="source-line-no">597</span><span id="line-597"> // get the hfiles in the region</span>
-<span class="source-line-no">598</span><span id="line-598"> List<HRegion> regions = hrs.getRegions(tableName);</span>
-<span class="source-line-no">599</span><span id="line-599"> assertEquals("More that 1 region for test table.", 1, regions.size());</span>
-<span class="source-line-no">600</span><span id="line-600"></span>
-<span class="source-line-no">601</span><span id="line-601"> region = regions.get(0);</span>
-<span class="source-line-no">602</span><span id="line-602"> // wait for all the compactions to complete</span>
-<span class="source-line-no">603</span><span id="line-603"> region.waitForFlushesAndCompactions();</span>
-<span class="source-line-no">604</span><span id="line-604"></span>
-<span class="source-line-no">605</span><span id="line-605"> // disable table to prevent new updates</span>
-<span class="source-line-no">606</span><span id="line-606"> UTIL.getAdmin().disableTable(tableName);</span>
-<span class="source-line-no">607</span><span id="line-607"> LOG.debug("Disabled table");</span>
-<span class="source-line-no">608</span><span id="line-608"></span>
-<span class="source-line-no">609</span><span id="line-609"> // remove all the files from the archive to get a fair comparison</span>
-<span class="source-line-no">610</span><span id="line-610"> clearArchiveDirectory();</span>
-<span class="source-line-no">611</span><span id="line-611"></span>
-<span class="source-line-no">612</span><span id="line-612"> // then get the current store files</span>
-<span class="source-line-no">613</span><span id="line-613"> byte[][] columns = region.getTableDescriptor().getColumnFamilyNames().toArray(new byte[0][]);</span>
-<span class="source-line-no">614</span><span id="line-614"> List<String> storeFiles = region.getStoreFileList(columns);</span>
-<span class="source-line-no">615</span><span id="line-615"></span>
-<span class="source-line-no">616</span><span id="line-616"> // then delete the table so the hfiles get archived</span>
-<span class="source-line-no">617</span><span id="line-617"> UTIL.getAdmin().deleteColumnFamily(tableName, TEST_FAM);</span>
+<span class="source-line-no">558</span><span id="line-558"> LOG.debug("Store files:");</span>
+<span class="source-line-no">559</span><span id="line-559"> for (int i = 0; i < storeFiles.size(); i++) {</span>
+<span class="source-line-no">560</span><span id="line-560"> LOG.debug(i + " - " + storeFiles.get(i));</span>
+<span class="source-line-no">561</span><span id="line-561"> }</span>
+<span class="source-line-no">562</span><span id="line-562"> LOG.debug("Archive files:");</span>
+<span class="source-line-no">563</span><span id="line-563"> for (int i = 0; i < archivedFiles.size(); i++) {</span>
+<span class="source-line-no">564</span><span id="line-564"> LOG.debug(i + " - " + archivedFiles.get(i));</span>
+<span class="source-line-no">565</span><span id="line-565"> }</span>
+<span class="source-line-no">566</span><span id="line-566"></span>
+<span class="source-line-no">567</span><span id="line-567"> assertTrue(archivedFiles.containsAll(storeFiles),</span>
+<span class="source-line-no">568</span><span id="line-568"> "Archived files are missing some of the store files!");</span>
+<span class="source-line-no">569</span><span id="line-569"> }</span>
+<span class="source-line-no">570</span><span id="line-570"></span>
+<span class="source-line-no">571</span><span id="line-571"> /**</span>
+<span class="source-line-no">572</span><span id="line-572"> * Test that the store files are archived when a column family is removed.</span>
+<span class="source-line-no">573</span><span id="line-573"> * @throws java.io.IOException if there's a problem creating a table.</span>
+<span class="source-line-no">574</span><span id="line-574"> * @throws java.lang.InterruptedException problem getting a RegionServer.</span>
+<span class="source-line-no">575</span><span id="line-575"> */</span>
+<span class="source-line-no">576</span><span id="line-576"> @Test</span>
+<span class="source-line-no">577</span><span id="line-577"> public void testArchiveOnTableFamilyDelete(TestInfo testInfo)</span>
+<span class="source-line-no">578</span><span id="line-578"> throws IOException, InterruptedException {</span>
+<span class="source-line-no">579</span><span id="line-579"> final TableName tableName = TableName.valueOf(testMethodName(testInfo));</span>
+<span class="source-line-no">580</span><span id="line-580"> UTIL.createTable(tableName, new byte[][] { TEST_FAM, Bytes.toBytes("fam2") });</span>
+<span class="source-line-no">581</span><span id="line-581"></span>
+<span class="source-line-no">582</span><span id="line-582"> List<HRegion> servingRegions = UTIL.getHBaseCluster().getRegions(tableName);</span>
+<span class="source-line-no">583</span><span id="line-583"> // make sure we only have 1 region serving this table</span>
+<span class="source-line-no">584</span><span id="line-584"> assertEquals(1, servingRegions.size());</span>
+<span class="source-line-no">585</span><span id="line-585"> HRegion region = servingRegions.get(0);</span>
+<span class="source-line-no">586</span><span id="line-586"></span>
+<span class="source-line-no">587</span><span id="line-587"> // get the parent RS and monitor</span>
+<span class="source-line-no">588</span><span id="line-588"> HRegionServer hrs = UTIL.getRSForFirstRegionInTable(tableName);</span>
+<span class="source-line-no">589</span><span id="line-589"> FileSystem fs = hrs.getFileSystem();</span>
+<span class="source-line-no">590</span><span id="line-590"></span>
+<span class="source-line-no">591</span><span id="line-591"> // put some data on the region</span>
+<span class="source-line-no">592</span><span id="line-592"> LOG.debug("-------Loading table");</span>
+<span class="source-line-no">593</span><span id="line-593"> UTIL.loadRegion(region, TEST_FAM);</span>
+<span class="source-line-no">594</span><span id="line-594"></span>
+<span class="source-line-no">595</span><span id="line-595"> // get the hfiles in the region</span>
+<span class="source-line-no">596</span><span id="line-596"> List<HRegion> regions = hrs.getRegions(tableName);</span>
+<span class="source-line-no">597</span><span id="line-597"> assertEquals(1, regions.size(), "More that 1 region for test table.");</span>
+<span class="source-line-no">598</span><span id="line-598"></span>
+<span class="source-line-no">599</span><span id="line-599"> region = regions.get(0);</span>
+<span class="source-line-no">600</span><span id="line-600"> // wait for all the compactions to complete</span>
+<span class="source-line-no">601</span><span id="line-601"> region.waitForFlushesAndCompactions();</span>
+<span class="source-line-no">602</span><span id="line-602"></span>
+<span class="source-line-no">603</span><span id="line-603"> // disable table to prevent new updates</span>
+<span class="source-line-no">604</span><span id="line-604"> UTIL.getAdmin().disableTable(tableName);</span>
+<span class="source-line-no">605</span><span id="line-605"> LOG.debug("Disabled table");</span>
+<span class="source-line-no">606</span><span id="line-606"></span>
+<span class="source-line-no">607</span><span id="line-607"> // remove all the files from the archive to get a fair comparison</span>
+<span class="source-line-no">608</span><span id="line-608"> clearArchiveDirectory();</span>
+<span class="source-line-no">609</span><span id="line-609"></span>
+<span class="source-line-no">610</span><span id="line-610"> // then get the current store files</span>
+<span class="source-line-no">611</span><span id="line-611"> byte[][] columns = region.getTableDescriptor().getColumnFamilyNames().toArray(new byte[0][]);</span>
+<span class="source-line-no">612</span><span id="line-612"> List<String> storeFiles = region.getStoreFileList(columns);</span>
+<span class="source-line-no">613</span><span id="line-613"></span>
+<span class="source-line-no">614</span><span id="line-614"> // then delete the table so the hfiles get archived</span>
+<span class="source-line-no">615</span><span id="line-615"> UTIL.getAdmin().deleteColumnFamily(tableName, TEST_FAM);</span>
+<span class="source-line-no">616</span><span id="line-616"></span>
+<span class="source-line-no">617</span><span id="line-617"> assertArchiveFiles(fs, storeFiles, 30000);</span>
<span class="source-line-no">618</span><span id="line-618"></span>
-<span class="source-line-no">619</span><span id="line-619"> assertArchiveFiles(fs, storeFiles, 30000);</span>
-<span class="source-line-no">620</span><span id="line-620"></span>
-<span class="source-line-no">621</span><span id="line-621"> UTIL.deleteTable(tableName);</span>
-<span class="source-line-no">622</span><span id="line-622"> }</span>
-<span class="source-line-no">623</span><span id="line-623"></span>
-<span class="source-line-no">624</span><span id="line-624"> /**</span>
-<span class="source-line-no">625</span><span id="line-625"> * Test HFileArchiver.resolveAndArchive() race condition HBASE-7643</span>
-<span class="source-line-no">626</span><span id="line-626"> */</span>
-<span class="source-line-no">627</span><span id="line-627"> @Test</span>
-<span class="source-line-no">628</span><span id="line-628"> public void testCleaningRace() throws Exception {</span>
-<span class="source-line-no">629</span><span id="line-629"> final long TEST_TIME = 20 * 1000;</span>
-<span class="source-line-no">630</span><span id="line-630"> final ChoreService choreService = new ChoreService("TEST_SERVER_NAME");</span>
-<span class="source-line-no">631</span><span id="line-631"></span>
-<span class="source-line-no">632</span><span id="line-632"> Configuration conf = UTIL.getMiniHBaseCluster().getMaster().getConfiguration();</span>
-<span class="source-line-no">633</span><span id="line-633"> Path rootDir = UTIL.getDataTestDirOnTestFS("testCleaningRace");</span>
-<span class="source-line-no">634</span><span id="line-634"> FileSystem fs = UTIL.getTestFileSystem();</span>
-<span class="source-line-no">635</span><span id="line-635"></span>
-<span class="source-line-no">636</span><span id="line-636"> Path archiveDir = new Path(rootDir, HConstants.HFILE_ARCHIVE_DIRECTORY);</span>
-<span class="source-line-no">637</span><span id="line-637"> Path regionDir = new Path(</span>
-<span class="source-line-no">638</span><span id="line-638"> CommonFSUtils.getTableDir(new Path("./"), TableName.valueOf(name.getMethodName())), "abcdef");</span>
-<span class="source-line-no">639</span><span id="line-639"> Path familyDir = new Path(regionDir, "cf");</span>
-<span class="source-line-no">640</span><span id="line-640"></span>
-<span class="source-line-no">641</span><span id="line-641"> Path sourceRegionDir = new Path(rootDir, regionDir);</span>
-<span class="source-line-no">642</span><span id="line-642"> fs.mkdirs(sourceRegionDir);</span>
-<span class="source-line-no">643</span><span id="line-643"></span>
-<span class="source-line-no">644</span><span id="line-644"> Stoppable stoppable = new StoppableImplementation();</span>
-<span class="source-line-no">645</span><span id="line-645"></span>
-<span class="source-line-no">646</span><span id="line-646"> // The cleaner should be looping without long pauses to reproduce the race condition.</span>
-<span class="source-line-no">647</span><span id="line-647"> HFileCleaner cleaner = getHFileCleaner(stoppable, conf, fs, archiveDir);</span>
-<span class="source-line-no">648</span><span id="line-648"> assertNotNull("cleaner should not be null", cleaner);</span>
-<span class="source-line-no">649</span><span id="line-649"> try {</span>
-<span class="source-line-no">650</span><span id="line-650"> choreService.scheduleChore(cleaner);</span>
-<span class="source-line-no">651</span><span id="line-651"> // Keep creating/archiving new files while the cleaner is running in the other thread</span>
-<span class="source-line-no">652</span><span id="line-652"> long startTime = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">653</span><span id="line-653"> for (long fid = 0; (EnvironmentEdgeManager.currentTime() - startTime) < TEST_TIME; ++fid) {</span>
-<span class="source-line-no">654</span><span id="line-654"> Path file = new Path(familyDir, String.valueOf(fid));</span>
-<span class="source-line-no">655</span><span id="line-655"> Path sourceFile = new Path(rootDir, file);</span>
-<span class="source-line-no">656</span><span id="line-656"> Path archiveFile = new Path(archiveDir, file);</span>
-<span class="source-line-no">657</span><span id="line-657"></span>
-<span class="source-line-no">658</span><span id="line-658"> fs.createNewFile(sourceFile);</span>
-<span class="source-line-no">659</span><span id="line-659"></span>
-<span class="source-line-no">660</span><span id="line-660"> try {</span>
-<span class="source-line-no">661</span><span id="line-661"> // Try to archive the file</span>
-<span class="source-line-no">662</span><span id="line-662"> HFileArchiver.archiveRegion(conf, fs, rootDir, sourceRegionDir.getParent(),</span>
-<span class="source-line-no">663</span><span id="line-663"> sourceRegionDir);</span>
-<span class="source-line-no">664</span><span id="line-664"></span>
-<span class="source-line-no">665</span><span id="line-665"> // The archiver succeded, the file is no longer in the original location</span>
-<span class="source-line-no">666</span><span id="line-666"> // but it's in the archive location.</span>
-<span class="source-line-no">667</span><span id="line-667"> LOG.debug("hfile=" + fid + " should be in the archive");</span>
-<span class="source-line-no">668</span><span id="line-668"> assertTrue(fs.exists(archiveFile));</span>
-<span class="source-line-no">669</span><span id="line-669"> assertFalse(fs.exists(sourceFile));</span>
-<span class="source-line-no">670</span><span id="line-670"> } catch (IOException e) {</span>
-<span class="source-line-no">671</span><span id="line-671"> // The archiver is unable to archive the file. Probably HBASE-7643 race condition.</span>
-<span class="source-line-no">672</span><span id="line-672"> // in this case, the file should not be archived, and we should have the file</span>
-<span class="source-line-no">673</span><span id="line-673"> // in the original location.</span>
-<span class="source-line-no">674</span><span id="line-674"> LOG.debug("hfile=" + fid + " should be in the source location");</span>
-<span class="source-line-no">675</span><span id="line-675"> assertFalse(fs.exists(archiveFile));</span>
-<span class="source-line-no">676</span><span id="line-676"> assertTrue(fs.exists(sourceFile));</span>
-<span class="source-line-no">677</span><span id="line-677"></span>
-<span class="source-line-no">678</span><span id="line-678"> // Avoid to have this file in the next run</span>
-<span class="source-line-no">679</span><span id="line-679"> fs.delete(sourceFile, false);</span>
-<span class="source-line-no">680</span><span id="line-680"> }</span>
-<span class="source-line-no">681</span><span id="line-681"> }</span>
-<span class="source-line-no">682</span><span id="line-682"> } finally {</span>
-<span class="source-line-no">683</span><span id="line-683"> stoppable.stop("test end");</span>
-<span class="source-line-no">684</span><span id="line-684"> cleaner.cancel(true);</span>
-<span class="source-line-no">685</span><span id="line-685"> choreService.shutdown();</span>
-<span class="source-line-no">686</span><span id="line-686"> fs.delete(rootDir, true);</span>
-<span class="source-line-no">687</span><span id="line-687"> }</span>
-<span class="source-line-no">688</span><span id="line-688"> }</span>
-<span class="source-line-no">689</span><span id="line-689"></span>
-<span class="source-line-no">690</span><span id="line-690"> @Test</span>
-<span class="source-line-no">691</span><span id="line-691"> public void testArchiveRegionTableAndRegionDirsNull() throws IOException {</span>
-<span class="source-line-no">692</span><span id="line-692"> Path rootDir = UTIL.getDataTestDirOnTestFS("testCleaningRace");</span>
-<span class="source-line-no">693</span><span id="line-693"> FileSystem fileSystem = UTIL.getTestFileSystem();</span>
-<span class="source-line-no">694</span><span id="line-694"> Configuration conf = UTIL.getMiniHBaseCluster().getMaster().getConfiguration();</span>
-<span class="source-line-no">695</span><span id="line-695"> // Try to archive the file but with null regionDir, can't delete sourceFile</span>
-<span class="source-line-no">696</span><span id="line-696"> assertFalse(HFileArchiver.archiveRegion(conf, fileSystem, rootDir, null, null));</span>
-<span class="source-line-no">697</span><span id="line-697"> }</span>
-<span class="source-line-no">698</span><span id="line-698"></span>
-<span class="source-line-no">699</span><span id="line-699"> @Test</span>
-<span class="source-line-no">700</span><span id="line-700"> public void testArchiveRegionWithTableDirNull() throws IOException {</span>
-<span class="source-line-no">701</span><span id="line-701"> Configuration conf = UTIL.getMiniHBaseCluster().getMaster().getConfiguration();</span>
-<span class="source-line-no">702</span><span id="line-702"> Path regionDir = new Path(</span>
-<span class="source-line-no">703</span><span id="line-703"> CommonFSUtils.getTableDir(new Path("./"), TableName.valueOf(name.getMethodName())), "xyzabc");</span>
+<span class="source-line-no">619</span><span id="line-619"> UTIL.deleteTable(tableName);</span>
+<span class="source-line-no">620</span><span id="line-620"> }</span>
+<span class="source-line-no">621</span><span id="line-621"></span>
+<span class="source-line-no">622</span><span id="line-622"> /**</span>
+<span class="source-line-no">623</span><span id="line-623"> * Test HFileArchiver.resolveAndArchive() race condition HBASE-7643</span>
+<span class="source-line-no">624</span><span id="line-624"> */</span>
+<span class="source-line-no">625</span><span id="line-625"> @Test</span>
+<span class="source-line-no">626</span><span id="line-626"> public void testCleaningRace(TestInfo testInfo) throws Exception {</span>
+<span class="source-line-no">627</span><span id="line-627"> final long TEST_TIME = 20 * 1000;</span>
+<span class="source-line-no">628</span><span id="line-628"> final ChoreService choreService = new ChoreService("TEST_SERVER_NAME");</span>
+<span class="source-line-no">629</span><span id="line-629"></span>
+<span class="source-line-no">630</span><span id="line-630"> Configuration conf = UTIL.getMiniHBaseCluster().getMaster().getConfiguration();</span>
+<span class="source-line-no">631</span><span id="line-631"> Path rootDir = UTIL.getDataTestDirOnTestFS("testCleaningRace");</span>
+<span class="source-line-no">632</span><span id="line-632"> FileSystem fs = UTIL.getTestFileSystem();</span>
+<span class="source-line-no">633</span><span id="line-633"></span>
+<span class="source-line-no">634</span><span id="line-634"> Path archiveDir = new Path(rootDir, HConstants.HFILE_ARCHIVE_DIRECTORY);</span>
+<span class="source-line-no">635</span><span id="line-635"> Path regionDir = new Path(</span>
+<span class="source-line-no">636</span><span id="line-636"> CommonFSUtils.getTableDir(new Path("./"), TableName.valueOf(testMethodName(testInfo))),</span>
+<span class="source-line-no">637</span><span id="line-637"> "abcdef");</span>
+<span class="source-line-no">638</span><span id="line-638"> Path familyDir = new Path(regionDir, "cf");</span>
+<span class="source-line-no">639</span><span id="line-639"></span>
+<span class="source-line-no">640</span><span id="line-640"> Path sourceRegionDir = new Path(rootDir, regionDir);</span>
+<span class="source-line-no">641</span><span id="line-641"> fs.mkdirs(sourceRegionDir);</span>
+<span class="source-line-no">642</span><span id="line-642"></span>
+<span class="source-line-no">643</span><span id="line-643"> Stoppable stoppable = new StoppableImplementation();</span>
+<span class="source-line-no">644</span><span id="line-644"></span>
+<span class="source-line-no">645</span><span id="line-645"> // The cleaner should be looping without long pauses to reproduce the race condition.</span>
+<span class="source-line-no">646</span><span id="line-646"> HFileCleaner cleaner = getHFileCleaner(stoppable, conf, fs, archiveDir);</span>
+<span class="source-line-no">647</span><span id="line-647"> assertNotNull(cleaner, "cleaner should not be null");</span>
+<span class="source-line-no">648</span><span id="line-648"> try {</span>
+<span class="source-line-no">649</span><span id="line-649"> choreService.scheduleChore(cleaner);</span>
+<span class="source-line-no">650</span><span id="line-650"> // Keep creating/archiving new files while the cleaner is running in the other thread</span>
+<span class="source-line-no">651</span><span id="line-651"> long startTime = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">652</span><span id="line-652"> for (long fid = 0; (EnvironmentEdgeManager.currentTime() - startTime) < TEST_TIME; ++fid) {</span>
+<span class="source-line-no">653</span><span id="line-653"> Path file = new Path(familyDir, String.valueOf(fid));</span>
+<span class="source-line-no">654</span><span id="line-654"> Path sourceFile = new Path(rootDir, file);</span>
+<span class="source-line-no">655</span><span id="line-655"> Path archiveFile = new Path(archiveDir, file);</span>
+<span class="source-line-no">656</span><span id="line-656"></span>
+<span class="source-line-no">657</span><span id="line-657"> fs.createNewFile(sourceFile);</span>
+<span class="source-line-no">658</span><span id="line-658"></span>
+<span class="source-line-no">659</span><span id="line-659"> try {</span>
+<span class="source-line-no">660</span><span id="line-660"> // Try to archive the file</span>
+<span class="source-line-no">661</span><span id="line-661"> HFileArchiver.archiveRegion(conf, fs, rootDir, sourceRegionDir.getParent(),</span>
+<span class="source-line-no">662</span><span id="line-662"> sourceRegionDir);</span>
+<span class="source-line-no">663</span><span id="line-663"></span>
+<span class="source-line-no">664</span><span id="line-664"> // The archiver succeded, the file is no longer in the original location</span>
+<span class="source-line-no">665</span><span id="line-665"> // but it's in the archive location.</span>
+<span class="source-line-no">666</span><span id="line-666"> LOG.debug("hfile=" + fid + " should be in the archive");</span>
+<span class="source-line-no">667</span><span id="line-667"> assertTrue(fs.exists(archiveFile));</span>
+<span class="source-line-no">668</span><span id="line-668"> assertFalse(fs.exists(sourceFile));</span>
+<span class="source-line-no">669</span><span id="line-669"> } catch (IOException e) {</span>
+<span class="source-line-no">670</span><span id="line-670"> // The archiver is unable to archive the file. Probably HBASE-7643 race condition.</span>
+<span class="source-line-no">671</span><span id="line-671"> // in this case, the file should not be archived, and we should have the file</span>
+<span class="source-line-no">672</span><span id="line-672"> // in the original location.</span>
+<span class="source-line-no">673</span><span id="line-673"> LOG.debug("hfile=" + fid + " should be in the source location");</span>
+<span class="source-line-no">674</span><span id="line-674"> assertFalse(fs.exists(archiveFile));</span>
+<span class="source-line-no">675</span><span id="line-675"> assertTrue(fs.exists(sourceFile));</span>
+<span class="source-line-no">676</span><span id="line-676"></span>
+<span class="source-line-no">677</span><span id="line-677"> // Avoid to have this file in the next run</span>
+<span class="source-line-no">678</span><span id="line-678"> fs.delete(sourceFile, false);</span>
+<span class="source-line-no">679</span><span id="line-679"> }</span>
+<span class="source-line-no">680</span><span id="line-680"> }</span>
+<span class="source-line-no">681</span><span id="line-681"> } finally {</span>
+<span class="source-line-no">682</span><span id="line-682"> stoppable.stop("test end");</span>
+<span class="source-line-no">683</span><span id="line-683"> cleaner.cancel(true);</span>
+<span class="source-line-no">684</span><span id="line-684"> choreService.shutdown();</span>
+<span class="source-line-no">685</span><span id="line-685"> fs.delete(rootDir, true);</span>
+<span class="source-line-no">686</span><span id="line-686"> }</span>
+<span class="source-line-no">687</span><span id="line-687"> }</span>
+<span class="source-line-no">688</span><span id="line-688"></span>
+<span class="source-line-no">689</span><span id="line-689"> @Test</span>
+<span class="source-line-no">690</span><span id="line-690"> public void testArchiveRegionTableAndRegionDirsNull() throws IOException {</span>
+<span class="source-line-no">691</span><span id="line-691"> Path rootDir = UTIL.getDataTestDirOnTestFS("testCleaningRace");</span>
+<span class="source-line-no">692</span><span id="line-692"> FileSystem fileSystem = UTIL.getTestFileSystem();</span>
+<span class="source-line-no">693</span><span id="line-693"> Configuration conf = UTIL.getMiniHBaseCluster().getMaster().getConfiguration();</span>
+<span class="source-line-no">694</span><span id="line-694"> // Try to archive the file but with null regionDir, can't delete sourceFile</span>
+<span class="source-line-no">695</span><span id="line-695"> assertFalse(HFileArchiver.archiveRegion(conf, fileSystem, rootDir, null, null));</span>
+<span class="source-line-no">696</span><span id="line-696"> }</span>
+<span class="source-line-no">697</span><span id="line-697"></span>
+<span class="source-line-no">698</span><span id="line-698"> @Test</span>
+<span class="source-line-no">699</span><span id="line-699"> public void testArchiveRegionWithTableDirNull(TestInfo testInfo) throws IOException {</span>
+<span class="source-line-no">700</span><span id="line-700"> Configuration conf = UTIL.getMiniHBaseCluster().getMaster().getConfiguration();</span>
+<span class="source-line-no">701</span><span id="line-701"> Path regionDir = new Path(</span>
+<span class="source-line-no">702</span><span id="line-702"> CommonFSUtils.getTableDir(new Path("./"), TableName.valueOf(testMethodName(testInfo))),</span>
+<span class="source-line-no">703</span><span id="line-703"> "xyzabc");</span>
<span class="source-line-no">704</span><span id="line-704"> Path familyDir = new Path(regionDir, "rd");</span>
<span class="source-line-no">705</span><span id="line-705"> Path rootDir = UTIL.getDataTestDirOnTestFS("testCleaningRace");</span>
<span class="source-line-no">706</span><span id="line-706"> Path file = new Path(familyDir, "1");</span>
@@ -728,11 +728,11 @@
<span class="source-line-no">715</span><span id="line-715"> }</span>
<span class="source-line-no">716</span><span id="line-716"></span>
<span class="source-line-no">717</span><span id="line-717"> @Test</span>
-<span class="source-line-no">718</span><span id="line-718"> public void testArchiveRegionWithRegionDirNull() throws IOException {</span>
+<span class="source-line-no">718</span><span id="line-718"> public void testArchiveRegionWithRegionDirNull(TestInfo testInfo) throws IOException {</span>
<span class="source-line-no">719</span><span id="line-719"> Configuration conf = UTIL.getMiniHBaseCluster().getMaster().getConfiguration();</span>
-<span class="source-line-no">720</span><span id="line-720"> Path regionDir =</span>
-<span class="source-line-no">721</span><span id="line-721"> new Path(CommonFSUtils.getTableDir(new Path("./"), TableName.valueOf(name.getMethodName())),</span>
-<span class="source-line-no">722</span><span id="line-722"> "elgn4nf");</span>
+<span class="source-line-no">720</span><span id="line-720"> Path regionDir = new Path(</span>
+<span class="source-line-no">721</span><span id="line-721"> CommonFSUtils.getTableDir(new Path("./"), TableName.valueOf(testMethodName(testInfo))),</span>
+<span class="source-line-no">722</span><span id="line-722"> "elgn4nf");</span>
<span class="source-line-no">723</span><span id="line-723"> Path familyDir = new Path(regionDir, "rdar");</span>
<span class="source-line-no">724</span><span id="line-724"> Path rootDir = UTIL.getDataTestDirOnTestFS("testCleaningRace");</span>
<span class="source-line-no">725</span><span id="line-725"> Path file = new Path(familyDir, "2");</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/codec/CodecPerformance.html b/testapidocs/src-html/org/apache/hadoop/hbase/codec/CodecPerformance.html
index fbf5a470271..360f5f95dbd 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/codec/CodecPerformance.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/codec/CodecPerformance.html
@@ -30,8 +30,8 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.codec;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertArrayEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertTrue;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertArrayEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
<span class="source-line-no">022</span><span id="line-22"></span>
<span class="source-line-no">023</span><span id="line-23">import java.io.ByteArrayInputStream;</span>
<span class="source-line-no">024</span><span id="line-24">import java.io.ByteArrayOutputStream;</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/codec/TestCellMessageCodec.html b/testapidocs/src-html/org/apache/hadoop/hbase/codec/TestCellMessageCodec.html
index 84c55d4cc36..0ebe9213ea8 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/codec/TestCellMessageCodec.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/codec/TestCellMessageCodec.html
@@ -30,9 +30,9 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.codec;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertTrue;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
<span class="source-line-no">023</span><span id="line-23"></span>
<span class="source-line-no">024</span><span id="line-24">import java.io.ByteArrayInputStream;</span>
<span class="source-line-no">025</span><span id="line-25">import java.io.ByteArrayOutputStream;</span>
@@ -40,108 +40,103 @@
<span class="source-line-no">027</span><span id="line-27">import java.io.DataOutputStream;</span>
<span class="source-line-no">028</span><span id="line-28">import java.io.IOException;</span>
<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.ExtendedCell;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.KeyValue;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.testclassification.MiscTests;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.junit.ClassRule;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.junit.Test;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.slf4j.Logger;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hbase.thirdparty.com.google.common.io.CountingInputStream;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hbase.thirdparty.com.google.common.io.CountingOutputStream;</span>
-<span class="source-line-no">044</span><span id="line-44"></span>
-<span class="source-line-no">045</span><span id="line-45">@Category({ MiscTests.class, SmallTests.class })</span>
-<span class="source-line-no">046</span><span id="line-46">public class TestCellMessageCodec {</span>
-<span class="source-line-no">047</span><span id="line-47"></span>
-<span class="source-line-no">048</span><span id="line-48"> @ClassRule</span>
-<span class="source-line-no">049</span><span id="line-49"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">050</span><span id="line-50"> HBaseClassTestRule.forClass(TestCellMessageCodec.class);</span>
-<span class="source-line-no">051</span><span id="line-51"></span>
-<span class="source-line-no">052</span><span id="line-52"> private static final Logger LOG = LoggerFactory.getLogger(TestCellMessageCodec.class);</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54"> @Test</span>
-<span class="source-line-no">055</span><span id="line-55"> public void testEmptyWorks() throws IOException {</span>
-<span class="source-line-no">056</span><span id="line-56"> ByteArrayOutputStream baos = new ByteArrayOutputStream();</span>
-<span class="source-line-no">057</span><span id="line-57"> CountingOutputStream cos = new CountingOutputStream(baos);</span>
-<span class="source-line-no">058</span><span id="line-58"> DataOutputStream dos = new DataOutputStream(cos);</span>
-<span class="source-line-no">059</span><span id="line-59"> MessageCodec cmc = new MessageCodec();</span>
-<span class="source-line-no">060</span><span id="line-60"> Codec.Encoder encoder = cmc.getEncoder(dos);</span>
-<span class="source-line-no">061</span><span id="line-61"> encoder.flush();</span>
-<span class="source-line-no">062</span><span id="line-62"> dos.close();</span>
-<span class="source-line-no">063</span><span id="line-63"> long offset = cos.getCount();</span>
-<span class="source-line-no">064</span><span id="line-64"> assertEquals(0, offset);</span>
-<span class="source-line-no">065</span><span id="line-65"> CountingInputStream cis = new CountingInputStream(new ByteArrayInputStream(baos.toByteArray()));</span>
-<span class="source-line-no">066</span><span id="line-66"> DataInputStream dis = new DataInputStream(cis);</span>
-<span class="source-line-no">067</span><span id="line-67"> Codec.Decoder decoder = cmc.getDecoder(dis);</span>
-<span class="source-line-no">068</span><span id="line-68"> assertFalse(decoder.advance());</span>
-<span class="source-line-no">069</span><span id="line-69"> dis.close();</span>
-<span class="source-line-no">070</span><span id="line-70"> assertEquals(0, cis.getCount());</span>
-<span class="source-line-no">071</span><span id="line-71"> }</span>
-<span class="source-line-no">072</span><span id="line-72"></span>
-<span class="source-line-no">073</span><span id="line-73"> @Test</span>
-<span class="source-line-no">074</span><span id="line-74"> public void testOne() throws IOException {</span>
-<span class="source-line-no">075</span><span id="line-75"> ByteArrayOutputStream baos = new ByteArrayOutputStream();</span>
-<span class="source-line-no">076</span><span id="line-76"> CountingOutputStream cos = new CountingOutputStream(baos);</span>
-<span class="source-line-no">077</span><span id="line-77"> DataOutputStream dos = new DataOutputStream(cos);</span>
-<span class="source-line-no">078</span><span id="line-78"> MessageCodec cmc = new MessageCodec();</span>
-<span class="source-line-no">079</span><span id="line-79"> Codec.Encoder encoder = cmc.getEncoder(dos);</span>
-<span class="source-line-no">080</span><span id="line-80"> final KeyValue kv =</span>
-<span class="source-line-no">081</span><span id="line-81"> new KeyValue(Bytes.toBytes("r"), Bytes.toBytes("f"), Bytes.toBytes("q"), Bytes.toBytes("v"));</span>
-<span class="source-line-no">082</span><span id="line-82"> encoder.write(kv);</span>
-<span class="source-line-no">083</span><span id="line-83"> encoder.flush();</span>
-<span class="source-line-no">084</span><span id="line-84"> dos.close();</span>
-<span class="source-line-no">085</span><span id="line-85"> long offset = cos.getCount();</span>
-<span class="source-line-no">086</span><span id="line-86"> CountingInputStream cis = new CountingInputStream(new ByteArrayInputStream(baos.toByteArray()));</span>
-<span class="source-line-no">087</span><span id="line-87"> DataInputStream dis = new DataInputStream(cis);</span>
-<span class="source-line-no">088</span><span id="line-88"> Codec.Decoder decoder = cmc.getDecoder(dis);</span>
-<span class="source-line-no">089</span><span id="line-89"> assertTrue(decoder.advance()); // First read should pull in the KV</span>
-<span class="source-line-no">090</span><span id="line-90"> assertFalse(decoder.advance()); // Second read should trip over the end-of-stream marker and</span>
-<span class="source-line-no">091</span><span id="line-91"> // return false</span>
-<span class="source-line-no">092</span><span id="line-92"> dis.close();</span>
-<span class="source-line-no">093</span><span id="line-93"> assertEquals(offset, cis.getCount());</span>
-<span class="source-line-no">094</span><span id="line-94"> }</span>
-<span class="source-line-no">095</span><span id="line-95"></span>
-<span class="source-line-no">096</span><span id="line-96"> @Test</span>
-<span class="source-line-no">097</span><span id="line-97"> public void testThree() throws IOException {</span>
-<span class="source-line-no">098</span><span id="line-98"> ByteArrayOutputStream baos = new ByteArrayOutputStream();</span>
-<span class="source-line-no">099</span><span id="line-99"> CountingOutputStream cos = new CountingOutputStream(baos);</span>
-<span class="source-line-no">100</span><span id="line-100"> DataOutputStream dos = new DataOutputStream(cos);</span>
-<span class="source-line-no">101</span><span id="line-101"> MessageCodec cmc = new MessageCodec();</span>
-<span class="source-line-no">102</span><span id="line-102"> Codec.Encoder encoder = cmc.getEncoder(dos);</span>
-<span class="source-line-no">103</span><span id="line-103"> final KeyValue kv1 =</span>
-<span class="source-line-no">104</span><span id="line-104"> new KeyValue(Bytes.toBytes("r"), Bytes.toBytes("f"), Bytes.toBytes("1"), Bytes.toBytes("1"));</span>
-<span class="source-line-no">105</span><span id="line-105"> final KeyValue kv2 =</span>
-<span class="source-line-no">106</span><span id="line-106"> new KeyValue(Bytes.toBytes("r"), Bytes.toBytes("f"), Bytes.toBytes("2"), Bytes.toBytes("2"));</span>
-<span class="source-line-no">107</span><span id="line-107"> final KeyValue kv3 =</span>
-<span class="source-line-no">108</span><span id="line-108"> new KeyValue(Bytes.toBytes("r"), Bytes.toBytes("f"), Bytes.toBytes("3"), Bytes.toBytes("3"));</span>
-<span class="source-line-no">109</span><span id="line-109"> encoder.write(kv1);</span>
-<span class="source-line-no">110</span><span id="line-110"> encoder.write(kv2);</span>
-<span class="source-line-no">111</span><span id="line-111"> encoder.write(kv3);</span>
-<span class="source-line-no">112</span><span id="line-112"> encoder.flush();</span>
-<span class="source-line-no">113</span><span id="line-113"> dos.close();</span>
-<span class="source-line-no">114</span><span id="line-114"> long offset = cos.getCount();</span>
-<span class="source-line-no">115</span><span id="line-115"> CountingInputStream cis = new CountingInputStream(new ByteArrayInputStream(baos.toByteArray()));</span>
-<span class="source-line-no">116</span><span id="line-116"> DataInputStream dis = new DataInputStream(cis);</span>
-<span class="source-line-no">117</span><span id="line-117"> Codec.Decoder decoder = cmc.getDecoder(dis);</span>
-<span class="source-line-no">118</span><span id="line-118"> assertTrue(decoder.advance());</span>
-<span class="source-line-no">119</span><span id="line-119"> ExtendedCell c = decoder.current();</span>
-<span class="source-line-no">120</span><span id="line-120"> assertTrue(PrivateCellUtil.equals(c, kv1));</span>
-<span class="source-line-no">121</span><span id="line-121"> assertTrue(decoder.advance());</span>
-<span class="source-line-no">122</span><span id="line-122"> c = decoder.current();</span>
-<span class="source-line-no">123</span><span id="line-123"> assertTrue(PrivateCellUtil.equals(c, kv2));</span>
-<span class="source-line-no">124</span><span id="line-124"> assertTrue(decoder.advance());</span>
-<span class="source-line-no">125</span><span id="line-125"> c = decoder.current();</span>
-<span class="source-line-no">126</span><span id="line-126"> assertTrue(PrivateCellUtil.equals(c, kv3));</span>
-<span class="source-line-no">127</span><span id="line-127"> assertFalse(decoder.advance());</span>
-<span class="source-line-no">128</span><span id="line-128"> dis.close();</span>
-<span class="source-line-no">129</span><span id="line-129"> assertEquals(offset, cis.getCount());</span>
-<span class="source-line-no">130</span><span id="line-130"> }</span>
-<span class="source-line-no">131</span><span id="line-131">}</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.KeyValue;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.PrivateCellUtil;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.testclassification.MiscTests;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.slf4j.Logger;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">039</span><span id="line-39"></span>
+<span class="source-line-no">040</span><span id="line-40">import org.apache.hbase.thirdparty.com.google.common.io.CountingInputStream;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.apache.hbase.thirdparty.com.google.common.io.CountingOutputStream;</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43">@Tag(MiscTests.TAG)</span>
+<span class="source-line-no">044</span><span id="line-44">@Tag(SmallTests.TAG)</span>
+<span class="source-line-no">045</span><span id="line-45">public class TestCellMessageCodec {</span>
+<span class="source-line-no">046</span><span id="line-46"></span>
+<span class="source-line-no">047</span><span id="line-47"> private static final Logger LOG = LoggerFactory.getLogger(TestCellMessageCodec.class);</span>
+<span class="source-line-no">048</span><span id="line-48"></span>
+<span class="source-line-no">049</span><span id="line-49"> @Test</span>
+<span class="source-line-no">050</span><span id="line-50"> public void testEmptyWorks() throws IOException {</span>
+<span class="source-line-no">051</span><span id="line-51"> ByteArrayOutputStream baos = new ByteArrayOutputStream();</span>
+<span class="source-line-no">052</span><span id="line-52"> CountingOutputStream cos = new CountingOutputStream(baos);</span>
+<span class="source-line-no">053</span><span id="line-53"> DataOutputStream dos = new DataOutputStream(cos);</span>
+<span class="source-line-no">054</span><span id="line-54"> MessageCodec cmc = new MessageCodec();</span>
+<span class="source-line-no">055</span><span id="line-55"> Codec.Encoder encoder = cmc.getEncoder(dos);</span>
+<span class="source-line-no">056</span><span id="line-56"> encoder.flush();</span>
+<span class="source-line-no">057</span><span id="line-57"> dos.close();</span>
+<span class="source-line-no">058</span><span id="line-58"> long offset = cos.getCount();</span>
+<span class="source-line-no">059</span><span id="line-59"> assertEquals(0, offset);</span>
+<span class="source-line-no">060</span><span id="line-60"> CountingInputStream cis = new CountingInputStream(new ByteArrayInputStream(baos.toByteArray()));</span>
+<span class="source-line-no">061</span><span id="line-61"> DataInputStream dis = new DataInputStream(cis);</span>
+<span class="source-line-no">062</span><span id="line-62"> Codec.Decoder decoder = cmc.getDecoder(dis);</span>
+<span class="source-line-no">063</span><span id="line-63"> assertFalse(decoder.advance());</span>
+<span class="source-line-no">064</span><span id="line-64"> dis.close();</span>
+<span class="source-line-no">065</span><span id="line-65"> assertEquals(0, cis.getCount());</span>
+<span class="source-line-no">066</span><span id="line-66"> }</span>
+<span class="source-line-no">067</span><span id="line-67"></span>
+<span class="source-line-no">068</span><span id="line-68"> @Test</span>
+<span class="source-line-no">069</span><span id="line-69"> public void testOne() throws IOException {</span>
+<span class="source-line-no">070</span><span id="line-70"> ByteArrayOutputStream baos = new ByteArrayOutputStream();</span>
+<span class="source-line-no">071</span><span id="line-71"> CountingOutputStream cos = new CountingOutputStream(baos);</span>
+<span class="source-line-no">072</span><span id="line-72"> DataOutputStream dos = new DataOutputStream(cos);</span>
+<span class="source-line-no">073</span><span id="line-73"> MessageCodec cmc = new MessageCodec();</span>
+<span class="source-line-no">074</span><span id="line-74"> Codec.Encoder encoder = cmc.getEncoder(dos);</span>
+<span class="source-line-no">075</span><span id="line-75"> final KeyValue kv =</span>
+<span class="source-line-no">076</span><span id="line-76"> new KeyValue(Bytes.toBytes("r"), Bytes.toBytes("f"), Bytes.toBytes("q"), Bytes.toBytes("v"));</span>
+<span class="source-line-no">077</span><span id="line-77"> encoder.write(kv);</span>
+<span class="source-line-no">078</span><span id="line-78"> encoder.flush();</span>
+<span class="source-line-no">079</span><span id="line-79"> dos.close();</span>
+<span class="source-line-no">080</span><span id="line-80"> long offset = cos.getCount();</span>
+<span class="source-line-no">081</span><span id="line-81"> CountingInputStream cis = new CountingInputStream(new ByteArrayInputStream(baos.toByteArray()));</span>
+<span class="source-line-no">082</span><span id="line-82"> DataInputStream dis = new DataInputStream(cis);</span>
+<span class="source-line-no">083</span><span id="line-83"> Codec.Decoder decoder = cmc.getDecoder(dis);</span>
+<span class="source-line-no">084</span><span id="line-84"> assertTrue(decoder.advance()); // First read should pull in the KV</span>
+<span class="source-line-no">085</span><span id="line-85"> assertFalse(decoder.advance()); // Second read should trip over the end-of-stream marker and</span>
+<span class="source-line-no">086</span><span id="line-86"> // return false</span>
+<span class="source-line-no">087</span><span id="line-87"> dis.close();</span>
+<span class="source-line-no">088</span><span id="line-88"> assertEquals(offset, cis.getCount());</span>
+<span class="source-line-no">089</span><span id="line-89"> }</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> @Test</span>
+<span class="source-line-no">092</span><span id="line-92"> public void testThree() throws IOException {</span>
+<span class="source-line-no">093</span><span id="line-93"> ByteArrayOutputStream baos = new ByteArrayOutputStream();</span>
+<span class="source-line-no">094</span><span id="line-94"> CountingOutputStream cos = new CountingOutputStream(baos);</span>
+<span class="source-line-no">095</span><span id="line-95"> DataOutputStream dos = new DataOutputStream(cos);</span>
+<span class="source-line-no">096</span><span id="line-96"> MessageCodec cmc = new MessageCodec();</span>
+<span class="source-line-no">097</span><span id="line-97"> Codec.Encoder encoder = cmc.getEncoder(dos);</span>
+<span class="source-line-no">098</span><span id="line-98"> final KeyValue kv1 =</span>
+<span class="source-line-no">099</span><span id="line-99"> new KeyValue(Bytes.toBytes("r"), Bytes.toBytes("f"), Bytes.toBytes("1"), Bytes.toBytes("1"));</span>
+<span class="source-line-no">100</span><span id="line-100"> final KeyValue kv2 =</span>
+<span class="source-line-no">101</span><span id="line-101"> new KeyValue(Bytes.toBytes("r"), Bytes.toBytes("f"), Bytes.toBytes("2"), Bytes.toBytes("2"));</span>
+<span class="source-line-no">102</span><span id="line-102"> final KeyValue kv3 =</span>
+<span class="source-line-no">103</span><span id="line-103"> new KeyValue(Bytes.toBytes("r"), Bytes.toBytes("f"), Bytes.toBytes("3"), Bytes.toBytes("3"));</span>
+<span class="source-line-no">104</span><span id="line-104"> encoder.write(kv1);</span>
+<span class="source-line-no">105</span><span id="line-105"> encoder.write(kv2);</span>
+<span class="source-line-no">106</span><span id="line-106"> encoder.write(kv3);</span>
+<span class="source-line-no">107</span><span id="line-107"> encoder.flush();</span>
+<span class="source-line-no">108</span><span id="line-108"> dos.close();</span>
+<span class="source-line-no">109</span><span id="line-109"> long offset = cos.getCount();</span>
+<span class="source-line-no">110</span><span id="line-110"> CountingInputStream cis = new CountingInputStream(new ByteArrayInputStream(baos.toByteArray()));</span>
+<span class="source-line-no">111</span><span id="line-111"> DataInputStream dis = new DataInputStream(cis);</span>
+<span class="source-line-no">112</span><span id="line-112"> Codec.Decoder decoder = cmc.getDecoder(dis);</span>
+<span class="source-line-no">113</span><span id="line-113"> assertTrue(decoder.advance());</span>
+<span class="source-line-no">114</span><span id="line-114"> ExtendedCell c = decoder.current();</span>
+<span class="source-line-no">115</span><span id="line-115"> assertTrue(PrivateCellUtil.equals(c, kv1));</span>
+<span class="source-line-no">116</span><span id="line-116"> assertTrue(decoder.advance());</span>
+<span class="source-line-no">117</span><span id="line-117"> c = decoder.current();</span>
+<span class="source-line-no">118</span><span id="line-118"> assertTrue(PrivateCellUtil.equals(c, kv2));</span>
+<span class="source-line-no">119</span><span id="line-119"> assertTrue(decoder.advance());</span>
+<span class="source-line-no">120</span><span id="line-120"> c = decoder.current();</span>
+<span class="source-line-no">121</span><span id="line-121"> assertTrue(PrivateCellUtil.equals(c, kv3));</span>
+<span class="source-line-no">122</span><span id="line-122"> assertFalse(decoder.advance());</span>
+<span class="source-line-no">123</span><span id="line-123"> dis.close();</span>
+<span class="source-line-no">124</span><span id="line-124"> assertEquals(offset, cis.getCount());</span>
+<span class="source-line-no">125</span><span id="line-125"> }</span>
+<span class="source-line-no">126</span><span id="line-126">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html
index 9a6bc1fb554..6aff73a963c 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.html
@@ -30,10 +30,10 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertArrayEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">023</span><span id="line-23">import static org.junit.Assert.assertTrue;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertArrayEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
<span class="source-line-no">024</span><span id="line-24"></span>
<span class="source-line-no">025</span><span id="line-25">import java.io.IOException;</span>
<span class="source-line-no">026</span><span id="line-26">import java.util.HashMap;</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.MyObserver.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.MyObserver.html
index 91e2dde8a5e..14b78f4409d 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.MyObserver.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.MyObserver.html
@@ -30,9 +30,9 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertArrayEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertTrue;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertArrayEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
<span class="source-line-no">023</span><span id="line-23"></span>
<span class="source-line-no">024</span><span id="line-24">import java.io.IOException;</span>
<span class="source-line-no">025</span><span id="line-25">import java.util.Arrays;</span>
@@ -41,138 +41,137 @@
<span class="source-line-no">028</span><span id="line-28">import java.util.NavigableMap;</span>
<span class="source-line-no">029</span><span id="line-29">import java.util.Optional;</span>
<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.Cell;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.TableName;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.client.Append;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.client.Get;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.client.Put;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.client.Result;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.client.Row;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.client.Table;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.io.TimeRange;</span>
-<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.util.ManualEnvironmentEdge;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.junit.AfterClass;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.junit.BeforeClass;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.junit.ClassRule;</span>
-<span class="source-line-no">050</span><span id="line-50">import org.junit.Rule;</span>
-<span class="source-line-no">051</span><span id="line-51">import org.junit.Test;</span>
-<span class="source-line-no">052</span><span id="line-52">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">053</span><span id="line-53">import org.junit.rules.TestName;</span>
-<span class="source-line-no">054</span><span id="line-54"></span>
-<span class="source-line-no">055</span><span id="line-55">@Category({ CoprocessorTests.class, MediumTests.class })</span>
-<span class="source-line-no">056</span><span id="line-56">public class TestAppendTimeRange {</span>
-<span class="source-line-no">057</span><span id="line-57"></span>
-<span class="source-line-no">058</span><span id="line-58"> @ClassRule</span>
-<span class="source-line-no">059</span><span id="line-59"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">060</span><span id="line-60"> HBaseClassTestRule.forClass(TestAppendTimeRange.class);</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.TableName;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.client.Append;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.client.Get;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.client.Put;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.client.Result;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.client.Row;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.client.Table;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.io.TimeRange;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.util.ManualEnvironmentEdge;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.junit.jupiter.api.AfterAll;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.junit.jupiter.api.BeforeAll;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">049</span><span id="line-49">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">050</span><span id="line-50">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">051</span><span id="line-51">import org.junit.jupiter.api.TestInfo;</span>
+<span class="source-line-no">052</span><span id="line-52"></span>
+<span class="source-line-no">053</span><span id="line-53">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">054</span><span id="line-54">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">055</span><span id="line-55">public class TestAppendTimeRange {</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57"> private String currentTestName;</span>
+<span class="source-line-no">058</span><span id="line-58"></span>
+<span class="source-line-no">059</span><span id="line-59"> private static final HBaseTestingUtil util = new HBaseTestingUtil();</span>
+<span class="source-line-no">060</span><span id="line-60"> private static final ManualEnvironmentEdge mee = new ManualEnvironmentEdge();</span>
<span class="source-line-no">061</span><span id="line-61"></span>
-<span class="source-line-no">062</span><span id="line-62"> @Rule</span>
-<span class="source-line-no">063</span><span id="line-63"> public TestName name = new TestName();</span>
-<span class="source-line-no">064</span><span id="line-64"></span>
-<span class="source-line-no">065</span><span id="line-65"> private static final HBaseTestingUtil util = new HBaseTestingUtil();</span>
-<span class="source-line-no">066</span><span id="line-66"> private static final ManualEnvironmentEdge mee = new ManualEnvironmentEdge();</span>
+<span class="source-line-no">062</span><span id="line-62"> private static final byte[] TEST_FAMILY = Bytes.toBytes("f1");</span>
+<span class="source-line-no">063</span><span id="line-63"></span>
+<span class="source-line-no">064</span><span id="line-64"> private static final byte[] ROW = Bytes.toBytes("aaa");</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66"> private static final byte[] QUAL = Bytes.toBytes("col1");</span>
<span class="source-line-no">067</span><span id="line-67"></span>
-<span class="source-line-no">068</span><span id="line-68"> private static final byte[] TEST_FAMILY = Bytes.toBytes("f1");</span>
+<span class="source-line-no">068</span><span id="line-68"> private static final byte[] VALUE = Bytes.toBytes("1");</span>
<span class="source-line-no">069</span><span id="line-69"></span>
-<span class="source-line-no">070</span><span id="line-70"> private static final byte[] ROW = Bytes.toBytes("aaa");</span>
-<span class="source-line-no">071</span><span id="line-71"></span>
-<span class="source-line-no">072</span><span id="line-72"> private static final byte[] QUAL = Bytes.toBytes("col1");</span>
-<span class="source-line-no">073</span><span id="line-73"></span>
-<span class="source-line-no">074</span><span id="line-74"> private static final byte[] VALUE = Bytes.toBytes("1");</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> @BeforeClass</span>
-<span class="source-line-no">077</span><span id="line-77"> public static void setupBeforeClass() throws Exception {</span>
-<span class="source-line-no">078</span><span id="line-78"> util.getConfiguration().set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,</span>
-<span class="source-line-no">079</span><span id="line-79"> MyObserver.class.getName());</span>
-<span class="source-line-no">080</span><span id="line-80"> // Make general delay zero rather than default. Timing is off in this</span>
-<span class="source-line-no">081</span><span id="line-81"> // test that depends on an evironment edge that is manually moved forward.</span>
-<span class="source-line-no">082</span><span id="line-82"> util.getConfiguration().setInt(RemoteProcedureDispatcher.DISPATCH_DELAY_CONF_KEY, 0);</span>
-<span class="source-line-no">083</span><span id="line-83"> util.startMiniCluster();</span>
-<span class="source-line-no">084</span><span id="line-84"> EnvironmentEdgeManager.injectEdge(mee);</span>
-<span class="source-line-no">085</span><span id="line-85"> }</span>
-<span class="source-line-no">086</span><span id="line-86"></span>
-<span class="source-line-no">087</span><span id="line-87"> @AfterClass</span>
-<span class="source-line-no">088</span><span id="line-88"> public static void tearDownAfterClass() throws Exception {</span>
-<span class="source-line-no">089</span><span id="line-89"> util.shutdownMiniCluster();</span>
-<span class="source-line-no">090</span><span id="line-90"> }</span>
-<span class="source-line-no">091</span><span id="line-91"></span>
-<span class="source-line-no">092</span><span id="line-92"> public static class MyObserver implements RegionCoprocessor, RegionObserver {</span>
-<span class="source-line-no">093</span><span id="line-93"> private static TimeRange tr10 = null;</span>
-<span class="source-line-no">094</span><span id="line-94"> private static TimeRange tr2 = null;</span>
-<span class="source-line-no">095</span><span id="line-95"></span>
-<span class="source-line-no">096</span><span id="line-96"> @Override</span>
-<span class="source-line-no">097</span><span id="line-97"> public Optional<RegionObserver> getRegionObserver() {</span>
-<span class="source-line-no">098</span><span id="line-98"> return Optional.of(this);</span>
-<span class="source-line-no">099</span><span id="line-99"> }</span>
-<span class="source-line-no">100</span><span id="line-100"></span>
-<span class="source-line-no">101</span><span id="line-101"> @Override</span>
-<span class="source-line-no">102</span><span id="line-102"> public Result preAppend(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">103</span><span id="line-103"> final Append append) throws IOException {</span>
-<span class="source-line-no">104</span><span id="line-104"> NavigableMap<byte[], List<Cell>> map = append.getFamilyCellMap();</span>
-<span class="source-line-no">105</span><span id="line-105"> for (Map.Entry<byte[], List<Cell>> entry : map.entrySet()) {</span>
-<span class="source-line-no">106</span><span id="line-106"> for (Cell cell : entry.getValue()) {</span>
-<span class="source-line-no">107</span><span id="line-107"> String appendStr =</span>
-<span class="source-line-no">108</span><span id="line-108"> Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
-<span class="source-line-no">109</span><span id="line-109"> if (appendStr.equals("b")) {</span>
-<span class="source-line-no">110</span><span id="line-110"> tr10 = append.getTimeRange();</span>
-<span class="source-line-no">111</span><span id="line-111"> } else if (appendStr.equals("c") && !append.getTimeRange().isAllTime()) {</span>
-<span class="source-line-no">112</span><span id="line-112"> tr2 = append.getTimeRange();</span>
-<span class="source-line-no">113</span><span id="line-113"> }</span>
-<span class="source-line-no">114</span><span id="line-114"> }</span>
-<span class="source-line-no">115</span><span id="line-115"> }</span>
-<span class="source-line-no">116</span><span id="line-116"> return null;</span>
-<span class="source-line-no">117</span><span id="line-117"> }</span>
-<span class="source-line-no">118</span><span id="line-118"> }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120"> @Test</span>
-<span class="source-line-no">121</span><span id="line-121"> public void testHTableInterfaceMethods() throws Exception {</span>
-<span class="source-line-no">122</span><span id="line-122"> try (Table table = util.createTable(TableName.valueOf(name.getMethodName()), TEST_FAMILY)) {</span>
-<span class="source-line-no">123</span><span id="line-123"> table.put(new Put(ROW).addColumn(TEST_FAMILY, QUAL, VALUE));</span>
-<span class="source-line-no">124</span><span id="line-124"> long time = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">125</span><span id="line-125"> mee.setValue(time);</span>
-<span class="source-line-no">126</span><span id="line-126"> table.put(new Put(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("a")));</span>
-<span class="source-line-no">127</span><span id="line-127"> checkRowValue(table, ROW, Bytes.toBytes("a"));</span>
-<span class="source-line-no">128</span><span id="line-128"></span>
-<span class="source-line-no">129</span><span id="line-129"> time = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">130</span><span id="line-130"> mee.setValue(time);</span>
-<span class="source-line-no">131</span><span id="line-131"> TimeRange range10 = TimeRange.between(1, time + 10);</span>
-<span class="source-line-no">132</span><span id="line-132"> table.append(new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("b"))</span>
-<span class="source-line-no">133</span><span id="line-133"> .setTimeRange(range10.getMin(), range10.getMax()));</span>
-<span class="source-line-no">134</span><span id="line-134"> checkRowValue(table, ROW, Bytes.toBytes("ab"));</span>
-<span class="source-line-no">135</span><span id="line-135"> assertEquals(MyObserver.tr10.getMin(), range10.getMin());</span>
-<span class="source-line-no">136</span><span id="line-136"> assertEquals(MyObserver.tr10.getMax(), range10.getMax());</span>
-<span class="source-line-no">137</span><span id="line-137"> time = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">138</span><span id="line-138"> mee.setValue(time);</span>
-<span class="source-line-no">139</span><span id="line-139"> TimeRange range2 = TimeRange.between(1, time + 20);</span>
-<span class="source-line-no">140</span><span id="line-140"> List<Row> actions = Arrays.asList(new Row[] {</span>
-<span class="source-line-no">141</span><span id="line-141"> new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("c"))</span>
-<span class="source-line-no">142</span><span id="line-142"> .setTimeRange(range2.getMin(), range2.getMax()),</span>
-<span class="source-line-no">143</span><span id="line-143"> new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("c"))</span>
-<span class="source-line-no">144</span><span id="line-144"> .setTimeRange(range2.getMin(), range2.getMax()) });</span>
-<span class="source-line-no">145</span><span id="line-145"> Object[] results1 = new Object[actions.size()];</span>
-<span class="source-line-no">146</span><span id="line-146"> table.batch(actions, results1);</span>
-<span class="source-line-no">147</span><span id="line-147"> assertEquals(MyObserver.tr2.getMin(), range2.getMin());</span>
-<span class="source-line-no">148</span><span id="line-148"> assertEquals(MyObserver.tr2.getMax(), range2.getMax());</span>
-<span class="source-line-no">149</span><span id="line-149"> for (Object r2 : results1) {</span>
-<span class="source-line-no">150</span><span id="line-150"> assertTrue(r2 instanceof Result);</span>
-<span class="source-line-no">151</span><span id="line-151"> }</span>
-<span class="source-line-no">152</span><span id="line-152"> checkRowValue(table, ROW, Bytes.toBytes("abcc"));</span>
-<span class="source-line-no">153</span><span id="line-153"> }</span>
-<span class="source-line-no">154</span><span id="line-154"> }</span>
-<span class="source-line-no">155</span><span id="line-155"></span>
-<span class="source-line-no">156</span><span id="line-156"> private void checkRowValue(Table table, byte[] row, byte[] expectedValue) throws IOException {</span>
-<span class="source-line-no">157</span><span id="line-157"> Get get = new Get(row).addColumn(TEST_FAMILY, QUAL);</span>
-<span class="source-line-no">158</span><span id="line-158"> Result result = table.get(get);</span>
-<span class="source-line-no">159</span><span id="line-159"> byte[] actualValue = result.getValue(TEST_FAMILY, QUAL);</span>
-<span class="source-line-no">160</span><span id="line-160"> assertArrayEquals(expectedValue, actualValue);</span>
-<span class="source-line-no">161</span><span id="line-161"> }</span>
-<span class="source-line-no">162</span><span id="line-162">}</span>
+<span class="source-line-no">070</span><span id="line-70"> @BeforeAll</span>
+<span class="source-line-no">071</span><span id="line-71"> public static void setupBeforeClass() throws Exception {</span>
+<span class="source-line-no">072</span><span id="line-72"> util.getConfiguration().set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,</span>
+<span class="source-line-no">073</span><span id="line-73"> MyObserver.class.getName());</span>
+<span class="source-line-no">074</span><span id="line-74"> // Make general delay zero rather than default. Timing is off in this</span>
+<span class="source-line-no">075</span><span id="line-75"> // test that depends on an evironment edge that is manually moved forward.</span>
+<span class="source-line-no">076</span><span id="line-76"> util.getConfiguration().setInt(RemoteProcedureDispatcher.DISPATCH_DELAY_CONF_KEY, 0);</span>
+<span class="source-line-no">077</span><span id="line-77"> util.startMiniCluster();</span>
+<span class="source-line-no">078</span><span id="line-78"> EnvironmentEdgeManager.injectEdge(mee);</span>
+<span class="source-line-no">079</span><span id="line-79"> }</span>
+<span class="source-line-no">080</span><span id="line-80"></span>
+<span class="source-line-no">081</span><span id="line-81"> @AfterAll</span>
+<span class="source-line-no">082</span><span id="line-82"> public static void tearDownAfterClass() throws Exception {</span>
+<span class="source-line-no">083</span><span id="line-83"> util.shutdownMiniCluster();</span>
+<span class="source-line-no">084</span><span id="line-84"> }</span>
+<span class="source-line-no">085</span><span id="line-85"></span>
+<span class="source-line-no">086</span><span id="line-86"> @BeforeEach</span>
+<span class="source-line-no">087</span><span id="line-87"> public void setUp(TestInfo testInfo) {</span>
+<span class="source-line-no">088</span><span id="line-88"> currentTestName = testInfo.getTestMethod().get().getName();</span>
+<span class="source-line-no">089</span><span id="line-89"> }</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> public static class MyObserver implements RegionCoprocessor, RegionObserver {</span>
+<span class="source-line-no">092</span><span id="line-92"> private static TimeRange tr10 = null;</span>
+<span class="source-line-no">093</span><span id="line-93"> private static TimeRange tr2 = null;</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95"> @Override</span>
+<span class="source-line-no">096</span><span id="line-96"> public Optional<RegionObserver> getRegionObserver() {</span>
+<span class="source-line-no">097</span><span id="line-97"> return Optional.of(this);</span>
+<span class="source-line-no">098</span><span id="line-98"> }</span>
+<span class="source-line-no">099</span><span id="line-99"></span>
+<span class="source-line-no">100</span><span id="line-100"> @Override</span>
+<span class="source-line-no">101</span><span id="line-101"> public Result preAppend(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">102</span><span id="line-102"> final Append append) throws IOException {</span>
+<span class="source-line-no">103</span><span id="line-103"> NavigableMap<byte[], List<Cell>> map = append.getFamilyCellMap();</span>
+<span class="source-line-no">104</span><span id="line-104"> for (Map.Entry<byte[], List<Cell>> entry : map.entrySet()) {</span>
+<span class="source-line-no">105</span><span id="line-105"> for (Cell cell : entry.getValue()) {</span>
+<span class="source-line-no">106</span><span id="line-106"> String appendStr =</span>
+<span class="source-line-no">107</span><span id="line-107"> Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
+<span class="source-line-no">108</span><span id="line-108"> if (appendStr.equals("b")) {</span>
+<span class="source-line-no">109</span><span id="line-109"> tr10 = append.getTimeRange();</span>
+<span class="source-line-no">110</span><span id="line-110"> } else if (appendStr.equals("c") && !append.getTimeRange().isAllTime()) {</span>
+<span class="source-line-no">111</span><span id="line-111"> tr2 = append.getTimeRange();</span>
+<span class="source-line-no">112</span><span id="line-112"> }</span>
+<span class="source-line-no">113</span><span id="line-113"> }</span>
+<span class="source-line-no">114</span><span id="line-114"> }</span>
+<span class="source-line-no">115</span><span id="line-115"> return null;</span>
+<span class="source-line-no">116</span><span id="line-116"> }</span>
+<span class="source-line-no">117</span><span id="line-117"> }</span>
+<span class="source-line-no">118</span><span id="line-118"></span>
+<span class="source-line-no">119</span><span id="line-119"> @Test</span>
+<span class="source-line-no">120</span><span id="line-120"> public void testHTableInterfaceMethods() throws Exception {</span>
+<span class="source-line-no">121</span><span id="line-121"> try (Table table = util.createTable(TableName.valueOf(currentTestName), TEST_FAMILY)) {</span>
+<span class="source-line-no">122</span><span id="line-122"> table.put(new Put(ROW).addColumn(TEST_FAMILY, QUAL, VALUE));</span>
+<span class="source-line-no">123</span><span id="line-123"> long time = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">124</span><span id="line-124"> mee.setValue(time);</span>
+<span class="source-line-no">125</span><span id="line-125"> table.put(new Put(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("a")));</span>
+<span class="source-line-no">126</span><span id="line-126"> checkRowValue(table, ROW, Bytes.toBytes("a"));</span>
+<span class="source-line-no">127</span><span id="line-127"></span>
+<span class="source-line-no">128</span><span id="line-128"> time = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">129</span><span id="line-129"> mee.setValue(time);</span>
+<span class="source-line-no">130</span><span id="line-130"> TimeRange range10 = TimeRange.between(1, time + 10);</span>
+<span class="source-line-no">131</span><span id="line-131"> table.append(new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("b"))</span>
+<span class="source-line-no">132</span><span id="line-132"> .setTimeRange(range10.getMin(), range10.getMax()));</span>
+<span class="source-line-no">133</span><span id="line-133"> checkRowValue(table, ROW, Bytes.toBytes("ab"));</span>
+<span class="source-line-no">134</span><span id="line-134"> assertEquals(MyObserver.tr10.getMin(), range10.getMin());</span>
+<span class="source-line-no">135</span><span id="line-135"> assertEquals(MyObserver.tr10.getMax(), range10.getMax());</span>
+<span class="source-line-no">136</span><span id="line-136"> time = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">137</span><span id="line-137"> mee.setValue(time);</span>
+<span class="source-line-no">138</span><span id="line-138"> TimeRange range2 = TimeRange.between(1, time + 20);</span>
+<span class="source-line-no">139</span><span id="line-139"> List<Row> actions = Arrays.asList(new Row[] {</span>
+<span class="source-line-no">140</span><span id="line-140"> new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("c"))</span>
+<span class="source-line-no">141</span><span id="line-141"> .setTimeRange(range2.getMin(), range2.getMax()),</span>
+<span class="source-line-no">142</span><span id="line-142"> new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("c"))</span>
+<span class="source-line-no">143</span><span id="line-143"> .setTimeRange(range2.getMin(), range2.getMax()) });</span>
+<span class="source-line-no">144</span><span id="line-144"> Object[] results1 = new Object[actions.size()];</span>
+<span class="source-line-no">145</span><span id="line-145"> table.batch(actions, results1);</span>
+<span class="source-line-no">146</span><span id="line-146"> assertEquals(MyObserver.tr2.getMin(), range2.getMin());</span>
+<span class="source-line-no">147</span><span id="line-147"> assertEquals(MyObserver.tr2.getMax(), range2.getMax());</span>
+<span class="source-line-no">148</span><span id="line-148"> for (Object r2 : results1) {</span>
+<span class="source-line-no">149</span><span id="line-149"> assertTrue(r2 instanceof Result);</span>
+<span class="source-line-no">150</span><span id="line-150"> }</span>
+<span class="source-line-no">151</span><span id="line-151"> checkRowValue(table, ROW, Bytes.toBytes("abcc"));</span>
+<span class="source-line-no">152</span><span id="line-152"> }</span>
+<span class="source-line-no">153</span><span id="line-153"> }</span>
+<span class="source-line-no">154</span><span id="line-154"></span>
+<span class="source-line-no">155</span><span id="line-155"> private void checkRowValue(Table table, byte[] row, byte[] expectedValue) throws IOException {</span>
+<span class="source-line-no">156</span><span id="line-156"> Get get = new Get(row).addColumn(TEST_FAMILY, QUAL);</span>
+<span class="source-line-no">157</span><span id="line-157"> Result result = table.get(get);</span>
+<span class="source-line-no">158</span><span id="line-158"> byte[] actualValue = result.getValue(TEST_FAMILY, QUAL);</span>
+<span class="source-line-no">159</span><span id="line-159"> assertArrayEquals(expectedValue, actualValue);</span>
+<span class="source-line-no">160</span><span id="line-160"> }</span>
+<span class="source-line-no">161</span><span id="line-161">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html
index efade9a8968..1f4be231673 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestAppendTimeRange.html
@@ -30,9 +30,9 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertArrayEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertTrue;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertArrayEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
<span class="source-line-no">023</span><span id="line-23"></span>
<span class="source-line-no">024</span><span id="line-24">import java.io.IOException;</span>
<span class="source-line-no">025</span><span id="line-25">import java.util.Arrays;</span>
@@ -41,138 +41,137 @@
<span class="source-line-no">028</span><span id="line-28">import java.util.NavigableMap;</span>
<span class="source-line-no">029</span><span id="line-29">import java.util.Optional;</span>
<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.Cell;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.TableName;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.client.Append;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.client.Get;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.client.Put;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.client.Result;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.client.Row;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.client.Table;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.io.TimeRange;</span>
-<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.util.Bytes;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.util.ManualEnvironmentEdge;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.junit.AfterClass;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.junit.BeforeClass;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.junit.ClassRule;</span>
-<span class="source-line-no">050</span><span id="line-50">import org.junit.Rule;</span>
-<span class="source-line-no">051</span><span id="line-51">import org.junit.Test;</span>
-<span class="source-line-no">052</span><span id="line-52">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">053</span><span id="line-53">import org.junit.rules.TestName;</span>
-<span class="source-line-no">054</span><span id="line-54"></span>
-<span class="source-line-no">055</span><span id="line-55">@Category({ CoprocessorTests.class, MediumTests.class })</span>
-<span class="source-line-no">056</span><span id="line-56">public class TestAppendTimeRange {</span>
-<span class="source-line-no">057</span><span id="line-57"></span>
-<span class="source-line-no">058</span><span id="line-58"> @ClassRule</span>
-<span class="source-line-no">059</span><span id="line-59"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">060</span><span id="line-60"> HBaseClassTestRule.forClass(TestAppendTimeRange.class);</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.TableName;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.client.Append;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.client.Get;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.client.Put;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.client.Result;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.client.Row;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.client.Table;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.io.TimeRange;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.util.Bytes;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.util.ManualEnvironmentEdge;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.junit.jupiter.api.AfterAll;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.junit.jupiter.api.BeforeAll;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">049</span><span id="line-49">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">050</span><span id="line-50">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">051</span><span id="line-51">import org.junit.jupiter.api.TestInfo;</span>
+<span class="source-line-no">052</span><span id="line-52"></span>
+<span class="source-line-no">053</span><span id="line-53">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">054</span><span id="line-54">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">055</span><span id="line-55">public class TestAppendTimeRange {</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57"> private String currentTestName;</span>
+<span class="source-line-no">058</span><span id="line-58"></span>
+<span class="source-line-no">059</span><span id="line-59"> private static final HBaseTestingUtil util = new HBaseTestingUtil();</span>
+<span class="source-line-no">060</span><span id="line-60"> private static final ManualEnvironmentEdge mee = new ManualEnvironmentEdge();</span>
<span class="source-line-no">061</span><span id="line-61"></span>
-<span class="source-line-no">062</span><span id="line-62"> @Rule</span>
-<span class="source-line-no">063</span><span id="line-63"> public TestName name = new TestName();</span>
-<span class="source-line-no">064</span><span id="line-64"></span>
-<span class="source-line-no">065</span><span id="line-65"> private static final HBaseTestingUtil util = new HBaseTestingUtil();</span>
-<span class="source-line-no">066</span><span id="line-66"> private static final ManualEnvironmentEdge mee = new ManualEnvironmentEdge();</span>
+<span class="source-line-no">062</span><span id="line-62"> private static final byte[] TEST_FAMILY = Bytes.toBytes("f1");</span>
+<span class="source-line-no">063</span><span id="line-63"></span>
+<span class="source-line-no">064</span><span id="line-64"> private static final byte[] ROW = Bytes.toBytes("aaa");</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66"> private static final byte[] QUAL = Bytes.toBytes("col1");</span>
<span class="source-line-no">067</span><span id="line-67"></span>
-<span class="source-line-no">068</span><span id="line-68"> private static final byte[] TEST_FAMILY = Bytes.toBytes("f1");</span>
+<span class="source-line-no">068</span><span id="line-68"> private static final byte[] VALUE = Bytes.toBytes("1");</span>
<span class="source-line-no">069</span><span id="line-69"></span>
-<span class="source-line-no">070</span><span id="line-70"> private static final byte[] ROW = Bytes.toBytes("aaa");</span>
-<span class="source-line-no">071</span><span id="line-71"></span>
-<span class="source-line-no">072</span><span id="line-72"> private static final byte[] QUAL = Bytes.toBytes("col1");</span>
-<span class="source-line-no">073</span><span id="line-73"></span>
-<span class="source-line-no">074</span><span id="line-74"> private static final byte[] VALUE = Bytes.toBytes("1");</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> @BeforeClass</span>
-<span class="source-line-no">077</span><span id="line-77"> public static void setupBeforeClass() throws Exception {</span>
-<span class="source-line-no">078</span><span id="line-78"> util.getConfiguration().set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,</span>
-<span class="source-line-no">079</span><span id="line-79"> MyObserver.class.getName());</span>
-<span class="source-line-no">080</span><span id="line-80"> // Make general delay zero rather than default. Timing is off in this</span>
-<span class="source-line-no">081</span><span id="line-81"> // test that depends on an evironment edge that is manually moved forward.</span>
-<span class="source-line-no">082</span><span id="line-82"> util.getConfiguration().setInt(RemoteProcedureDispatcher.DISPATCH_DELAY_CONF_KEY, 0);</span>
-<span class="source-line-no">083</span><span id="line-83"> util.startMiniCluster();</span>
-<span class="source-line-no">084</span><span id="line-84"> EnvironmentEdgeManager.injectEdge(mee);</span>
-<span class="source-line-no">085</span><span id="line-85"> }</span>
-<span class="source-line-no">086</span><span id="line-86"></span>
-<span class="source-line-no">087</span><span id="line-87"> @AfterClass</span>
-<span class="source-line-no">088</span><span id="line-88"> public static void tearDownAfterClass() throws Exception {</span>
-<span class="source-line-no">089</span><span id="line-89"> util.shutdownMiniCluster();</span>
-<span class="source-line-no">090</span><span id="line-90"> }</span>
-<span class="source-line-no">091</span><span id="line-91"></span>
-<span class="source-line-no">092</span><span id="line-92"> public static class MyObserver implements RegionCoprocessor, RegionObserver {</span>
-<span class="source-line-no">093</span><span id="line-93"> private static TimeRange tr10 = null;</span>
-<span class="source-line-no">094</span><span id="line-94"> private static TimeRange tr2 = null;</span>
-<span class="source-line-no">095</span><span id="line-95"></span>
-<span class="source-line-no">096</span><span id="line-96"> @Override</span>
-<span class="source-line-no">097</span><span id="line-97"> public Optional<RegionObserver> getRegionObserver() {</span>
-<span class="source-line-no">098</span><span id="line-98"> return Optional.of(this);</span>
-<span class="source-line-no">099</span><span id="line-99"> }</span>
-<span class="source-line-no">100</span><span id="line-100"></span>
-<span class="source-line-no">101</span><span id="line-101"> @Override</span>
-<span class="source-line-no">102</span><span id="line-102"> public Result preAppend(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">103</span><span id="line-103"> final Append append) throws IOException {</span>
-<span class="source-line-no">104</span><span id="line-104"> NavigableMap<byte[], List<Cell>> map = append.getFamilyCellMap();</span>
-<span class="source-line-no">105</span><span id="line-105"> for (Map.Entry<byte[], List<Cell>> entry : map.entrySet()) {</span>
-<span class="source-line-no">106</span><span id="line-106"> for (Cell cell : entry.getValue()) {</span>
-<span class="source-line-no">107</span><span id="line-107"> String appendStr =</span>
-<span class="source-line-no">108</span><span id="line-108"> Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
-<span class="source-line-no">109</span><span id="line-109"> if (appendStr.equals("b")) {</span>
-<span class="source-line-no">110</span><span id="line-110"> tr10 = append.getTimeRange();</span>
-<span class="source-line-no">111</span><span id="line-111"> } else if (appendStr.equals("c") && !append.getTimeRange().isAllTime()) {</span>
-<span class="source-line-no">112</span><span id="line-112"> tr2 = append.getTimeRange();</span>
-<span class="source-line-no">113</span><span id="line-113"> }</span>
-<span class="source-line-no">114</span><span id="line-114"> }</span>
-<span class="source-line-no">115</span><span id="line-115"> }</span>
-<span class="source-line-no">116</span><span id="line-116"> return null;</span>
-<span class="source-line-no">117</span><span id="line-117"> }</span>
-<span class="source-line-no">118</span><span id="line-118"> }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120"> @Test</span>
-<span class="source-line-no">121</span><span id="line-121"> public void testHTableInterfaceMethods() throws Exception {</span>
-<span class="source-line-no">122</span><span id="line-122"> try (Table table = util.createTable(TableName.valueOf(name.getMethodName()), TEST_FAMILY)) {</span>
-<span class="source-line-no">123</span><span id="line-123"> table.put(new Put(ROW).addColumn(TEST_FAMILY, QUAL, VALUE));</span>
-<span class="source-line-no">124</span><span id="line-124"> long time = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">125</span><span id="line-125"> mee.setValue(time);</span>
-<span class="source-line-no">126</span><span id="line-126"> table.put(new Put(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("a")));</span>
-<span class="source-line-no">127</span><span id="line-127"> checkRowValue(table, ROW, Bytes.toBytes("a"));</span>
-<span class="source-line-no">128</span><span id="line-128"></span>
-<span class="source-line-no">129</span><span id="line-129"> time = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">130</span><span id="line-130"> mee.setValue(time);</span>
-<span class="source-line-no">131</span><span id="line-131"> TimeRange range10 = TimeRange.between(1, time + 10);</span>
-<span class="source-line-no">132</span><span id="line-132"> table.append(new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("b"))</span>
-<span class="source-line-no">133</span><span id="line-133"> .setTimeRange(range10.getMin(), range10.getMax()));</span>
-<span class="source-line-no">134</span><span id="line-134"> checkRowValue(table, ROW, Bytes.toBytes("ab"));</span>
-<span class="source-line-no">135</span><span id="line-135"> assertEquals(MyObserver.tr10.getMin(), range10.getMin());</span>
-<span class="source-line-no">136</span><span id="line-136"> assertEquals(MyObserver.tr10.getMax(), range10.getMax());</span>
-<span class="source-line-no">137</span><span id="line-137"> time = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">138</span><span id="line-138"> mee.setValue(time);</span>
-<span class="source-line-no">139</span><span id="line-139"> TimeRange range2 = TimeRange.between(1, time + 20);</span>
-<span class="source-line-no">140</span><span id="line-140"> List<Row> actions = Arrays.asList(new Row[] {</span>
-<span class="source-line-no">141</span><span id="line-141"> new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("c"))</span>
-<span class="source-line-no">142</span><span id="line-142"> .setTimeRange(range2.getMin(), range2.getMax()),</span>
-<span class="source-line-no">143</span><span id="line-143"> new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("c"))</span>
-<span class="source-line-no">144</span><span id="line-144"> .setTimeRange(range2.getMin(), range2.getMax()) });</span>
-<span class="source-line-no">145</span><span id="line-145"> Object[] results1 = new Object[actions.size()];</span>
-<span class="source-line-no">146</span><span id="line-146"> table.batch(actions, results1);</span>
-<span class="source-line-no">147</span><span id="line-147"> assertEquals(MyObserver.tr2.getMin(), range2.getMin());</span>
-<span class="source-line-no">148</span><span id="line-148"> assertEquals(MyObserver.tr2.getMax(), range2.getMax());</span>
-<span class="source-line-no">149</span><span id="line-149"> for (Object r2 : results1) {</span>
-<span class="source-line-no">150</span><span id="line-150"> assertTrue(r2 instanceof Result);</span>
-<span class="source-line-no">151</span><span id="line-151"> }</span>
-<span class="source-line-no">152</span><span id="line-152"> checkRowValue(table, ROW, Bytes.toBytes("abcc"));</span>
-<span class="source-line-no">153</span><span id="line-153"> }</span>
-<span class="source-line-no">154</span><span id="line-154"> }</span>
-<span class="source-line-no">155</span><span id="line-155"></span>
-<span class="source-line-no">156</span><span id="line-156"> private void checkRowValue(Table table, byte[] row, byte[] expectedValue) throws IOException {</span>
-<span class="source-line-no">157</span><span id="line-157"> Get get = new Get(row).addColumn(TEST_FAMILY, QUAL);</span>
-<span class="source-line-no">158</span><span id="line-158"> Result result = table.get(get);</span>
-<span class="source-line-no">159</span><span id="line-159"> byte[] actualValue = result.getValue(TEST_FAMILY, QUAL);</span>
-<span class="source-line-no">160</span><span id="line-160"> assertArrayEquals(expectedValue, actualValue);</span>
-<span class="source-line-no">161</span><span id="line-161"> }</span>
-<span class="source-line-no">162</span><span id="line-162">}</span>
+<span class="source-line-no">070</span><span id="line-70"> @BeforeAll</span>
+<span class="source-line-no">071</span><span id="line-71"> public static void setupBeforeClass() throws Exception {</span>
+<span class="source-line-no">072</span><span id="line-72"> util.getConfiguration().set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,</span>
+<span class="source-line-no">073</span><span id="line-73"> MyObserver.class.getName());</span>
+<span class="source-line-no">074</span><span id="line-74"> // Make general delay zero rather than default. Timing is off in this</span>
+<span class="source-line-no">075</span><span id="line-75"> // test that depends on an evironment edge that is manually moved forward.</span>
+<span class="source-line-no">076</span><span id="line-76"> util.getConfiguration().setInt(RemoteProcedureDispatcher.DISPATCH_DELAY_CONF_KEY, 0);</span>
+<span class="source-line-no">077</span><span id="line-77"> util.startMiniCluster();</span>
+<span class="source-line-no">078</span><span id="line-78"> EnvironmentEdgeManager.injectEdge(mee);</span>
+<span class="source-line-no">079</span><span id="line-79"> }</span>
+<span class="source-line-no">080</span><span id="line-80"></span>
+<span class="source-line-no">081</span><span id="line-81"> @AfterAll</span>
+<span class="source-line-no">082</span><span id="line-82"> public static void tearDownAfterClass() throws Exception {</span>
+<span class="source-line-no">083</span><span id="line-83"> util.shutdownMiniCluster();</span>
+<span class="source-line-no">084</span><span id="line-84"> }</span>
+<span class="source-line-no">085</span><span id="line-85"></span>
+<span class="source-line-no">086</span><span id="line-86"> @BeforeEach</span>
+<span class="source-line-no">087</span><span id="line-87"> public void setUp(TestInfo testInfo) {</span>
+<span class="source-line-no">088</span><span id="line-88"> currentTestName = testInfo.getTestMethod().get().getName();</span>
+<span class="source-line-no">089</span><span id="line-89"> }</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> public static class MyObserver implements RegionCoprocessor, RegionObserver {</span>
+<span class="source-line-no">092</span><span id="line-92"> private static TimeRange tr10 = null;</span>
+<span class="source-line-no">093</span><span id="line-93"> private static TimeRange tr2 = null;</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95"> @Override</span>
+<span class="source-line-no">096</span><span id="line-96"> public Optional<RegionObserver> getRegionObserver() {</span>
+<span class="source-line-no">097</span><span id="line-97"> return Optional.of(this);</span>
+<span class="source-line-no">098</span><span id="line-98"> }</span>
+<span class="source-line-no">099</span><span id="line-99"></span>
+<span class="source-line-no">100</span><span id="line-100"> @Override</span>
+<span class="source-line-no">101</span><span id="line-101"> public Result preAppend(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">102</span><span id="line-102"> final Append append) throws IOException {</span>
+<span class="source-line-no">103</span><span id="line-103"> NavigableMap<byte[], List<Cell>> map = append.getFamilyCellMap();</span>
+<span class="source-line-no">104</span><span id="line-104"> for (Map.Entry<byte[], List<Cell>> entry : map.entrySet()) {</span>
+<span class="source-line-no">105</span><span id="line-105"> for (Cell cell : entry.getValue()) {</span>
+<span class="source-line-no">106</span><span id="line-106"> String appendStr =</span>
+<span class="source-line-no">107</span><span id="line-107"> Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());</span>
+<span class="source-line-no">108</span><span id="line-108"> if (appendStr.equals("b")) {</span>
+<span class="source-line-no">109</span><span id="line-109"> tr10 = append.getTimeRange();</span>
+<span class="source-line-no">110</span><span id="line-110"> } else if (appendStr.equals("c") && !append.getTimeRange().isAllTime()) {</span>
+<span class="source-line-no">111</span><span id="line-111"> tr2 = append.getTimeRange();</span>
+<span class="source-line-no">112</span><span id="line-112"> }</span>
+<span class="source-line-no">113</span><span id="line-113"> }</span>
+<span class="source-line-no">114</span><span id="line-114"> }</span>
+<span class="source-line-no">115</span><span id="line-115"> return null;</span>
+<span class="source-line-no">116</span><span id="line-116"> }</span>
+<span class="source-line-no">117</span><span id="line-117"> }</span>
+<span class="source-line-no">118</span><span id="line-118"></span>
+<span class="source-line-no">119</span><span id="line-119"> @Test</span>
+<span class="source-line-no">120</span><span id="line-120"> public void testHTableInterfaceMethods() throws Exception {</span>
+<span class="source-line-no">121</span><span id="line-121"> try (Table table = util.createTable(TableName.valueOf(currentTestName), TEST_FAMILY)) {</span>
+<span class="source-line-no">122</span><span id="line-122"> table.put(new Put(ROW).addColumn(TEST_FAMILY, QUAL, VALUE));</span>
+<span class="source-line-no">123</span><span id="line-123"> long time = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">124</span><span id="line-124"> mee.setValue(time);</span>
+<span class="source-line-no">125</span><span id="line-125"> table.put(new Put(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("a")));</span>
+<span class="source-line-no">126</span><span id="line-126"> checkRowValue(table, ROW, Bytes.toBytes("a"));</span>
+<span class="source-line-no">127</span><span id="line-127"></span>
+<span class="source-line-no">128</span><span id="line-128"> time = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">129</span><span id="line-129"> mee.setValue(time);</span>
+<span class="source-line-no">130</span><span id="line-130"> TimeRange range10 = TimeRange.between(1, time + 10);</span>
+<span class="source-line-no">131</span><span id="line-131"> table.append(new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("b"))</span>
+<span class="source-line-no">132</span><span id="line-132"> .setTimeRange(range10.getMin(), range10.getMax()));</span>
+<span class="source-line-no">133</span><span id="line-133"> checkRowValue(table, ROW, Bytes.toBytes("ab"));</span>
+<span class="source-line-no">134</span><span id="line-134"> assertEquals(MyObserver.tr10.getMin(), range10.getMin());</span>
+<span class="source-line-no">135</span><span id="line-135"> assertEquals(MyObserver.tr10.getMax(), range10.getMax());</span>
+<span class="source-line-no">136</span><span id="line-136"> time = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">137</span><span id="line-137"> mee.setValue(time);</span>
+<span class="source-line-no">138</span><span id="line-138"> TimeRange range2 = TimeRange.between(1, time + 20);</span>
+<span class="source-line-no">139</span><span id="line-139"> List<Row> actions = Arrays.asList(new Row[] {</span>
+<span class="source-line-no">140</span><span id="line-140"> new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("c"))</span>
+<span class="source-line-no">141</span><span id="line-141"> .setTimeRange(range2.getMin(), range2.getMax()),</span>
+<span class="source-line-no">142</span><span id="line-142"> new Append(ROW).addColumn(TEST_FAMILY, QUAL, Bytes.toBytes("c"))</span>
+<span class="source-line-no">143</span><span id="line-143"> .setTimeRange(range2.getMin(), range2.getMax()) });</span>
+<span class="source-line-no">144</span><span id="line-144"> Object[] results1 = new Object[actions.size()];</span>
+<span class="source-line-no">145</span><span id="line-145"> table.batch(actions, results1);</span>
+<span class="source-line-no">146</span><span id="line-146"> assertEquals(MyObserver.tr2.getMin(), range2.getMin());</span>
+<span class="source-line-no">147</span><span id="line-147"> assertEquals(MyObserver.tr2.getMax(), range2.getMax());</span>
+<span class="source-line-no">148</span><span id="line-148"> for (Object r2 : results1) {</span>
+<span class="source-line-no">149</span><span id="line-149"> assertTrue(r2 instanceof Result);</span>
+<span class="source-line-no">150</span><span id="line-150"> }</span>
+<span class="source-line-no">151</span><span id="line-151"> checkRowValue(table, ROW, Bytes.toBytes("abcc"));</span>
+<span class="source-line-no">152</span><span id="line-152"> }</span>
+<span class="source-line-no">153</span><span id="line-153"> }</span>
+<span class="source-line-no">154</span><span id="line-154"></span>
+<span class="source-line-no">155</span><span id="line-155"> private void checkRowValue(Table table, byte[] row, byte[] expectedValue) throws IOException {</span>
+<span class="source-line-no">156</span><span id="line-156"> Get get = new Get(row).addColumn(TEST_FAMILY, QUAL);</span>
+<span class="source-line-no">157</span><span id="line-157"> Result result = table.get(get);</span>
+<span class="source-line-no">158</span><span id="line-158"> byte[] actualValue = result.getValue(TEST_FAMILY, QUAL);</span>
+<span class="source-line-no">159</span><span id="line-159"> assertArrayEquals(expectedValue, actualValue);</span>
+<span class="source-line-no">160</span><span id="line-160"> }</span>
+<span class="source-line-no">161</span><span id="line-161">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.TestCoprocessor.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.TestCoprocessor.html
index 524c18e7f1e..2c5e26136c0 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.TestCoprocessor.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.TestCoprocessor.html
@@ -30,7 +30,7 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
<span class="source-line-no">021</span><span id="line-21">import static org.mockito.ArgumentMatchers.any;</span>
<span class="source-line-no">022</span><span id="line-22">import static org.mockito.Mockito.clearInvocations;</span>
<span class="source-line-no">023</span><span id="line-23">import static org.mockito.Mockito.doAnswer;</span>
@@ -45,180 +45,170 @@
<span class="source-line-no">032</span><span id="line-32">import java.util.Map;</span>
<span class="source-line-no">033</span><span id="line-33">import java.util.Optional;</span>
<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.HRegionLocation;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.RegionLocations;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.client.AsyncConnectionImpl;</span>
-<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.client.ConnectionFactory;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.client.ConnectionRegistry;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.master.HMaster;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.master.MasterRpcServices;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.junit.AfterClass;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.junit.Before;</span>
-<span class="source-line-no">050</span><span id="line-50">import org.junit.BeforeClass;</span>
-<span class="source-line-no">051</span><span id="line-51">import org.junit.ClassRule;</span>
-<span class="source-line-no">052</span><span id="line-52">import org.junit.Rule;</span>
-<span class="source-line-no">053</span><span id="line-53">import org.junit.Test;</span>
-<span class="source-line-no">054</span><span id="line-54">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">055</span><span id="line-55">import org.junit.rules.TestName;</span>
-<span class="source-line-no">056</span><span id="line-56">import org.slf4j.Logger;</span>
-<span class="source-line-no">057</span><span id="line-57">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">058</span><span id="line-58"></span>
-<span class="source-line-no">059</span><span id="line-59">/**</span>
-<span class="source-line-no">060</span><span id="line-60"> * Tests invocation of the {@link MasterObserver} interface hooks at all appropriate times during</span>
-<span class="source-line-no">061</span><span id="line-61"> * normal HMaster operations.</span>
-<span class="source-line-no">062</span><span id="line-62"> */</span>
-<span class="source-line-no">063</span><span id="line-63">@Category({ CoprocessorTests.class, MediumTests.class })</span>
-<span class="source-line-no">064</span><span id="line-64">public class TestClientMetaCoprocessor {</span>
-<span class="source-line-no">065</span><span id="line-65"> private static final Logger LOG = LoggerFactory.getLogger(TestClientMetaCoprocessor.class);</span>
-<span class="source-line-no">066</span><span id="line-66"></span>
-<span class="source-line-no">067</span><span id="line-67"> @ClassRule</span>
-<span class="source-line-no">068</span><span id="line-68"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">069</span><span id="line-69"> HBaseClassTestRule.forClass(TestClientMetaCoprocessor.class);</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.HRegionLocation;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.RegionLocations;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.client.AsyncConnectionImpl;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.client.ConnectionFactory;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.client.ConnectionRegistry;</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.master.HMaster;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.master.MasterRpcServices;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.junit.jupiter.api.AfterAll;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.junit.jupiter.api.BeforeAll;</span>
+<span class="source-line-no">049</span><span id="line-49">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">050</span><span id="line-50">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">051</span><span id="line-51">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">052</span><span id="line-52">import org.slf4j.Logger;</span>
+<span class="source-line-no">053</span><span id="line-53">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">/**</span>
+<span class="source-line-no">056</span><span id="line-56"> * Tests invocation of the {@link MasterObserver} interface hooks at all appropriate times during</span>
+<span class="source-line-no">057</span><span id="line-57"> * normal HMaster operations.</span>
+<span class="source-line-no">058</span><span id="line-58"> */</span>
+<span class="source-line-no">059</span><span id="line-59">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">060</span><span id="line-60">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">061</span><span id="line-61">public class TestClientMetaCoprocessor {</span>
+<span class="source-line-no">062</span><span id="line-62"> private static final Logger LOG = LoggerFactory.getLogger(TestClientMetaCoprocessor.class);</span>
+<span class="source-line-no">063</span><span id="line-63"></span>
+<span class="source-line-no">064</span><span id="line-64"> private static final HBaseTestingUtil UTIL = new HBaseTestingUtil();</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66"> private static final ServerName SERVER_NAME = ServerName.valueOf("localhost", 1234, 12345);</span>
+<span class="source-line-no">067</span><span id="line-67"></span>
+<span class="source-line-no">068</span><span id="line-68"> public static class TestCoprocessor implements ClientMetaCoprocessor {</span>
+<span class="source-line-no">069</span><span id="line-69"> protected final ClientMetaObserver observer;</span>
<span class="source-line-no">070</span><span id="line-70"></span>
-<span class="source-line-no">071</span><span id="line-71"> @Rule</span>
-<span class="source-line-no">072</span><span id="line-72"> public TestName name = new TestName();</span>
-<span class="source-line-no">073</span><span id="line-73"></span>
-<span class="source-line-no">074</span><span id="line-74"> private static final HBaseTestingUtil UTIL = new HBaseTestingUtil();</span>
+<span class="source-line-no">071</span><span id="line-71"> public TestCoprocessor() {</span>
+<span class="source-line-no">072</span><span id="line-72"> observer = mock(ClientMetaObserver.class);</span>
+<span class="source-line-no">073</span><span id="line-73"> resetMock();</span>
+<span class="source-line-no">074</span><span id="line-74"> }</span>
<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> private static final ServerName SERVER_NAME = ServerName.valueOf("localhost", 1234, 12345);</span>
-<span class="source-line-no">077</span><span id="line-77"></span>
-<span class="source-line-no">078</span><span id="line-78"> public static class TestCoprocessor implements ClientMetaCoprocessor {</span>
-<span class="source-line-no">079</span><span id="line-79"> protected final ClientMetaObserver observer;</span>
-<span class="source-line-no">080</span><span id="line-80"></span>
-<span class="source-line-no">081</span><span id="line-81"> public TestCoprocessor() {</span>
-<span class="source-line-no">082</span><span id="line-82"> observer = mock(ClientMetaObserver.class);</span>
-<span class="source-line-no">083</span><span id="line-83"> resetMock();</span>
-<span class="source-line-no">084</span><span id="line-84"> }</span>
-<span class="source-line-no">085</span><span id="line-85"></span>
-<span class="source-line-no">086</span><span id="line-86"> protected void resetMock() {</span>
-<span class="source-line-no">087</span><span id="line-87"> reset(observer);</span>
-<span class="source-line-no">088</span><span id="line-88"></span>
-<span class="source-line-no">089</span><span id="line-89"> try {</span>
-<span class="source-line-no">090</span><span id="line-90"> doAnswer(answer -> answer.getArgument(1, String.class)).when(observer)</span>
-<span class="source-line-no">091</span><span id="line-91"> .postGetClusterId(any(), any());</span>
-<span class="source-line-no">092</span><span id="line-92"> doAnswer(answer -> {</span>
-<span class="source-line-no">093</span><span id="line-93"> return answer.getArgument(1, ServerName.class);</span>
-<span class="source-line-no">094</span><span id="line-94"> }).when(observer).postGetActiveMaster(any(), any());</span>
-<span class="source-line-no">095</span><span id="line-95"> doAnswer(answer -> answer.getArgument(1, Map.class)).when(observer).postGetMasters(any(),</span>
-<span class="source-line-no">096</span><span id="line-96"> any());</span>
-<span class="source-line-no">097</span><span id="line-97"> doAnswer(answer -> answer.getArgument(1, List.class)).when(observer)</span>
-<span class="source-line-no">098</span><span id="line-98"> .postGetBootstrapNodes(any(), any());</span>
-<span class="source-line-no">099</span><span id="line-99"> doAnswer(answer -> answer.getArgument(1, List.class)).when(observer)</span>
-<span class="source-line-no">100</span><span id="line-100"> .postGetMetaLocations(any(), any());</span>
-<span class="source-line-no">101</span><span id="line-101"> } catch (IOException e) {</span>
-<span class="source-line-no">102</span><span id="line-102"> throw new IllegalStateException("Could not setup observer mock.", e);</span>
-<span class="source-line-no">103</span><span id="line-103"> }</span>
-<span class="source-line-no">104</span><span id="line-104"> }</span>
+<span class="source-line-no">076</span><span id="line-76"> protected void resetMock() {</span>
+<span class="source-line-no">077</span><span id="line-77"> reset(observer);</span>
+<span class="source-line-no">078</span><span id="line-78"></span>
+<span class="source-line-no">079</span><span id="line-79"> try {</span>
+<span class="source-line-no">080</span><span id="line-80"> doAnswer(answer -> answer.getArgument(1, String.class)).when(observer)</span>
+<span class="source-line-no">081</span><span id="line-81"> .postGetClusterId(any(), any());</span>
+<span class="source-line-no">082</span><span id="line-82"> doAnswer(answer -> {</span>
+<span class="source-line-no">083</span><span id="line-83"> return answer.getArgument(1, ServerName.class);</span>
+<span class="source-line-no">084</span><span id="line-84"> }).when(observer).postGetActiveMaster(any(), any());</span>
+<span class="source-line-no">085</span><span id="line-85"> doAnswer(answer -> answer.getArgument(1, Map.class)).when(observer).postGetMasters(any(),</span>
+<span class="source-line-no">086</span><span id="line-86"> any());</span>
+<span class="source-line-no">087</span><span id="line-87"> doAnswer(answer -> answer.getArgument(1, List.class)).when(observer)</span>
+<span class="source-line-no">088</span><span id="line-88"> .postGetBootstrapNodes(any(), any());</span>
+<span class="source-line-no">089</span><span id="line-89"> doAnswer(answer -> answer.getArgument(1, List.class)).when(observer)</span>
+<span class="source-line-no">090</span><span id="line-90"> .postGetMetaLocations(any(), any());</span>
+<span class="source-line-no">091</span><span id="line-91"> } catch (IOException e) {</span>
+<span class="source-line-no">092</span><span id="line-92"> throw new IllegalStateException("Could not setup observer mock.", e);</span>
+<span class="source-line-no">093</span><span id="line-93"> }</span>
+<span class="source-line-no">094</span><span id="line-94"> }</span>
+<span class="source-line-no">095</span><span id="line-95"></span>
+<span class="source-line-no">096</span><span id="line-96"> @Override</span>
+<span class="source-line-no">097</span><span id="line-97"> public Optional<ClientMetaObserver> getClientMetaObserver() {</span>
+<span class="source-line-no">098</span><span id="line-98"> return Optional.of(observer);</span>
+<span class="source-line-no">099</span><span id="line-99"> }</span>
+<span class="source-line-no">100</span><span id="line-100"> }</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102"> private static TestCoprocessor getCoprocessor() {</span>
+<span class="source-line-no">103</span><span id="line-103"> HMaster master = UTIL.getMiniHBaseCluster().getMaster();</span>
+<span class="source-line-no">104</span><span id="line-104"> MasterRpcServices masterRpcServices = master.getMasterRpcServices();</span>
<span class="source-line-no">105</span><span id="line-105"></span>
-<span class="source-line-no">106</span><span id="line-106"> @Override</span>
-<span class="source-line-no">107</span><span id="line-107"> public Optional<ClientMetaObserver> getClientMetaObserver() {</span>
-<span class="source-line-no">108</span><span id="line-108"> return Optional.of(observer);</span>
-<span class="source-line-no">109</span><span id="line-109"> }</span>
-<span class="source-line-no">110</span><span id="line-110"> }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112"> private static TestCoprocessor getCoprocessor() {</span>
-<span class="source-line-no">113</span><span id="line-113"> HMaster master = UTIL.getMiniHBaseCluster().getMaster();</span>
-<span class="source-line-no">114</span><span id="line-114"> MasterRpcServices masterRpcServices = master.getMasterRpcServices();</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116"> return masterRpcServices.getClientMetaCoprocessorHost().findCoprocessor(TestCoprocessor.class);</span>
-<span class="source-line-no">117</span><span id="line-117"> }</span>
-<span class="source-line-no">118</span><span id="line-118"></span>
-<span class="source-line-no">119</span><span id="line-119"> private static ClientMetaObserver getObserverMock() {</span>
-<span class="source-line-no">120</span><span id="line-120"> return getCoprocessor().getClientMetaObserver().get();</span>
-<span class="source-line-no">121</span><span id="line-121"> }</span>
-<span class="source-line-no">122</span><span id="line-122"></span>
-<span class="source-line-no">123</span><span id="line-123"> private static void resetObserverMock() {</span>
-<span class="source-line-no">124</span><span id="line-124"> getCoprocessor().resetMock();</span>
-<span class="source-line-no">125</span><span id="line-125"> }</span>
-<span class="source-line-no">126</span><span id="line-126"></span>
-<span class="source-line-no">127</span><span id="line-127"> @BeforeClass</span>
-<span class="source-line-no">128</span><span id="line-128"> public static void setupBeforeClass() throws Exception {</span>
-<span class="source-line-no">129</span><span id="line-129"> Configuration conf = UTIL.getConfiguration();</span>
-<span class="source-line-no">130</span><span id="line-130"> conf.set(CoprocessorHost.CLIENT_META_COPROCESSOR_CONF_KEY, TestCoprocessor.class.getName());</span>
-<span class="source-line-no">131</span><span id="line-131"></span>
-<span class="source-line-no">132</span><span id="line-132"> UTIL.startMiniCluster();</span>
+<span class="source-line-no">106</span><span id="line-106"> return masterRpcServices.getClientMetaCoprocessorHost().findCoprocessor(TestCoprocessor.class);</span>
+<span class="source-line-no">107</span><span id="line-107"> }</span>
+<span class="source-line-no">108</span><span id="line-108"></span>
+<span class="source-line-no">109</span><span id="line-109"> private static ClientMetaObserver getObserverMock() {</span>
+<span class="source-line-no">110</span><span id="line-110"> return getCoprocessor().getClientMetaObserver().get();</span>
+<span class="source-line-no">111</span><span id="line-111"> }</span>
+<span class="source-line-no">112</span><span id="line-112"></span>
+<span class="source-line-no">113</span><span id="line-113"> private static void resetObserverMock() {</span>
+<span class="source-line-no">114</span><span id="line-114"> getCoprocessor().resetMock();</span>
+<span class="source-line-no">115</span><span id="line-115"> }</span>
+<span class="source-line-no">116</span><span id="line-116"></span>
+<span class="source-line-no">117</span><span id="line-117"> @BeforeAll</span>
+<span class="source-line-no">118</span><span id="line-118"> public static void setupBeforeClass() throws Exception {</span>
+<span class="source-line-no">119</span><span id="line-119"> Configuration conf = UTIL.getConfiguration();</span>
+<span class="source-line-no">120</span><span id="line-120"> conf.set(CoprocessorHost.CLIENT_META_COPROCESSOR_CONF_KEY, TestCoprocessor.class.getName());</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122"> UTIL.startMiniCluster();</span>
+<span class="source-line-no">123</span><span id="line-123"> }</span>
+<span class="source-line-no">124</span><span id="line-124"></span>
+<span class="source-line-no">125</span><span id="line-125"> @AfterAll</span>
+<span class="source-line-no">126</span><span id="line-126"> public static void tearDownAfterClass() throws Exception {</span>
+<span class="source-line-no">127</span><span id="line-127"> UTIL.shutdownMiniCluster();</span>
+<span class="source-line-no">128</span><span id="line-128"> }</span>
+<span class="source-line-no">129</span><span id="line-129"></span>
+<span class="source-line-no">130</span><span id="line-130"> @BeforeEach</span>
+<span class="source-line-no">131</span><span id="line-131"> public void setupBefore() {</span>
+<span class="source-line-no">132</span><span id="line-132"> resetObserverMock();</span>
<span class="source-line-no">133</span><span id="line-133"> }</span>
<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135"> @AfterClass</span>
-<span class="source-line-no">136</span><span id="line-136"> public static void tearDownAfterClass() throws Exception {</span>
-<span class="source-line-no">137</span><span id="line-137"> UTIL.shutdownMiniCluster();</span>
-<span class="source-line-no">138</span><span id="line-138"> }</span>
-<span class="source-line-no">139</span><span id="line-139"></span>
-<span class="source-line-no">140</span><span id="line-140"> @Before</span>
-<span class="source-line-no">141</span><span id="line-141"> public void setupBefore() {</span>
-<span class="source-line-no">142</span><span id="line-142"> resetObserverMock();</span>
-<span class="source-line-no">143</span><span id="line-143"> }</span>
-<span class="source-line-no">144</span><span id="line-144"></span>
-<span class="source-line-no">145</span><span id="line-145"> @Test</span>
-<span class="source-line-no">146</span><span id="line-146"> public void testGetClusterId() throws Exception {</span>
-<span class="source-line-no">147</span><span id="line-147"> ClientMetaObserver observer = getObserverMock();</span>
+<span class="source-line-no">135</span><span id="line-135"> @Test</span>
+<span class="source-line-no">136</span><span id="line-136"> public void testGetClusterId() throws Exception {</span>
+<span class="source-line-no">137</span><span id="line-137"> ClientMetaObserver observer = getObserverMock();</span>
+<span class="source-line-no">138</span><span id="line-138"></span>
+<span class="source-line-no">139</span><span id="line-139"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
+<span class="source-line-no">140</span><span id="line-140"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
+<span class="source-line-no">141</span><span id="line-141"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
+<span class="source-line-no">142</span><span id="line-142"></span>
+<span class="source-line-no">143</span><span id="line-143"> doReturn("cluster-id").when(observer).postGetClusterId(any(), any());</span>
+<span class="source-line-no">144</span><span id="line-144"> clearInvocations(observer);</span>
+<span class="source-line-no">145</span><span id="line-145"></span>
+<span class="source-line-no">146</span><span id="line-146"> String clusterId = connectionRegistry.getClusterId().get();</span>
+<span class="source-line-no">147</span><span id="line-147"> assertEquals("cluster-id", clusterId);</span>
<span class="source-line-no">148</span><span id="line-148"></span>
-<span class="source-line-no">149</span><span id="line-149"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
-<span class="source-line-no">150</span><span id="line-150"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
-<span class="source-line-no">151</span><span id="line-151"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
-<span class="source-line-no">152</span><span id="line-152"></span>
-<span class="source-line-no">153</span><span id="line-153"> doReturn("cluster-id").when(observer).postGetClusterId(any(), any());</span>
-<span class="source-line-no">154</span><span id="line-154"> clearInvocations(observer);</span>
-<span class="source-line-no">155</span><span id="line-155"></span>
-<span class="source-line-no">156</span><span id="line-156"> String clusterId = connectionRegistry.getClusterId().get();</span>
-<span class="source-line-no">157</span><span id="line-157"> assertEquals("cluster-id", clusterId);</span>
+<span class="source-line-no">149</span><span id="line-149"> verify(observer).preGetClusterId(any());</span>
+<span class="source-line-no">150</span><span id="line-150"> verify(observer).postGetClusterId(any(), any());</span>
+<span class="source-line-no">151</span><span id="line-151"> verifyNoMoreInteractions(observer);</span>
+<span class="source-line-no">152</span><span id="line-152"> }</span>
+<span class="source-line-no">153</span><span id="line-153"> }</span>
+<span class="source-line-no">154</span><span id="line-154"></span>
+<span class="source-line-no">155</span><span id="line-155"> @Test</span>
+<span class="source-line-no">156</span><span id="line-156"> public void testGetActiveMaster() throws Exception {</span>
+<span class="source-line-no">157</span><span id="line-157"> ClientMetaObserver observer = getObserverMock();</span>
<span class="source-line-no">158</span><span id="line-158"></span>
-<span class="source-line-no">159</span><span id="line-159"> verify(observer).preGetClusterId(any());</span>
-<span class="source-line-no">160</span><span id="line-160"> verify(observer).postGetClusterId(any(), any());</span>
-<span class="source-line-no">161</span><span id="line-161"> verifyNoMoreInteractions(observer);</span>
-<span class="source-line-no">162</span><span id="line-162"> }</span>
-<span class="source-line-no">163</span><span id="line-163"> }</span>
-<span class="source-line-no">164</span><span id="line-164"></span>
-<span class="source-line-no">165</span><span id="line-165"> @Test</span>
-<span class="source-line-no">166</span><span id="line-166"> public void testGetActiveMaster() throws Exception {</span>
-<span class="source-line-no">167</span><span id="line-167"> ClientMetaObserver observer = getObserverMock();</span>
+<span class="source-line-no">159</span><span id="line-159"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
+<span class="source-line-no">160</span><span id="line-160"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
+<span class="source-line-no">161</span><span id="line-161"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
+<span class="source-line-no">162</span><span id="line-162"></span>
+<span class="source-line-no">163</span><span id="line-163"> doReturn(SERVER_NAME).when(observer).postGetActiveMaster(any(), any());</span>
+<span class="source-line-no">164</span><span id="line-164"> clearInvocations(observer);</span>
+<span class="source-line-no">165</span><span id="line-165"></span>
+<span class="source-line-no">166</span><span id="line-166"> ServerName activeMaster = connectionRegistry.getActiveMaster().get();</span>
+<span class="source-line-no">167</span><span id="line-167"> assertEquals(SERVER_NAME, activeMaster);</span>
<span class="source-line-no">168</span><span id="line-168"></span>
-<span class="source-line-no">169</span><span id="line-169"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
-<span class="source-line-no">170</span><span id="line-170"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
-<span class="source-line-no">171</span><span id="line-171"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
-<span class="source-line-no">172</span><span id="line-172"></span>
-<span class="source-line-no">173</span><span id="line-173"> doReturn(SERVER_NAME).when(observer).postGetActiveMaster(any(), any());</span>
-<span class="source-line-no">174</span><span id="line-174"> clearInvocations(observer);</span>
-<span class="source-line-no">175</span><span id="line-175"></span>
-<span class="source-line-no">176</span><span id="line-176"> ServerName activeMaster = connectionRegistry.getActiveMaster().get();</span>
-<span class="source-line-no">177</span><span id="line-177"> assertEquals(SERVER_NAME, activeMaster);</span>
+<span class="source-line-no">169</span><span id="line-169"> verify(observer).preGetActiveMaster(any());</span>
+<span class="source-line-no">170</span><span id="line-170"> verify(observer).postGetActiveMaster(any(), any());</span>
+<span class="source-line-no">171</span><span id="line-171"> verifyNoMoreInteractions(observer);</span>
+<span class="source-line-no">172</span><span id="line-172"> }</span>
+<span class="source-line-no">173</span><span id="line-173"> }</span>
+<span class="source-line-no">174</span><span id="line-174"></span>
+<span class="source-line-no">175</span><span id="line-175"> @Test</span>
+<span class="source-line-no">176</span><span id="line-176"> public void testGetMetaRegionLocations() throws Exception {</span>
+<span class="source-line-no">177</span><span id="line-177"> ClientMetaObserver observer = getObserverMock();</span>
<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179"> verify(observer).preGetActiveMaster(any());</span>
-<span class="source-line-no">180</span><span id="line-180"> verify(observer).postGetActiveMaster(any(), any());</span>
-<span class="source-line-no">181</span><span id="line-181"> verifyNoMoreInteractions(observer);</span>
-<span class="source-line-no">182</span><span id="line-182"> }</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"></span>
-<span class="source-line-no">185</span><span id="line-185"> @Test</span>
-<span class="source-line-no">186</span><span id="line-186"> public void testGetMetaRegionLocations() throws Exception {</span>
-<span class="source-line-no">187</span><span id="line-187"> ClientMetaObserver observer = getObserverMock();</span>
-<span class="source-line-no">188</span><span id="line-188"></span>
-<span class="source-line-no">189</span><span id="line-189"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
-<span class="source-line-no">190</span><span id="line-190"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
-<span class="source-line-no">191</span><span id="line-191"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
+<span class="source-line-no">179</span><span id="line-179"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
+<span class="source-line-no">180</span><span id="line-180"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
+<span class="source-line-no">181</span><span id="line-181"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
+<span class="source-line-no">182</span><span id="line-182"></span>
+<span class="source-line-no">183</span><span id="line-183"> HRegionLocation metaRegionLocation =</span>
+<span class="source-line-no">184</span><span id="line-184"> new HRegionLocation(RegionInfoBuilder.FIRST_META_REGIONINFO, SERVER_NAME);</span>
+<span class="source-line-no">185</span><span id="line-185"> doReturn(List.of(metaRegionLocation)).when(observer).postGetMetaLocations(any(), any());</span>
+<span class="source-line-no">186</span><span id="line-186"> clearInvocations(observer);</span>
+<span class="source-line-no">187</span><span id="line-187"></span>
+<span class="source-line-no">188</span><span id="line-188"> RegionLocations regionLocations = connectionRegistry.getMetaRegionLocations().get();</span>
+<span class="source-line-no">189</span><span id="line-189"> HRegionLocation actualMetaRegionLocation = regionLocations.getDefaultRegionLocation();</span>
+<span class="source-line-no">190</span><span id="line-190"></span>
+<span class="source-line-no">191</span><span id="line-191"> assertEquals(metaRegionLocation, actualMetaRegionLocation);</span>
<span class="source-line-no">192</span><span id="line-192"></span>
-<span class="source-line-no">193</span><span id="line-193"> HRegionLocation metaRegionLocation =</span>
-<span class="source-line-no">194</span><span id="line-194"> new HRegionLocation(RegionInfoBuilder.FIRST_META_REGIONINFO, SERVER_NAME);</span>
-<span class="source-line-no">195</span><span id="line-195"> doReturn(List.of(metaRegionLocation)).when(observer).postGetMetaLocations(any(), any());</span>
-<span class="source-line-no">196</span><span id="line-196"> clearInvocations(observer);</span>
-<span class="source-line-no">197</span><span id="line-197"></span>
-<span class="source-line-no">198</span><span id="line-198"> RegionLocations regionLocations = connectionRegistry.getMetaRegionLocations().get();</span>
-<span class="source-line-no">199</span><span id="line-199"> HRegionLocation actualMetaRegionLocation = regionLocations.getDefaultRegionLocation();</span>
-<span class="source-line-no">200</span><span id="line-200"></span>
-<span class="source-line-no">201</span><span id="line-201"> assertEquals(metaRegionLocation, actualMetaRegionLocation);</span>
-<span class="source-line-no">202</span><span id="line-202"></span>
-<span class="source-line-no">203</span><span id="line-203"> verify(observer).preGetMetaLocations(any());</span>
-<span class="source-line-no">204</span><span id="line-204"> verify(observer).postGetMetaLocations(any(), any());</span>
-<span class="source-line-no">205</span><span id="line-205"> verifyNoMoreInteractions(observer);</span>
-<span class="source-line-no">206</span><span id="line-206"> }</span>
-<span class="source-line-no">207</span><span id="line-207"> }</span>
-<span class="source-line-no">208</span><span id="line-208">}</span>
+<span class="source-line-no">193</span><span id="line-193"> verify(observer).preGetMetaLocations(any());</span>
+<span class="source-line-no">194</span><span id="line-194"> verify(observer).postGetMetaLocations(any(), any());</span>
+<span class="source-line-no">195</span><span id="line-195"> verifyNoMoreInteractions(observer);</span>
+<span class="source-line-no">196</span><span id="line-196"> }</span>
+<span class="source-line-no">197</span><span id="line-197"> }</span>
+<span class="source-line-no">198</span><span id="line-198">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.html
index b54e360d60f..e9fcda540cd 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestClientMetaCoprocessor.html
@@ -30,7 +30,7 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
<span class="source-line-no">021</span><span id="line-21">import static org.mockito.ArgumentMatchers.any;</span>
<span class="source-line-no">022</span><span id="line-22">import static org.mockito.Mockito.clearInvocations;</span>
<span class="source-line-no">023</span><span id="line-23">import static org.mockito.Mockito.doAnswer;</span>
@@ -45,180 +45,170 @@
<span class="source-line-no">032</span><span id="line-32">import java.util.Map;</span>
<span class="source-line-no">033</span><span id="line-33">import java.util.Optional;</span>
<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.HRegionLocation;</span>
-<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.RegionLocations;</span>
-<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.ServerName;</span>
-<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.client.AsyncConnectionImpl;</span>
-<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.client.ConnectionFactory;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.client.ConnectionRegistry;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.master.HMaster;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.master.MasterRpcServices;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.junit.AfterClass;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.junit.Before;</span>
-<span class="source-line-no">050</span><span id="line-50">import org.junit.BeforeClass;</span>
-<span class="source-line-no">051</span><span id="line-51">import org.junit.ClassRule;</span>
-<span class="source-line-no">052</span><span id="line-52">import org.junit.Rule;</span>
-<span class="source-line-no">053</span><span id="line-53">import org.junit.Test;</span>
-<span class="source-line-no">054</span><span id="line-54">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">055</span><span id="line-55">import org.junit.rules.TestName;</span>
-<span class="source-line-no">056</span><span id="line-56">import org.slf4j.Logger;</span>
-<span class="source-line-no">057</span><span id="line-57">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">058</span><span id="line-58"></span>
-<span class="source-line-no">059</span><span id="line-59">/**</span>
-<span class="source-line-no">060</span><span id="line-60"> * Tests invocation of the {@link MasterObserver} interface hooks at all appropriate times during</span>
-<span class="source-line-no">061</span><span id="line-61"> * normal HMaster operations.</span>
-<span class="source-line-no">062</span><span id="line-62"> */</span>
-<span class="source-line-no">063</span><span id="line-63">@Category({ CoprocessorTests.class, MediumTests.class })</span>
-<span class="source-line-no">064</span><span id="line-64">public class TestClientMetaCoprocessor {</span>
-<span class="source-line-no">065</span><span id="line-65"> private static final Logger LOG = LoggerFactory.getLogger(TestClientMetaCoprocessor.class);</span>
-<span class="source-line-no">066</span><span id="line-66"></span>
-<span class="source-line-no">067</span><span id="line-67"> @ClassRule</span>
-<span class="source-line-no">068</span><span id="line-68"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">069</span><span id="line-69"> HBaseClassTestRule.forClass(TestClientMetaCoprocessor.class);</span>
+<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.HRegionLocation;</span>
+<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.RegionLocations;</span>
+<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.ServerName;</span>
+<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.client.AsyncConnectionImpl;</span>
+<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.client.ConnectionFactory;</span>
+<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.client.ConnectionRegistry;</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.master.HMaster;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.master.MasterRpcServices;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.junit.jupiter.api.AfterAll;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.junit.jupiter.api.BeforeAll;</span>
+<span class="source-line-no">049</span><span id="line-49">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">050</span><span id="line-50">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">051</span><span id="line-51">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">052</span><span id="line-52">import org.slf4j.Logger;</span>
+<span class="source-line-no">053</span><span id="line-53">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">/**</span>
+<span class="source-line-no">056</span><span id="line-56"> * Tests invocation of the {@link MasterObserver} interface hooks at all appropriate times during</span>
+<span class="source-line-no">057</span><span id="line-57"> * normal HMaster operations.</span>
+<span class="source-line-no">058</span><span id="line-58"> */</span>
+<span class="source-line-no">059</span><span id="line-59">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">060</span><span id="line-60">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">061</span><span id="line-61">public class TestClientMetaCoprocessor {</span>
+<span class="source-line-no">062</span><span id="line-62"> private static final Logger LOG = LoggerFactory.getLogger(TestClientMetaCoprocessor.class);</span>
+<span class="source-line-no">063</span><span id="line-63"></span>
+<span class="source-line-no">064</span><span id="line-64"> private static final HBaseTestingUtil UTIL = new HBaseTestingUtil();</span>
+<span class="source-line-no">065</span><span id="line-65"></span>
+<span class="source-line-no">066</span><span id="line-66"> private static final ServerName SERVER_NAME = ServerName.valueOf("localhost", 1234, 12345);</span>
+<span class="source-line-no">067</span><span id="line-67"></span>
+<span class="source-line-no">068</span><span id="line-68"> public static class TestCoprocessor implements ClientMetaCoprocessor {</span>
+<span class="source-line-no">069</span><span id="line-69"> protected final ClientMetaObserver observer;</span>
<span class="source-line-no">070</span><span id="line-70"></span>
-<span class="source-line-no">071</span><span id="line-71"> @Rule</span>
-<span class="source-line-no">072</span><span id="line-72"> public TestName name = new TestName();</span>
-<span class="source-line-no">073</span><span id="line-73"></span>
-<span class="source-line-no">074</span><span id="line-74"> private static final HBaseTestingUtil UTIL = new HBaseTestingUtil();</span>
+<span class="source-line-no">071</span><span id="line-71"> public TestCoprocessor() {</span>
+<span class="source-line-no">072</span><span id="line-72"> observer = mock(ClientMetaObserver.class);</span>
+<span class="source-line-no">073</span><span id="line-73"> resetMock();</span>
+<span class="source-line-no">074</span><span id="line-74"> }</span>
<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> private static final ServerName SERVER_NAME = ServerName.valueOf("localhost", 1234, 12345);</span>
-<span class="source-line-no">077</span><span id="line-77"></span>
-<span class="source-line-no">078</span><span id="line-78"> public static class TestCoprocessor implements ClientMetaCoprocessor {</span>
-<span class="source-line-no">079</span><span id="line-79"> protected final ClientMetaObserver observer;</span>
-<span class="source-line-no">080</span><span id="line-80"></span>
-<span class="source-line-no">081</span><span id="line-81"> public TestCoprocessor() {</span>
-<span class="source-line-no">082</span><span id="line-82"> observer = mock(ClientMetaObserver.class);</span>
-<span class="source-line-no">083</span><span id="line-83"> resetMock();</span>
-<span class="source-line-no">084</span><span id="line-84"> }</span>
-<span class="source-line-no">085</span><span id="line-85"></span>
-<span class="source-line-no">086</span><span id="line-86"> protected void resetMock() {</span>
-<span class="source-line-no">087</span><span id="line-87"> reset(observer);</span>
-<span class="source-line-no">088</span><span id="line-88"></span>
-<span class="source-line-no">089</span><span id="line-89"> try {</span>
-<span class="source-line-no">090</span><span id="line-90"> doAnswer(answer -> answer.getArgument(1, String.class)).when(observer)</span>
-<span class="source-line-no">091</span><span id="line-91"> .postGetClusterId(any(), any());</span>
-<span class="source-line-no">092</span><span id="line-92"> doAnswer(answer -> {</span>
-<span class="source-line-no">093</span><span id="line-93"> return answer.getArgument(1, ServerName.class);</span>
-<span class="source-line-no">094</span><span id="line-94"> }).when(observer).postGetActiveMaster(any(), any());</span>
-<span class="source-line-no">095</span><span id="line-95"> doAnswer(answer -> answer.getArgument(1, Map.class)).when(observer).postGetMasters(any(),</span>
-<span class="source-line-no">096</span><span id="line-96"> any());</span>
-<span class="source-line-no">097</span><span id="line-97"> doAnswer(answer -> answer.getArgument(1, List.class)).when(observer)</span>
-<span class="source-line-no">098</span><span id="line-98"> .postGetBootstrapNodes(any(), any());</span>
-<span class="source-line-no">099</span><span id="line-99"> doAnswer(answer -> answer.getArgument(1, List.class)).when(observer)</span>
-<span class="source-line-no">100</span><span id="line-100"> .postGetMetaLocations(any(), any());</span>
-<span class="source-line-no">101</span><span id="line-101"> } catch (IOException e) {</span>
-<span class="source-line-no">102</span><span id="line-102"> throw new IllegalStateException("Could not setup observer mock.", e);</span>
-<span class="source-line-no">103</span><span id="line-103"> }</span>
-<span class="source-line-no">104</span><span id="line-104"> }</span>
+<span class="source-line-no">076</span><span id="line-76"> protected void resetMock() {</span>
+<span class="source-line-no">077</span><span id="line-77"> reset(observer);</span>
+<span class="source-line-no">078</span><span id="line-78"></span>
+<span class="source-line-no">079</span><span id="line-79"> try {</span>
+<span class="source-line-no">080</span><span id="line-80"> doAnswer(answer -> answer.getArgument(1, String.class)).when(observer)</span>
+<span class="source-line-no">081</span><span id="line-81"> .postGetClusterId(any(), any());</span>
+<span class="source-line-no">082</span><span id="line-82"> doAnswer(answer -> {</span>
+<span class="source-line-no">083</span><span id="line-83"> return answer.getArgument(1, ServerName.class);</span>
+<span class="source-line-no">084</span><span id="line-84"> }).when(observer).postGetActiveMaster(any(), any());</span>
+<span class="source-line-no">085</span><span id="line-85"> doAnswer(answer -> answer.getArgument(1, Map.class)).when(observer).postGetMasters(any(),</span>
+<span class="source-line-no">086</span><span id="line-86"> any());</span>
+<span class="source-line-no">087</span><span id="line-87"> doAnswer(answer -> answer.getArgument(1, List.class)).when(observer)</span>
+<span class="source-line-no">088</span><span id="line-88"> .postGetBootstrapNodes(any(), any());</span>
+<span class="source-line-no">089</span><span id="line-89"> doAnswer(answer -> answer.getArgument(1, List.class)).when(observer)</span>
+<span class="source-line-no">090</span><span id="line-90"> .postGetMetaLocations(any(), any());</span>
+<span class="source-line-no">091</span><span id="line-91"> } catch (IOException e) {</span>
+<span class="source-line-no">092</span><span id="line-92"> throw new IllegalStateException("Could not setup observer mock.", e);</span>
+<span class="source-line-no">093</span><span id="line-93"> }</span>
+<span class="source-line-no">094</span><span id="line-94"> }</span>
+<span class="source-line-no">095</span><span id="line-95"></span>
+<span class="source-line-no">096</span><span id="line-96"> @Override</span>
+<span class="source-line-no">097</span><span id="line-97"> public Optional<ClientMetaObserver> getClientMetaObserver() {</span>
+<span class="source-line-no">098</span><span id="line-98"> return Optional.of(observer);</span>
+<span class="source-line-no">099</span><span id="line-99"> }</span>
+<span class="source-line-no">100</span><span id="line-100"> }</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102"> private static TestCoprocessor getCoprocessor() {</span>
+<span class="source-line-no">103</span><span id="line-103"> HMaster master = UTIL.getMiniHBaseCluster().getMaster();</span>
+<span class="source-line-no">104</span><span id="line-104"> MasterRpcServices masterRpcServices = master.getMasterRpcServices();</span>
<span class="source-line-no">105</span><span id="line-105"></span>
-<span class="source-line-no">106</span><span id="line-106"> @Override</span>
-<span class="source-line-no">107</span><span id="line-107"> public Optional<ClientMetaObserver> getClientMetaObserver() {</span>
-<span class="source-line-no">108</span><span id="line-108"> return Optional.of(observer);</span>
-<span class="source-line-no">109</span><span id="line-109"> }</span>
-<span class="source-line-no">110</span><span id="line-110"> }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112"> private static TestCoprocessor getCoprocessor() {</span>
-<span class="source-line-no">113</span><span id="line-113"> HMaster master = UTIL.getMiniHBaseCluster().getMaster();</span>
-<span class="source-line-no">114</span><span id="line-114"> MasterRpcServices masterRpcServices = master.getMasterRpcServices();</span>
-<span class="source-line-no">115</span><span id="line-115"></span>
-<span class="source-line-no">116</span><span id="line-116"> return masterRpcServices.getClientMetaCoprocessorHost().findCoprocessor(TestCoprocessor.class);</span>
-<span class="source-line-no">117</span><span id="line-117"> }</span>
-<span class="source-line-no">118</span><span id="line-118"></span>
-<span class="source-line-no">119</span><span id="line-119"> private static ClientMetaObserver getObserverMock() {</span>
-<span class="source-line-no">120</span><span id="line-120"> return getCoprocessor().getClientMetaObserver().get();</span>
-<span class="source-line-no">121</span><span id="line-121"> }</span>
-<span class="source-line-no">122</span><span id="line-122"></span>
-<span class="source-line-no">123</span><span id="line-123"> private static void resetObserverMock() {</span>
-<span class="source-line-no">124</span><span id="line-124"> getCoprocessor().resetMock();</span>
-<span class="source-line-no">125</span><span id="line-125"> }</span>
-<span class="source-line-no">126</span><span id="line-126"></span>
-<span class="source-line-no">127</span><span id="line-127"> @BeforeClass</span>
-<span class="source-line-no">128</span><span id="line-128"> public static void setupBeforeClass() throws Exception {</span>
-<span class="source-line-no">129</span><span id="line-129"> Configuration conf = UTIL.getConfiguration();</span>
-<span class="source-line-no">130</span><span id="line-130"> conf.set(CoprocessorHost.CLIENT_META_COPROCESSOR_CONF_KEY, TestCoprocessor.class.getName());</span>
-<span class="source-line-no">131</span><span id="line-131"></span>
-<span class="source-line-no">132</span><span id="line-132"> UTIL.startMiniCluster();</span>
+<span class="source-line-no">106</span><span id="line-106"> return masterRpcServices.getClientMetaCoprocessorHost().findCoprocessor(TestCoprocessor.class);</span>
+<span class="source-line-no">107</span><span id="line-107"> }</span>
+<span class="source-line-no">108</span><span id="line-108"></span>
+<span class="source-line-no">109</span><span id="line-109"> private static ClientMetaObserver getObserverMock() {</span>
+<span class="source-line-no">110</span><span id="line-110"> return getCoprocessor().getClientMetaObserver().get();</span>
+<span class="source-line-no">111</span><span id="line-111"> }</span>
+<span class="source-line-no">112</span><span id="line-112"></span>
+<span class="source-line-no">113</span><span id="line-113"> private static void resetObserverMock() {</span>
+<span class="source-line-no">114</span><span id="line-114"> getCoprocessor().resetMock();</span>
+<span class="source-line-no">115</span><span id="line-115"> }</span>
+<span class="source-line-no">116</span><span id="line-116"></span>
+<span class="source-line-no">117</span><span id="line-117"> @BeforeAll</span>
+<span class="source-line-no">118</span><span id="line-118"> public static void setupBeforeClass() throws Exception {</span>
+<span class="source-line-no">119</span><span id="line-119"> Configuration conf = UTIL.getConfiguration();</span>
+<span class="source-line-no">120</span><span id="line-120"> conf.set(CoprocessorHost.CLIENT_META_COPROCESSOR_CONF_KEY, TestCoprocessor.class.getName());</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122"> UTIL.startMiniCluster();</span>
+<span class="source-line-no">123</span><span id="line-123"> }</span>
+<span class="source-line-no">124</span><span id="line-124"></span>
+<span class="source-line-no">125</span><span id="line-125"> @AfterAll</span>
+<span class="source-line-no">126</span><span id="line-126"> public static void tearDownAfterClass() throws Exception {</span>
+<span class="source-line-no">127</span><span id="line-127"> UTIL.shutdownMiniCluster();</span>
+<span class="source-line-no">128</span><span id="line-128"> }</span>
+<span class="source-line-no">129</span><span id="line-129"></span>
+<span class="source-line-no">130</span><span id="line-130"> @BeforeEach</span>
+<span class="source-line-no">131</span><span id="line-131"> public void setupBefore() {</span>
+<span class="source-line-no">132</span><span id="line-132"> resetObserverMock();</span>
<span class="source-line-no">133</span><span id="line-133"> }</span>
<span class="source-line-no">134</span><span id="line-134"></span>
-<span class="source-line-no">135</span><span id="line-135"> @AfterClass</span>
-<span class="source-line-no">136</span><span id="line-136"> public static void tearDownAfterClass() throws Exception {</span>
-<span class="source-line-no">137</span><span id="line-137"> UTIL.shutdownMiniCluster();</span>
-<span class="source-line-no">138</span><span id="line-138"> }</span>
-<span class="source-line-no">139</span><span id="line-139"></span>
-<span class="source-line-no">140</span><span id="line-140"> @Before</span>
-<span class="source-line-no">141</span><span id="line-141"> public void setupBefore() {</span>
-<span class="source-line-no">142</span><span id="line-142"> resetObserverMock();</span>
-<span class="source-line-no">143</span><span id="line-143"> }</span>
-<span class="source-line-no">144</span><span id="line-144"></span>
-<span class="source-line-no">145</span><span id="line-145"> @Test</span>
-<span class="source-line-no">146</span><span id="line-146"> public void testGetClusterId() throws Exception {</span>
-<span class="source-line-no">147</span><span id="line-147"> ClientMetaObserver observer = getObserverMock();</span>
+<span class="source-line-no">135</span><span id="line-135"> @Test</span>
+<span class="source-line-no">136</span><span id="line-136"> public void testGetClusterId() throws Exception {</span>
+<span class="source-line-no">137</span><span id="line-137"> ClientMetaObserver observer = getObserverMock();</span>
+<span class="source-line-no">138</span><span id="line-138"></span>
+<span class="source-line-no">139</span><span id="line-139"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
+<span class="source-line-no">140</span><span id="line-140"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
+<span class="source-line-no">141</span><span id="line-141"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
+<span class="source-line-no">142</span><span id="line-142"></span>
+<span class="source-line-no">143</span><span id="line-143"> doReturn("cluster-id").when(observer).postGetClusterId(any(), any());</span>
+<span class="source-line-no">144</span><span id="line-144"> clearInvocations(observer);</span>
+<span class="source-line-no">145</span><span id="line-145"></span>
+<span class="source-line-no">146</span><span id="line-146"> String clusterId = connectionRegistry.getClusterId().get();</span>
+<span class="source-line-no">147</span><span id="line-147"> assertEquals("cluster-id", clusterId);</span>
<span class="source-line-no">148</span><span id="line-148"></span>
-<span class="source-line-no">149</span><span id="line-149"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
-<span class="source-line-no">150</span><span id="line-150"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
-<span class="source-line-no">151</span><span id="line-151"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
-<span class="source-line-no">152</span><span id="line-152"></span>
-<span class="source-line-no">153</span><span id="line-153"> doReturn("cluster-id").when(observer).postGetClusterId(any(), any());</span>
-<span class="source-line-no">154</span><span id="line-154"> clearInvocations(observer);</span>
-<span class="source-line-no">155</span><span id="line-155"></span>
-<span class="source-line-no">156</span><span id="line-156"> String clusterId = connectionRegistry.getClusterId().get();</span>
-<span class="source-line-no">157</span><span id="line-157"> assertEquals("cluster-id", clusterId);</span>
+<span class="source-line-no">149</span><span id="line-149"> verify(observer).preGetClusterId(any());</span>
+<span class="source-line-no">150</span><span id="line-150"> verify(observer).postGetClusterId(any(), any());</span>
+<span class="source-line-no">151</span><span id="line-151"> verifyNoMoreInteractions(observer);</span>
+<span class="source-line-no">152</span><span id="line-152"> }</span>
+<span class="source-line-no">153</span><span id="line-153"> }</span>
+<span class="source-line-no">154</span><span id="line-154"></span>
+<span class="source-line-no">155</span><span id="line-155"> @Test</span>
+<span class="source-line-no">156</span><span id="line-156"> public void testGetActiveMaster() throws Exception {</span>
+<span class="source-line-no">157</span><span id="line-157"> ClientMetaObserver observer = getObserverMock();</span>
<span class="source-line-no">158</span><span id="line-158"></span>
-<span class="source-line-no">159</span><span id="line-159"> verify(observer).preGetClusterId(any());</span>
-<span class="source-line-no">160</span><span id="line-160"> verify(observer).postGetClusterId(any(), any());</span>
-<span class="source-line-no">161</span><span id="line-161"> verifyNoMoreInteractions(observer);</span>
-<span class="source-line-no">162</span><span id="line-162"> }</span>
-<span class="source-line-no">163</span><span id="line-163"> }</span>
-<span class="source-line-no">164</span><span id="line-164"></span>
-<span class="source-line-no">165</span><span id="line-165"> @Test</span>
-<span class="source-line-no">166</span><span id="line-166"> public void testGetActiveMaster() throws Exception {</span>
-<span class="source-line-no">167</span><span id="line-167"> ClientMetaObserver observer = getObserverMock();</span>
+<span class="source-line-no">159</span><span id="line-159"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
+<span class="source-line-no">160</span><span id="line-160"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
+<span class="source-line-no">161</span><span id="line-161"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
+<span class="source-line-no">162</span><span id="line-162"></span>
+<span class="source-line-no">163</span><span id="line-163"> doReturn(SERVER_NAME).when(observer).postGetActiveMaster(any(), any());</span>
+<span class="source-line-no">164</span><span id="line-164"> clearInvocations(observer);</span>
+<span class="source-line-no">165</span><span id="line-165"></span>
+<span class="source-line-no">166</span><span id="line-166"> ServerName activeMaster = connectionRegistry.getActiveMaster().get();</span>
+<span class="source-line-no">167</span><span id="line-167"> assertEquals(SERVER_NAME, activeMaster);</span>
<span class="source-line-no">168</span><span id="line-168"></span>
-<span class="source-line-no">169</span><span id="line-169"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
-<span class="source-line-no">170</span><span id="line-170"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
-<span class="source-line-no">171</span><span id="line-171"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
-<span class="source-line-no">172</span><span id="line-172"></span>
-<span class="source-line-no">173</span><span id="line-173"> doReturn(SERVER_NAME).when(observer).postGetActiveMaster(any(), any());</span>
-<span class="source-line-no">174</span><span id="line-174"> clearInvocations(observer);</span>
-<span class="source-line-no">175</span><span id="line-175"></span>
-<span class="source-line-no">176</span><span id="line-176"> ServerName activeMaster = connectionRegistry.getActiveMaster().get();</span>
-<span class="source-line-no">177</span><span id="line-177"> assertEquals(SERVER_NAME, activeMaster);</span>
+<span class="source-line-no">169</span><span id="line-169"> verify(observer).preGetActiveMaster(any());</span>
+<span class="source-line-no">170</span><span id="line-170"> verify(observer).postGetActiveMaster(any(), any());</span>
+<span class="source-line-no">171</span><span id="line-171"> verifyNoMoreInteractions(observer);</span>
+<span class="source-line-no">172</span><span id="line-172"> }</span>
+<span class="source-line-no">173</span><span id="line-173"> }</span>
+<span class="source-line-no">174</span><span id="line-174"></span>
+<span class="source-line-no">175</span><span id="line-175"> @Test</span>
+<span class="source-line-no">176</span><span id="line-176"> public void testGetMetaRegionLocations() throws Exception {</span>
+<span class="source-line-no">177</span><span id="line-177"> ClientMetaObserver observer = getObserverMock();</span>
<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179"> verify(observer).preGetActiveMaster(any());</span>
-<span class="source-line-no">180</span><span id="line-180"> verify(observer).postGetActiveMaster(any(), any());</span>
-<span class="source-line-no">181</span><span id="line-181"> verifyNoMoreInteractions(observer);</span>
-<span class="source-line-no">182</span><span id="line-182"> }</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"></span>
-<span class="source-line-no">185</span><span id="line-185"> @Test</span>
-<span class="source-line-no">186</span><span id="line-186"> public void testGetMetaRegionLocations() throws Exception {</span>
-<span class="source-line-no">187</span><span id="line-187"> ClientMetaObserver observer = getObserverMock();</span>
-<span class="source-line-no">188</span><span id="line-188"></span>
-<span class="source-line-no">189</span><span id="line-189"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
-<span class="source-line-no">190</span><span id="line-190"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
-<span class="source-line-no">191</span><span id="line-191"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
+<span class="source-line-no">179</span><span id="line-179"> try (AsyncConnectionImpl asyncConnection = (AsyncConnectionImpl) ConnectionFactory</span>
+<span class="source-line-no">180</span><span id="line-180"> .createAsyncConnection(UTIL.getConfiguration()).get()) {</span>
+<span class="source-line-no">181</span><span id="line-181"> ConnectionRegistry connectionRegistry = asyncConnection.getConnectionRegistry();</span>
+<span class="source-line-no">182</span><span id="line-182"></span>
+<span class="source-line-no">183</span><span id="line-183"> HRegionLocation metaRegionLocation =</span>
+<span class="source-line-no">184</span><span id="line-184"> new HRegionLocation(RegionInfoBuilder.FIRST_META_REGIONINFO, SERVER_NAME);</span>
+<span class="source-line-no">185</span><span id="line-185"> doReturn(List.of(metaRegionLocation)).when(observer).postGetMetaLocations(any(), any());</span>
+<span class="source-line-no">186</span><span id="line-186"> clearInvocations(observer);</span>
+<span class="source-line-no">187</span><span id="line-187"></span>
+<span class="source-line-no">188</span><span id="line-188"> RegionLocations regionLocations = connectionRegistry.getMetaRegionLocations().get();</span>
+<span class="source-line-no">189</span><span id="line-189"> HRegionLocation actualMetaRegionLocation = regionLocations.getDefaultRegionLocation();</span>
+<span class="source-line-no">190</span><span id="line-190"></span>
+<span class="source-line-no">191</span><span id="line-191"> assertEquals(metaRegionLocation, actualMetaRegionLocation);</span>
<span class="source-line-no">192</span><span id="line-192"></span>
-<span class="source-line-no">193</span><span id="line-193"> HRegionLocation metaRegionLocation =</span>
-<span class="source-line-no">194</span><span id="line-194"> new HRegionLocation(RegionInfoBuilder.FIRST_META_REGIONINFO, SERVER_NAME);</span>
-<span class="source-line-no">195</span><span id="line-195"> doReturn(List.of(metaRegionLocation)).when(observer).postGetMetaLocations(any(), any());</span>
-<span class="source-line-no">196</span><span id="line-196"> clearInvocations(observer);</span>
-<span class="source-line-no">197</span><span id="line-197"></span>
-<span class="source-line-no">198</span><span id="line-198"> RegionLocations regionLocations = connectionRegistry.getMetaRegionLocations().get();</span>
-<span class="source-line-no">199</span><span id="line-199"> HRegionLocation actualMetaRegionLocation = regionLocations.getDefaultRegionLocation();</span>
-<span class="source-line-no">200</span><span id="line-200"></span>
-<span class="source-line-no">201</span><span id="line-201"> assertEquals(metaRegionLocation, actualMetaRegionLocation);</span>
-<span class="source-line-no">202</span><span id="line-202"></span>
-<span class="source-line-no">203</span><span id="line-203"> verify(observer).preGetMetaLocations(any());</span>
-<span class="source-line-no">204</span><span id="line-204"> verify(observer).postGetMetaLocations(any(), any());</span>
-<span class="source-line-no">205</span><span id="line-205"> verifyNoMoreInteractions(observer);</span>
-<span class="source-line-no">206</span><span id="line-206"> }</span>
-<span class="source-line-no">207</span><span id="line-207"> }</span>
-<span class="source-line-no">208</span><span id="line-208">}</span>
+<span class="source-line-no">193</span><span id="line-193"> verify(observer).preGetMetaLocations(any());</span>
+<span class="source-line-no">194</span><span id="line-194"> verify(observer).postGetMetaLocations(any(), any());</span>
+<span class="source-line-no">195</span><span id="line-195"> verifyNoMoreInteractions(observer);</span>
+<span class="source-line-no">196</span><span id="line-196"> }</span>
+<span class="source-line-no">197</span><span id="line-197"> }</span>
+<span class="source-line-no">198</span><span id="line-198">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.SystemCoprocessor.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.SystemCoprocessor.html
index d8f5491eb56..fcd4a197670 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.SystemCoprocessor.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.SystemCoprocessor.html
@@ -30,17 +30,17 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">023</span><span id="line-23">import static org.mockito.Mockito.mock;</span>
-<span class="source-line-no">024</span><span id="line-24">import static org.mockito.Mockito.when;</span>
-<span class="source-line-no">025</span><span id="line-25"></span>
-<span class="source-line-no">026</span><span id="line-26">import java.io.IOException;</span>
-<span class="source-line-no">027</span><span id="line-27">import java.util.concurrent.atomic.AtomicBoolean;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">024</span><span id="line-24">import static org.mockito.Mockito.mock;</span>
+<span class="source-line-no">025</span><span id="line-25">import static org.mockito.Mockito.when;</span>
+<span class="source-line-no">026</span><span id="line-26"></span>
+<span class="source-line-no">027</span><span id="line-27">import java.io.IOException;</span>
+<span class="source-line-no">028</span><span id="line-28">import java.util.concurrent.atomic.AtomicBoolean;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.TableName;</span>
<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.client.RegionInfo;</span>
@@ -55,166 +55,157 @@
<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.junit.ClassRule;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.junit.Rule;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.junit.Test;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.junit.rules.ExpectedException;</span>
-<span class="source-line-no">050</span><span id="line-50"></span>
-<span class="source-line-no">051</span><span id="line-51">/**</span>
-<span class="source-line-no">052</span><span id="line-52"> * Tests for global coprocessor loading configuration</span>
-<span class="source-line-no">053</span><span id="line-53"> */</span>
-<span class="source-line-no">054</span><span id="line-54">@Category({ CoprocessorTests.class, SmallTests.class })</span>
-<span class="source-line-no">055</span><span id="line-55">public class TestCoprocessorConfiguration {</span>
-<span class="source-line-no">056</span><span id="line-56"></span>
-<span class="source-line-no">057</span><span id="line-57"> @ClassRule</span>
-<span class="source-line-no">058</span><span id="line-58"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">059</span><span id="line-59"> HBaseClassTestRule.forClass(TestCoprocessorConfiguration.class);</span>
-<span class="source-line-no">060</span><span id="line-60"></span>
-<span class="source-line-no">061</span><span id="line-61"> @Rule</span>
-<span class="source-line-no">062</span><span id="line-62"> public ExpectedException thrown = ExpectedException.none();</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64"> private static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">045</span><span id="line-45">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Tests for global coprocessor loading configuration</span>
+<span class="source-line-no">050</span><span id="line-50"> */</span>
+<span class="source-line-no">051</span><span id="line-51">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">052</span><span id="line-52">@Tag(SmallTests.TAG)</span>
+<span class="source-line-no">053</span><span id="line-53">public class TestCoprocessorConfiguration {</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> private static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">056</span><span id="line-56"> static {</span>
+<span class="source-line-no">057</span><span id="line-57"> CONF.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
+<span class="source-line-no">058</span><span id="line-58"> CONF.setStrings(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY,</span>
+<span class="source-line-no">059</span><span id="line-59"> SystemCoprocessor.class.getName());</span>
+<span class="source-line-no">060</span><span id="line-60"> CONF.setStrings(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
+<span class="source-line-no">061</span><span id="line-61"> }</span>
+<span class="source-line-no">062</span><span id="line-62"> private static final TableName TABLENAME = TableName.valueOf("TestCoprocessorConfiguration");</span>
+<span class="source-line-no">063</span><span id="line-63"> private static final RegionInfo REGIONINFO = RegionInfoBuilder.newBuilder(TABLENAME).build();</span>
+<span class="source-line-no">064</span><span id="line-64"> private static final TableDescriptor TABLEDESC;</span>
<span class="source-line-no">065</span><span id="line-65"> static {</span>
-<span class="source-line-no">066</span><span id="line-66"> CONF.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
-<span class="source-line-no">067</span><span id="line-67"> CONF.setStrings(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY,</span>
-<span class="source-line-no">068</span><span id="line-68"> SystemCoprocessor.class.getName());</span>
-<span class="source-line-no">069</span><span id="line-69"> CONF.setStrings(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
-<span class="source-line-no">070</span><span id="line-70"> }</span>
-<span class="source-line-no">071</span><span id="line-71"> private static final TableName TABLENAME = TableName.valueOf("TestCoprocessorConfiguration");</span>
-<span class="source-line-no">072</span><span id="line-72"> private static final RegionInfo REGIONINFO = RegionInfoBuilder.newBuilder(TABLENAME).build();</span>
-<span class="source-line-no">073</span><span id="line-73"> private static final TableDescriptor TABLEDESC;</span>
-<span class="source-line-no">074</span><span id="line-74"> static {</span>
-<span class="source-line-no">075</span><span id="line-75"> try {</span>
-<span class="source-line-no">076</span><span id="line-76"> TABLEDESC = TableDescriptorBuilder.newBuilder(TABLENAME)</span>
-<span class="source-line-no">077</span><span id="line-77"> .setCoprocessor(TableCoprocessor.class.getName()).build();</span>
-<span class="source-line-no">078</span><span id="line-78"> } catch (IOException e) {</span>
-<span class="source-line-no">079</span><span id="line-79"> throw new RuntimeException(e);</span>
-<span class="source-line-no">080</span><span id="line-80"> }</span>
-<span class="source-line-no">081</span><span id="line-81"> }</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83"> // use atomic types in case coprocessor loading is ever multithreaded, also</span>
-<span class="source-line-no">084</span><span id="line-84"> // so we can mutate them even though they are declared final here</span>
-<span class="source-line-no">085</span><span id="line-85"> private static final AtomicBoolean systemCoprocessorLoaded = new AtomicBoolean();</span>
-<span class="source-line-no">086</span><span id="line-86"> private static final AtomicBoolean tableCoprocessorLoaded = new AtomicBoolean();</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88"> public static class SystemCoprocessor</span>
-<span class="source-line-no">089</span><span id="line-89"> implements MasterCoprocessor, RegionCoprocessor, RegionServerCoprocessor {</span>
-<span class="source-line-no">090</span><span id="line-90"> @Override</span>
-<span class="source-line-no">091</span><span id="line-91"> public void start(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">092</span><span id="line-92"> systemCoprocessorLoaded.set(true);</span>
-<span class="source-line-no">093</span><span id="line-93"> }</span>
-<span class="source-line-no">094</span><span id="line-94"></span>
-<span class="source-line-no">095</span><span id="line-95"> @Override</span>
-<span class="source-line-no">096</span><span id="line-96"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">097</span><span id="line-97"> }</span>
-<span class="source-line-no">098</span><span id="line-98"> }</span>
-<span class="source-line-no">099</span><span id="line-99"></span>
-<span class="source-line-no">100</span><span id="line-100"> public static class TableCoprocessor implements RegionCoprocessor {</span>
-<span class="source-line-no">101</span><span id="line-101"> @Override</span>
-<span class="source-line-no">102</span><span id="line-102"> public void start(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">103</span><span id="line-103"> tableCoprocessorLoaded.set(true);</span>
-<span class="source-line-no">104</span><span id="line-104"> }</span>
-<span class="source-line-no">105</span><span id="line-105"></span>
-<span class="source-line-no">106</span><span id="line-106"> @Override</span>
-<span class="source-line-no">107</span><span id="line-107"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">108</span><span id="line-108"> }</span>
-<span class="source-line-no">109</span><span id="line-109"> }</span>
-<span class="source-line-no">110</span><span id="line-110"></span>
-<span class="source-line-no">111</span><span id="line-111"> @Test</span>
-<span class="source-line-no">112</span><span id="line-112"> public void testRegionCoprocessorHostDefaults() throws Exception {</span>
-<span class="source-line-no">113</span><span id="line-113"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">114</span><span id="line-114"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">115</span><span id="line-115"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">116</span><span id="line-116"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">117</span><span id="line-117"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">118</span><span id="line-118"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">119</span><span id="line-119"> tableCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">120</span><span id="line-120"> new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">121</span><span id="line-121"> assertEquals("System coprocessors loading default was not honored",</span>
-<span class="source-line-no">122</span><span id="line-122"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">123</span><span id="line-123"> assertEquals("Table coprocessors loading default was not honored",</span>
-<span class="source-line-no">124</span><span id="line-124"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED</span>
-<span class="source-line-no">125</span><span id="line-125"> && CoprocessorHost.DEFAULT_USER_COPROCESSORS_ENABLED,</span>
-<span class="source-line-no">126</span><span id="line-126"> tableCoprocessorLoaded.get());</span>
-<span class="source-line-no">127</span><span id="line-127"> }</span>
-<span class="source-line-no">128</span><span id="line-128"></span>
-<span class="source-line-no">129</span><span id="line-129"> @Test</span>
-<span class="source-line-no">130</span><span id="line-130"> public void testRegionServerCoprocessorHostDefaults() throws Exception {</span>
-<span class="source-line-no">131</span><span id="line-131"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">132</span><span id="line-132"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">133</span><span id="line-133"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">134</span><span id="line-134"> new RegionServerCoprocessorHost(rsServices, conf);</span>
-<span class="source-line-no">135</span><span id="line-135"> assertEquals("System coprocessors loading default was not honored",</span>
-<span class="source-line-no">136</span><span id="line-136"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">137</span><span id="line-137"> }</span>
-<span class="source-line-no">138</span><span id="line-138"></span>
-<span class="source-line-no">139</span><span id="line-139"> @Test</span>
-<span class="source-line-no">140</span><span id="line-140"> public void testMasterCoprocessorHostDefaults() throws Exception {</span>
-<span class="source-line-no">141</span><span id="line-141"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">142</span><span id="line-142"> MasterServices masterServices = mock(MasterServices.class);</span>
-<span class="source-line-no">143</span><span id="line-143"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">144</span><span id="line-144"> new MasterCoprocessorHost(masterServices, conf);</span>
-<span class="source-line-no">145</span><span id="line-145"> assertEquals("System coprocessors loading default was not honored",</span>
-<span class="source-line-no">146</span><span id="line-146"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">147</span><span id="line-147"> }</span>
-<span class="source-line-no">148</span><span id="line-148"></span>
-<span class="source-line-no">149</span><span id="line-149"> @Test</span>
-<span class="source-line-no">150</span><span id="line-150"> public void testRegionCoprocessorHostAllDisabled() throws Exception {</span>
-<span class="source-line-no">151</span><span id="line-151"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">152</span><span id="line-152"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, false);</span>
-<span class="source-line-no">153</span><span id="line-153"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">154</span><span id="line-154"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">155</span><span id="line-155"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">156</span><span id="line-156"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">157</span><span id="line-157"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">158</span><span id="line-158"> tableCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">159</span><span id="line-159"> new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">160</span><span id="line-160"> assertFalse("System coprocessors should not have been loaded", systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">161</span><span id="line-161"> assertFalse("Table coprocessors should not have been loaded", tableCoprocessorLoaded.get());</span>
-<span class="source-line-no">162</span><span id="line-162"> }</span>
-<span class="source-line-no">163</span><span id="line-163"></span>
-<span class="source-line-no">164</span><span id="line-164"> @Test</span>
-<span class="source-line-no">165</span><span id="line-165"> public void testRegionCoprocessorHostTableLoadingDisabled() throws Exception {</span>
-<span class="source-line-no">166</span><span id="line-166"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">167</span><span id="line-167"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, true); // if defaults change</span>
-<span class="source-line-no">168</span><span id="line-168"> conf.setBoolean(CoprocessorHost.USER_COPROCESSORS_ENABLED_CONF_KEY, false);</span>
-<span class="source-line-no">169</span><span id="line-169"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">170</span><span id="line-170"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">171</span><span id="line-171"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">172</span><span id="line-172"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">173</span><span id="line-173"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">174</span><span id="line-174"> tableCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">175</span><span id="line-175"> new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">176</span><span id="line-176"> assertTrue("System coprocessors should have been loaded", systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">177</span><span id="line-177"> assertFalse("Table coprocessors should not have been loaded", tableCoprocessorLoaded.get());</span>
-<span class="source-line-no">178</span><span id="line-178"> }</span>
-<span class="source-line-no">179</span><span id="line-179"></span>
-<span class="source-line-no">180</span><span id="line-180"> /**</span>
-<span class="source-line-no">181</span><span id="line-181"> * Rough test that Coprocessor Environment is Read-Only. Just check a random CP and see that it</span>
-<span class="source-line-no">182</span><span id="line-182"> * returns a read-only config.</span>
-<span class="source-line-no">183</span><span id="line-183"> */</span>
-<span class="source-line-no">184</span><span id="line-184"> @Test</span>
-<span class="source-line-no">185</span><span id="line-185"> public void testReadOnlyConfiguration() throws Exception {</span>
-<span class="source-line-no">186</span><span id="line-186"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">187</span><span id="line-187"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">188</span><span id="line-188"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">189</span><span id="line-189"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">190</span><span id="line-190"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">191</span><span id="line-191"> RegionCoprocessorHost rcp = new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">192</span><span id="line-192"> boolean found = false;</span>
-<span class="source-line-no">193</span><span id="line-193"> for (String cpStr : rcp.getCoprocessors()) {</span>
-<span class="source-line-no">194</span><span id="line-194"> CoprocessorEnvironment cpenv = rcp.findCoprocessorEnvironment(cpStr);</span>
-<span class="source-line-no">195</span><span id="line-195"> if (cpenv != null) {</span>
-<span class="source-line-no">196</span><span id="line-196"> found = true;</span>
-<span class="source-line-no">197</span><span id="line-197"> }</span>
-<span class="source-line-no">198</span><span id="line-198"> Configuration c = cpenv.getConfiguration();</span>
-<span class="source-line-no">199</span><span id="line-199"> thrown.expect(UnsupportedOperationException.class);</span>
-<span class="source-line-no">200</span><span id="line-200"> c.set("one.two.three", "four.five.six");</span>
-<span class="source-line-no">201</span><span id="line-201"> }</span>
-<span class="source-line-no">202</span><span id="line-202"> assertTrue("Should be at least one CP found", found);</span>
-<span class="source-line-no">203</span><span id="line-203"> }</span>
-<span class="source-line-no">204</span><span id="line-204">}</span>
+<span class="source-line-no">066</span><span id="line-66"> try {</span>
+<span class="source-line-no">067</span><span id="line-67"> TABLEDESC = TableDescriptorBuilder.newBuilder(TABLENAME)</span>
+<span class="source-line-no">068</span><span id="line-68"> .setCoprocessor(TableCoprocessor.class.getName()).build();</span>
+<span class="source-line-no">069</span><span id="line-69"> } catch (IOException e) {</span>
+<span class="source-line-no">070</span><span id="line-70"> throw new RuntimeException(e);</span>
+<span class="source-line-no">071</span><span id="line-71"> }</span>
+<span class="source-line-no">072</span><span id="line-72"> }</span>
+<span class="source-line-no">073</span><span id="line-73"></span>
+<span class="source-line-no">074</span><span id="line-74"> // use atomic types in case coprocessor loading is ever multithreaded, also</span>
+<span class="source-line-no">075</span><span id="line-75"> // so we can mutate them even though they are declared final here</span>
+<span class="source-line-no">076</span><span id="line-76"> private static final AtomicBoolean systemCoprocessorLoaded = new AtomicBoolean();</span>
+<span class="source-line-no">077</span><span id="line-77"> private static final AtomicBoolean tableCoprocessorLoaded = new AtomicBoolean();</span>
+<span class="source-line-no">078</span><span id="line-78"></span>
+<span class="source-line-no">079</span><span id="line-79"> public static class SystemCoprocessor</span>
+<span class="source-line-no">080</span><span id="line-80"> implements MasterCoprocessor, RegionCoprocessor, RegionServerCoprocessor {</span>
+<span class="source-line-no">081</span><span id="line-81"> @Override</span>
+<span class="source-line-no">082</span><span id="line-82"> public void start(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">083</span><span id="line-83"> systemCoprocessorLoaded.set(true);</span>
+<span class="source-line-no">084</span><span id="line-84"> }</span>
+<span class="source-line-no">085</span><span id="line-85"></span>
+<span class="source-line-no">086</span><span id="line-86"> @Override</span>
+<span class="source-line-no">087</span><span id="line-87"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">088</span><span id="line-88"> }</span>
+<span class="source-line-no">089</span><span id="line-89"> }</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> public static class TableCoprocessor implements RegionCoprocessor {</span>
+<span class="source-line-no">092</span><span id="line-92"> @Override</span>
+<span class="source-line-no">093</span><span id="line-93"> public void start(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">094</span><span id="line-94"> tableCoprocessorLoaded.set(true);</span>
+<span class="source-line-no">095</span><span id="line-95"> }</span>
+<span class="source-line-no">096</span><span id="line-96"></span>
+<span class="source-line-no">097</span><span id="line-97"> @Override</span>
+<span class="source-line-no">098</span><span id="line-98"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">099</span><span id="line-99"> }</span>
+<span class="source-line-no">100</span><span id="line-100"> }</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102"> @Test</span>
+<span class="source-line-no">103</span><span id="line-103"> public void testRegionCoprocessorHostDefaults() throws Exception {</span>
+<span class="source-line-no">104</span><span id="line-104"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">105</span><span id="line-105"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">106</span><span id="line-106"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">107</span><span id="line-107"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">108</span><span id="line-108"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">109</span><span id="line-109"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">110</span><span id="line-110"> tableCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">111</span><span id="line-111"> new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">112</span><span id="line-112"> assertEquals(CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get(),</span>
+<span class="source-line-no">113</span><span id="line-113"> "System coprocessors loading default was not honored");</span>
+<span class="source-line-no">114</span><span id="line-114"> assertEquals(</span>
+<span class="source-line-no">115</span><span id="line-115"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED</span>
+<span class="source-line-no">116</span><span id="line-116"> && CoprocessorHost.DEFAULT_USER_COPROCESSORS_ENABLED,</span>
+<span class="source-line-no">117</span><span id="line-117"> tableCoprocessorLoaded.get(), "Table coprocessors loading default was not honored");</span>
+<span class="source-line-no">118</span><span id="line-118"> }</span>
+<span class="source-line-no">119</span><span id="line-119"></span>
+<span class="source-line-no">120</span><span id="line-120"> @Test</span>
+<span class="source-line-no">121</span><span id="line-121"> public void testRegionServerCoprocessorHostDefaults() throws Exception {</span>
+<span class="source-line-no">122</span><span id="line-122"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">123</span><span id="line-123"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">124</span><span id="line-124"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">125</span><span id="line-125"> new RegionServerCoprocessorHost(rsServices, conf);</span>
+<span class="source-line-no">126</span><span id="line-126"> assertEquals(CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get(),</span>
+<span class="source-line-no">127</span><span id="line-127"> "System coprocessors loading default was not honored");</span>
+<span class="source-line-no">128</span><span id="line-128"> }</span>
+<span class="source-line-no">129</span><span id="line-129"></span>
+<span class="source-line-no">130</span><span id="line-130"> @Test</span>
+<span class="source-line-no">131</span><span id="line-131"> public void testMasterCoprocessorHostDefaults() throws Exception {</span>
+<span class="source-line-no">132</span><span id="line-132"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">133</span><span id="line-133"> MasterServices masterServices = mock(MasterServices.class);</span>
+<span class="source-line-no">134</span><span id="line-134"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">135</span><span id="line-135"> new MasterCoprocessorHost(masterServices, conf);</span>
+<span class="source-line-no">136</span><span id="line-136"> assertEquals(CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get(),</span>
+<span class="source-line-no">137</span><span id="line-137"> "System coprocessors loading default was not honored");</span>
+<span class="source-line-no">138</span><span id="line-138"> }</span>
+<span class="source-line-no">139</span><span id="line-139"></span>
+<span class="source-line-no">140</span><span id="line-140"> @Test</span>
+<span class="source-line-no">141</span><span id="line-141"> public void testRegionCoprocessorHostAllDisabled() throws Exception {</span>
+<span class="source-line-no">142</span><span id="line-142"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">143</span><span id="line-143"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, false);</span>
+<span class="source-line-no">144</span><span id="line-144"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">145</span><span id="line-145"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">146</span><span id="line-146"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">147</span><span id="line-147"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">148</span><span id="line-148"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">149</span><span id="line-149"> tableCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">150</span><span id="line-150"> new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">151</span><span id="line-151"> assertFalse(systemCoprocessorLoaded.get(), "System coprocessors should not have been loaded");</span>
+<span class="source-line-no">152</span><span id="line-152"> assertFalse(tableCoprocessorLoaded.get(), "Table coprocessors should not have been loaded");</span>
+<span class="source-line-no">153</span><span id="line-153"> }</span>
+<span class="source-line-no">154</span><span id="line-154"></span>
+<span class="source-line-no">155</span><span id="line-155"> @Test</span>
+<span class="source-line-no">156</span><span id="line-156"> public void testRegionCoprocessorHostTableLoadingDisabled() throws Exception {</span>
+<span class="source-line-no">157</span><span id="line-157"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">158</span><span id="line-158"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, true); // if defaults change</span>
+<span class="source-line-no">159</span><span id="line-159"> conf.setBoolean(CoprocessorHost.USER_COPROCESSORS_ENABLED_CONF_KEY, false);</span>
+<span class="source-line-no">160</span><span id="line-160"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">161</span><span id="line-161"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">162</span><span id="line-162"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">163</span><span id="line-163"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">164</span><span id="line-164"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">165</span><span id="line-165"> tableCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">166</span><span id="line-166"> new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">167</span><span id="line-167"> assertTrue(systemCoprocessorLoaded.get(), "System coprocessors should have been loaded");</span>
+<span class="source-line-no">168</span><span id="line-168"> assertFalse(tableCoprocessorLoaded.get(), "Table coprocessors should not have been loaded");</span>
+<span class="source-line-no">169</span><span id="line-169"> }</span>
+<span class="source-line-no">170</span><span id="line-170"></span>
+<span class="source-line-no">171</span><span id="line-171"> /**</span>
+<span class="source-line-no">172</span><span id="line-172"> * Rough test that Coprocessor Environment is Read-Only. Just check a random CP and see that it</span>
+<span class="source-line-no">173</span><span id="line-173"> * returns a read-only config.</span>
+<span class="source-line-no">174</span><span id="line-174"> */</span>
+<span class="source-line-no">175</span><span id="line-175"> @Test</span>
+<span class="source-line-no">176</span><span id="line-176"> public void testReadOnlyConfiguration() throws Exception {</span>
+<span class="source-line-no">177</span><span id="line-177"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">178</span><span id="line-178"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">179</span><span id="line-179"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">180</span><span id="line-180"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">181</span><span id="line-181"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">182</span><span id="line-182"> RegionCoprocessorHost rcp = new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">183</span><span id="line-183"> boolean found = false;</span>
+<span class="source-line-no">184</span><span id="line-184"> for (String cpStr : rcp.getCoprocessors()) {</span>
+<span class="source-line-no">185</span><span id="line-185"> CoprocessorEnvironment cpenv = rcp.findCoprocessorEnvironment(cpStr);</span>
+<span class="source-line-no">186</span><span id="line-186"> if (cpenv != null) {</span>
+<span class="source-line-no">187</span><span id="line-187"> found = true;</span>
+<span class="source-line-no">188</span><span id="line-188"> }</span>
+<span class="source-line-no">189</span><span id="line-189"> Configuration c = cpenv.getConfiguration();</span>
+<span class="source-line-no">190</span><span id="line-190"> assertThrows(UnsupportedOperationException.class,</span>
+<span class="source-line-no">191</span><span id="line-191"> () -> c.set("one.two.three", "four.five.six"));</span>
+<span class="source-line-no">192</span><span id="line-192"> }</span>
+<span class="source-line-no">193</span><span id="line-193"> assertTrue(found, "Should be at least one CP found");</span>
+<span class="source-line-no">194</span><span id="line-194"> }</span>
+<span class="source-line-no">195</span><span id="line-195">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.TableCoprocessor.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.TableCoprocessor.html
index f652194f56d..210b308677f 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.TableCoprocessor.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.TableCoprocessor.html
@@ -30,17 +30,17 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">023</span><span id="line-23">import static org.mockito.Mockito.mock;</span>
-<span class="source-line-no">024</span><span id="line-24">import static org.mockito.Mockito.when;</span>
-<span class="source-line-no">025</span><span id="line-25"></span>
-<span class="source-line-no">026</span><span id="line-26">import java.io.IOException;</span>
-<span class="source-line-no">027</span><span id="line-27">import java.util.concurrent.atomic.AtomicBoolean;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">024</span><span id="line-24">import static org.mockito.Mockito.mock;</span>
+<span class="source-line-no">025</span><span id="line-25">import static org.mockito.Mockito.when;</span>
+<span class="source-line-no">026</span><span id="line-26"></span>
+<span class="source-line-no">027</span><span id="line-27">import java.io.IOException;</span>
+<span class="source-line-no">028</span><span id="line-28">import java.util.concurrent.atomic.AtomicBoolean;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.TableName;</span>
<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.client.RegionInfo;</span>
@@ -55,166 +55,157 @@
<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.junit.ClassRule;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.junit.Rule;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.junit.Test;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.junit.rules.ExpectedException;</span>
-<span class="source-line-no">050</span><span id="line-50"></span>
-<span class="source-line-no">051</span><span id="line-51">/**</span>
-<span class="source-line-no">052</span><span id="line-52"> * Tests for global coprocessor loading configuration</span>
-<span class="source-line-no">053</span><span id="line-53"> */</span>
-<span class="source-line-no">054</span><span id="line-54">@Category({ CoprocessorTests.class, SmallTests.class })</span>
-<span class="source-line-no">055</span><span id="line-55">public class TestCoprocessorConfiguration {</span>
-<span class="source-line-no">056</span><span id="line-56"></span>
-<span class="source-line-no">057</span><span id="line-57"> @ClassRule</span>
-<span class="source-line-no">058</span><span id="line-58"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">059</span><span id="line-59"> HBaseClassTestRule.forClass(TestCoprocessorConfiguration.class);</span>
-<span class="source-line-no">060</span><span id="line-60"></span>
-<span class="source-line-no">061</span><span id="line-61"> @Rule</span>
-<span class="source-line-no">062</span><span id="line-62"> public ExpectedException thrown = ExpectedException.none();</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64"> private static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">045</span><span id="line-45">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Tests for global coprocessor loading configuration</span>
+<span class="source-line-no">050</span><span id="line-50"> */</span>
+<span class="source-line-no">051</span><span id="line-51">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">052</span><span id="line-52">@Tag(SmallTests.TAG)</span>
+<span class="source-line-no">053</span><span id="line-53">public class TestCoprocessorConfiguration {</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> private static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">056</span><span id="line-56"> static {</span>
+<span class="source-line-no">057</span><span id="line-57"> CONF.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
+<span class="source-line-no">058</span><span id="line-58"> CONF.setStrings(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY,</span>
+<span class="source-line-no">059</span><span id="line-59"> SystemCoprocessor.class.getName());</span>
+<span class="source-line-no">060</span><span id="line-60"> CONF.setStrings(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
+<span class="source-line-no">061</span><span id="line-61"> }</span>
+<span class="source-line-no">062</span><span id="line-62"> private static final TableName TABLENAME = TableName.valueOf("TestCoprocessorConfiguration");</span>
+<span class="source-line-no">063</span><span id="line-63"> private static final RegionInfo REGIONINFO = RegionInfoBuilder.newBuilder(TABLENAME).build();</span>
+<span class="source-line-no">064</span><span id="line-64"> private static final TableDescriptor TABLEDESC;</span>
<span class="source-line-no">065</span><span id="line-65"> static {</span>
-<span class="source-line-no">066</span><span id="line-66"> CONF.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
-<span class="source-line-no">067</span><span id="line-67"> CONF.setStrings(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY,</span>
-<span class="source-line-no">068</span><span id="line-68"> SystemCoprocessor.class.getName());</span>
-<span class="source-line-no">069</span><span id="line-69"> CONF.setStrings(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
-<span class="source-line-no">070</span><span id="line-70"> }</span>
-<span class="source-line-no">071</span><span id="line-71"> private static final TableName TABLENAME = TableName.valueOf("TestCoprocessorConfiguration");</span>
-<span class="source-line-no">072</span><span id="line-72"> private static final RegionInfo REGIONINFO = RegionInfoBuilder.newBuilder(TABLENAME).build();</span>
-<span class="source-line-no">073</span><span id="line-73"> private static final TableDescriptor TABLEDESC;</span>
-<span class="source-line-no">074</span><span id="line-74"> static {</span>
-<span class="source-line-no">075</span><span id="line-75"> try {</span>
-<span class="source-line-no">076</span><span id="line-76"> TABLEDESC = TableDescriptorBuilder.newBuilder(TABLENAME)</span>
-<span class="source-line-no">077</span><span id="line-77"> .setCoprocessor(TableCoprocessor.class.getName()).build();</span>
-<span class="source-line-no">078</span><span id="line-78"> } catch (IOException e) {</span>
-<span class="source-line-no">079</span><span id="line-79"> throw new RuntimeException(e);</span>
-<span class="source-line-no">080</span><span id="line-80"> }</span>
-<span class="source-line-no">081</span><span id="line-81"> }</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83"> // use atomic types in case coprocessor loading is ever multithreaded, also</span>
-<span class="source-line-no">084</span><span id="line-84"> // so we can mutate them even though they are declared final here</span>
-<span class="source-line-no">085</span><span id="line-85"> private static final AtomicBoolean systemCoprocessorLoaded = new AtomicBoolean();</span>
-<span class="source-line-no">086</span><span id="line-86"> private static final AtomicBoolean tableCoprocessorLoaded = new AtomicBoolean();</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88"> public static class SystemCoprocessor</span>
-<span class="source-line-no">089</span><span id="line-89"> implements MasterCoprocessor, RegionCoprocessor, RegionServerCoprocessor {</span>
-<span class="source-line-no">090</span><span id="line-90"> @Override</span>
-<span class="source-line-no">091</span><span id="line-91"> public void start(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">092</span><span id="line-92"> systemCoprocessorLoaded.set(true);</span>
-<span class="source-line-no">093</span><span id="line-93"> }</span>
-<span class="source-line-no">094</span><span id="line-94"></span>
-<span class="source-line-no">095</span><span id="line-95"> @Override</span>
-<span class="source-line-no">096</span><span id="line-96"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">097</span><span id="line-97"> }</span>
-<span class="source-line-no">098</span><span id="line-98"> }</span>
-<span class="source-line-no">099</span><span id="line-99"></span>
-<span class="source-line-no">100</span><span id="line-100"> public static class TableCoprocessor implements RegionCoprocessor {</span>
-<span class="source-line-no">101</span><span id="line-101"> @Override</span>
-<span class="source-line-no">102</span><span id="line-102"> public void start(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">103</span><span id="line-103"> tableCoprocessorLoaded.set(true);</span>
-<span class="source-line-no">104</span><span id="line-104"> }</span>
-<span class="source-line-no">105</span><span id="line-105"></span>
-<span class="source-line-no">106</span><span id="line-106"> @Override</span>
-<span class="source-line-no">107</span><span id="line-107"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">108</span><span id="line-108"> }</span>
-<span class="source-line-no">109</span><span id="line-109"> }</span>
-<span class="source-line-no">110</span><span id="line-110"></span>
-<span class="source-line-no">111</span><span id="line-111"> @Test</span>
-<span class="source-line-no">112</span><span id="line-112"> public void testRegionCoprocessorHostDefaults() throws Exception {</span>
-<span class="source-line-no">113</span><span id="line-113"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">114</span><span id="line-114"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">115</span><span id="line-115"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">116</span><span id="line-116"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">117</span><span id="line-117"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">118</span><span id="line-118"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">119</span><span id="line-119"> tableCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">120</span><span id="line-120"> new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">121</span><span id="line-121"> assertEquals("System coprocessors loading default was not honored",</span>
-<span class="source-line-no">122</span><span id="line-122"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">123</span><span id="line-123"> assertEquals("Table coprocessors loading default was not honored",</span>
-<span class="source-line-no">124</span><span id="line-124"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED</span>
-<span class="source-line-no">125</span><span id="line-125"> && CoprocessorHost.DEFAULT_USER_COPROCESSORS_ENABLED,</span>
-<span class="source-line-no">126</span><span id="line-126"> tableCoprocessorLoaded.get());</span>
-<span class="source-line-no">127</span><span id="line-127"> }</span>
-<span class="source-line-no">128</span><span id="line-128"></span>
-<span class="source-line-no">129</span><span id="line-129"> @Test</span>
-<span class="source-line-no">130</span><span id="line-130"> public void testRegionServerCoprocessorHostDefaults() throws Exception {</span>
-<span class="source-line-no">131</span><span id="line-131"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">132</span><span id="line-132"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">133</span><span id="line-133"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">134</span><span id="line-134"> new RegionServerCoprocessorHost(rsServices, conf);</span>
-<span class="source-line-no">135</span><span id="line-135"> assertEquals("System coprocessors loading default was not honored",</span>
-<span class="source-line-no">136</span><span id="line-136"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">137</span><span id="line-137"> }</span>
-<span class="source-line-no">138</span><span id="line-138"></span>
-<span class="source-line-no">139</span><span id="line-139"> @Test</span>
-<span class="source-line-no">140</span><span id="line-140"> public void testMasterCoprocessorHostDefaults() throws Exception {</span>
-<span class="source-line-no">141</span><span id="line-141"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">142</span><span id="line-142"> MasterServices masterServices = mock(MasterServices.class);</span>
-<span class="source-line-no">143</span><span id="line-143"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">144</span><span id="line-144"> new MasterCoprocessorHost(masterServices, conf);</span>
-<span class="source-line-no">145</span><span id="line-145"> assertEquals("System coprocessors loading default was not honored",</span>
-<span class="source-line-no">146</span><span id="line-146"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">147</span><span id="line-147"> }</span>
-<span class="source-line-no">148</span><span id="line-148"></span>
-<span class="source-line-no">149</span><span id="line-149"> @Test</span>
-<span class="source-line-no">150</span><span id="line-150"> public void testRegionCoprocessorHostAllDisabled() throws Exception {</span>
-<span class="source-line-no">151</span><span id="line-151"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">152</span><span id="line-152"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, false);</span>
-<span class="source-line-no">153</span><span id="line-153"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">154</span><span id="line-154"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">155</span><span id="line-155"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">156</span><span id="line-156"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">157</span><span id="line-157"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">158</span><span id="line-158"> tableCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">159</span><span id="line-159"> new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">160</span><span id="line-160"> assertFalse("System coprocessors should not have been loaded", systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">161</span><span id="line-161"> assertFalse("Table coprocessors should not have been loaded", tableCoprocessorLoaded.get());</span>
-<span class="source-line-no">162</span><span id="line-162"> }</span>
-<span class="source-line-no">163</span><span id="line-163"></span>
-<span class="source-line-no">164</span><span id="line-164"> @Test</span>
-<span class="source-line-no">165</span><span id="line-165"> public void testRegionCoprocessorHostTableLoadingDisabled() throws Exception {</span>
-<span class="source-line-no">166</span><span id="line-166"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">167</span><span id="line-167"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, true); // if defaults change</span>
-<span class="source-line-no">168</span><span id="line-168"> conf.setBoolean(CoprocessorHost.USER_COPROCESSORS_ENABLED_CONF_KEY, false);</span>
-<span class="source-line-no">169</span><span id="line-169"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">170</span><span id="line-170"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">171</span><span id="line-171"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">172</span><span id="line-172"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">173</span><span id="line-173"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">174</span><span id="line-174"> tableCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">175</span><span id="line-175"> new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">176</span><span id="line-176"> assertTrue("System coprocessors should have been loaded", systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">177</span><span id="line-177"> assertFalse("Table coprocessors should not have been loaded", tableCoprocessorLoaded.get());</span>
-<span class="source-line-no">178</span><span id="line-178"> }</span>
-<span class="source-line-no">179</span><span id="line-179"></span>
-<span class="source-line-no">180</span><span id="line-180"> /**</span>
-<span class="source-line-no">181</span><span id="line-181"> * Rough test that Coprocessor Environment is Read-Only. Just check a random CP and see that it</span>
-<span class="source-line-no">182</span><span id="line-182"> * returns a read-only config.</span>
-<span class="source-line-no">183</span><span id="line-183"> */</span>
-<span class="source-line-no">184</span><span id="line-184"> @Test</span>
-<span class="source-line-no">185</span><span id="line-185"> public void testReadOnlyConfiguration() throws Exception {</span>
-<span class="source-line-no">186</span><span id="line-186"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">187</span><span id="line-187"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">188</span><span id="line-188"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">189</span><span id="line-189"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">190</span><span id="line-190"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">191</span><span id="line-191"> RegionCoprocessorHost rcp = new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">192</span><span id="line-192"> boolean found = false;</span>
-<span class="source-line-no">193</span><span id="line-193"> for (String cpStr : rcp.getCoprocessors()) {</span>
-<span class="source-line-no">194</span><span id="line-194"> CoprocessorEnvironment cpenv = rcp.findCoprocessorEnvironment(cpStr);</span>
-<span class="source-line-no">195</span><span id="line-195"> if (cpenv != null) {</span>
-<span class="source-line-no">196</span><span id="line-196"> found = true;</span>
-<span class="source-line-no">197</span><span id="line-197"> }</span>
-<span class="source-line-no">198</span><span id="line-198"> Configuration c = cpenv.getConfiguration();</span>
-<span class="source-line-no">199</span><span id="line-199"> thrown.expect(UnsupportedOperationException.class);</span>
-<span class="source-line-no">200</span><span id="line-200"> c.set("one.two.three", "four.five.six");</span>
-<span class="source-line-no">201</span><span id="line-201"> }</span>
-<span class="source-line-no">202</span><span id="line-202"> assertTrue("Should be at least one CP found", found);</span>
-<span class="source-line-no">203</span><span id="line-203"> }</span>
-<span class="source-line-no">204</span><span id="line-204">}</span>
+<span class="source-line-no">066</span><span id="line-66"> try {</span>
+<span class="source-line-no">067</span><span id="line-67"> TABLEDESC = TableDescriptorBuilder.newBuilder(TABLENAME)</span>
+<span class="source-line-no">068</span><span id="line-68"> .setCoprocessor(TableCoprocessor.class.getName()).build();</span>
+<span class="source-line-no">069</span><span id="line-69"> } catch (IOException e) {</span>
+<span class="source-line-no">070</span><span id="line-70"> throw new RuntimeException(e);</span>
+<span class="source-line-no">071</span><span id="line-71"> }</span>
+<span class="source-line-no">072</span><span id="line-72"> }</span>
+<span class="source-line-no">073</span><span id="line-73"></span>
+<span class="source-line-no">074</span><span id="line-74"> // use atomic types in case coprocessor loading is ever multithreaded, also</span>
+<span class="source-line-no">075</span><span id="line-75"> // so we can mutate them even though they are declared final here</span>
+<span class="source-line-no">076</span><span id="line-76"> private static final AtomicBoolean systemCoprocessorLoaded = new AtomicBoolean();</span>
+<span class="source-line-no">077</span><span id="line-77"> private static final AtomicBoolean tableCoprocessorLoaded = new AtomicBoolean();</span>
+<span class="source-line-no">078</span><span id="line-78"></span>
+<span class="source-line-no">079</span><span id="line-79"> public static class SystemCoprocessor</span>
+<span class="source-line-no">080</span><span id="line-80"> implements MasterCoprocessor, RegionCoprocessor, RegionServerCoprocessor {</span>
+<span class="source-line-no">081</span><span id="line-81"> @Override</span>
+<span class="source-line-no">082</span><span id="line-82"> public void start(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">083</span><span id="line-83"> systemCoprocessorLoaded.set(true);</span>
+<span class="source-line-no">084</span><span id="line-84"> }</span>
+<span class="source-line-no">085</span><span id="line-85"></span>
+<span class="source-line-no">086</span><span id="line-86"> @Override</span>
+<span class="source-line-no">087</span><span id="line-87"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">088</span><span id="line-88"> }</span>
+<span class="source-line-no">089</span><span id="line-89"> }</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> public static class TableCoprocessor implements RegionCoprocessor {</span>
+<span class="source-line-no">092</span><span id="line-92"> @Override</span>
+<span class="source-line-no">093</span><span id="line-93"> public void start(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">094</span><span id="line-94"> tableCoprocessorLoaded.set(true);</span>
+<span class="source-line-no">095</span><span id="line-95"> }</span>
+<span class="source-line-no">096</span><span id="line-96"></span>
+<span class="source-line-no">097</span><span id="line-97"> @Override</span>
+<span class="source-line-no">098</span><span id="line-98"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">099</span><span id="line-99"> }</span>
+<span class="source-line-no">100</span><span id="line-100"> }</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102"> @Test</span>
+<span class="source-line-no">103</span><span id="line-103"> public void testRegionCoprocessorHostDefaults() throws Exception {</span>
+<span class="source-line-no">104</span><span id="line-104"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">105</span><span id="line-105"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">106</span><span id="line-106"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">107</span><span id="line-107"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">108</span><span id="line-108"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">109</span><span id="line-109"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">110</span><span id="line-110"> tableCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">111</span><span id="line-111"> new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">112</span><span id="line-112"> assertEquals(CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get(),</span>
+<span class="source-line-no">113</span><span id="line-113"> "System coprocessors loading default was not honored");</span>
+<span class="source-line-no">114</span><span id="line-114"> assertEquals(</span>
+<span class="source-line-no">115</span><span id="line-115"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED</span>
+<span class="source-line-no">116</span><span id="line-116"> && CoprocessorHost.DEFAULT_USER_COPROCESSORS_ENABLED,</span>
+<span class="source-line-no">117</span><span id="line-117"> tableCoprocessorLoaded.get(), "Table coprocessors loading default was not honored");</span>
+<span class="source-line-no">118</span><span id="line-118"> }</span>
+<span class="source-line-no">119</span><span id="line-119"></span>
+<span class="source-line-no">120</span><span id="line-120"> @Test</span>
+<span class="source-line-no">121</span><span id="line-121"> public void testRegionServerCoprocessorHostDefaults() throws Exception {</span>
+<span class="source-line-no">122</span><span id="line-122"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">123</span><span id="line-123"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">124</span><span id="line-124"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">125</span><span id="line-125"> new RegionServerCoprocessorHost(rsServices, conf);</span>
+<span class="source-line-no">126</span><span id="line-126"> assertEquals(CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get(),</span>
+<span class="source-line-no">127</span><span id="line-127"> "System coprocessors loading default was not honored");</span>
+<span class="source-line-no">128</span><span id="line-128"> }</span>
+<span class="source-line-no">129</span><span id="line-129"></span>
+<span class="source-line-no">130</span><span id="line-130"> @Test</span>
+<span class="source-line-no">131</span><span id="line-131"> public void testMasterCoprocessorHostDefaults() throws Exception {</span>
+<span class="source-line-no">132</span><span id="line-132"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">133</span><span id="line-133"> MasterServices masterServices = mock(MasterServices.class);</span>
+<span class="source-line-no">134</span><span id="line-134"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">135</span><span id="line-135"> new MasterCoprocessorHost(masterServices, conf);</span>
+<span class="source-line-no">136</span><span id="line-136"> assertEquals(CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get(),</span>
+<span class="source-line-no">137</span><span id="line-137"> "System coprocessors loading default was not honored");</span>
+<span class="source-line-no">138</span><span id="line-138"> }</span>
+<span class="source-line-no">139</span><span id="line-139"></span>
+<span class="source-line-no">140</span><span id="line-140"> @Test</span>
+<span class="source-line-no">141</span><span id="line-141"> public void testRegionCoprocessorHostAllDisabled() throws Exception {</span>
+<span class="source-line-no">142</span><span id="line-142"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">143</span><span id="line-143"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, false);</span>
+<span class="source-line-no">144</span><span id="line-144"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">145</span><span id="line-145"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">146</span><span id="line-146"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">147</span><span id="line-147"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">148</span><span id="line-148"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">149</span><span id="line-149"> tableCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">150</span><span id="line-150"> new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">151</span><span id="line-151"> assertFalse(systemCoprocessorLoaded.get(), "System coprocessors should not have been loaded");</span>
+<span class="source-line-no">152</span><span id="line-152"> assertFalse(tableCoprocessorLoaded.get(), "Table coprocessors should not have been loaded");</span>
+<span class="source-line-no">153</span><span id="line-153"> }</span>
+<span class="source-line-no">154</span><span id="line-154"></span>
+<span class="source-line-no">155</span><span id="line-155"> @Test</span>
+<span class="source-line-no">156</span><span id="line-156"> public void testRegionCoprocessorHostTableLoadingDisabled() throws Exception {</span>
+<span class="source-line-no">157</span><span id="line-157"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">158</span><span id="line-158"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, true); // if defaults change</span>
+<span class="source-line-no">159</span><span id="line-159"> conf.setBoolean(CoprocessorHost.USER_COPROCESSORS_ENABLED_CONF_KEY, false);</span>
+<span class="source-line-no">160</span><span id="line-160"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">161</span><span id="line-161"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">162</span><span id="line-162"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">163</span><span id="line-163"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">164</span><span id="line-164"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">165</span><span id="line-165"> tableCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">166</span><span id="line-166"> new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">167</span><span id="line-167"> assertTrue(systemCoprocessorLoaded.get(), "System coprocessors should have been loaded");</span>
+<span class="source-line-no">168</span><span id="line-168"> assertFalse(tableCoprocessorLoaded.get(), "Table coprocessors should not have been loaded");</span>
+<span class="source-line-no">169</span><span id="line-169"> }</span>
+<span class="source-line-no">170</span><span id="line-170"></span>
+<span class="source-line-no">171</span><span id="line-171"> /**</span>
+<span class="source-line-no">172</span><span id="line-172"> * Rough test that Coprocessor Environment is Read-Only. Just check a random CP and see that it</span>
+<span class="source-line-no">173</span><span id="line-173"> * returns a read-only config.</span>
+<span class="source-line-no">174</span><span id="line-174"> */</span>
+<span class="source-line-no">175</span><span id="line-175"> @Test</span>
+<span class="source-line-no">176</span><span id="line-176"> public void testReadOnlyConfiguration() throws Exception {</span>
+<span class="source-line-no">177</span><span id="line-177"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">178</span><span id="line-178"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">179</span><span id="line-179"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">180</span><span id="line-180"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">181</span><span id="line-181"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">182</span><span id="line-182"> RegionCoprocessorHost rcp = new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">183</span><span id="line-183"> boolean found = false;</span>
+<span class="source-line-no">184</span><span id="line-184"> for (String cpStr : rcp.getCoprocessors()) {</span>
+<span class="source-line-no">185</span><span id="line-185"> CoprocessorEnvironment cpenv = rcp.findCoprocessorEnvironment(cpStr);</span>
+<span class="source-line-no">186</span><span id="line-186"> if (cpenv != null) {</span>
+<span class="source-line-no">187</span><span id="line-187"> found = true;</span>
+<span class="source-line-no">188</span><span id="line-188"> }</span>
+<span class="source-line-no">189</span><span id="line-189"> Configuration c = cpenv.getConfiguration();</span>
+<span class="source-line-no">190</span><span id="line-190"> assertThrows(UnsupportedOperationException.class,</span>
+<span class="source-line-no">191</span><span id="line-191"> () -> c.set("one.two.three", "four.five.six"));</span>
+<span class="source-line-no">192</span><span id="line-192"> }</span>
+<span class="source-line-no">193</span><span id="line-193"> assertTrue(found, "Should be at least one CP found");</span>
+<span class="source-line-no">194</span><span id="line-194"> }</span>
+<span class="source-line-no">195</span><span id="line-195">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.html
index e474e00afa2..29916684da0 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorConfiguration.html
@@ -30,17 +30,17 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">022</span><span id="line-22">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">023</span><span id="line-23">import static org.mockito.Mockito.mock;</span>
-<span class="source-line-no">024</span><span id="line-24">import static org.mockito.Mockito.when;</span>
-<span class="source-line-no">025</span><span id="line-25"></span>
-<span class="source-line-no">026</span><span id="line-26">import java.io.IOException;</span>
-<span class="source-line-no">027</span><span id="line-27">import java.util.concurrent.atomic.AtomicBoolean;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">024</span><span id="line-24">import static org.mockito.Mockito.mock;</span>
+<span class="source-line-no">025</span><span id="line-25">import static org.mockito.Mockito.when;</span>
+<span class="source-line-no">026</span><span id="line-26"></span>
+<span class="source-line-no">027</span><span id="line-27">import java.io.IOException;</span>
+<span class="source-line-no">028</span><span id="line-28">import java.util.concurrent.atomic.AtomicBoolean;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.TableName;</span>
<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.client.RegionInfo;</span>
@@ -55,166 +55,157 @@
<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.junit.ClassRule;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.junit.Rule;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.junit.Test;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.junit.rules.ExpectedException;</span>
-<span class="source-line-no">050</span><span id="line-50"></span>
-<span class="source-line-no">051</span><span id="line-51">/**</span>
-<span class="source-line-no">052</span><span id="line-52"> * Tests for global coprocessor loading configuration</span>
-<span class="source-line-no">053</span><span id="line-53"> */</span>
-<span class="source-line-no">054</span><span id="line-54">@Category({ CoprocessorTests.class, SmallTests.class })</span>
-<span class="source-line-no">055</span><span id="line-55">public class TestCoprocessorConfiguration {</span>
-<span class="source-line-no">056</span><span id="line-56"></span>
-<span class="source-line-no">057</span><span id="line-57"> @ClassRule</span>
-<span class="source-line-no">058</span><span id="line-58"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">059</span><span id="line-59"> HBaseClassTestRule.forClass(TestCoprocessorConfiguration.class);</span>
-<span class="source-line-no">060</span><span id="line-60"></span>
-<span class="source-line-no">061</span><span id="line-61"> @Rule</span>
-<span class="source-line-no">062</span><span id="line-62"> public ExpectedException thrown = ExpectedException.none();</span>
-<span class="source-line-no">063</span><span id="line-63"></span>
-<span class="source-line-no">064</span><span id="line-64"> private static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">045</span><span id="line-45">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">/**</span>
+<span class="source-line-no">049</span><span id="line-49"> * Tests for global coprocessor loading configuration</span>
+<span class="source-line-no">050</span><span id="line-50"> */</span>
+<span class="source-line-no">051</span><span id="line-51">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">052</span><span id="line-52">@Tag(SmallTests.TAG)</span>
+<span class="source-line-no">053</span><span id="line-53">public class TestCoprocessorConfiguration {</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> private static final Configuration CONF = HBaseConfiguration.create();</span>
+<span class="source-line-no">056</span><span id="line-56"> static {</span>
+<span class="source-line-no">057</span><span id="line-57"> CONF.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
+<span class="source-line-no">058</span><span id="line-58"> CONF.setStrings(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY,</span>
+<span class="source-line-no">059</span><span id="line-59"> SystemCoprocessor.class.getName());</span>
+<span class="source-line-no">060</span><span id="line-60"> CONF.setStrings(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
+<span class="source-line-no">061</span><span id="line-61"> }</span>
+<span class="source-line-no">062</span><span id="line-62"> private static final TableName TABLENAME = TableName.valueOf("TestCoprocessorConfiguration");</span>
+<span class="source-line-no">063</span><span id="line-63"> private static final RegionInfo REGIONINFO = RegionInfoBuilder.newBuilder(TABLENAME).build();</span>
+<span class="source-line-no">064</span><span id="line-64"> private static final TableDescriptor TABLEDESC;</span>
<span class="source-line-no">065</span><span id="line-65"> static {</span>
-<span class="source-line-no">066</span><span id="line-66"> CONF.setStrings(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
-<span class="source-line-no">067</span><span id="line-67"> CONF.setStrings(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY,</span>
-<span class="source-line-no">068</span><span id="line-68"> SystemCoprocessor.class.getName());</span>
-<span class="source-line-no">069</span><span id="line-69"> CONF.setStrings(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, SystemCoprocessor.class.getName());</span>
-<span class="source-line-no">070</span><span id="line-70"> }</span>
-<span class="source-line-no">071</span><span id="line-71"> private static final TableName TABLENAME = TableName.valueOf("TestCoprocessorConfiguration");</span>
-<span class="source-line-no">072</span><span id="line-72"> private static final RegionInfo REGIONINFO = RegionInfoBuilder.newBuilder(TABLENAME).build();</span>
-<span class="source-line-no">073</span><span id="line-73"> private static final TableDescriptor TABLEDESC;</span>
-<span class="source-line-no">074</span><span id="line-74"> static {</span>
-<span class="source-line-no">075</span><span id="line-75"> try {</span>
-<span class="source-line-no">076</span><span id="line-76"> TABLEDESC = TableDescriptorBuilder.newBuilder(TABLENAME)</span>
-<span class="source-line-no">077</span><span id="line-77"> .setCoprocessor(TableCoprocessor.class.getName()).build();</span>
-<span class="source-line-no">078</span><span id="line-78"> } catch (IOException e) {</span>
-<span class="source-line-no">079</span><span id="line-79"> throw new RuntimeException(e);</span>
-<span class="source-line-no">080</span><span id="line-80"> }</span>
-<span class="source-line-no">081</span><span id="line-81"> }</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83"> // use atomic types in case coprocessor loading is ever multithreaded, also</span>
-<span class="source-line-no">084</span><span id="line-84"> // so we can mutate them even though they are declared final here</span>
-<span class="source-line-no">085</span><span id="line-85"> private static final AtomicBoolean systemCoprocessorLoaded = new AtomicBoolean();</span>
-<span class="source-line-no">086</span><span id="line-86"> private static final AtomicBoolean tableCoprocessorLoaded = new AtomicBoolean();</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88"> public static class SystemCoprocessor</span>
-<span class="source-line-no">089</span><span id="line-89"> implements MasterCoprocessor, RegionCoprocessor, RegionServerCoprocessor {</span>
-<span class="source-line-no">090</span><span id="line-90"> @Override</span>
-<span class="source-line-no">091</span><span id="line-91"> public void start(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">092</span><span id="line-92"> systemCoprocessorLoaded.set(true);</span>
-<span class="source-line-no">093</span><span id="line-93"> }</span>
-<span class="source-line-no">094</span><span id="line-94"></span>
-<span class="source-line-no">095</span><span id="line-95"> @Override</span>
-<span class="source-line-no">096</span><span id="line-96"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">097</span><span id="line-97"> }</span>
-<span class="source-line-no">098</span><span id="line-98"> }</span>
-<span class="source-line-no">099</span><span id="line-99"></span>
-<span class="source-line-no">100</span><span id="line-100"> public static class TableCoprocessor implements RegionCoprocessor {</span>
-<span class="source-line-no">101</span><span id="line-101"> @Override</span>
-<span class="source-line-no">102</span><span id="line-102"> public void start(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">103</span><span id="line-103"> tableCoprocessorLoaded.set(true);</span>
-<span class="source-line-no">104</span><span id="line-104"> }</span>
-<span class="source-line-no">105</span><span id="line-105"></span>
-<span class="source-line-no">106</span><span id="line-106"> @Override</span>
-<span class="source-line-no">107</span><span id="line-107"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
-<span class="source-line-no">108</span><span id="line-108"> }</span>
-<span class="source-line-no">109</span><span id="line-109"> }</span>
-<span class="source-line-no">110</span><span id="line-110"></span>
-<span class="source-line-no">111</span><span id="line-111"> @Test</span>
-<span class="source-line-no">112</span><span id="line-112"> public void testRegionCoprocessorHostDefaults() throws Exception {</span>
-<span class="source-line-no">113</span><span id="line-113"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">114</span><span id="line-114"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">115</span><span id="line-115"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">116</span><span id="line-116"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">117</span><span id="line-117"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">118</span><span id="line-118"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">119</span><span id="line-119"> tableCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">120</span><span id="line-120"> new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">121</span><span id="line-121"> assertEquals("System coprocessors loading default was not honored",</span>
-<span class="source-line-no">122</span><span id="line-122"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">123</span><span id="line-123"> assertEquals("Table coprocessors loading default was not honored",</span>
-<span class="source-line-no">124</span><span id="line-124"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED</span>
-<span class="source-line-no">125</span><span id="line-125"> && CoprocessorHost.DEFAULT_USER_COPROCESSORS_ENABLED,</span>
-<span class="source-line-no">126</span><span id="line-126"> tableCoprocessorLoaded.get());</span>
-<span class="source-line-no">127</span><span id="line-127"> }</span>
-<span class="source-line-no">128</span><span id="line-128"></span>
-<span class="source-line-no">129</span><span id="line-129"> @Test</span>
-<span class="source-line-no">130</span><span id="line-130"> public void testRegionServerCoprocessorHostDefaults() throws Exception {</span>
-<span class="source-line-no">131</span><span id="line-131"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">132</span><span id="line-132"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">133</span><span id="line-133"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">134</span><span id="line-134"> new RegionServerCoprocessorHost(rsServices, conf);</span>
-<span class="source-line-no">135</span><span id="line-135"> assertEquals("System coprocessors loading default was not honored",</span>
-<span class="source-line-no">136</span><span id="line-136"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">137</span><span id="line-137"> }</span>
-<span class="source-line-no">138</span><span id="line-138"></span>
-<span class="source-line-no">139</span><span id="line-139"> @Test</span>
-<span class="source-line-no">140</span><span id="line-140"> public void testMasterCoprocessorHostDefaults() throws Exception {</span>
-<span class="source-line-no">141</span><span id="line-141"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">142</span><span id="line-142"> MasterServices masterServices = mock(MasterServices.class);</span>
-<span class="source-line-no">143</span><span id="line-143"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">144</span><span id="line-144"> new MasterCoprocessorHost(masterServices, conf);</span>
-<span class="source-line-no">145</span><span id="line-145"> assertEquals("System coprocessors loading default was not honored",</span>
-<span class="source-line-no">146</span><span id="line-146"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">147</span><span id="line-147"> }</span>
-<span class="source-line-no">148</span><span id="line-148"></span>
-<span class="source-line-no">149</span><span id="line-149"> @Test</span>
-<span class="source-line-no">150</span><span id="line-150"> public void testRegionCoprocessorHostAllDisabled() throws Exception {</span>
-<span class="source-line-no">151</span><span id="line-151"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">152</span><span id="line-152"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, false);</span>
-<span class="source-line-no">153</span><span id="line-153"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">154</span><span id="line-154"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">155</span><span id="line-155"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">156</span><span id="line-156"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">157</span><span id="line-157"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">158</span><span id="line-158"> tableCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">159</span><span id="line-159"> new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">160</span><span id="line-160"> assertFalse("System coprocessors should not have been loaded", systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">161</span><span id="line-161"> assertFalse("Table coprocessors should not have been loaded", tableCoprocessorLoaded.get());</span>
-<span class="source-line-no">162</span><span id="line-162"> }</span>
-<span class="source-line-no">163</span><span id="line-163"></span>
-<span class="source-line-no">164</span><span id="line-164"> @Test</span>
-<span class="source-line-no">165</span><span id="line-165"> public void testRegionCoprocessorHostTableLoadingDisabled() throws Exception {</span>
-<span class="source-line-no">166</span><span id="line-166"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">167</span><span id="line-167"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, true); // if defaults change</span>
-<span class="source-line-no">168</span><span id="line-168"> conf.setBoolean(CoprocessorHost.USER_COPROCESSORS_ENABLED_CONF_KEY, false);</span>
-<span class="source-line-no">169</span><span id="line-169"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">170</span><span id="line-170"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">171</span><span id="line-171"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">172</span><span id="line-172"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">173</span><span id="line-173"> systemCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">174</span><span id="line-174"> tableCoprocessorLoaded.set(false);</span>
-<span class="source-line-no">175</span><span id="line-175"> new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">176</span><span id="line-176"> assertTrue("System coprocessors should have been loaded", systemCoprocessorLoaded.get());</span>
-<span class="source-line-no">177</span><span id="line-177"> assertFalse("Table coprocessors should not have been loaded", tableCoprocessorLoaded.get());</span>
-<span class="source-line-no">178</span><span id="line-178"> }</span>
-<span class="source-line-no">179</span><span id="line-179"></span>
-<span class="source-line-no">180</span><span id="line-180"> /**</span>
-<span class="source-line-no">181</span><span id="line-181"> * Rough test that Coprocessor Environment is Read-Only. Just check a random CP and see that it</span>
-<span class="source-line-no">182</span><span id="line-182"> * returns a read-only config.</span>
-<span class="source-line-no">183</span><span id="line-183"> */</span>
-<span class="source-line-no">184</span><span id="line-184"> @Test</span>
-<span class="source-line-no">185</span><span id="line-185"> public void testReadOnlyConfiguration() throws Exception {</span>
-<span class="source-line-no">186</span><span id="line-186"> Configuration conf = new Configuration(CONF);</span>
-<span class="source-line-no">187</span><span id="line-187"> HRegion region = mock(HRegion.class);</span>
-<span class="source-line-no">188</span><span id="line-188"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
-<span class="source-line-no">189</span><span id="line-189"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
-<span class="source-line-no">190</span><span id="line-190"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
-<span class="source-line-no">191</span><span id="line-191"> RegionCoprocessorHost rcp = new RegionCoprocessorHost(region, rsServices, conf);</span>
-<span class="source-line-no">192</span><span id="line-192"> boolean found = false;</span>
-<span class="source-line-no">193</span><span id="line-193"> for (String cpStr : rcp.getCoprocessors()) {</span>
-<span class="source-line-no">194</span><span id="line-194"> CoprocessorEnvironment cpenv = rcp.findCoprocessorEnvironment(cpStr);</span>
-<span class="source-line-no">195</span><span id="line-195"> if (cpenv != null) {</span>
-<span class="source-line-no">196</span><span id="line-196"> found = true;</span>
-<span class="source-line-no">197</span><span id="line-197"> }</span>
-<span class="source-line-no">198</span><span id="line-198"> Configuration c = cpenv.getConfiguration();</span>
-<span class="source-line-no">199</span><span id="line-199"> thrown.expect(UnsupportedOperationException.class);</span>
-<span class="source-line-no">200</span><span id="line-200"> c.set("one.two.three", "four.five.six");</span>
-<span class="source-line-no">201</span><span id="line-201"> }</span>
-<span class="source-line-no">202</span><span id="line-202"> assertTrue("Should be at least one CP found", found);</span>
-<span class="source-line-no">203</span><span id="line-203"> }</span>
-<span class="source-line-no">204</span><span id="line-204">}</span>
+<span class="source-line-no">066</span><span id="line-66"> try {</span>
+<span class="source-line-no">067</span><span id="line-67"> TABLEDESC = TableDescriptorBuilder.newBuilder(TABLENAME)</span>
+<span class="source-line-no">068</span><span id="line-68"> .setCoprocessor(TableCoprocessor.class.getName()).build();</span>
+<span class="source-line-no">069</span><span id="line-69"> } catch (IOException e) {</span>
+<span class="source-line-no">070</span><span id="line-70"> throw new RuntimeException(e);</span>
+<span class="source-line-no">071</span><span id="line-71"> }</span>
+<span class="source-line-no">072</span><span id="line-72"> }</span>
+<span class="source-line-no">073</span><span id="line-73"></span>
+<span class="source-line-no">074</span><span id="line-74"> // use atomic types in case coprocessor loading is ever multithreaded, also</span>
+<span class="source-line-no">075</span><span id="line-75"> // so we can mutate them even though they are declared final here</span>
+<span class="source-line-no">076</span><span id="line-76"> private static final AtomicBoolean systemCoprocessorLoaded = new AtomicBoolean();</span>
+<span class="source-line-no">077</span><span id="line-77"> private static final AtomicBoolean tableCoprocessorLoaded = new AtomicBoolean();</span>
+<span class="source-line-no">078</span><span id="line-78"></span>
+<span class="source-line-no">079</span><span id="line-79"> public static class SystemCoprocessor</span>
+<span class="source-line-no">080</span><span id="line-80"> implements MasterCoprocessor, RegionCoprocessor, RegionServerCoprocessor {</span>
+<span class="source-line-no">081</span><span id="line-81"> @Override</span>
+<span class="source-line-no">082</span><span id="line-82"> public void start(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">083</span><span id="line-83"> systemCoprocessorLoaded.set(true);</span>
+<span class="source-line-no">084</span><span id="line-84"> }</span>
+<span class="source-line-no">085</span><span id="line-85"></span>
+<span class="source-line-no">086</span><span id="line-86"> @Override</span>
+<span class="source-line-no">087</span><span id="line-87"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">088</span><span id="line-88"> }</span>
+<span class="source-line-no">089</span><span id="line-89"> }</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> public static class TableCoprocessor implements RegionCoprocessor {</span>
+<span class="source-line-no">092</span><span id="line-92"> @Override</span>
+<span class="source-line-no">093</span><span id="line-93"> public void start(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">094</span><span id="line-94"> tableCoprocessorLoaded.set(true);</span>
+<span class="source-line-no">095</span><span id="line-95"> }</span>
+<span class="source-line-no">096</span><span id="line-96"></span>
+<span class="source-line-no">097</span><span id="line-97"> @Override</span>
+<span class="source-line-no">098</span><span id="line-98"> public void stop(CoprocessorEnvironment env) throws IOException {</span>
+<span class="source-line-no">099</span><span id="line-99"> }</span>
+<span class="source-line-no">100</span><span id="line-100"> }</span>
+<span class="source-line-no">101</span><span id="line-101"></span>
+<span class="source-line-no">102</span><span id="line-102"> @Test</span>
+<span class="source-line-no">103</span><span id="line-103"> public void testRegionCoprocessorHostDefaults() throws Exception {</span>
+<span class="source-line-no">104</span><span id="line-104"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">105</span><span id="line-105"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">106</span><span id="line-106"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">107</span><span id="line-107"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">108</span><span id="line-108"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">109</span><span id="line-109"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">110</span><span id="line-110"> tableCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">111</span><span id="line-111"> new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">112</span><span id="line-112"> assertEquals(CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get(),</span>
+<span class="source-line-no">113</span><span id="line-113"> "System coprocessors loading default was not honored");</span>
+<span class="source-line-no">114</span><span id="line-114"> assertEquals(</span>
+<span class="source-line-no">115</span><span id="line-115"> CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED</span>
+<span class="source-line-no">116</span><span id="line-116"> && CoprocessorHost.DEFAULT_USER_COPROCESSORS_ENABLED,</span>
+<span class="source-line-no">117</span><span id="line-117"> tableCoprocessorLoaded.get(), "Table coprocessors loading default was not honored");</span>
+<span class="source-line-no">118</span><span id="line-118"> }</span>
+<span class="source-line-no">119</span><span id="line-119"></span>
+<span class="source-line-no">120</span><span id="line-120"> @Test</span>
+<span class="source-line-no">121</span><span id="line-121"> public void testRegionServerCoprocessorHostDefaults() throws Exception {</span>
+<span class="source-line-no">122</span><span id="line-122"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">123</span><span id="line-123"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">124</span><span id="line-124"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">125</span><span id="line-125"> new RegionServerCoprocessorHost(rsServices, conf);</span>
+<span class="source-line-no">126</span><span id="line-126"> assertEquals(CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get(),</span>
+<span class="source-line-no">127</span><span id="line-127"> "System coprocessors loading default was not honored");</span>
+<span class="source-line-no">128</span><span id="line-128"> }</span>
+<span class="source-line-no">129</span><span id="line-129"></span>
+<span class="source-line-no">130</span><span id="line-130"> @Test</span>
+<span class="source-line-no">131</span><span id="line-131"> public void testMasterCoprocessorHostDefaults() throws Exception {</span>
+<span class="source-line-no">132</span><span id="line-132"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">133</span><span id="line-133"> MasterServices masterServices = mock(MasterServices.class);</span>
+<span class="source-line-no">134</span><span id="line-134"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">135</span><span id="line-135"> new MasterCoprocessorHost(masterServices, conf);</span>
+<span class="source-line-no">136</span><span id="line-136"> assertEquals(CoprocessorHost.DEFAULT_COPROCESSORS_ENABLED, systemCoprocessorLoaded.get(),</span>
+<span class="source-line-no">137</span><span id="line-137"> "System coprocessors loading default was not honored");</span>
+<span class="source-line-no">138</span><span id="line-138"> }</span>
+<span class="source-line-no">139</span><span id="line-139"></span>
+<span class="source-line-no">140</span><span id="line-140"> @Test</span>
+<span class="source-line-no">141</span><span id="line-141"> public void testRegionCoprocessorHostAllDisabled() throws Exception {</span>
+<span class="source-line-no">142</span><span id="line-142"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">143</span><span id="line-143"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, false);</span>
+<span class="source-line-no">144</span><span id="line-144"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">145</span><span id="line-145"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">146</span><span id="line-146"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">147</span><span id="line-147"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">148</span><span id="line-148"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">149</span><span id="line-149"> tableCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">150</span><span id="line-150"> new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">151</span><span id="line-151"> assertFalse(systemCoprocessorLoaded.get(), "System coprocessors should not have been loaded");</span>
+<span class="source-line-no">152</span><span id="line-152"> assertFalse(tableCoprocessorLoaded.get(), "Table coprocessors should not have been loaded");</span>
+<span class="source-line-no">153</span><span id="line-153"> }</span>
+<span class="source-line-no">154</span><span id="line-154"></span>
+<span class="source-line-no">155</span><span id="line-155"> @Test</span>
+<span class="source-line-no">156</span><span id="line-156"> public void testRegionCoprocessorHostTableLoadingDisabled() throws Exception {</span>
+<span class="source-line-no">157</span><span id="line-157"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">158</span><span id="line-158"> conf.setBoolean(CoprocessorHost.COPROCESSORS_ENABLED_CONF_KEY, true); // if defaults change</span>
+<span class="source-line-no">159</span><span id="line-159"> conf.setBoolean(CoprocessorHost.USER_COPROCESSORS_ENABLED_CONF_KEY, false);</span>
+<span class="source-line-no">160</span><span id="line-160"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">161</span><span id="line-161"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">162</span><span id="line-162"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">163</span><span id="line-163"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">164</span><span id="line-164"> systemCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">165</span><span id="line-165"> tableCoprocessorLoaded.set(false);</span>
+<span class="source-line-no">166</span><span id="line-166"> new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">167</span><span id="line-167"> assertTrue(systemCoprocessorLoaded.get(), "System coprocessors should have been loaded");</span>
+<span class="source-line-no">168</span><span id="line-168"> assertFalse(tableCoprocessorLoaded.get(), "Table coprocessors should not have been loaded");</span>
+<span class="source-line-no">169</span><span id="line-169"> }</span>
+<span class="source-line-no">170</span><span id="line-170"></span>
+<span class="source-line-no">171</span><span id="line-171"> /**</span>
+<span class="source-line-no">172</span><span id="line-172"> * Rough test that Coprocessor Environment is Read-Only. Just check a random CP and see that it</span>
+<span class="source-line-no">173</span><span id="line-173"> * returns a read-only config.</span>
+<span class="source-line-no">174</span><span id="line-174"> */</span>
+<span class="source-line-no">175</span><span id="line-175"> @Test</span>
+<span class="source-line-no">176</span><span id="line-176"> public void testReadOnlyConfiguration() throws Exception {</span>
+<span class="source-line-no">177</span><span id="line-177"> Configuration conf = new Configuration(CONF);</span>
+<span class="source-line-no">178</span><span id="line-178"> HRegion region = mock(HRegion.class);</span>
+<span class="source-line-no">179</span><span id="line-179"> when(region.getRegionInfo()).thenReturn(REGIONINFO);</span>
+<span class="source-line-no">180</span><span id="line-180"> when(region.getTableDescriptor()).thenReturn(TABLEDESC);</span>
+<span class="source-line-no">181</span><span id="line-181"> RegionServerServices rsServices = mock(RegionServerServices.class);</span>
+<span class="source-line-no">182</span><span id="line-182"> RegionCoprocessorHost rcp = new RegionCoprocessorHost(region, rsServices, conf);</span>
+<span class="source-line-no">183</span><span id="line-183"> boolean found = false;</span>
+<span class="source-line-no">184</span><span id="line-184"> for (String cpStr : rcp.getCoprocessors()) {</span>
+<span class="source-line-no">185</span><span id="line-185"> CoprocessorEnvironment cpenv = rcp.findCoprocessorEnvironment(cpStr);</span>
+<span class="source-line-no">186</span><span id="line-186"> if (cpenv != null) {</span>
+<span class="source-line-no">187</span><span id="line-187"> found = true;</span>
+<span class="source-line-no">188</span><span id="line-188"> }</span>
+<span class="source-line-no">189</span><span id="line-189"> Configuration c = cpenv.getConfiguration();</span>
+<span class="source-line-no">190</span><span id="line-190"> assertThrows(UnsupportedOperationException.class,</span>
+<span class="source-line-no">191</span><span id="line-191"> () -> c.set("one.two.three", "four.five.six"));</span>
+<span class="source-line-no">192</span><span id="line-192"> }</span>
+<span class="source-line-no">193</span><span id="line-193"> assertTrue(found, "Should be at least one CP found");</span>
+<span class="source-line-no">194</span><span id="line-194"> }</span>
+<span class="source-line-no">195</span><span id="line-195">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.SimpleRegionObserverV2.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.SimpleRegionObserverV2.html
index e355502f432..83c711e1947 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.SimpleRegionObserverV2.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.SimpleRegionObserverV2.html
@@ -30,231 +30,226 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">022</span><span id="line-22"></span>
-<span class="source-line-no">023</span><span id="line-23">import java.io.File;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.lang.reflect.InvocationTargetException;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.Abortable;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.Coprocessor;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.HBaseCommonTestingUtil;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.util.ClassLoaderTestHelper;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.junit.Assert;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.junit.ClassRule;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.junit.Test;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">038</span><span id="line-38"></span>
-<span class="source-line-no">039</span><span id="line-39">@Category({ SmallTests.class })</span>
-<span class="source-line-no">040</span><span id="line-40">public class TestCoprocessorHost {</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42"> @ClassRule</span>
-<span class="source-line-no">043</span><span id="line-43"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">044</span><span id="line-44"> HBaseClassTestRule.forClass(TestCoprocessorHost.class);</span>
-<span class="source-line-no">045</span><span id="line-45"></span>
-<span class="source-line-no">046</span><span id="line-46"> private static final HBaseCommonTestingUtil TEST_UTIL = new HBaseCommonTestingUtil();</span>
-<span class="source-line-no">047</span><span id="line-47"></span>
-<span class="source-line-no">048</span><span id="line-48"> /**</span>
-<span class="source-line-no">049</span><span id="line-49"> * An {@link Abortable} implementation for tests.</span>
-<span class="source-line-no">050</span><span id="line-50"> */</span>
-<span class="source-line-no">051</span><span id="line-51"> private static class TestAbortable implements Abortable {</span>
-<span class="source-line-no">052</span><span id="line-52"> private volatile boolean aborted = false;</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54"> @Override</span>
-<span class="source-line-no">055</span><span id="line-55"> public void abort(String why, Throwable e) {</span>
-<span class="source-line-no">056</span><span id="line-56"> this.aborted = true;</span>
-<span class="source-line-no">057</span><span id="line-57"> Assert.fail(e.getMessage());</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.fail;</span>
+<span class="source-line-no">024</span><span id="line-24"></span>
+<span class="source-line-no">025</span><span id="line-25">import java.io.File;</span>
+<span class="source-line-no">026</span><span id="line-26">import java.lang.reflect.InvocationTargetException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.Abortable;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.Coprocessor;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseCommonTestingUtil;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.util.ClassLoaderTestHelper;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38">@Tag(SmallTests.TAG)</span>
+<span class="source-line-no">039</span><span id="line-39">public class TestCoprocessorHost {</span>
+<span class="source-line-no">040</span><span id="line-40"></span>
+<span class="source-line-no">041</span><span id="line-41"> private static final HBaseCommonTestingUtil TEST_UTIL = new HBaseCommonTestingUtil();</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43"> /**</span>
+<span class="source-line-no">044</span><span id="line-44"> * An {@link Abortable} implementation for tests.</span>
+<span class="source-line-no">045</span><span id="line-45"> */</span>
+<span class="source-line-no">046</span><span id="line-46"> private static class TestAbortable implements Abortable {</span>
+<span class="source-line-no">047</span><span id="line-47"> private volatile boolean aborted = false;</span>
+<span class="source-line-no">048</span><span id="line-48"></span>
+<span class="source-line-no">049</span><span id="line-49"> @Override</span>
+<span class="source-line-no">050</span><span id="line-50"> public void abort(String why, Throwable e) {</span>
+<span class="source-line-no">051</span><span id="line-51"> this.aborted = true;</span>
+<span class="source-line-no">052</span><span id="line-52"> fail(e.getMessage());</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> @Override</span>
+<span class="source-line-no">056</span><span id="line-56"> public boolean isAborted() {</span>
+<span class="source-line-no">057</span><span id="line-57"> return this.aborted;</span>
<span class="source-line-no">058</span><span id="line-58"> }</span>
-<span class="source-line-no">059</span><span id="line-59"></span>
-<span class="source-line-no">060</span><span id="line-60"> @Override</span>
-<span class="source-line-no">061</span><span id="line-61"> public boolean isAborted() {</span>
-<span class="source-line-no">062</span><span id="line-62"> return this.aborted;</span>
-<span class="source-line-no">063</span><span id="line-63"> }</span>
-<span class="source-line-no">064</span><span id="line-64"> }</span>
-<span class="source-line-no">065</span><span id="line-65"></span>
-<span class="source-line-no">066</span><span id="line-66"> @Test</span>
-<span class="source-line-no">067</span><span id="line-67"> public void testDoubleLoadingAndPriorityValue() {</span>
-<span class="source-line-no">068</span><span id="line-68"> final Configuration conf = HBaseConfiguration.create();</span>
-<span class="source-line-no">069</span><span id="line-69"> final String key = "KEY";</span>
-<span class="source-line-no">070</span><span id="line-70"> final String coprocessor = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver";</span>
-<span class="source-line-no">071</span><span id="line-71"></span>
-<span class="source-line-no">072</span><span id="line-72"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">073</span><span id="line-73"> host = new CoprocessorHostForTest<>(conf);</span>
-<span class="source-line-no">074</span><span id="line-74"> int overridePriority = Integer.MAX_VALUE - 1;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> final String coprocessor_v3 = SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
+<span class="source-line-no">059</span><span id="line-59"> }</span>
+<span class="source-line-no">060</span><span id="line-60"></span>
+<span class="source-line-no">061</span><span id="line-61"> @Test</span>
+<span class="source-line-no">062</span><span id="line-62"> public void testDoubleLoadingAndPriorityValue() {</span>
+<span class="source-line-no">063</span><span id="line-63"> final Configuration conf = HBaseConfiguration.create();</span>
+<span class="source-line-no">064</span><span id="line-64"> final String key = "KEY";</span>
+<span class="source-line-no">065</span><span id="line-65"> final String coprocessor = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver";</span>
+<span class="source-line-no">066</span><span id="line-66"></span>
+<span class="source-line-no">067</span><span id="line-67"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">068</span><span id="line-68"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">069</span><span id="line-69"> int overridePriority = Integer.MAX_VALUE - 1;</span>
+<span class="source-line-no">070</span><span id="line-70"></span>
+<span class="source-line-no">071</span><span id="line-71"> final String coprocessor_v3 = SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
+<span class="source-line-no">072</span><span id="line-72"></span>
+<span class="source-line-no">073</span><span id="line-73"> // Try and load a coprocessor three times</span>
+<span class="source-line-no">074</span><span id="line-74"> conf.setStrings(key, coprocessor, coprocessor, coprocessor,</span>
+<span class="source-line-no">075</span><span id="line-75"> SimpleRegionObserverV2.class.getName(), coprocessor_v3);</span>
+<span class="source-line-no">076</span><span id="line-76"> host.loadSystemCoprocessors(conf, key);</span>
<span class="source-line-no">077</span><span id="line-77"></span>
-<span class="source-line-no">078</span><span id="line-78"> // Try and load a coprocessor three times</span>
-<span class="source-line-no">079</span><span id="line-79"> conf.setStrings(key, coprocessor, coprocessor, coprocessor,</span>
-<span class="source-line-no">080</span><span id="line-80"> SimpleRegionObserverV2.class.getName(), coprocessor_v3);</span>
-<span class="source-line-no">081</span><span id="line-81"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83"> // Three coprocessors(SimpleRegionObserver, SimpleRegionObserverV2,</span>
-<span class="source-line-no">084</span><span id="line-84"> // SimpleRegionObserverV3) loaded</span>
-<span class="source-line-no">085</span><span id="line-85"> Assert.assertEquals(3, host.coprocEnvironments.size());</span>
-<span class="source-line-no">086</span><span id="line-86"></span>
-<span class="source-line-no">087</span><span id="line-87"> // Check the priority value</span>
-<span class="source-line-no">088</span><span id="line-88"> CoprocessorEnvironment<?> simpleEnv =</span>
-<span class="source-line-no">089</span><span id="line-89"> host.findCoprocessorEnvironment(SimpleRegionObserver.class.getName());</span>
-<span class="source-line-no">090</span><span id="line-90"> CoprocessorEnvironment<?> simpleEnv_v2 =</span>
-<span class="source-line-no">091</span><span id="line-91"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
-<span class="source-line-no">092</span><span id="line-92"> CoprocessorEnvironment<?> simpleEnv_v3 =</span>
-<span class="source-line-no">093</span><span id="line-93"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
-<span class="source-line-no">094</span><span id="line-94"></span>
-<span class="source-line-no">095</span><span id="line-95"> assertNotNull(simpleEnv);</span>
-<span class="source-line-no">096</span><span id="line-96"> assertNotNull(simpleEnv_v2);</span>
-<span class="source-line-no">097</span><span id="line-97"> assertNotNull(simpleEnv_v3);</span>
-<span class="source-line-no">098</span><span id="line-98"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
-<span class="source-line-no">099</span><span id="line-99"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, simpleEnv_v2.getPriority());</span>
-<span class="source-line-no">100</span><span id="line-100"> assertEquals(overridePriority, simpleEnv_v3.getPriority());</span>
-<span class="source-line-no">101</span><span id="line-101"> }</span>
-<span class="source-line-no">102</span><span id="line-102"></span>
-<span class="source-line-no">103</span><span id="line-103"> @Test</span>
-<span class="source-line-no">104</span><span id="line-104"> public void testLoadSystemCoprocessorWithPath() throws Exception {</span>
-<span class="source-line-no">105</span><span id="line-105"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">106</span><span id="line-106"> final String key = "KEY";</span>
-<span class="source-line-no">107</span><span id="line-107"> final String testClassName = "TestSystemCoprocessor";</span>
-<span class="source-line-no">108</span><span id="line-108"> final String testClassNameWithPriorityAndPath = testClassName + "PriorityAndPath";</span>
-<span class="source-line-no">109</span><span id="line-109"></span>
-<span class="source-line-no">110</span><span id="line-110"> File jarFile = buildCoprocessorJar(testClassName);</span>
-<span class="source-line-no">111</span><span id="line-111"> File jarFileWithPriorityAndPath = buildCoprocessorJar(testClassNameWithPriorityAndPath);</span>
-<span class="source-line-no">112</span><span id="line-112"></span>
-<span class="source-line-no">113</span><span id="line-113"> try {</span>
-<span class="source-line-no">114</span><span id="line-114"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">115</span><span id="line-115"> host = new CoprocessorHostForTest<>(conf);</span>
-<span class="source-line-no">116</span><span id="line-116"></span>
-<span class="source-line-no">117</span><span id="line-117"> // make a string of coprocessor with only priority</span>
-<span class="source-line-no">118</span><span id="line-118"> int overridePriority = Integer.MAX_VALUE - 1;</span>
-<span class="source-line-no">119</span><span id="line-119"> final String coprocessorWithPriority =</span>
-<span class="source-line-no">120</span><span id="line-120"> SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
-<span class="source-line-no">121</span><span id="line-121"> // make a string of coprocessor with path but no priority</span>
-<span class="source-line-no">122</span><span id="line-122"> final String coprocessorWithPath =</span>
-<span class="source-line-no">123</span><span id="line-123"> String.format("%s|%s|%s", testClassName, "", jarFile.getAbsolutePath());</span>
-<span class="source-line-no">124</span><span id="line-124"> // make a string of coprocessor with priority and path</span>
-<span class="source-line-no">125</span><span id="line-125"> final String coprocessorWithPriorityAndPath =</span>
-<span class="source-line-no">126</span><span id="line-126"> String.format("%s|%s|%s", testClassNameWithPriorityAndPath, (overridePriority - 1),</span>
-<span class="source-line-no">127</span><span id="line-127"> jarFileWithPriorityAndPath.getAbsolutePath());</span>
+<span class="source-line-no">078</span><span id="line-78"> // Three coprocessors(SimpleRegionObserver, SimpleRegionObserverV2,</span>
+<span class="source-line-no">079</span><span id="line-79"> // SimpleRegionObserverV3) loaded</span>
+<span class="source-line-no">080</span><span id="line-80"> assertEquals(3, host.coprocEnvironments.size());</span>
+<span class="source-line-no">081</span><span id="line-81"></span>
+<span class="source-line-no">082</span><span id="line-82"> // Check the priority value</span>
+<span class="source-line-no">083</span><span id="line-83"> CoprocessorEnvironment<?> simpleEnv =</span>
+<span class="source-line-no">084</span><span id="line-84"> host.findCoprocessorEnvironment(SimpleRegionObserver.class.getName());</span>
+<span class="source-line-no">085</span><span id="line-85"> CoprocessorEnvironment<?> simpleEnv_v2 =</span>
+<span class="source-line-no">086</span><span id="line-86"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
+<span class="source-line-no">087</span><span id="line-87"> CoprocessorEnvironment<?> simpleEnv_v3 =</span>
+<span class="source-line-no">088</span><span id="line-88"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
+<span class="source-line-no">089</span><span id="line-89"></span>
+<span class="source-line-no">090</span><span id="line-90"> assertNotNull(simpleEnv);</span>
+<span class="source-line-no">091</span><span id="line-91"> assertNotNull(simpleEnv_v2);</span>
+<span class="source-line-no">092</span><span id="line-92"> assertNotNull(simpleEnv_v3);</span>
+<span class="source-line-no">093</span><span id="line-93"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
+<span class="source-line-no">094</span><span id="line-94"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, simpleEnv_v2.getPriority());</span>
+<span class="source-line-no">095</span><span id="line-95"> assertEquals(overridePriority, simpleEnv_v3.getPriority());</span>
+<span class="source-line-no">096</span><span id="line-96"> }</span>
+<span class="source-line-no">097</span><span id="line-97"></span>
+<span class="source-line-no">098</span><span id="line-98"> @Test</span>
+<span class="source-line-no">099</span><span id="line-99"> public void testLoadSystemCoprocessorWithPath() throws Exception {</span>
+<span class="source-line-no">100</span><span id="line-100"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">101</span><span id="line-101"> final String key = "KEY";</span>
+<span class="source-line-no">102</span><span id="line-102"> final String testClassName = "TestSystemCoprocessor";</span>
+<span class="source-line-no">103</span><span id="line-103"> final String testClassNameWithPriorityAndPath = testClassName + "PriorityAndPath";</span>
+<span class="source-line-no">104</span><span id="line-104"></span>
+<span class="source-line-no">105</span><span id="line-105"> File jarFile = buildCoprocessorJar(testClassName);</span>
+<span class="source-line-no">106</span><span id="line-106"> File jarFileWithPriorityAndPath = buildCoprocessorJar(testClassNameWithPriorityAndPath);</span>
+<span class="source-line-no">107</span><span id="line-107"></span>
+<span class="source-line-no">108</span><span id="line-108"> try {</span>
+<span class="source-line-no">109</span><span id="line-109"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">110</span><span id="line-110"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">111</span><span id="line-111"></span>
+<span class="source-line-no">112</span><span id="line-112"> // make a string of coprocessor with only priority</span>
+<span class="source-line-no">113</span><span id="line-113"> int overridePriority = Integer.MAX_VALUE - 1;</span>
+<span class="source-line-no">114</span><span id="line-114"> final String coprocessorWithPriority =</span>
+<span class="source-line-no">115</span><span id="line-115"> SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
+<span class="source-line-no">116</span><span id="line-116"> // make a string of coprocessor with path but no priority</span>
+<span class="source-line-no">117</span><span id="line-117"> final String coprocessorWithPath =</span>
+<span class="source-line-no">118</span><span id="line-118"> String.format("%s|%s|%s", testClassName, "", jarFile.getAbsolutePath());</span>
+<span class="source-line-no">119</span><span id="line-119"> // make a string of coprocessor with priority and path</span>
+<span class="source-line-no">120</span><span id="line-120"> final String coprocessorWithPriorityAndPath =</span>
+<span class="source-line-no">121</span><span id="line-121"> String.format("%s|%s|%s", testClassNameWithPriorityAndPath, (overridePriority - 1),</span>
+<span class="source-line-no">122</span><span id="line-122"> jarFileWithPriorityAndPath.getAbsolutePath());</span>
+<span class="source-line-no">123</span><span id="line-123"></span>
+<span class="source-line-no">124</span><span id="line-124"> // Try and load a system coprocessors</span>
+<span class="source-line-no">125</span><span id="line-125"> conf.setStrings(key, SimpleRegionObserverV2.class.getName(), coprocessorWithPriority,</span>
+<span class="source-line-no">126</span><span id="line-126"> coprocessorWithPath, coprocessorWithPriorityAndPath);</span>
+<span class="source-line-no">127</span><span id="line-127"> host.loadSystemCoprocessors(conf, key);</span>
<span class="source-line-no">128</span><span id="line-128"></span>
-<span class="source-line-no">129</span><span id="line-129"> // Try and load a system coprocessors</span>
-<span class="source-line-no">130</span><span id="line-130"> conf.setStrings(key, SimpleRegionObserverV2.class.getName(), coprocessorWithPriority,</span>
-<span class="source-line-no">131</span><span id="line-131"> coprocessorWithPath, coprocessorWithPriorityAndPath);</span>
-<span class="source-line-no">132</span><span id="line-132"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">133</span><span id="line-133"></span>
-<span class="source-line-no">134</span><span id="line-134"> // first loaded system coprocessor with default priority</span>
-<span class="source-line-no">135</span><span id="line-135"> CoprocessorEnvironment<?> simpleEnv =</span>
-<span class="source-line-no">136</span><span id="line-136"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
-<span class="source-line-no">137</span><span id="line-137"> assertNotNull(simpleEnv);</span>
-<span class="source-line-no">138</span><span id="line-138"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
-<span class="source-line-no">139</span><span id="line-139"></span>
-<span class="source-line-no">140</span><span id="line-140"> // external system coprocessor with default priority</span>
-<span class="source-line-no">141</span><span id="line-141"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPath =</span>
-<span class="source-line-no">142</span><span id="line-142"> host.findCoprocessorEnvironment(testClassName);</span>
-<span class="source-line-no">143</span><span id="line-143"> assertNotNull(coprocessorEnvironmentWithPath);</span>
-<span class="source-line-no">144</span><span id="line-144"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, coprocessorEnvironmentWithPath.getPriority());</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146"> // system coprocessor with configured priority</span>
-<span class="source-line-no">147</span><span id="line-147"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriority =</span>
-<span class="source-line-no">148</span><span id="line-148"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
-<span class="source-line-no">149</span><span id="line-149"> assertNotNull(coprocessorEnvironmentWithPriority);</span>
-<span class="source-line-no">150</span><span id="line-150"> assertEquals(overridePriority, coprocessorEnvironmentWithPriority.getPriority());</span>
-<span class="source-line-no">151</span><span id="line-151"></span>
-<span class="source-line-no">152</span><span id="line-152"> // external system coprocessor with override priority</span>
-<span class="source-line-no">153</span><span id="line-153"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriorityAndPath =</span>
-<span class="source-line-no">154</span><span id="line-154"> host.findCoprocessorEnvironment(testClassNameWithPriorityAndPath);</span>
-<span class="source-line-no">155</span><span id="line-155"> assertNotNull(coprocessorEnvironmentWithPriorityAndPath);</span>
-<span class="source-line-no">156</span><span id="line-156"> assertEquals(overridePriority - 1, coprocessorEnvironmentWithPriorityAndPath.getPriority());</span>
-<span class="source-line-no">157</span><span id="line-157"> } finally {</span>
-<span class="source-line-no">158</span><span id="line-158"> if (jarFile.exists()) {</span>
-<span class="source-line-no">159</span><span id="line-159"> jarFile.delete();</span>
-<span class="source-line-no">160</span><span id="line-160"> }</span>
-<span class="source-line-no">161</span><span id="line-161"> if (jarFileWithPriorityAndPath.exists()) {</span>
-<span class="source-line-no">162</span><span id="line-162"> jarFileWithPriorityAndPath.delete();</span>
-<span class="source-line-no">163</span><span id="line-163"> }</span>
-<span class="source-line-no">164</span><span id="line-164"> }</span>
-<span class="source-line-no">165</span><span id="line-165"> }</span>
-<span class="source-line-no">166</span><span id="line-166"></span>
-<span class="source-line-no">167</span><span id="line-167"> @Test(expected = AssertionError.class)</span>
-<span class="source-line-no">168</span><span id="line-168"> public void testLoadSystemCoprocessorWithPathDoesNotExist() throws Exception {</span>
-<span class="source-line-no">169</span><span id="line-169"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">170</span><span id="line-170"> final String key = "KEY";</span>
-<span class="source-line-no">171</span><span id="line-171"> final String testClassName = "TestSystemCoprocessor";</span>
-<span class="source-line-no">172</span><span id="line-172"></span>
-<span class="source-line-no">173</span><span id="line-173"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">174</span><span id="line-174"> host = new CoprocessorHostForTest<>(conf);</span>
-<span class="source-line-no">175</span><span id="line-175"></span>
-<span class="source-line-no">176</span><span id="line-176"> // make a string of coprocessor with path but no priority</span>
-<span class="source-line-no">177</span><span id="line-177"> final String coprocessorWithPath = testClassName + "||" + testClassName + ".jar";</span>
-<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179"> // Try and load a system coprocessors</span>
-<span class="source-line-no">180</span><span id="line-180"> conf.setStrings(key, coprocessorWithPath);</span>
-<span class="source-line-no">181</span><span id="line-181"> // when loading non-exist with CoprocessorHostForTest host, it aborts with AssertionError</span>
-<span class="source-line-no">182</span><span id="line-182"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"></span>
-<span class="source-line-no">185</span><span id="line-185"> @Test(expected = AssertionError.class)</span>
-<span class="source-line-no">186</span><span id="line-186"> public void testLoadSystemCoprocessorWithPathDoesNotExistAndPriority() throws Exception {</span>
-<span class="source-line-no">187</span><span id="line-187"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">188</span><span id="line-188"> final String key = "KEY";</span>
-<span class="source-line-no">189</span><span id="line-189"> final String testClassName = "TestSystemCoprocessor";</span>
-<span class="source-line-no">190</span><span id="line-190"></span>
-<span class="source-line-no">191</span><span id="line-191"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">192</span><span id="line-192"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">129</span><span id="line-129"> // first loaded system coprocessor with default priority</span>
+<span class="source-line-no">130</span><span id="line-130"> CoprocessorEnvironment<?> simpleEnv =</span>
+<span class="source-line-no">131</span><span id="line-131"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
+<span class="source-line-no">132</span><span id="line-132"> assertNotNull(simpleEnv);</span>
+<span class="source-line-no">133</span><span id="line-133"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
+<span class="source-line-no">134</span><span id="line-134"></span>
+<span class="source-line-no">135</span><span id="line-135"> // external system coprocessor with default priority</span>
+<span class="source-line-no">136</span><span id="line-136"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPath =</span>
+<span class="source-line-no">137</span><span id="line-137"> host.findCoprocessorEnvironment(testClassName);</span>
+<span class="source-line-no">138</span><span id="line-138"> assertNotNull(coprocessorEnvironmentWithPath);</span>
+<span class="source-line-no">139</span><span id="line-139"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, coprocessorEnvironmentWithPath.getPriority());</span>
+<span class="source-line-no">140</span><span id="line-140"></span>
+<span class="source-line-no">141</span><span id="line-141"> // system coprocessor with configured priority</span>
+<span class="source-line-no">142</span><span id="line-142"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriority =</span>
+<span class="source-line-no">143</span><span id="line-143"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
+<span class="source-line-no">144</span><span id="line-144"> assertNotNull(coprocessorEnvironmentWithPriority);</span>
+<span class="source-line-no">145</span><span id="line-145"> assertEquals(overridePriority, coprocessorEnvironmentWithPriority.getPriority());</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147"> // external system coprocessor with override priority</span>
+<span class="source-line-no">148</span><span id="line-148"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriorityAndPath =</span>
+<span class="source-line-no">149</span><span id="line-149"> host.findCoprocessorEnvironment(testClassNameWithPriorityAndPath);</span>
+<span class="source-line-no">150</span><span id="line-150"> assertNotNull(coprocessorEnvironmentWithPriorityAndPath);</span>
+<span class="source-line-no">151</span><span id="line-151"> assertEquals(overridePriority - 1, coprocessorEnvironmentWithPriorityAndPath.getPriority());</span>
+<span class="source-line-no">152</span><span id="line-152"> } finally {</span>
+<span class="source-line-no">153</span><span id="line-153"> if (jarFile.exists()) {</span>
+<span class="source-line-no">154</span><span id="line-154"> jarFile.delete();</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> if (jarFileWithPriorityAndPath.exists()) {</span>
+<span class="source-line-no">157</span><span id="line-157"> jarFileWithPriorityAndPath.delete();</span>
+<span class="source-line-no">158</span><span id="line-158"> }</span>
+<span class="source-line-no">159</span><span id="line-159"> }</span>
+<span class="source-line-no">160</span><span id="line-160"> }</span>
+<span class="source-line-no">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162"> @Test</span>
+<span class="source-line-no">163</span><span id="line-163"> public void testLoadSystemCoprocessorWithPathDoesNotExist() throws Exception {</span>
+<span class="source-line-no">164</span><span id="line-164"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">165</span><span id="line-165"> final String key = "KEY";</span>
+<span class="source-line-no">166</span><span id="line-166"> final String testClassName = "TestSystemCoprocessor";</span>
+<span class="source-line-no">167</span><span id="line-167"></span>
+<span class="source-line-no">168</span><span id="line-168"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">169</span><span id="line-169"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">170</span><span id="line-170"></span>
+<span class="source-line-no">171</span><span id="line-171"> // make a string of coprocessor with path but no priority</span>
+<span class="source-line-no">172</span><span id="line-172"> final String coprocessorWithPath = testClassName + "||" + testClassName + ".jar";</span>
+<span class="source-line-no">173</span><span id="line-173"></span>
+<span class="source-line-no">174</span><span id="line-174"> // Try and load a system coprocessors</span>
+<span class="source-line-no">175</span><span id="line-175"> conf.setStrings(key, coprocessorWithPath);</span>
+<span class="source-line-no">176</span><span id="line-176"> // when loading non-exist with CoprocessorHostForTest host, it aborts with AssertionError</span>
+<span class="source-line-no">177</span><span id="line-177"> assertThrows(AssertionError.class, () -> host.loadSystemCoprocessors(conf, key));</span>
+<span class="source-line-no">178</span><span id="line-178"> }</span>
+<span class="source-line-no">179</span><span id="line-179"></span>
+<span class="source-line-no">180</span><span id="line-180"> @Test</span>
+<span class="source-line-no">181</span><span id="line-181"> public void testLoadSystemCoprocessorWithPathDoesNotExistAndPriority() throws Exception {</span>
+<span class="source-line-no">182</span><span id="line-182"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">183</span><span id="line-183"> final String key = "KEY";</span>
+<span class="source-line-no">184</span><span id="line-184"> final String testClassName = "TestSystemCoprocessor";</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">187</span><span id="line-187"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">188</span><span id="line-188"></span>
+<span class="source-line-no">189</span><span id="line-189"> int overridePriority = Integer.MAX_VALUE - 1;</span>
+<span class="source-line-no">190</span><span id="line-190"> // make a string of coprocessor with path and priority</span>
+<span class="source-line-no">191</span><span id="line-191"> final String coprocessor =</span>
+<span class="source-line-no">192</span><span id="line-192"> testClassName + "|" + overridePriority + "|" + testClassName + ".jar";</span>
<span class="source-line-no">193</span><span id="line-193"></span>
-<span class="source-line-no">194</span><span id="line-194"> int overridePriority = Integer.MAX_VALUE - 1;</span>
-<span class="source-line-no">195</span><span id="line-195"> // make a string of coprocessor with path and priority</span>
-<span class="source-line-no">196</span><span id="line-196"> final String coprocessor =</span>
-<span class="source-line-no">197</span><span id="line-197"> testClassName + "|" + overridePriority + "|" + testClassName + ".jar";</span>
-<span class="source-line-no">198</span><span id="line-198"></span>
-<span class="source-line-no">199</span><span id="line-199"> // Try and load a system coprocessors</span>
-<span class="source-line-no">200</span><span id="line-200"> conf.setStrings(key, coprocessor);</span>
-<span class="source-line-no">201</span><span id="line-201"> // when loading non-exist coprocessor, it aborts with AssertionError</span>
-<span class="source-line-no">202</span><span id="line-202"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">203</span><span id="line-203"> }</span>
+<span class="source-line-no">194</span><span id="line-194"> // Try and load a system coprocessors</span>
+<span class="source-line-no">195</span><span id="line-195"> conf.setStrings(key, coprocessor);</span>
+<span class="source-line-no">196</span><span id="line-196"> // when loading non-exist coprocessor, it aborts with AssertionError</span>
+<span class="source-line-no">197</span><span id="line-197"> assertThrows(AssertionError.class, () -> host.loadSystemCoprocessors(conf, key));</span>
+<span class="source-line-no">198</span><span id="line-198"> }</span>
+<span class="source-line-no">199</span><span id="line-199"></span>
+<span class="source-line-no">200</span><span id="line-200"> public static class SimpleRegionObserverV2 extends SimpleRegionObserver {</span>
+<span class="source-line-no">201</span><span id="line-201"> }</span>
+<span class="source-line-no">202</span><span id="line-202"></span>
+<span class="source-line-no">203</span><span id="line-203"> public static class SimpleRegionObserverV3 extends SimpleRegionObserver {</span>
<span class="source-line-no">204</span><span id="line-204"></span>
-<span class="source-line-no">205</span><span id="line-205"> public static class SimpleRegionObserverV2 extends SimpleRegionObserver {</span>
-<span class="source-line-no">206</span><span id="line-206"> }</span>
-<span class="source-line-no">207</span><span id="line-207"></span>
-<span class="source-line-no">208</span><span id="line-208"> public static class SimpleRegionObserverV3 extends SimpleRegionObserver {</span>
-<span class="source-line-no">209</span><span id="line-209"></span>
-<span class="source-line-no">210</span><span id="line-210"> }</span>
-<span class="source-line-no">211</span><span id="line-211"></span>
-<span class="source-line-no">212</span><span id="line-212"> private static class CoprocessorHostForTest<E extends Coprocessor></span>
-<span class="source-line-no">213</span><span id="line-213"> extends CoprocessorHost<E, CoprocessorEnvironment<E>> {</span>
-<span class="source-line-no">214</span><span id="line-214"> final Configuration cpHostConf;</span>
+<span class="source-line-no">205</span><span id="line-205"> }</span>
+<span class="source-line-no">206</span><span id="line-206"></span>
+<span class="source-line-no">207</span><span id="line-207"> private static class CoprocessorHostForTest<E extends Coprocessor></span>
+<span class="source-line-no">208</span><span id="line-208"> extends CoprocessorHost<E, CoprocessorEnvironment<E>> {</span>
+<span class="source-line-no">209</span><span id="line-209"> final Configuration cpHostConf;</span>
+<span class="source-line-no">210</span><span id="line-210"></span>
+<span class="source-line-no">211</span><span id="line-211"> public CoprocessorHostForTest(Configuration conf) {</span>
+<span class="source-line-no">212</span><span id="line-212"> super(new TestAbortable());</span>
+<span class="source-line-no">213</span><span id="line-213"> cpHostConf = conf;</span>
+<span class="source-line-no">214</span><span id="line-214"> }</span>
<span class="source-line-no">215</span><span id="line-215"></span>
-<span class="source-line-no">216</span><span id="line-216"> public CoprocessorHostForTest(Configuration conf) {</span>
-<span class="source-line-no">217</span><span id="line-217"> super(new TestAbortable());</span>
-<span class="source-line-no">218</span><span id="line-218"> cpHostConf = conf;</span>
-<span class="source-line-no">219</span><span id="line-219"> }</span>
-<span class="source-line-no">220</span><span id="line-220"></span>
-<span class="source-line-no">221</span><span id="line-221"> @Override</span>
-<span class="source-line-no">222</span><span id="line-222"> public E checkAndGetInstance(Class<?> implClass)</span>
-<span class="source-line-no">223</span><span id="line-223"> throws InstantiationException, IllegalAccessException {</span>
-<span class="source-line-no">224</span><span id="line-224"> try {</span>
-<span class="source-line-no">225</span><span id="line-225"> return (E) implClass.getDeclaredConstructor().newInstance();</span>
-<span class="source-line-no">226</span><span id="line-226"> } catch (InvocationTargetException | NoSuchMethodException e) {</span>
-<span class="source-line-no">227</span><span id="line-227"> throw (InstantiationException) new InstantiationException().initCause(e);</span>
-<span class="source-line-no">228</span><span id="line-228"> }</span>
-<span class="source-line-no">229</span><span id="line-229"> }</span>
-<span class="source-line-no">230</span><span id="line-230"></span>
-<span class="source-line-no">231</span><span id="line-231"> @Override</span>
-<span class="source-line-no">232</span><span id="line-232"> public CoprocessorEnvironment<E> createEnvironment(final E instance, final int priority,</span>
-<span class="source-line-no">233</span><span id="line-233"> int sequence, Configuration conf) {</span>
-<span class="source-line-no">234</span><span id="line-234"> return new BaseEnvironment<>(instance, priority, 0, cpHostConf);</span>
-<span class="source-line-no">235</span><span id="line-235"> }</span>
-<span class="source-line-no">236</span><span id="line-236"> }</span>
-<span class="source-line-no">237</span><span id="line-237"></span>
-<span class="source-line-no">238</span><span id="line-238"> private File buildCoprocessorJar(String className) throws Exception {</span>
-<span class="source-line-no">239</span><span id="line-239"> String dataTestDir = TEST_UTIL.getDataTestDir().toString();</span>
-<span class="source-line-no">240</span><span id="line-240"> String code = String.format("import org.apache.hadoop.hbase.coprocessor.*; public class %s"</span>
-<span class="source-line-no">241</span><span id="line-241"> + " implements RegionCoprocessor {}", className);</span>
-<span class="source-line-no">242</span><span id="line-242"> return ClassLoaderTestHelper.buildJar(dataTestDir, className, code);</span>
-<span class="source-line-no">243</span><span id="line-243"> }</span>
-<span class="source-line-no">244</span><span id="line-244">}</span>
+<span class="source-line-no">216</span><span id="line-216"> @Override</span>
+<span class="source-line-no">217</span><span id="line-217"> public E checkAndGetInstance(Class<?> implClass)</span>
+<span class="source-line-no">218</span><span id="line-218"> throws InstantiationException, IllegalAccessException {</span>
+<span class="source-line-no">219</span><span id="line-219"> try {</span>
+<span class="source-line-no">220</span><span id="line-220"> return (E) implClass.getDeclaredConstructor().newInstance();</span>
+<span class="source-line-no">221</span><span id="line-221"> } catch (InvocationTargetException | NoSuchMethodException e) {</span>
+<span class="source-line-no">222</span><span id="line-222"> throw (InstantiationException) new InstantiationException().initCause(e);</span>
+<span class="source-line-no">223</span><span id="line-223"> }</span>
+<span class="source-line-no">224</span><span id="line-224"> }</span>
+<span class="source-line-no">225</span><span id="line-225"></span>
+<span class="source-line-no">226</span><span id="line-226"> @Override</span>
+<span class="source-line-no">227</span><span id="line-227"> public CoprocessorEnvironment<E> createEnvironment(final E instance, final int priority,</span>
+<span class="source-line-no">228</span><span id="line-228"> int sequence, Configuration conf) {</span>
+<span class="source-line-no">229</span><span id="line-229"> return new BaseEnvironment<>(instance, priority, 0, cpHostConf);</span>
+<span class="source-line-no">230</span><span id="line-230"> }</span>
+<span class="source-line-no">231</span><span id="line-231"> }</span>
+<span class="source-line-no">232</span><span id="line-232"></span>
+<span class="source-line-no">233</span><span id="line-233"> private File buildCoprocessorJar(String className) throws Exception {</span>
+<span class="source-line-no">234</span><span id="line-234"> String dataTestDir = TEST_UTIL.getDataTestDir().toString();</span>
+<span class="source-line-no">235</span><span id="line-235"> String code = String.format("import org.apache.hadoop.hbase.coprocessor.*; public class %s"</span>
+<span class="source-line-no">236</span><span id="line-236"> + " implements RegionCoprocessor {}", className);</span>
+<span class="source-line-no">237</span><span id="line-237"> return ClassLoaderTestHelper.buildJar(dataTestDir, className, code);</span>
+<span class="source-line-no">238</span><span id="line-238"> }</span>
+<span class="source-line-no">239</span><span id="line-239">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.SimpleRegionObserverV3.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.SimpleRegionObserverV3.html
index 9fce9e74b6b..607ae3d1645 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.SimpleRegionObserverV3.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.SimpleRegionObserverV3.html
@@ -30,231 +30,226 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">022</span><span id="line-22"></span>
-<span class="source-line-no">023</span><span id="line-23">import java.io.File;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.lang.reflect.InvocationTargetException;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.Abortable;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.Coprocessor;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.HBaseCommonTestingUtil;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.util.ClassLoaderTestHelper;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.junit.Assert;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.junit.ClassRule;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.junit.Test;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">038</span><span id="line-38"></span>
-<span class="source-line-no">039</span><span id="line-39">@Category({ SmallTests.class })</span>
-<span class="source-line-no">040</span><span id="line-40">public class TestCoprocessorHost {</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42"> @ClassRule</span>
-<span class="source-line-no">043</span><span id="line-43"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">044</span><span id="line-44"> HBaseClassTestRule.forClass(TestCoprocessorHost.class);</span>
-<span class="source-line-no">045</span><span id="line-45"></span>
-<span class="source-line-no">046</span><span id="line-46"> private static final HBaseCommonTestingUtil TEST_UTIL = new HBaseCommonTestingUtil();</span>
-<span class="source-line-no">047</span><span id="line-47"></span>
-<span class="source-line-no">048</span><span id="line-48"> /**</span>
-<span class="source-line-no">049</span><span id="line-49"> * An {@link Abortable} implementation for tests.</span>
-<span class="source-line-no">050</span><span id="line-50"> */</span>
-<span class="source-line-no">051</span><span id="line-51"> private static class TestAbortable implements Abortable {</span>
-<span class="source-line-no">052</span><span id="line-52"> private volatile boolean aborted = false;</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54"> @Override</span>
-<span class="source-line-no">055</span><span id="line-55"> public void abort(String why, Throwable e) {</span>
-<span class="source-line-no">056</span><span id="line-56"> this.aborted = true;</span>
-<span class="source-line-no">057</span><span id="line-57"> Assert.fail(e.getMessage());</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.fail;</span>
+<span class="source-line-no">024</span><span id="line-24"></span>
+<span class="source-line-no">025</span><span id="line-25">import java.io.File;</span>
+<span class="source-line-no">026</span><span id="line-26">import java.lang.reflect.InvocationTargetException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.Abortable;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.Coprocessor;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseCommonTestingUtil;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.util.ClassLoaderTestHelper;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38">@Tag(SmallTests.TAG)</span>
+<span class="source-line-no">039</span><span id="line-39">public class TestCoprocessorHost {</span>
+<span class="source-line-no">040</span><span id="line-40"></span>
+<span class="source-line-no">041</span><span id="line-41"> private static final HBaseCommonTestingUtil TEST_UTIL = new HBaseCommonTestingUtil();</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43"> /**</span>
+<span class="source-line-no">044</span><span id="line-44"> * An {@link Abortable} implementation for tests.</span>
+<span class="source-line-no">045</span><span id="line-45"> */</span>
+<span class="source-line-no">046</span><span id="line-46"> private static class TestAbortable implements Abortable {</span>
+<span class="source-line-no">047</span><span id="line-47"> private volatile boolean aborted = false;</span>
+<span class="source-line-no">048</span><span id="line-48"></span>
+<span class="source-line-no">049</span><span id="line-49"> @Override</span>
+<span class="source-line-no">050</span><span id="line-50"> public void abort(String why, Throwable e) {</span>
+<span class="source-line-no">051</span><span id="line-51"> this.aborted = true;</span>
+<span class="source-line-no">052</span><span id="line-52"> fail(e.getMessage());</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> @Override</span>
+<span class="source-line-no">056</span><span id="line-56"> public boolean isAborted() {</span>
+<span class="source-line-no">057</span><span id="line-57"> return this.aborted;</span>
<span class="source-line-no">058</span><span id="line-58"> }</span>
-<span class="source-line-no">059</span><span id="line-59"></span>
-<span class="source-line-no">060</span><span id="line-60"> @Override</span>
-<span class="source-line-no">061</span><span id="line-61"> public boolean isAborted() {</span>
-<span class="source-line-no">062</span><span id="line-62"> return this.aborted;</span>
-<span class="source-line-no">063</span><span id="line-63"> }</span>
-<span class="source-line-no">064</span><span id="line-64"> }</span>
-<span class="source-line-no">065</span><span id="line-65"></span>
-<span class="source-line-no">066</span><span id="line-66"> @Test</span>
-<span class="source-line-no">067</span><span id="line-67"> public void testDoubleLoadingAndPriorityValue() {</span>
-<span class="source-line-no">068</span><span id="line-68"> final Configuration conf = HBaseConfiguration.create();</span>
-<span class="source-line-no">069</span><span id="line-69"> final String key = "KEY";</span>
-<span class="source-line-no">070</span><span id="line-70"> final String coprocessor = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver";</span>
-<span class="source-line-no">071</span><span id="line-71"></span>
-<span class="source-line-no">072</span><span id="line-72"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">073</span><span id="line-73"> host = new CoprocessorHostForTest<>(conf);</span>
-<span class="source-line-no">074</span><span id="line-74"> int overridePriority = Integer.MAX_VALUE - 1;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> final String coprocessor_v3 = SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
+<span class="source-line-no">059</span><span id="line-59"> }</span>
+<span class="source-line-no">060</span><span id="line-60"></span>
+<span class="source-line-no">061</span><span id="line-61"> @Test</span>
+<span class="source-line-no">062</span><span id="line-62"> public void testDoubleLoadingAndPriorityValue() {</span>
+<span class="source-line-no">063</span><span id="line-63"> final Configuration conf = HBaseConfiguration.create();</span>
+<span class="source-line-no">064</span><span id="line-64"> final String key = "KEY";</span>
+<span class="source-line-no">065</span><span id="line-65"> final String coprocessor = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver";</span>
+<span class="source-line-no">066</span><span id="line-66"></span>
+<span class="source-line-no">067</span><span id="line-67"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">068</span><span id="line-68"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">069</span><span id="line-69"> int overridePriority = Integer.MAX_VALUE - 1;</span>
+<span class="source-line-no">070</span><span id="line-70"></span>
+<span class="source-line-no">071</span><span id="line-71"> final String coprocessor_v3 = SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
+<span class="source-line-no">072</span><span id="line-72"></span>
+<span class="source-line-no">073</span><span id="line-73"> // Try and load a coprocessor three times</span>
+<span class="source-line-no">074</span><span id="line-74"> conf.setStrings(key, coprocessor, coprocessor, coprocessor,</span>
+<span class="source-line-no">075</span><span id="line-75"> SimpleRegionObserverV2.class.getName(), coprocessor_v3);</span>
+<span class="source-line-no">076</span><span id="line-76"> host.loadSystemCoprocessors(conf, key);</span>
<span class="source-line-no">077</span><span id="line-77"></span>
-<span class="source-line-no">078</span><span id="line-78"> // Try and load a coprocessor three times</span>
-<span class="source-line-no">079</span><span id="line-79"> conf.setStrings(key, coprocessor, coprocessor, coprocessor,</span>
-<span class="source-line-no">080</span><span id="line-80"> SimpleRegionObserverV2.class.getName(), coprocessor_v3);</span>
-<span class="source-line-no">081</span><span id="line-81"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83"> // Three coprocessors(SimpleRegionObserver, SimpleRegionObserverV2,</span>
-<span class="source-line-no">084</span><span id="line-84"> // SimpleRegionObserverV3) loaded</span>
-<span class="source-line-no">085</span><span id="line-85"> Assert.assertEquals(3, host.coprocEnvironments.size());</span>
-<span class="source-line-no">086</span><span id="line-86"></span>
-<span class="source-line-no">087</span><span id="line-87"> // Check the priority value</span>
-<span class="source-line-no">088</span><span id="line-88"> CoprocessorEnvironment<?> simpleEnv =</span>
-<span class="source-line-no">089</span><span id="line-89"> host.findCoprocessorEnvironment(SimpleRegionObserver.class.getName());</span>
-<span class="source-line-no">090</span><span id="line-90"> CoprocessorEnvironment<?> simpleEnv_v2 =</span>
-<span class="source-line-no">091</span><span id="line-91"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
-<span class="source-line-no">092</span><span id="line-92"> CoprocessorEnvironment<?> simpleEnv_v3 =</span>
-<span class="source-line-no">093</span><span id="line-93"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
-<span class="source-line-no">094</span><span id="line-94"></span>
-<span class="source-line-no">095</span><span id="line-95"> assertNotNull(simpleEnv);</span>
-<span class="source-line-no">096</span><span id="line-96"> assertNotNull(simpleEnv_v2);</span>
-<span class="source-line-no">097</span><span id="line-97"> assertNotNull(simpleEnv_v3);</span>
-<span class="source-line-no">098</span><span id="line-98"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
-<span class="source-line-no">099</span><span id="line-99"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, simpleEnv_v2.getPriority());</span>
-<span class="source-line-no">100</span><span id="line-100"> assertEquals(overridePriority, simpleEnv_v3.getPriority());</span>
-<span class="source-line-no">101</span><span id="line-101"> }</span>
-<span class="source-line-no">102</span><span id="line-102"></span>
-<span class="source-line-no">103</span><span id="line-103"> @Test</span>
-<span class="source-line-no">104</span><span id="line-104"> public void testLoadSystemCoprocessorWithPath() throws Exception {</span>
-<span class="source-line-no">105</span><span id="line-105"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">106</span><span id="line-106"> final String key = "KEY";</span>
-<span class="source-line-no">107</span><span id="line-107"> final String testClassName = "TestSystemCoprocessor";</span>
-<span class="source-line-no">108</span><span id="line-108"> final String testClassNameWithPriorityAndPath = testClassName + "PriorityAndPath";</span>
-<span class="source-line-no">109</span><span id="line-109"></span>
-<span class="source-line-no">110</span><span id="line-110"> File jarFile = buildCoprocessorJar(testClassName);</span>
-<span class="source-line-no">111</span><span id="line-111"> File jarFileWithPriorityAndPath = buildCoprocessorJar(testClassNameWithPriorityAndPath);</span>
-<span class="source-line-no">112</span><span id="line-112"></span>
-<span class="source-line-no">113</span><span id="line-113"> try {</span>
-<span class="source-line-no">114</span><span id="line-114"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">115</span><span id="line-115"> host = new CoprocessorHostForTest<>(conf);</span>
-<span class="source-line-no">116</span><span id="line-116"></span>
-<span class="source-line-no">117</span><span id="line-117"> // make a string of coprocessor with only priority</span>
-<span class="source-line-no">118</span><span id="line-118"> int overridePriority = Integer.MAX_VALUE - 1;</span>
-<span class="source-line-no">119</span><span id="line-119"> final String coprocessorWithPriority =</span>
-<span class="source-line-no">120</span><span id="line-120"> SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
-<span class="source-line-no">121</span><span id="line-121"> // make a string of coprocessor with path but no priority</span>
-<span class="source-line-no">122</span><span id="line-122"> final String coprocessorWithPath =</span>
-<span class="source-line-no">123</span><span id="line-123"> String.format("%s|%s|%s", testClassName, "", jarFile.getAbsolutePath());</span>
-<span class="source-line-no">124</span><span id="line-124"> // make a string of coprocessor with priority and path</span>
-<span class="source-line-no">125</span><span id="line-125"> final String coprocessorWithPriorityAndPath =</span>
-<span class="source-line-no">126</span><span id="line-126"> String.format("%s|%s|%s", testClassNameWithPriorityAndPath, (overridePriority - 1),</span>
-<span class="source-line-no">127</span><span id="line-127"> jarFileWithPriorityAndPath.getAbsolutePath());</span>
+<span class="source-line-no">078</span><span id="line-78"> // Three coprocessors(SimpleRegionObserver, SimpleRegionObserverV2,</span>
+<span class="source-line-no">079</span><span id="line-79"> // SimpleRegionObserverV3) loaded</span>
+<span class="source-line-no">080</span><span id="line-80"> assertEquals(3, host.coprocEnvironments.size());</span>
+<span class="source-line-no">081</span><span id="line-81"></span>
+<span class="source-line-no">082</span><span id="line-82"> // Check the priority value</span>
+<span class="source-line-no">083</span><span id="line-83"> CoprocessorEnvironment<?> simpleEnv =</span>
+<span class="source-line-no">084</span><span id="line-84"> host.findCoprocessorEnvironment(SimpleRegionObserver.class.getName());</span>
+<span class="source-line-no">085</span><span id="line-85"> CoprocessorEnvironment<?> simpleEnv_v2 =</span>
+<span class="source-line-no">086</span><span id="line-86"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
+<span class="source-line-no">087</span><span id="line-87"> CoprocessorEnvironment<?> simpleEnv_v3 =</span>
+<span class="source-line-no">088</span><span id="line-88"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
+<span class="source-line-no">089</span><span id="line-89"></span>
+<span class="source-line-no">090</span><span id="line-90"> assertNotNull(simpleEnv);</span>
+<span class="source-line-no">091</span><span id="line-91"> assertNotNull(simpleEnv_v2);</span>
+<span class="source-line-no">092</span><span id="line-92"> assertNotNull(simpleEnv_v3);</span>
+<span class="source-line-no">093</span><span id="line-93"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
+<span class="source-line-no">094</span><span id="line-94"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, simpleEnv_v2.getPriority());</span>
+<span class="source-line-no">095</span><span id="line-95"> assertEquals(overridePriority, simpleEnv_v3.getPriority());</span>
+<span class="source-line-no">096</span><span id="line-96"> }</span>
+<span class="source-line-no">097</span><span id="line-97"></span>
+<span class="source-line-no">098</span><span id="line-98"> @Test</span>
+<span class="source-line-no">099</span><span id="line-99"> public void testLoadSystemCoprocessorWithPath() throws Exception {</span>
+<span class="source-line-no">100</span><span id="line-100"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">101</span><span id="line-101"> final String key = "KEY";</span>
+<span class="source-line-no">102</span><span id="line-102"> final String testClassName = "TestSystemCoprocessor";</span>
+<span class="source-line-no">103</span><span id="line-103"> final String testClassNameWithPriorityAndPath = testClassName + "PriorityAndPath";</span>
+<span class="source-line-no">104</span><span id="line-104"></span>
+<span class="source-line-no">105</span><span id="line-105"> File jarFile = buildCoprocessorJar(testClassName);</span>
+<span class="source-line-no">106</span><span id="line-106"> File jarFileWithPriorityAndPath = buildCoprocessorJar(testClassNameWithPriorityAndPath);</span>
+<span class="source-line-no">107</span><span id="line-107"></span>
+<span class="source-line-no">108</span><span id="line-108"> try {</span>
+<span class="source-line-no">109</span><span id="line-109"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">110</span><span id="line-110"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">111</span><span id="line-111"></span>
+<span class="source-line-no">112</span><span id="line-112"> // make a string of coprocessor with only priority</span>
+<span class="source-line-no">113</span><span id="line-113"> int overridePriority = Integer.MAX_VALUE - 1;</span>
+<span class="source-line-no">114</span><span id="line-114"> final String coprocessorWithPriority =</span>
+<span class="source-line-no">115</span><span id="line-115"> SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
+<span class="source-line-no">116</span><span id="line-116"> // make a string of coprocessor with path but no priority</span>
+<span class="source-line-no">117</span><span id="line-117"> final String coprocessorWithPath =</span>
+<span class="source-line-no">118</span><span id="line-118"> String.format("%s|%s|%s", testClassName, "", jarFile.getAbsolutePath());</span>
+<span class="source-line-no">119</span><span id="line-119"> // make a string of coprocessor with priority and path</span>
+<span class="source-line-no">120</span><span id="line-120"> final String coprocessorWithPriorityAndPath =</span>
+<span class="source-line-no">121</span><span id="line-121"> String.format("%s|%s|%s", testClassNameWithPriorityAndPath, (overridePriority - 1),</span>
+<span class="source-line-no">122</span><span id="line-122"> jarFileWithPriorityAndPath.getAbsolutePath());</span>
+<span class="source-line-no">123</span><span id="line-123"></span>
+<span class="source-line-no">124</span><span id="line-124"> // Try and load a system coprocessors</span>
+<span class="source-line-no">125</span><span id="line-125"> conf.setStrings(key, SimpleRegionObserverV2.class.getName(), coprocessorWithPriority,</span>
+<span class="source-line-no">126</span><span id="line-126"> coprocessorWithPath, coprocessorWithPriorityAndPath);</span>
+<span class="source-line-no">127</span><span id="line-127"> host.loadSystemCoprocessors(conf, key);</span>
<span class="source-line-no">128</span><span id="line-128"></span>
-<span class="source-line-no">129</span><span id="line-129"> // Try and load a system coprocessors</span>
-<span class="source-line-no">130</span><span id="line-130"> conf.setStrings(key, SimpleRegionObserverV2.class.getName(), coprocessorWithPriority,</span>
-<span class="source-line-no">131</span><span id="line-131"> coprocessorWithPath, coprocessorWithPriorityAndPath);</span>
-<span class="source-line-no">132</span><span id="line-132"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">133</span><span id="line-133"></span>
-<span class="source-line-no">134</span><span id="line-134"> // first loaded system coprocessor with default priority</span>
-<span class="source-line-no">135</span><span id="line-135"> CoprocessorEnvironment<?> simpleEnv =</span>
-<span class="source-line-no">136</span><span id="line-136"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
-<span class="source-line-no">137</span><span id="line-137"> assertNotNull(simpleEnv);</span>
-<span class="source-line-no">138</span><span id="line-138"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
-<span class="source-line-no">139</span><span id="line-139"></span>
-<span class="source-line-no">140</span><span id="line-140"> // external system coprocessor with default priority</span>
-<span class="source-line-no">141</span><span id="line-141"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPath =</span>
-<span class="source-line-no">142</span><span id="line-142"> host.findCoprocessorEnvironment(testClassName);</span>
-<span class="source-line-no">143</span><span id="line-143"> assertNotNull(coprocessorEnvironmentWithPath);</span>
-<span class="source-line-no">144</span><span id="line-144"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, coprocessorEnvironmentWithPath.getPriority());</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146"> // system coprocessor with configured priority</span>
-<span class="source-line-no">147</span><span id="line-147"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriority =</span>
-<span class="source-line-no">148</span><span id="line-148"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
-<span class="source-line-no">149</span><span id="line-149"> assertNotNull(coprocessorEnvironmentWithPriority);</span>
-<span class="source-line-no">150</span><span id="line-150"> assertEquals(overridePriority, coprocessorEnvironmentWithPriority.getPriority());</span>
-<span class="source-line-no">151</span><span id="line-151"></span>
-<span class="source-line-no">152</span><span id="line-152"> // external system coprocessor with override priority</span>
-<span class="source-line-no">153</span><span id="line-153"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriorityAndPath =</span>
-<span class="source-line-no">154</span><span id="line-154"> host.findCoprocessorEnvironment(testClassNameWithPriorityAndPath);</span>
-<span class="source-line-no">155</span><span id="line-155"> assertNotNull(coprocessorEnvironmentWithPriorityAndPath);</span>
-<span class="source-line-no">156</span><span id="line-156"> assertEquals(overridePriority - 1, coprocessorEnvironmentWithPriorityAndPath.getPriority());</span>
-<span class="source-line-no">157</span><span id="line-157"> } finally {</span>
-<span class="source-line-no">158</span><span id="line-158"> if (jarFile.exists()) {</span>
-<span class="source-line-no">159</span><span id="line-159"> jarFile.delete();</span>
-<span class="source-line-no">160</span><span id="line-160"> }</span>
-<span class="source-line-no">161</span><span id="line-161"> if (jarFileWithPriorityAndPath.exists()) {</span>
-<span class="source-line-no">162</span><span id="line-162"> jarFileWithPriorityAndPath.delete();</span>
-<span class="source-line-no">163</span><span id="line-163"> }</span>
-<span class="source-line-no">164</span><span id="line-164"> }</span>
-<span class="source-line-no">165</span><span id="line-165"> }</span>
-<span class="source-line-no">166</span><span id="line-166"></span>
-<span class="source-line-no">167</span><span id="line-167"> @Test(expected = AssertionError.class)</span>
-<span class="source-line-no">168</span><span id="line-168"> public void testLoadSystemCoprocessorWithPathDoesNotExist() throws Exception {</span>
-<span class="source-line-no">169</span><span id="line-169"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">170</span><span id="line-170"> final String key = "KEY";</span>
-<span class="source-line-no">171</span><span id="line-171"> final String testClassName = "TestSystemCoprocessor";</span>
-<span class="source-line-no">172</span><span id="line-172"></span>
-<span class="source-line-no">173</span><span id="line-173"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">174</span><span id="line-174"> host = new CoprocessorHostForTest<>(conf);</span>
-<span class="source-line-no">175</span><span id="line-175"></span>
-<span class="source-line-no">176</span><span id="line-176"> // make a string of coprocessor with path but no priority</span>
-<span class="source-line-no">177</span><span id="line-177"> final String coprocessorWithPath = testClassName + "||" + testClassName + ".jar";</span>
-<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179"> // Try and load a system coprocessors</span>
-<span class="source-line-no">180</span><span id="line-180"> conf.setStrings(key, coprocessorWithPath);</span>
-<span class="source-line-no">181</span><span id="line-181"> // when loading non-exist with CoprocessorHostForTest host, it aborts with AssertionError</span>
-<span class="source-line-no">182</span><span id="line-182"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"></span>
-<span class="source-line-no">185</span><span id="line-185"> @Test(expected = AssertionError.class)</span>
-<span class="source-line-no">186</span><span id="line-186"> public void testLoadSystemCoprocessorWithPathDoesNotExistAndPriority() throws Exception {</span>
-<span class="source-line-no">187</span><span id="line-187"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">188</span><span id="line-188"> final String key = "KEY";</span>
-<span class="source-line-no">189</span><span id="line-189"> final String testClassName = "TestSystemCoprocessor";</span>
-<span class="source-line-no">190</span><span id="line-190"></span>
-<span class="source-line-no">191</span><span id="line-191"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">192</span><span id="line-192"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">129</span><span id="line-129"> // first loaded system coprocessor with default priority</span>
+<span class="source-line-no">130</span><span id="line-130"> CoprocessorEnvironment<?> simpleEnv =</span>
+<span class="source-line-no">131</span><span id="line-131"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
+<span class="source-line-no">132</span><span id="line-132"> assertNotNull(simpleEnv);</span>
+<span class="source-line-no">133</span><span id="line-133"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
+<span class="source-line-no">134</span><span id="line-134"></span>
+<span class="source-line-no">135</span><span id="line-135"> // external system coprocessor with default priority</span>
+<span class="source-line-no">136</span><span id="line-136"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPath =</span>
+<span class="source-line-no">137</span><span id="line-137"> host.findCoprocessorEnvironment(testClassName);</span>
+<span class="source-line-no">138</span><span id="line-138"> assertNotNull(coprocessorEnvironmentWithPath);</span>
+<span class="source-line-no">139</span><span id="line-139"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, coprocessorEnvironmentWithPath.getPriority());</span>
+<span class="source-line-no">140</span><span id="line-140"></span>
+<span class="source-line-no">141</span><span id="line-141"> // system coprocessor with configured priority</span>
+<span class="source-line-no">142</span><span id="line-142"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriority =</span>
+<span class="source-line-no">143</span><span id="line-143"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
+<span class="source-line-no">144</span><span id="line-144"> assertNotNull(coprocessorEnvironmentWithPriority);</span>
+<span class="source-line-no">145</span><span id="line-145"> assertEquals(overridePriority, coprocessorEnvironmentWithPriority.getPriority());</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147"> // external system coprocessor with override priority</span>
+<span class="source-line-no">148</span><span id="line-148"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriorityAndPath =</span>
+<span class="source-line-no">149</span><span id="line-149"> host.findCoprocessorEnvironment(testClassNameWithPriorityAndPath);</span>
+<span class="source-line-no">150</span><span id="line-150"> assertNotNull(coprocessorEnvironmentWithPriorityAndPath);</span>
+<span class="source-line-no">151</span><span id="line-151"> assertEquals(overridePriority - 1, coprocessorEnvironmentWithPriorityAndPath.getPriority());</span>
+<span class="source-line-no">152</span><span id="line-152"> } finally {</span>
+<span class="source-line-no">153</span><span id="line-153"> if (jarFile.exists()) {</span>
+<span class="source-line-no">154</span><span id="line-154"> jarFile.delete();</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> if (jarFileWithPriorityAndPath.exists()) {</span>
+<span class="source-line-no">157</span><span id="line-157"> jarFileWithPriorityAndPath.delete();</span>
+<span class="source-line-no">158</span><span id="line-158"> }</span>
+<span class="source-line-no">159</span><span id="line-159"> }</span>
+<span class="source-line-no">160</span><span id="line-160"> }</span>
+<span class="source-line-no">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162"> @Test</span>
+<span class="source-line-no">163</span><span id="line-163"> public void testLoadSystemCoprocessorWithPathDoesNotExist() throws Exception {</span>
+<span class="source-line-no">164</span><span id="line-164"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">165</span><span id="line-165"> final String key = "KEY";</span>
+<span class="source-line-no">166</span><span id="line-166"> final String testClassName = "TestSystemCoprocessor";</span>
+<span class="source-line-no">167</span><span id="line-167"></span>
+<span class="source-line-no">168</span><span id="line-168"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">169</span><span id="line-169"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">170</span><span id="line-170"></span>
+<span class="source-line-no">171</span><span id="line-171"> // make a string of coprocessor with path but no priority</span>
+<span class="source-line-no">172</span><span id="line-172"> final String coprocessorWithPath = testClassName + "||" + testClassName + ".jar";</span>
+<span class="source-line-no">173</span><span id="line-173"></span>
+<span class="source-line-no">174</span><span id="line-174"> // Try and load a system coprocessors</span>
+<span class="source-line-no">175</span><span id="line-175"> conf.setStrings(key, coprocessorWithPath);</span>
+<span class="source-line-no">176</span><span id="line-176"> // when loading non-exist with CoprocessorHostForTest host, it aborts with AssertionError</span>
+<span class="source-line-no">177</span><span id="line-177"> assertThrows(AssertionError.class, () -> host.loadSystemCoprocessors(conf, key));</span>
+<span class="source-line-no">178</span><span id="line-178"> }</span>
+<span class="source-line-no">179</span><span id="line-179"></span>
+<span class="source-line-no">180</span><span id="line-180"> @Test</span>
+<span class="source-line-no">181</span><span id="line-181"> public void testLoadSystemCoprocessorWithPathDoesNotExistAndPriority() throws Exception {</span>
+<span class="source-line-no">182</span><span id="line-182"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">183</span><span id="line-183"> final String key = "KEY";</span>
+<span class="source-line-no">184</span><span id="line-184"> final String testClassName = "TestSystemCoprocessor";</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">187</span><span id="line-187"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">188</span><span id="line-188"></span>
+<span class="source-line-no">189</span><span id="line-189"> int overridePriority = Integer.MAX_VALUE - 1;</span>
+<span class="source-line-no">190</span><span id="line-190"> // make a string of coprocessor with path and priority</span>
+<span class="source-line-no">191</span><span id="line-191"> final String coprocessor =</span>
+<span class="source-line-no">192</span><span id="line-192"> testClassName + "|" + overridePriority + "|" + testClassName + ".jar";</span>
<span class="source-line-no">193</span><span id="line-193"></span>
-<span class="source-line-no">194</span><span id="line-194"> int overridePriority = Integer.MAX_VALUE - 1;</span>
-<span class="source-line-no">195</span><span id="line-195"> // make a string of coprocessor with path and priority</span>
-<span class="source-line-no">196</span><span id="line-196"> final String coprocessor =</span>
-<span class="source-line-no">197</span><span id="line-197"> testClassName + "|" + overridePriority + "|" + testClassName + ".jar";</span>
-<span class="source-line-no">198</span><span id="line-198"></span>
-<span class="source-line-no">199</span><span id="line-199"> // Try and load a system coprocessors</span>
-<span class="source-line-no">200</span><span id="line-200"> conf.setStrings(key, coprocessor);</span>
-<span class="source-line-no">201</span><span id="line-201"> // when loading non-exist coprocessor, it aborts with AssertionError</span>
-<span class="source-line-no">202</span><span id="line-202"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">203</span><span id="line-203"> }</span>
+<span class="source-line-no">194</span><span id="line-194"> // Try and load a system coprocessors</span>
+<span class="source-line-no">195</span><span id="line-195"> conf.setStrings(key, coprocessor);</span>
+<span class="source-line-no">196</span><span id="line-196"> // when loading non-exist coprocessor, it aborts with AssertionError</span>
+<span class="source-line-no">197</span><span id="line-197"> assertThrows(AssertionError.class, () -> host.loadSystemCoprocessors(conf, key));</span>
+<span class="source-line-no">198</span><span id="line-198"> }</span>
+<span class="source-line-no">199</span><span id="line-199"></span>
+<span class="source-line-no">200</span><span id="line-200"> public static class SimpleRegionObserverV2 extends SimpleRegionObserver {</span>
+<span class="source-line-no">201</span><span id="line-201"> }</span>
+<span class="source-line-no">202</span><span id="line-202"></span>
+<span class="source-line-no">203</span><span id="line-203"> public static class SimpleRegionObserverV3 extends SimpleRegionObserver {</span>
<span class="source-line-no">204</span><span id="line-204"></span>
-<span class="source-line-no">205</span><span id="line-205"> public static class SimpleRegionObserverV2 extends SimpleRegionObserver {</span>
-<span class="source-line-no">206</span><span id="line-206"> }</span>
-<span class="source-line-no">207</span><span id="line-207"></span>
-<span class="source-line-no">208</span><span id="line-208"> public static class SimpleRegionObserverV3 extends SimpleRegionObserver {</span>
-<span class="source-line-no">209</span><span id="line-209"></span>
-<span class="source-line-no">210</span><span id="line-210"> }</span>
-<span class="source-line-no">211</span><span id="line-211"></span>
-<span class="source-line-no">212</span><span id="line-212"> private static class CoprocessorHostForTest<E extends Coprocessor></span>
-<span class="source-line-no">213</span><span id="line-213"> extends CoprocessorHost<E, CoprocessorEnvironment<E>> {</span>
-<span class="source-line-no">214</span><span id="line-214"> final Configuration cpHostConf;</span>
+<span class="source-line-no">205</span><span id="line-205"> }</span>
+<span class="source-line-no">206</span><span id="line-206"></span>
+<span class="source-line-no">207</span><span id="line-207"> private static class CoprocessorHostForTest<E extends Coprocessor></span>
+<span class="source-line-no">208</span><span id="line-208"> extends CoprocessorHost<E, CoprocessorEnvironment<E>> {</span>
+<span class="source-line-no">209</span><span id="line-209"> final Configuration cpHostConf;</span>
+<span class="source-line-no">210</span><span id="line-210"></span>
+<span class="source-line-no">211</span><span id="line-211"> public CoprocessorHostForTest(Configuration conf) {</span>
+<span class="source-line-no">212</span><span id="line-212"> super(new TestAbortable());</span>
+<span class="source-line-no">213</span><span id="line-213"> cpHostConf = conf;</span>
+<span class="source-line-no">214</span><span id="line-214"> }</span>
<span class="source-line-no">215</span><span id="line-215"></span>
-<span class="source-line-no">216</span><span id="line-216"> public CoprocessorHostForTest(Configuration conf) {</span>
-<span class="source-line-no">217</span><span id="line-217"> super(new TestAbortable());</span>
-<span class="source-line-no">218</span><span id="line-218"> cpHostConf = conf;</span>
-<span class="source-line-no">219</span><span id="line-219"> }</span>
-<span class="source-line-no">220</span><span id="line-220"></span>
-<span class="source-line-no">221</span><span id="line-221"> @Override</span>
-<span class="source-line-no">222</span><span id="line-222"> public E checkAndGetInstance(Class<?> implClass)</span>
-<span class="source-line-no">223</span><span id="line-223"> throws InstantiationException, IllegalAccessException {</span>
-<span class="source-line-no">224</span><span id="line-224"> try {</span>
-<span class="source-line-no">225</span><span id="line-225"> return (E) implClass.getDeclaredConstructor().newInstance();</span>
-<span class="source-line-no">226</span><span id="line-226"> } catch (InvocationTargetException | NoSuchMethodException e) {</span>
-<span class="source-line-no">227</span><span id="line-227"> throw (InstantiationException) new InstantiationException().initCause(e);</span>
-<span class="source-line-no">228</span><span id="line-228"> }</span>
-<span class="source-line-no">229</span><span id="line-229"> }</span>
-<span class="source-line-no">230</span><span id="line-230"></span>
-<span class="source-line-no">231</span><span id="line-231"> @Override</span>
-<span class="source-line-no">232</span><span id="line-232"> public CoprocessorEnvironment<E> createEnvironment(final E instance, final int priority,</span>
-<span class="source-line-no">233</span><span id="line-233"> int sequence, Configuration conf) {</span>
-<span class="source-line-no">234</span><span id="line-234"> return new BaseEnvironment<>(instance, priority, 0, cpHostConf);</span>
-<span class="source-line-no">235</span><span id="line-235"> }</span>
-<span class="source-line-no">236</span><span id="line-236"> }</span>
-<span class="source-line-no">237</span><span id="line-237"></span>
-<span class="source-line-no">238</span><span id="line-238"> private File buildCoprocessorJar(String className) throws Exception {</span>
-<span class="source-line-no">239</span><span id="line-239"> String dataTestDir = TEST_UTIL.getDataTestDir().toString();</span>
-<span class="source-line-no">240</span><span id="line-240"> String code = String.format("import org.apache.hadoop.hbase.coprocessor.*; public class %s"</span>
-<span class="source-line-no">241</span><span id="line-241"> + " implements RegionCoprocessor {}", className);</span>
-<span class="source-line-no">242</span><span id="line-242"> return ClassLoaderTestHelper.buildJar(dataTestDir, className, code);</span>
-<span class="source-line-no">243</span><span id="line-243"> }</span>
-<span class="source-line-no">244</span><span id="line-244">}</span>
+<span class="source-line-no">216</span><span id="line-216"> @Override</span>
+<span class="source-line-no">217</span><span id="line-217"> public E checkAndGetInstance(Class<?> implClass)</span>
+<span class="source-line-no">218</span><span id="line-218"> throws InstantiationException, IllegalAccessException {</span>
+<span class="source-line-no">219</span><span id="line-219"> try {</span>
+<span class="source-line-no">220</span><span id="line-220"> return (E) implClass.getDeclaredConstructor().newInstance();</span>
+<span class="source-line-no">221</span><span id="line-221"> } catch (InvocationTargetException | NoSuchMethodException e) {</span>
+<span class="source-line-no">222</span><span id="line-222"> throw (InstantiationException) new InstantiationException().initCause(e);</span>
+<span class="source-line-no">223</span><span id="line-223"> }</span>
+<span class="source-line-no">224</span><span id="line-224"> }</span>
+<span class="source-line-no">225</span><span id="line-225"></span>
+<span class="source-line-no">226</span><span id="line-226"> @Override</span>
+<span class="source-line-no">227</span><span id="line-227"> public CoprocessorEnvironment<E> createEnvironment(final E instance, final int priority,</span>
+<span class="source-line-no">228</span><span id="line-228"> int sequence, Configuration conf) {</span>
+<span class="source-line-no">229</span><span id="line-229"> return new BaseEnvironment<>(instance, priority, 0, cpHostConf);</span>
+<span class="source-line-no">230</span><span id="line-230"> }</span>
+<span class="source-line-no">231</span><span id="line-231"> }</span>
+<span class="source-line-no">232</span><span id="line-232"></span>
+<span class="source-line-no">233</span><span id="line-233"> private File buildCoprocessorJar(String className) throws Exception {</span>
+<span class="source-line-no">234</span><span id="line-234"> String dataTestDir = TEST_UTIL.getDataTestDir().toString();</span>
+<span class="source-line-no">235</span><span id="line-235"> String code = String.format("import org.apache.hadoop.hbase.coprocessor.*; public class %s"</span>
+<span class="source-line-no">236</span><span id="line-236"> + " implements RegionCoprocessor {}", className);</span>
+<span class="source-line-no">237</span><span id="line-237"> return ClassLoaderTestHelper.buildJar(dataTestDir, className, code);</span>
+<span class="source-line-no">238</span><span id="line-238"> }</span>
+<span class="source-line-no">239</span><span id="line-239">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.html
index d2b02d4b5e7..37cb2423817 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.html
@@ -30,231 +30,226 @@
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase.coprocessor;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
-<span class="source-line-no">020</span><span id="line-20">import static org.junit.Assert.assertEquals;</span>
-<span class="source-line-no">021</span><span id="line-21">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">022</span><span id="line-22"></span>
-<span class="source-line-no">023</span><span id="line-23">import java.io.File;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.lang.reflect.InvocationTargetException;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.Abortable;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.Coprocessor;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.HBaseCommonTestingUtil;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.util.ClassLoaderTestHelper;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.junit.Assert;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.junit.ClassRule;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.junit.Test;</span>
-<span class="source-line-no">037</span><span id="line-37">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">038</span><span id="line-38"></span>
-<span class="source-line-no">039</span><span id="line-39">@Category({ SmallTests.class })</span>
-<span class="source-line-no">040</span><span id="line-40">public class TestCoprocessorHost {</span>
-<span class="source-line-no">041</span><span id="line-41"></span>
-<span class="source-line-no">042</span><span id="line-42"> @ClassRule</span>
-<span class="source-line-no">043</span><span id="line-43"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">044</span><span id="line-44"> HBaseClassTestRule.forClass(TestCoprocessorHost.class);</span>
-<span class="source-line-no">045</span><span id="line-45"></span>
-<span class="source-line-no">046</span><span id="line-46"> private static final HBaseCommonTestingUtil TEST_UTIL = new HBaseCommonTestingUtil();</span>
-<span class="source-line-no">047</span><span id="line-47"></span>
-<span class="source-line-no">048</span><span id="line-48"> /**</span>
-<span class="source-line-no">049</span><span id="line-49"> * An {@link Abortable} implementation for tests.</span>
-<span class="source-line-no">050</span><span id="line-50"> */</span>
-<span class="source-line-no">051</span><span id="line-51"> private static class TestAbortable implements Abortable {</span>
-<span class="source-line-no">052</span><span id="line-52"> private volatile boolean aborted = false;</span>
-<span class="source-line-no">053</span><span id="line-53"></span>
-<span class="source-line-no">054</span><span id="line-54"> @Override</span>
-<span class="source-line-no">055</span><span id="line-55"> public void abort(String why, Throwable e) {</span>
-<span class="source-line-no">056</span><span id="line-56"> this.aborted = true;</span>
-<span class="source-line-no">057</span><span id="line-57"> Assert.fail(e.getMessage());</span>
+<span class="source-line-no">020</span><span id="line-20">import static org.junit.jupiter.api.Assertions.assertEquals;</span>
+<span class="source-line-no">021</span><span id="line-21">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">022</span><span id="line-22">import static org.junit.jupiter.api.Assertions.assertThrows;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.fail;</span>
+<span class="source-line-no">024</span><span id="line-24"></span>
+<span class="source-line-no">025</span><span id="line-25">import java.io.File;</span>
+<span class="source-line-no">026</span><span id="line-26">import java.lang.reflect.InvocationTargetException;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.Abortable;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.Coprocessor;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.HBaseCommonTestingUtil;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.HBaseConfiguration;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.testclassification.SmallTests;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.util.ClassLoaderTestHelper;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">036</span><span id="line-36">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">037</span><span id="line-37"></span>
+<span class="source-line-no">038</span><span id="line-38">@Tag(SmallTests.TAG)</span>
+<span class="source-line-no">039</span><span id="line-39">public class TestCoprocessorHost {</span>
+<span class="source-line-no">040</span><span id="line-40"></span>
+<span class="source-line-no">041</span><span id="line-41"> private static final HBaseCommonTestingUtil TEST_UTIL = new HBaseCommonTestingUtil();</span>
+<span class="source-line-no">042</span><span id="line-42"></span>
+<span class="source-line-no">043</span><span id="line-43"> /**</span>
+<span class="source-line-no">044</span><span id="line-44"> * An {@link Abortable} implementation for tests.</span>
+<span class="source-line-no">045</span><span id="line-45"> */</span>
+<span class="source-line-no">046</span><span id="line-46"> private static class TestAbortable implements Abortable {</span>
+<span class="source-line-no">047</span><span id="line-47"> private volatile boolean aborted = false;</span>
+<span class="source-line-no">048</span><span id="line-48"></span>
+<span class="source-line-no">049</span><span id="line-49"> @Override</span>
+<span class="source-line-no">050</span><span id="line-50"> public void abort(String why, Throwable e) {</span>
+<span class="source-line-no">051</span><span id="line-51"> this.aborted = true;</span>
+<span class="source-line-no">052</span><span id="line-52"> fail(e.getMessage());</span>
+<span class="source-line-no">053</span><span id="line-53"> }</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55"> @Override</span>
+<span class="source-line-no">056</span><span id="line-56"> public boolean isAborted() {</span>
+<span class="source-line-no">057</span><span id="line-57"> return this.aborted;</span>
<span class="source-line-no">058</span><span id="line-58"> }</span>
-<span class="source-line-no">059</span><span id="line-59"></span>
-<span class="source-line-no">060</span><span id="line-60"> @Override</span>
-<span class="source-line-no">061</span><span id="line-61"> public boolean isAborted() {</span>
-<span class="source-line-no">062</span><span id="line-62"> return this.aborted;</span>
-<span class="source-line-no">063</span><span id="line-63"> }</span>
-<span class="source-line-no">064</span><span id="line-64"> }</span>
-<span class="source-line-no">065</span><span id="line-65"></span>
-<span class="source-line-no">066</span><span id="line-66"> @Test</span>
-<span class="source-line-no">067</span><span id="line-67"> public void testDoubleLoadingAndPriorityValue() {</span>
-<span class="source-line-no">068</span><span id="line-68"> final Configuration conf = HBaseConfiguration.create();</span>
-<span class="source-line-no">069</span><span id="line-69"> final String key = "KEY";</span>
-<span class="source-line-no">070</span><span id="line-70"> final String coprocessor = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver";</span>
-<span class="source-line-no">071</span><span id="line-71"></span>
-<span class="source-line-no">072</span><span id="line-72"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">073</span><span id="line-73"> host = new CoprocessorHostForTest<>(conf);</span>
-<span class="source-line-no">074</span><span id="line-74"> int overridePriority = Integer.MAX_VALUE - 1;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76"> final String coprocessor_v3 = SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
+<span class="source-line-no">059</span><span id="line-59"> }</span>
+<span class="source-line-no">060</span><span id="line-60"></span>
+<span class="source-line-no">061</span><span id="line-61"> @Test</span>
+<span class="source-line-no">062</span><span id="line-62"> public void testDoubleLoadingAndPriorityValue() {</span>
+<span class="source-line-no">063</span><span id="line-63"> final Configuration conf = HBaseConfiguration.create();</span>
+<span class="source-line-no">064</span><span id="line-64"> final String key = "KEY";</span>
+<span class="source-line-no">065</span><span id="line-65"> final String coprocessor = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver";</span>
+<span class="source-line-no">066</span><span id="line-66"></span>
+<span class="source-line-no">067</span><span id="line-67"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">068</span><span id="line-68"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">069</span><span id="line-69"> int overridePriority = Integer.MAX_VALUE - 1;</span>
+<span class="source-line-no">070</span><span id="line-70"></span>
+<span class="source-line-no">071</span><span id="line-71"> final String coprocessor_v3 = SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
+<span class="source-line-no">072</span><span id="line-72"></span>
+<span class="source-line-no">073</span><span id="line-73"> // Try and load a coprocessor three times</span>
+<span class="source-line-no">074</span><span id="line-74"> conf.setStrings(key, coprocessor, coprocessor, coprocessor,</span>
+<span class="source-line-no">075</span><span id="line-75"> SimpleRegionObserverV2.class.getName(), coprocessor_v3);</span>
+<span class="source-line-no">076</span><span id="line-76"> host.loadSystemCoprocessors(conf, key);</span>
<span class="source-line-no">077</span><span id="line-77"></span>
-<span class="source-line-no">078</span><span id="line-78"> // Try and load a coprocessor three times</span>
-<span class="source-line-no">079</span><span id="line-79"> conf.setStrings(key, coprocessor, coprocessor, coprocessor,</span>
-<span class="source-line-no">080</span><span id="line-80"> SimpleRegionObserverV2.class.getName(), coprocessor_v3);</span>
-<span class="source-line-no">081</span><span id="line-81"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83"> // Three coprocessors(SimpleRegionObserver, SimpleRegionObserverV2,</span>
-<span class="source-line-no">084</span><span id="line-84"> // SimpleRegionObserverV3) loaded</span>
-<span class="source-line-no">085</span><span id="line-85"> Assert.assertEquals(3, host.coprocEnvironments.size());</span>
-<span class="source-line-no">086</span><span id="line-86"></span>
-<span class="source-line-no">087</span><span id="line-87"> // Check the priority value</span>
-<span class="source-line-no">088</span><span id="line-88"> CoprocessorEnvironment<?> simpleEnv =</span>
-<span class="source-line-no">089</span><span id="line-89"> host.findCoprocessorEnvironment(SimpleRegionObserver.class.getName());</span>
-<span class="source-line-no">090</span><span id="line-90"> CoprocessorEnvironment<?> simpleEnv_v2 =</span>
-<span class="source-line-no">091</span><span id="line-91"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
-<span class="source-line-no">092</span><span id="line-92"> CoprocessorEnvironment<?> simpleEnv_v3 =</span>
-<span class="source-line-no">093</span><span id="line-93"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
-<span class="source-line-no">094</span><span id="line-94"></span>
-<span class="source-line-no">095</span><span id="line-95"> assertNotNull(simpleEnv);</span>
-<span class="source-line-no">096</span><span id="line-96"> assertNotNull(simpleEnv_v2);</span>
-<span class="source-line-no">097</span><span id="line-97"> assertNotNull(simpleEnv_v3);</span>
-<span class="source-line-no">098</span><span id="line-98"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
-<span class="source-line-no">099</span><span id="line-99"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, simpleEnv_v2.getPriority());</span>
-<span class="source-line-no">100</span><span id="line-100"> assertEquals(overridePriority, simpleEnv_v3.getPriority());</span>
-<span class="source-line-no">101</span><span id="line-101"> }</span>
-<span class="source-line-no">102</span><span id="line-102"></span>
-<span class="source-line-no">103</span><span id="line-103"> @Test</span>
-<span class="source-line-no">104</span><span id="line-104"> public void testLoadSystemCoprocessorWithPath() throws Exception {</span>
-<span class="source-line-no">105</span><span id="line-105"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">106</span><span id="line-106"> final String key = "KEY";</span>
-<span class="source-line-no">107</span><span id="line-107"> final String testClassName = "TestSystemCoprocessor";</span>
-<span class="source-line-no">108</span><span id="line-108"> final String testClassNameWithPriorityAndPath = testClassName + "PriorityAndPath";</span>
-<span class="source-line-no">109</span><span id="line-109"></span>
-<span class="source-line-no">110</span><span id="line-110"> File jarFile = buildCoprocessorJar(testClassName);</span>
-<span class="source-line-no">111</span><span id="line-111"> File jarFileWithPriorityAndPath = buildCoprocessorJar(testClassNameWithPriorityAndPath);</span>
-<span class="source-line-no">112</span><span id="line-112"></span>
-<span class="source-line-no">113</span><span id="line-113"> try {</span>
-<span class="source-line-no">114</span><span id="line-114"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">115</span><span id="line-115"> host = new CoprocessorHostForTest<>(conf);</span>
-<span class="source-line-no">116</span><span id="line-116"></span>
-<span class="source-line-no">117</span><span id="line-117"> // make a string of coprocessor with only priority</span>
-<span class="source-line-no">118</span><span id="line-118"> int overridePriority = Integer.MAX_VALUE - 1;</span>
-<span class="source-line-no">119</span><span id="line-119"> final String coprocessorWithPriority =</span>
-<span class="source-line-no">120</span><span id="line-120"> SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
-<span class="source-line-no">121</span><span id="line-121"> // make a string of coprocessor with path but no priority</span>
-<span class="source-line-no">122</span><span id="line-122"> final String coprocessorWithPath =</span>
-<span class="source-line-no">123</span><span id="line-123"> String.format("%s|%s|%s", testClassName, "", jarFile.getAbsolutePath());</span>
-<span class="source-line-no">124</span><span id="line-124"> // make a string of coprocessor with priority and path</span>
-<span class="source-line-no">125</span><span id="line-125"> final String coprocessorWithPriorityAndPath =</span>
-<span class="source-line-no">126</span><span id="line-126"> String.format("%s|%s|%s", testClassNameWithPriorityAndPath, (overridePriority - 1),</span>
-<span class="source-line-no">127</span><span id="line-127"> jarFileWithPriorityAndPath.getAbsolutePath());</span>
+<span class="source-line-no">078</span><span id="line-78"> // Three coprocessors(SimpleRegionObserver, SimpleRegionObserverV2,</span>
+<span class="source-line-no">079</span><span id="line-79"> // SimpleRegionObserverV3) loaded</span>
+<span class="source-line-no">080</span><span id="line-80"> assertEquals(3, host.coprocEnvironments.size());</span>
+<span class="source-line-no">081</span><span id="line-81"></span>
+<span class="source-line-no">082</span><span id="line-82"> // Check the priority value</span>
+<span class="source-line-no">083</span><span id="line-83"> CoprocessorEnvironment<?> simpleEnv =</span>
+<span class="source-line-no">084</span><span id="line-84"> host.findCoprocessorEnvironment(SimpleRegionObserver.class.getName());</span>
+<span class="source-line-no">085</span><span id="line-85"> CoprocessorEnvironment<?> simpleEnv_v2 =</span>
+<span class="source-line-no">086</span><span id="line-86"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
+<span class="source-line-no">087</span><span id="line-87"> CoprocessorEnvironment<?> simpleEnv_v3 =</span>
+<span class="source-line-no">088</span><span id="line-88"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
+<span class="source-line-no">089</span><span id="line-89"></span>
+<span class="source-line-no">090</span><span id="line-90"> assertNotNull(simpleEnv);</span>
+<span class="source-line-no">091</span><span id="line-91"> assertNotNull(simpleEnv_v2);</span>
+<span class="source-line-no">092</span><span id="line-92"> assertNotNull(simpleEnv_v3);</span>
+<span class="source-line-no">093</span><span id="line-93"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
+<span class="source-line-no">094</span><span id="line-94"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, simpleEnv_v2.getPriority());</span>
+<span class="source-line-no">095</span><span id="line-95"> assertEquals(overridePriority, simpleEnv_v3.getPriority());</span>
+<span class="source-line-no">096</span><span id="line-96"> }</span>
+<span class="source-line-no">097</span><span id="line-97"></span>
+<span class="source-line-no">098</span><span id="line-98"> @Test</span>
+<span class="source-line-no">099</span><span id="line-99"> public void testLoadSystemCoprocessorWithPath() throws Exception {</span>
+<span class="source-line-no">100</span><span id="line-100"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">101</span><span id="line-101"> final String key = "KEY";</span>
+<span class="source-line-no">102</span><span id="line-102"> final String testClassName = "TestSystemCoprocessor";</span>
+<span class="source-line-no">103</span><span id="line-103"> final String testClassNameWithPriorityAndPath = testClassName + "PriorityAndPath";</span>
+<span class="source-line-no">104</span><span id="line-104"></span>
+<span class="source-line-no">105</span><span id="line-105"> File jarFile = buildCoprocessorJar(testClassName);</span>
+<span class="source-line-no">106</span><span id="line-106"> File jarFileWithPriorityAndPath = buildCoprocessorJar(testClassNameWithPriorityAndPath);</span>
+<span class="source-line-no">107</span><span id="line-107"></span>
+<span class="source-line-no">108</span><span id="line-108"> try {</span>
+<span class="source-line-no">109</span><span id="line-109"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">110</span><span id="line-110"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">111</span><span id="line-111"></span>
+<span class="source-line-no">112</span><span id="line-112"> // make a string of coprocessor with only priority</span>
+<span class="source-line-no">113</span><span id="line-113"> int overridePriority = Integer.MAX_VALUE - 1;</span>
+<span class="source-line-no">114</span><span id="line-114"> final String coprocessorWithPriority =</span>
+<span class="source-line-no">115</span><span id="line-115"> SimpleRegionObserverV3.class.getName() + "|" + overridePriority;</span>
+<span class="source-line-no">116</span><span id="line-116"> // make a string of coprocessor with path but no priority</span>
+<span class="source-line-no">117</span><span id="line-117"> final String coprocessorWithPath =</span>
+<span class="source-line-no">118</span><span id="line-118"> String.format("%s|%s|%s", testClassName, "", jarFile.getAbsolutePath());</span>
+<span class="source-line-no">119</span><span id="line-119"> // make a string of coprocessor with priority and path</span>
+<span class="source-line-no">120</span><span id="line-120"> final String coprocessorWithPriorityAndPath =</span>
+<span class="source-line-no">121</span><span id="line-121"> String.format("%s|%s|%s", testClassNameWithPriorityAndPath, (overridePriority - 1),</span>
+<span class="source-line-no">122</span><span id="line-122"> jarFileWithPriorityAndPath.getAbsolutePath());</span>
+<span class="source-line-no">123</span><span id="line-123"></span>
+<span class="source-line-no">124</span><span id="line-124"> // Try and load a system coprocessors</span>
+<span class="source-line-no">125</span><span id="line-125"> conf.setStrings(key, SimpleRegionObserverV2.class.getName(), coprocessorWithPriority,</span>
+<span class="source-line-no">126</span><span id="line-126"> coprocessorWithPath, coprocessorWithPriorityAndPath);</span>
+<span class="source-line-no">127</span><span id="line-127"> host.loadSystemCoprocessors(conf, key);</span>
<span class="source-line-no">128</span><span id="line-128"></span>
-<span class="source-line-no">129</span><span id="line-129"> // Try and load a system coprocessors</span>
-<span class="source-line-no">130</span><span id="line-130"> conf.setStrings(key, SimpleRegionObserverV2.class.getName(), coprocessorWithPriority,</span>
-<span class="source-line-no">131</span><span id="line-131"> coprocessorWithPath, coprocessorWithPriorityAndPath);</span>
-<span class="source-line-no">132</span><span id="line-132"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">133</span><span id="line-133"></span>
-<span class="source-line-no">134</span><span id="line-134"> // first loaded system coprocessor with default priority</span>
-<span class="source-line-no">135</span><span id="line-135"> CoprocessorEnvironment<?> simpleEnv =</span>
-<span class="source-line-no">136</span><span id="line-136"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
-<span class="source-line-no">137</span><span id="line-137"> assertNotNull(simpleEnv);</span>
-<span class="source-line-no">138</span><span id="line-138"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
-<span class="source-line-no">139</span><span id="line-139"></span>
-<span class="source-line-no">140</span><span id="line-140"> // external system coprocessor with default priority</span>
-<span class="source-line-no">141</span><span id="line-141"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPath =</span>
-<span class="source-line-no">142</span><span id="line-142"> host.findCoprocessorEnvironment(testClassName);</span>
-<span class="source-line-no">143</span><span id="line-143"> assertNotNull(coprocessorEnvironmentWithPath);</span>
-<span class="source-line-no">144</span><span id="line-144"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, coprocessorEnvironmentWithPath.getPriority());</span>
-<span class="source-line-no">145</span><span id="line-145"></span>
-<span class="source-line-no">146</span><span id="line-146"> // system coprocessor with configured priority</span>
-<span class="source-line-no">147</span><span id="line-147"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriority =</span>
-<span class="source-line-no">148</span><span id="line-148"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
-<span class="source-line-no">149</span><span id="line-149"> assertNotNull(coprocessorEnvironmentWithPriority);</span>
-<span class="source-line-no">150</span><span id="line-150"> assertEquals(overridePriority, coprocessorEnvironmentWithPriority.getPriority());</span>
-<span class="source-line-no">151</span><span id="line-151"></span>
-<span class="source-line-no">152</span><span id="line-152"> // external system coprocessor with override priority</span>
-<span class="source-line-no">153</span><span id="line-153"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriorityAndPath =</span>
-<span class="source-line-no">154</span><span id="line-154"> host.findCoprocessorEnvironment(testClassNameWithPriorityAndPath);</span>
-<span class="source-line-no">155</span><span id="line-155"> assertNotNull(coprocessorEnvironmentWithPriorityAndPath);</span>
-<span class="source-line-no">156</span><span id="line-156"> assertEquals(overridePriority - 1, coprocessorEnvironmentWithPriorityAndPath.getPriority());</span>
-<span class="source-line-no">157</span><span id="line-157"> } finally {</span>
-<span class="source-line-no">158</span><span id="line-158"> if (jarFile.exists()) {</span>
-<span class="source-line-no">159</span><span id="line-159"> jarFile.delete();</span>
-<span class="source-line-no">160</span><span id="line-160"> }</span>
-<span class="source-line-no">161</span><span id="line-161"> if (jarFileWithPriorityAndPath.exists()) {</span>
-<span class="source-line-no">162</span><span id="line-162"> jarFileWithPriorityAndPath.delete();</span>
-<span class="source-line-no">163</span><span id="line-163"> }</span>
-<span class="source-line-no">164</span><span id="line-164"> }</span>
-<span class="source-line-no">165</span><span id="line-165"> }</span>
-<span class="source-line-no">166</span><span id="line-166"></span>
-<span class="source-line-no">167</span><span id="line-167"> @Test(expected = AssertionError.class)</span>
-<span class="source-line-no">168</span><span id="line-168"> public void testLoadSystemCoprocessorWithPathDoesNotExist() throws Exception {</span>
-<span class="source-line-no">169</span><span id="line-169"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">170</span><span id="line-170"> final String key = "KEY";</span>
-<span class="source-line-no">171</span><span id="line-171"> final String testClassName = "TestSystemCoprocessor";</span>
-<span class="source-line-no">172</span><span id="line-172"></span>
-<span class="source-line-no">173</span><span id="line-173"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">174</span><span id="line-174"> host = new CoprocessorHostForTest<>(conf);</span>
-<span class="source-line-no">175</span><span id="line-175"></span>
-<span class="source-line-no">176</span><span id="line-176"> // make a string of coprocessor with path but no priority</span>
-<span class="source-line-no">177</span><span id="line-177"> final String coprocessorWithPath = testClassName + "||" + testClassName + ".jar";</span>
-<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179"> // Try and load a system coprocessors</span>
-<span class="source-line-no">180</span><span id="line-180"> conf.setStrings(key, coprocessorWithPath);</span>
-<span class="source-line-no">181</span><span id="line-181"> // when loading non-exist with CoprocessorHostForTest host, it aborts with AssertionError</span>
-<span class="source-line-no">182</span><span id="line-182"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">183</span><span id="line-183"> }</span>
-<span class="source-line-no">184</span><span id="line-184"></span>
-<span class="source-line-no">185</span><span id="line-185"> @Test(expected = AssertionError.class)</span>
-<span class="source-line-no">186</span><span id="line-186"> public void testLoadSystemCoprocessorWithPathDoesNotExistAndPriority() throws Exception {</span>
-<span class="source-line-no">187</span><span id="line-187"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">188</span><span id="line-188"> final String key = "KEY";</span>
-<span class="source-line-no">189</span><span id="line-189"> final String testClassName = "TestSystemCoprocessor";</span>
-<span class="source-line-no">190</span><span id="line-190"></span>
-<span class="source-line-no">191</span><span id="line-191"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
-<span class="source-line-no">192</span><span id="line-192"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">129</span><span id="line-129"> // first loaded system coprocessor with default priority</span>
+<span class="source-line-no">130</span><span id="line-130"> CoprocessorEnvironment<?> simpleEnv =</span>
+<span class="source-line-no">131</span><span id="line-131"> host.findCoprocessorEnvironment(SimpleRegionObserverV2.class.getName());</span>
+<span class="source-line-no">132</span><span id="line-132"> assertNotNull(simpleEnv);</span>
+<span class="source-line-no">133</span><span id="line-133"> assertEquals(Coprocessor.PRIORITY_SYSTEM, simpleEnv.getPriority());</span>
+<span class="source-line-no">134</span><span id="line-134"></span>
+<span class="source-line-no">135</span><span id="line-135"> // external system coprocessor with default priority</span>
+<span class="source-line-no">136</span><span id="line-136"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPath =</span>
+<span class="source-line-no">137</span><span id="line-137"> host.findCoprocessorEnvironment(testClassName);</span>
+<span class="source-line-no">138</span><span id="line-138"> assertNotNull(coprocessorEnvironmentWithPath);</span>
+<span class="source-line-no">139</span><span id="line-139"> assertEquals(Coprocessor.PRIORITY_SYSTEM + 1, coprocessorEnvironmentWithPath.getPriority());</span>
+<span class="source-line-no">140</span><span id="line-140"></span>
+<span class="source-line-no">141</span><span id="line-141"> // system coprocessor with configured priority</span>
+<span class="source-line-no">142</span><span id="line-142"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriority =</span>
+<span class="source-line-no">143</span><span id="line-143"> host.findCoprocessorEnvironment(SimpleRegionObserverV3.class.getName());</span>
+<span class="source-line-no">144</span><span id="line-144"> assertNotNull(coprocessorEnvironmentWithPriority);</span>
+<span class="source-line-no">145</span><span id="line-145"> assertEquals(overridePriority, coprocessorEnvironmentWithPriority.getPriority());</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147"> // external system coprocessor with override priority</span>
+<span class="source-line-no">148</span><span id="line-148"> CoprocessorEnvironment<?> coprocessorEnvironmentWithPriorityAndPath =</span>
+<span class="source-line-no">149</span><span id="line-149"> host.findCoprocessorEnvironment(testClassNameWithPriorityAndPath);</span>
+<span class="source-line-no">150</span><span id="line-150"> assertNotNull(coprocessorEnvironmentWithPriorityAndPath);</span>
+<span class="source-line-no">151</span><span id="line-151"> assertEquals(overridePriority - 1, coprocessorEnvironmentWithPriorityAndPath.getPriority());</span>
+<span class="source-line-no">152</span><span id="line-152"> } finally {</span>
+<span class="source-line-no">153</span><span id="line-153"> if (jarFile.exists()) {</span>
+<span class="source-line-no">154</span><span id="line-154"> jarFile.delete();</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> if (jarFileWithPriorityAndPath.exists()) {</span>
+<span class="source-line-no">157</span><span id="line-157"> jarFileWithPriorityAndPath.delete();</span>
+<span class="source-line-no">158</span><span id="line-158"> }</span>
+<span class="source-line-no">159</span><span id="line-159"> }</span>
+<span class="source-line-no">160</span><span id="line-160"> }</span>
+<span class="source-line-no">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162"> @Test</span>
+<span class="source-line-no">163</span><span id="line-163"> public void testLoadSystemCoprocessorWithPathDoesNotExist() throws Exception {</span>
+<span class="source-line-no">164</span><span id="line-164"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">165</span><span id="line-165"> final String key = "KEY";</span>
+<span class="source-line-no">166</span><span id="line-166"> final String testClassName = "TestSystemCoprocessor";</span>
+<span class="source-line-no">167</span><span id="line-167"></span>
+<span class="source-line-no">168</span><span id="line-168"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">169</span><span id="line-169"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">170</span><span id="line-170"></span>
+<span class="source-line-no">171</span><span id="line-171"> // make a string of coprocessor with path but no priority</span>
+<span class="source-line-no">172</span><span id="line-172"> final String coprocessorWithPath = testClassName + "||" + testClassName + ".jar";</span>
+<span class="source-line-no">173</span><span id="line-173"></span>
+<span class="source-line-no">174</span><span id="line-174"> // Try and load a system coprocessors</span>
+<span class="source-line-no">175</span><span id="line-175"> conf.setStrings(key, coprocessorWithPath);</span>
+<span class="source-line-no">176</span><span id="line-176"> // when loading non-exist with CoprocessorHostForTest host, it aborts with AssertionError</span>
+<span class="source-line-no">177</span><span id="line-177"> assertThrows(AssertionError.class, () -> host.loadSystemCoprocessors(conf, key));</span>
+<span class="source-line-no">178</span><span id="line-178"> }</span>
+<span class="source-line-no">179</span><span id="line-179"></span>
+<span class="source-line-no">180</span><span id="line-180"> @Test</span>
+<span class="source-line-no">181</span><span id="line-181"> public void testLoadSystemCoprocessorWithPathDoesNotExistAndPriority() throws Exception {</span>
+<span class="source-line-no">182</span><span id="line-182"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">183</span><span id="line-183"> final String key = "KEY";</span>
+<span class="source-line-no">184</span><span id="line-184"> final String testClassName = "TestSystemCoprocessor";</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186"> CoprocessorHost<RegionCoprocessor, CoprocessorEnvironment<RegionCoprocessor>> host;</span>
+<span class="source-line-no">187</span><span id="line-187"> host = new CoprocessorHostForTest<>(conf);</span>
+<span class="source-line-no">188</span><span id="line-188"></span>
+<span class="source-line-no">189</span><span id="line-189"> int overridePriority = Integer.MAX_VALUE - 1;</span>
+<span class="source-line-no">190</span><span id="line-190"> // make a string of coprocessor with path and priority</span>
+<span class="source-line-no">191</span><span id="line-191"> final String coprocessor =</span>
+<span class="source-line-no">192</span><span id="line-192"> testClassName + "|" + overridePriority + "|" + testClassName + ".jar";</span>
<span class="source-line-no">193</span><span id="line-193"></span>
-<span class="source-line-no">194</span><span id="line-194"> int overridePriority = Integer.MAX_VALUE - 1;</span>
-<span class="source-line-no">195</span><span id="line-195"> // make a string of coprocessor with path and priority</span>
-<span class="source-line-no">196</span><span id="line-196"> final String coprocessor =</span>
-<span class="source-line-no">197</span><span id="line-197"> testClassName + "|" + overridePriority + "|" + testClassName + ".jar";</span>
-<span class="source-line-no">198</span><span id="line-198"></span>
-<span class="source-line-no">199</span><span id="line-199"> // Try and load a system coprocessors</span>
-<span class="source-line-no">200</span><span id="line-200"> conf.setStrings(key, coprocessor);</span>
-<span class="source-line-no">201</span><span id="line-201"> // when loading non-exist coprocessor, it aborts with AssertionError</span>
-<span class="source-line-no">202</span><span id="line-202"> host.loadSystemCoprocessors(conf, key);</span>
-<span class="source-line-no">203</span><span id="line-203"> }</span>
+<span class="source-line-no">194</span><span id="line-194"> // Try and load a system coprocessors</span>
+<span class="source-line-no">195</span><span id="line-195"> conf.setStrings(key, coprocessor);</span>
+<span class="source-line-no">196</span><span id="line-196"> // when loading non-exist coprocessor, it aborts with AssertionError</span>
+<span class="source-line-no">197</span><span id="line-197"> assertThrows(AssertionError.class, () -> host.loadSystemCoprocessors(conf, key));</span>
+<span class="source-line-no">198</span><span id="line-198"> }</span>
+<span class="source-line-no">199</span><span id="line-199"></span>
+<span class="source-line-no">200</span><span id="line-200"> public static class SimpleRegionObserverV2 extends SimpleRegionObserver {</span>
+<span class="source-line-no">201</span><span id="line-201"> }</span>
+<span class="source-line-no">202</span><span id="line-202"></span>
+<span class="source-line-no">203</span><span id="line-203"> public static class SimpleRegionObserverV3 extends SimpleRegionObserver {</span>
<span class="source-line-no">204</span><span id="line-204"></span>
-<span class="source-line-no">205</span><span id="line-205"> public static class SimpleRegionObserverV2 extends SimpleRegionObserver {</span>
-<span class="source-line-no">206</span><span id="line-206"> }</span>
-<span class="source-line-no">207</span><span id="line-207"></span>
-<span class="source-line-no">208</span><span id="line-208"> public static class SimpleRegionObserverV3 extends SimpleRegionObserver {</span>
-<span class="source-line-no">209</span><span id="line-209"></span>
-<span class="source-line-no">210</span><span id="line-210"> }</span>
-<span class="source-line-no">211</span><span id="line-211"></span>
-<span class="source-line-no">212</span><span id="line-212"> private static class CoprocessorHostForTest<E extends Coprocessor></span>
-<span class="source-line-no">213</span><span id="line-213"> extends CoprocessorHost<E, CoprocessorEnvironment<E>> {</span>
-<span class="source-line-no">214</span><span id="line-214"> final Configuration cpHostConf;</span>
+<span class="source-line-no">205</span><span id="line-205"> }</span>
+<span class="source-line-no">206</span><span id="line-206"></span>
+<span class="source-line-no">207</span><span id="line-207"> private static class CoprocessorHostForTest<E extends Coprocessor></span>
+<span class="source-line-no">208</span><span id="line-208"> extends CoprocessorHost<E, CoprocessorEnvironment<E>> {</span>
+<span class="source-line-no">209</span><span id="line-209"> final Configuration cpHostConf;</span>
+<span class="source-line-no">210</span><span id="line-210"></span>
+<span class="source-line-no">211</span><span id="line-211"> public CoprocessorHostForTest(Configuration conf) {</span>
+<span class="source-line-no">212</span><span id="line-212"> super(new TestAbortable());</span>
+<span class="source-line-no">213</span><span id="line-213"> cpHostConf = conf;</span>
+<span class="source-line-no">214</span><span id="line-214"> }</span>
<span class="source-line-no">215</span><span id="line-215"></span>
-<span class="source-line-no">216</span><span id="line-216"> public CoprocessorHostForTest(Configuration conf) {</span>
-<span class="source-line-no">217</span><span id="line-217"> super(new TestAbortable());</span>
-<span class="source-line-no">218</span><span id="line-218"> cpHostConf = conf;</span>
-<span class="source-line-no">219</span><span id="line-219"> }</span>
-<span class="source-line-no">220</span><span id="line-220"></span>
-<span class="source-line-no">221</span><span id="line-221"> @Override</span>
-<span class="source-line-no">222</span><span id="line-222"> public E checkAndGetInstance(Class<?> implClass)</span>
-<span class="source-line-no">223</span><span id="line-223"> throws InstantiationException, IllegalAccessException {</span>
-<span class="source-line-no">224</span><span id="line-224"> try {</span>
-<span class="source-line-no">225</span><span id="line-225"> return (E) implClass.getDeclaredConstructor().newInstance();</span>
-<span class="source-line-no">226</span><span id="line-226"> } catch (InvocationTargetException | NoSuchMethodException e) {</span>
-<span class="source-line-no">227</span><span id="line-227"> throw (InstantiationException) new InstantiationException().initCause(e);</span>
-<span class="source-line-no">228</span><span id="line-228"> }</span>
-<span class="source-line-no">229</span><span id="line-229"> }</span>
-<span class="source-line-no">230</span><span id="line-230"></span>
-<span class="source-line-no">231</span><span id="line-231"> @Override</span>
-<span class="source-line-no">232</span><span id="line-232"> public CoprocessorEnvironment<E> createEnvironment(final E instance, final int priority,</span>
-<span class="source-line-no">233</span><span id="line-233"> int sequence, Configuration conf) {</span>
-<span class="source-line-no">234</span><span id="line-234"> return new BaseEnvironment<>(instance, priority, 0, cpHostConf);</span>
-<span class="source-line-no">235</span><span id="line-235"> }</span>
-<span class="source-line-no">236</span><span id="line-236"> }</span>
-<span class="source-line-no">237</span><span id="line-237"></span>
-<span class="source-line-no">238</span><span id="line-238"> private File buildCoprocessorJar(String className) throws Exception {</span>
-<span class="source-line-no">239</span><span id="line-239"> String dataTestDir = TEST_UTIL.getDataTestDir().toString();</span>
-<span class="source-line-no">240</span><span id="line-240"> String code = String.format("import org.apache.hadoop.hbase.coprocessor.*; public class %s"</span>
-<span class="source-line-no">241</span><span id="line-241"> + " implements RegionCoprocessor {}", className);</span>
-<span class="source-line-no">242</span><span id="line-242"> return ClassLoaderTestHelper.buildJar(dataTestDir, className, code);</span>
-<span class="source-line-no">243</span><span id="line-243"> }</span>
-<span class="source-line-no">244</span><span id="line-244">}</span>
+<span class="source-line-no">216</span><span id="line-216"> @Override</span>
+<span class="source-line-no">217</span><span id="line-217"> public E checkAndGetInstance(Class<?> implClass)</span>
+<span class="source-line-no">218</span><span id="line-218"> throws InstantiationException, IllegalAccessException {</span>
+<span class="source-line-no">219</span><span id="line-219"> try {</span>
+<span class="source-line-no">220</span><span id="line-220"> return (E) implClass.getDeclaredConstructor().newInstance();</span>
+<span class="source-line-no">221</span><span id="line-221"> } catch (InvocationTargetException | NoSuchMethodException e) {</span>
+<span class="source-line-no">222</span><span id="line-222"> throw (InstantiationException) new InstantiationException().initCause(e);</span>
+<span class="source-line-no">223</span><span id="line-223"> }</span>
+<span class="source-line-no">224</span><span id="line-224"> }</span>
+<span class="source-line-no">225</span><span id="line-225"></span>
+<span class="source-line-no">226</span><span id="line-226"> @Override</span>
+<span class="source-line-no">227</span><span id="line-227"> public CoprocessorEnvironment<E> createEnvironment(final E instance, final int priority,</span>
+<span class="source-line-no">228</span><span id="line-228"> int sequence, Configuration conf) {</span>
+<span class="source-line-no">229</span><span id="line-229"> return new BaseEnvironment<>(instance, priority, 0, cpHostConf);</span>
+<span class="source-line-no">230</span><span id="line-230"> }</span>
+<span class="source-line-no">231</span><span id="line-231"> }</span>
+<span class="source-line-no">232</span><span id="line-232"></span>
+<span class="source-line-no">233</span><span id="line-233"> private File buildCoprocessorJar(String className) throws Exception {</span>
+<span class="source-line-no">234</span><span id="line-234"> String dataTestDir = TEST_UTIL.getDataTestDir().toString();</span>
+<span class="source-line-no">235</span><span id="line-235"> String code = String.format("import org.apache.hadoop.hbase.coprocessor.*; public class %s"</span>
+<span class="source-line-no">236</span><span id="line-236"> + " implements RegionCoprocessor {}", className);</span>
+<span class="source-line-no">237</span><span id="line-237"> return ClassLoaderTestHelper.buildJar(dataTestDir, className, code);</span>
+<span class="source-line-no">238</span><span id="line-238"> }</span>
+<span class="source-line-no">239</span><span id="line-239">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorII.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorII.html
index 2b82acb12fb..6d3623bae5b 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorII.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorII.html
@@ -33,11 +33,11 @@
<span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.HBaseTestingUtil.fam1;</span>
<span class="source-line-no">021</span><span id="line-21">import static org.apache.hadoop.hbase.HBaseTestingUtil.fam2;</span>
<span class="source-line-no">022</span><span id="line-22">import static org.apache.hadoop.hbase.HBaseTestingUtil.fam3;</span>
-<span class="source-line-no">023</span><span id="line-23">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">024</span><span id="line-24">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">025</span><span id="line-25">import static org.junit.Assert.assertNull;</span>
-<span class="source-line-no">026</span><span id="line-26">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">027</span><span id="line-27">import static org.junit.Assert.fail;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">024</span><span id="line-24">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">025</span><span id="line-25">import static org.junit.jupiter.api.Assertions.assertNull;</span>
+<span class="source-line-no">026</span><span id="line-26">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">027</span><span id="line-27">import static org.junit.jupiter.api.Assertions.fail;</span>
<span class="source-line-no">028</span><span id="line-28"></span>
<span class="source-line-no">029</span><span id="line-29">import java.io.IOException;</span>
<span class="source-line-no">030</span><span id="line-30">import java.util.ArrayList;</span>
@@ -52,436 +52,435 @@
<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.Coprocessor;</span>
<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.ExtendedCell;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.HConstants;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.HTestConst;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.TableName;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.client.Get;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.client.RegionInfo;</span>
-<span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
-<span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.client.Scan;</span>
-<span class="source-line-no">052</span><span id="line-52">import org.apache.hadoop.hbase.client.TableDescriptorBuilder;</span>
-<span class="source-line-no">053</span><span id="line-53">import org.apache.hadoop.hbase.regionserver.ChunkCreator;</span>
-<span class="source-line-no">054</span><span id="line-54">import org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker;</span>
-<span class="source-line-no">055</span><span id="line-55">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
-<span class="source-line-no">056</span><span id="line-56">import org.apache.hadoop.hbase.regionserver.InternalScanner;</span>
-<span class="source-line-no">057</span><span id="line-57">import org.apache.hadoop.hbase.regionserver.MemStoreLAB;</span>
-<span class="source-line-no">058</span><span id="line-58">import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;</span>
-<span class="source-line-no">059</span><span id="line-59">import org.apache.hadoop.hbase.regionserver.RegionScanner;</span>
-<span class="source-line-no">060</span><span id="line-60">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
-<span class="source-line-no">061</span><span id="line-61">import org.apache.hadoop.hbase.regionserver.ScanType;</span>
-<span class="source-line-no">062</span><span id="line-62">import org.apache.hadoop.hbase.regionserver.ScannerContext;</span>
-<span class="source-line-no">063</span><span id="line-63">import org.apache.hadoop.hbase.regionserver.Store;</span>
-<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.hbase.regionserver.StoreFile;</span>
-<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;</span>
-<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;</span>
-<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
-<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">069</span><span id="line-69">import org.junit.ClassRule;</span>
-<span class="source-line-no">070</span><span id="line-70">import org.junit.Rule;</span>
-<span class="source-line-no">071</span><span id="line-71">import org.junit.Test;</span>
-<span class="source-line-no">072</span><span id="line-72">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">073</span><span id="line-73">import org.junit.rules.TestName;</span>
-<span class="source-line-no">074</span><span id="line-74">import org.mockito.Mockito;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76">@Category({ CoprocessorTests.class, MediumTests.class })</span>
-<span class="source-line-no">077</span><span id="line-77">public class TestCoprocessorInterface {</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79"> @ClassRule</span>
-<span class="source-line-no">080</span><span id="line-80"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">081</span><span id="line-81"> HBaseClassTestRule.forClass(TestCoprocessorInterface.class);</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83"> @Rule</span>
-<span class="source-line-no">084</span><span id="line-84"> public TestName name = new TestName();</span>
-<span class="source-line-no">085</span><span id="line-85"> private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();</span>
-<span class="source-line-no">086</span><span id="line-86"> static final Path DIR = TEST_UTIL.getDataTestDir();</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88"> private static class CustomScanner implements RegionScanner {</span>
-<span class="source-line-no">089</span><span id="line-89"></span>
-<span class="source-line-no">090</span><span id="line-90"> private RegionScanner delegate;</span>
-<span class="source-line-no">091</span><span id="line-91"></span>
-<span class="source-line-no">092</span><span id="line-92"> public CustomScanner(RegionScanner delegate) {</span>
-<span class="source-line-no">093</span><span id="line-93"> this.delegate = delegate;</span>
-<span class="source-line-no">094</span><span id="line-94"> }</span>
-<span class="source-line-no">095</span><span id="line-95"></span>
-<span class="source-line-no">096</span><span id="line-96"> @Override</span>
-<span class="source-line-no">097</span><span id="line-97"> public boolean next(List<? super ExtendedCell> results) throws IOException {</span>
-<span class="source-line-no">098</span><span id="line-98"> return delegate.next(results);</span>
-<span class="source-line-no">099</span><span id="line-99"> }</span>
-<span class="source-line-no">100</span><span id="line-100"></span>
-<span class="source-line-no">101</span><span id="line-101"> @Override</span>
-<span class="source-line-no">102</span><span id="line-102"> public boolean next(List<? super ExtendedCell> result, ScannerContext scannerContext)</span>
-<span class="source-line-no">103</span><span id="line-103"> throws IOException {</span>
-<span class="source-line-no">104</span><span id="line-104"> return delegate.next(result, scannerContext);</span>
-<span class="source-line-no">105</span><span id="line-105"> }</span>
-<span class="source-line-no">106</span><span id="line-106"></span>
-<span class="source-line-no">107</span><span id="line-107"> @Override</span>
-<span class="source-line-no">108</span><span id="line-108"> public boolean nextRaw(List<? super ExtendedCell> result) throws IOException {</span>
-<span class="source-line-no">109</span><span id="line-109"> return delegate.nextRaw(result);</span>
-<span class="source-line-no">110</span><span id="line-110"> }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112"> @Override</span>
-<span class="source-line-no">113</span><span id="line-113"> public boolean nextRaw(List<? super ExtendedCell> result, ScannerContext context)</span>
-<span class="source-line-no">114</span><span id="line-114"> throws IOException {</span>
-<span class="source-line-no">115</span><span id="line-115"> return delegate.nextRaw(result, context);</span>
-<span class="source-line-no">116</span><span id="line-116"> }</span>
-<span class="source-line-no">117</span><span id="line-117"></span>
-<span class="source-line-no">118</span><span id="line-118"> @Override</span>
-<span class="source-line-no">119</span><span id="line-119"> public Set<Path> getFilesRead() {</span>
-<span class="source-line-no">120</span><span id="line-120"> return delegate.getFilesRead();</span>
-<span class="source-line-no">121</span><span id="line-121"> }</span>
-<span class="source-line-no">122</span><span id="line-122"></span>
-<span class="source-line-no">123</span><span id="line-123"> @Override</span>
-<span class="source-line-no">124</span><span id="line-124"> public void close() throws IOException {</span>
-<span class="source-line-no">125</span><span id="line-125"> delegate.close();</span>
-<span class="source-line-no">126</span><span id="line-126"> }</span>
-<span class="source-line-no">127</span><span id="line-127"></span>
-<span class="source-line-no">128</span><span id="line-128"> @Override</span>
-<span class="source-line-no">129</span><span id="line-129"> public RegionInfo getRegionInfo() {</span>
-<span class="source-line-no">130</span><span id="line-130"> return delegate.getRegionInfo();</span>
-<span class="source-line-no">131</span><span id="line-131"> }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133"> @Override</span>
-<span class="source-line-no">134</span><span id="line-134"> public boolean isFilterDone() throws IOException {</span>
-<span class="source-line-no">135</span><span id="line-135"> return delegate.isFilterDone();</span>
-<span class="source-line-no">136</span><span id="line-136"> }</span>
-<span class="source-line-no">137</span><span id="line-137"></span>
-<span class="source-line-no">138</span><span id="line-138"> @Override</span>
-<span class="source-line-no">139</span><span id="line-139"> public boolean reseek(byte[] row) throws IOException {</span>
-<span class="source-line-no">140</span><span id="line-140"> return false;</span>
-<span class="source-line-no">141</span><span id="line-141"> }</span>
-<span class="source-line-no">142</span><span id="line-142"></span>
-<span class="source-line-no">143</span><span id="line-143"> @Override</span>
-<span class="source-line-no">144</span><span id="line-144"> public long getMaxResultSize() {</span>
-<span class="source-line-no">145</span><span id="line-145"> return delegate.getMaxResultSize();</span>
-<span class="source-line-no">146</span><span id="line-146"> }</span>
-<span class="source-line-no">147</span><span id="line-147"></span>
-<span class="source-line-no">148</span><span id="line-148"> @Override</span>
-<span class="source-line-no">149</span><span id="line-149"> public long getMvccReadPoint() {</span>
-<span class="source-line-no">150</span><span id="line-150"> return delegate.getMvccReadPoint();</span>
-<span class="source-line-no">151</span><span id="line-151"> }</span>
-<span class="source-line-no">152</span><span id="line-152"></span>
-<span class="source-line-no">153</span><span id="line-153"> @Override</span>
-<span class="source-line-no">154</span><span id="line-154"> public int getBatch() {</span>
-<span class="source-line-no">155</span><span id="line-155"> return delegate.getBatch();</span>
-<span class="source-line-no">156</span><span id="line-156"> }</span>
-<span class="source-line-no">157</span><span id="line-157"> }</span>
-<span class="source-line-no">158</span><span id="line-158"></span>
-<span class="source-line-no">159</span><span id="line-159"> public static class CoprocessorImpl implements RegionCoprocessor, RegionObserver {</span>
-<span class="source-line-no">160</span><span id="line-160"></span>
-<span class="source-line-no">161</span><span id="line-161"> private boolean startCalled;</span>
-<span class="source-line-no">162</span><span id="line-162"> private boolean stopCalled;</span>
-<span class="source-line-no">163</span><span id="line-163"> private boolean preOpenCalled;</span>
-<span class="source-line-no">164</span><span id="line-164"> private boolean postOpenCalled;</span>
-<span class="source-line-no">165</span><span id="line-165"> private boolean preCloseCalled;</span>
-<span class="source-line-no">166</span><span id="line-166"> private boolean postCloseCalled;</span>
-<span class="source-line-no">167</span><span id="line-167"> private boolean preCompactCalled;</span>
-<span class="source-line-no">168</span><span id="line-168"> private boolean postCompactCalled;</span>
-<span class="source-line-no">169</span><span id="line-169"> private boolean preFlushCalled;</span>
-<span class="source-line-no">170</span><span id="line-170"> private boolean postFlushCalled;</span>
-<span class="source-line-no">171</span><span id="line-171"> private ConcurrentMap<String, Object> sharedData;</span>
-<span class="source-line-no">172</span><span id="line-172"></span>
-<span class="source-line-no">173</span><span id="line-173"> @Override</span>
-<span class="source-line-no">174</span><span id="line-174"> public void start(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">175</span><span id="line-175"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
-<span class="source-line-no">176</span><span id="line-176"> // using new String here, so that there will be new object on each invocation</span>
-<span class="source-line-no">177</span><span id="line-177"> sharedData.putIfAbsent("test1", new Object());</span>
-<span class="source-line-no">178</span><span id="line-178"> startCalled = true;</span>
-<span class="source-line-no">179</span><span id="line-179"> }</span>
-<span class="source-line-no">180</span><span id="line-180"></span>
-<span class="source-line-no">181</span><span id="line-181"> @Override</span>
-<span class="source-line-no">182</span><span id="line-182"> public void stop(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">183</span><span id="line-183"> sharedData = null;</span>
-<span class="source-line-no">184</span><span id="line-184"> stopCalled = true;</span>
-<span class="source-line-no">185</span><span id="line-185"> }</span>
-<span class="source-line-no">186</span><span id="line-186"></span>
-<span class="source-line-no">187</span><span id="line-187"> @Override</span>
-<span class="source-line-no">188</span><span id="line-188"> public Optional<RegionObserver> getRegionObserver() {</span>
-<span class="source-line-no">189</span><span id="line-189"> return Optional.of(this);</span>
-<span class="source-line-no">190</span><span id="line-190"> }</span>
-<span class="source-line-no">191</span><span id="line-191"></span>
-<span class="source-line-no">192</span><span id="line-192"> @Override</span>
-<span class="source-line-no">193</span><span id="line-193"> public void preOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
-<span class="source-line-no">194</span><span id="line-194"> preOpenCalled = true;</span>
-<span class="source-line-no">195</span><span id="line-195"> }</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197"> @Override</span>
-<span class="source-line-no">198</span><span id="line-198"> public void postOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
-<span class="source-line-no">199</span><span id="line-199"> postOpenCalled = true;</span>
-<span class="source-line-no">200</span><span id="line-200"> }</span>
-<span class="source-line-no">201</span><span id="line-201"></span>
-<span class="source-line-no">202</span><span id="line-202"> @Override</span>
-<span class="source-line-no">203</span><span id="line-203"> public void preClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">204</span><span id="line-204"> boolean abortRequested) {</span>
-<span class="source-line-no">205</span><span id="line-205"> preCloseCalled = true;</span>
-<span class="source-line-no">206</span><span id="line-206"> }</span>
-<span class="source-line-no">207</span><span id="line-207"></span>
-<span class="source-line-no">208</span><span id="line-208"> @Override</span>
-<span class="source-line-no">209</span><span id="line-209"> public void postClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">210</span><span id="line-210"> boolean abortRequested) {</span>
-<span class="source-line-no">211</span><span id="line-211"> postCloseCalled = true;</span>
-<span class="source-line-no">212</span><span id="line-212"> }</span>
-<span class="source-line-no">213</span><span id="line-213"></span>
-<span class="source-line-no">214</span><span id="line-214"> @Override</span>
-<span class="source-line-no">215</span><span id="line-215"> public InternalScanner preCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">216</span><span id="line-216"> Store store, InternalScanner scanner, ScanType scanType, CompactionLifeCycleTracker tracker,</span>
-<span class="source-line-no">217</span><span id="line-217"> CompactionRequest request) {</span>
-<span class="source-line-no">218</span><span id="line-218"> preCompactCalled = true;</span>
-<span class="source-line-no">219</span><span id="line-219"> return scanner;</span>
-<span class="source-line-no">220</span><span id="line-220"> }</span>
-<span class="source-line-no">221</span><span id="line-221"></span>
-<span class="source-line-no">222</span><span id="line-222"> @Override</span>
-<span class="source-line-no">223</span><span id="line-223"> public void postCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e, Store store,</span>
-<span class="source-line-no">224</span><span id="line-224"> StoreFile resultFile, CompactionLifeCycleTracker tracker, CompactionRequest request) {</span>
-<span class="source-line-no">225</span><span id="line-225"> postCompactCalled = true;</span>
-<span class="source-line-no">226</span><span id="line-226"> }</span>
-<span class="source-line-no">227</span><span id="line-227"></span>
-<span class="source-line-no">228</span><span id="line-228"> @Override</span>
-<span class="source-line-no">229</span><span id="line-229"> public void preFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">230</span><span id="line-230"> FlushLifeCycleTracker tracker) {</span>
-<span class="source-line-no">231</span><span id="line-231"> preFlushCalled = true;</span>
-<span class="source-line-no">232</span><span id="line-232"> }</span>
-<span class="source-line-no">233</span><span id="line-233"></span>
-<span class="source-line-no">234</span><span id="line-234"> @Override</span>
-<span class="source-line-no">235</span><span id="line-235"> public void postFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">236</span><span id="line-236"> FlushLifeCycleTracker tracker) {</span>
-<span class="source-line-no">237</span><span id="line-237"> postFlushCalled = true;</span>
-<span class="source-line-no">238</span><span id="line-238"> }</span>
-<span class="source-line-no">239</span><span id="line-239"></span>
-<span class="source-line-no">240</span><span id="line-240"> @Override</span>
-<span class="source-line-no">241</span><span id="line-241"> public RegionScanner postScannerOpen(</span>
-<span class="source-line-no">242</span><span id="line-242"> final ObserverContext<? extends RegionCoprocessorEnvironment> e, final Scan scan,</span>
-<span class="source-line-no">243</span><span id="line-243"> final RegionScanner s) throws IOException {</span>
-<span class="source-line-no">244</span><span id="line-244"> return new CustomScanner(s);</span>
-<span class="source-line-no">245</span><span id="line-245"> }</span>
-<span class="source-line-no">246</span><span id="line-246"></span>
-<span class="source-line-no">247</span><span id="line-247"> boolean wasStarted() {</span>
-<span class="source-line-no">248</span><span id="line-248"> return startCalled;</span>
-<span class="source-line-no">249</span><span id="line-249"> }</span>
-<span class="source-line-no">250</span><span id="line-250"></span>
-<span class="source-line-no">251</span><span id="line-251"> boolean wasStopped() {</span>
-<span class="source-line-no">252</span><span id="line-252"> return stopCalled;</span>
-<span class="source-line-no">253</span><span id="line-253"> }</span>
-<span class="source-line-no">254</span><span id="line-254"></span>
-<span class="source-line-no">255</span><span id="line-255"> boolean wasOpened() {</span>
-<span class="source-line-no">256</span><span id="line-256"> return (preOpenCalled && postOpenCalled);</span>
-<span class="source-line-no">257</span><span id="line-257"> }</span>
-<span class="source-line-no">258</span><span id="line-258"></span>
-<span class="source-line-no">259</span><span id="line-259"> boolean wasClosed() {</span>
-<span class="source-line-no">260</span><span id="line-260"> return (preCloseCalled && postCloseCalled);</span>
-<span class="source-line-no">261</span><span id="line-261"> }</span>
-<span class="source-line-no">262</span><span id="line-262"></span>
-<span class="source-line-no">263</span><span id="line-263"> boolean wasFlushed() {</span>
-<span class="source-line-no">264</span><span id="line-264"> return (preFlushCalled && postFlushCalled);</span>
-<span class="source-line-no">265</span><span id="line-265"> }</span>
-<span class="source-line-no">266</span><span id="line-266"></span>
-<span class="source-line-no">267</span><span id="line-267"> boolean wasCompacted() {</span>
-<span class="source-line-no">268</span><span id="line-268"> return (preCompactCalled && postCompactCalled);</span>
-<span class="source-line-no">269</span><span id="line-269"> }</span>
-<span class="source-line-no">270</span><span id="line-270"></span>
-<span class="source-line-no">271</span><span id="line-271"> Map<String, Object> getSharedData() {</span>
-<span class="source-line-no">272</span><span id="line-272"> return sharedData;</span>
-<span class="source-line-no">273</span><span id="line-273"> }</span>
-<span class="source-line-no">274</span><span id="line-274"> }</span>
-<span class="source-line-no">275</span><span id="line-275"></span>
-<span class="source-line-no">276</span><span id="line-276"> public static class CoprocessorII implements RegionCoprocessor {</span>
-<span class="source-line-no">277</span><span id="line-277"> private ConcurrentMap<String, Object> sharedData;</span>
-<span class="source-line-no">278</span><span id="line-278"></span>
-<span class="source-line-no">279</span><span id="line-279"> @Override</span>
-<span class="source-line-no">280</span><span id="line-280"> public void start(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">281</span><span id="line-281"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
-<span class="source-line-no">282</span><span id="line-282"> sharedData.putIfAbsent("test2", new Object());</span>
-<span class="source-line-no">283</span><span id="line-283"> }</span>
-<span class="source-line-no">284</span><span id="line-284"></span>
-<span class="source-line-no">285</span><span id="line-285"> @Override</span>
-<span class="source-line-no">286</span><span id="line-286"> public void stop(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">287</span><span id="line-287"> sharedData = null;</span>
-<span class="source-line-no">288</span><span id="line-288"> }</span>
-<span class="source-line-no">289</span><span id="line-289"></span>
-<span class="source-line-no">290</span><span id="line-290"> @Override</span>
-<span class="source-line-no">291</span><span id="line-291"> public Optional<RegionObserver> getRegionObserver() {</span>
-<span class="source-line-no">292</span><span id="line-292"> return Optional.of(new RegionObserver() {</span>
-<span class="source-line-no">293</span><span id="line-293"> @Override</span>
-<span class="source-line-no">294</span><span id="line-294"> public void preGetOp(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">295</span><span id="line-295"> final Get get, final List<Cell> results) throws IOException {</span>
-<span class="source-line-no">296</span><span id="line-296"> throw new RuntimeException();</span>
-<span class="source-line-no">297</span><span id="line-297"> }</span>
-<span class="source-line-no">298</span><span id="line-298"> });</span>
-<span class="source-line-no">299</span><span id="line-299"> }</span>
-<span class="source-line-no">300</span><span id="line-300"></span>
-<span class="source-line-no">301</span><span id="line-301"> Map<String, Object> getSharedData() {</span>
-<span class="source-line-no">302</span><span id="line-302"> return sharedData;</span>
-<span class="source-line-no">303</span><span id="line-303"> }</span>
-<span class="source-line-no">304</span><span id="line-304"> }</span>
-<span class="source-line-no">305</span><span id="line-305"></span>
-<span class="source-line-no">306</span><span id="line-306"> @Test</span>
-<span class="source-line-no">307</span><span id="line-307"> public void testSharedData() throws IOException {</span>
-<span class="source-line-no">308</span><span id="line-308"> TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">309</span><span id="line-309"> byte[][] families = { fam1, fam2, fam3 };</span>
-<span class="source-line-no">310</span><span id="line-310"></span>
-<span class="source-line-no">311</span><span id="line-311"> Configuration hc = initConfig();</span>
-<span class="source-line-no">312</span><span id="line-312"> HRegion region = initHRegion(tableName, name.getMethodName(), hc, new Class<?>[] {}, families);</span>
-<span class="source-line-no">313</span><span id="line-313"></span>
-<span class="source-line-no">314</span><span id="line-314"> for (int i = 0; i < 3; i++) {</span>
-<span class="source-line-no">315</span><span id="line-315"> HTestConst.addContent(region, fam3);</span>
-<span class="source-line-no">316</span><span id="line-316"> region.flush(true);</span>
-<span class="source-line-no">317</span><span id="line-317"> }</span>
-<span class="source-line-no">318</span><span id="line-318"></span>
-<span class="source-line-no">319</span><span id="line-319"> region.compact(false);</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
-<span class="source-line-no">322</span><span id="line-322"></span>
-<span class="source-line-no">323</span><span id="line-323"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">324</span><span id="line-324"> Coprocessor c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
-<span class="source-line-no">325</span><span id="line-325"> Object o = ((CoprocessorImpl) c).getSharedData().get("test1");</span>
-<span class="source-line-no">326</span><span id="line-326"> Object o2 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
-<span class="source-line-no">327</span><span id="line-327"> assertNotNull(o);</span>
-<span class="source-line-no">328</span><span id="line-328"> assertNotNull(o2);</span>
-<span class="source-line-no">329</span><span id="line-329"> // to coprocessors get different sharedDatas</span>
-<span class="source-line-no">330</span><span id="line-330"> assertFalse(((CoprocessorImpl) c).getSharedData() == ((CoprocessorII) c2).getSharedData());</span>
-<span class="source-line-no">331</span><span id="line-331"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">332</span><span id="line-332"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
-<span class="source-line-no">333</span><span id="line-333"> // make sure that all coprocessor of a class have identical sharedDatas</span>
-<span class="source-line-no">334</span><span id="line-334"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
-<span class="source-line-no">335</span><span id="line-335"> assertTrue(((CoprocessorII) c2).getSharedData().get("test2") == o2);</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337"> // now have all Environments fail</span>
-<span class="source-line-no">338</span><span id="line-338"> try {</span>
-<span class="source-line-no">339</span><span id="line-339"> byte[] r = region.getRegionInfo().getStartKey();</span>
-<span class="source-line-no">340</span><span id="line-340"> if (r == null || r.length <= 0) {</span>
-<span class="source-line-no">341</span><span id="line-341"> // Its the start row. Can't ask for null. Ask for minimal key instead.</span>
-<span class="source-line-no">342</span><span id="line-342"> r = new byte[] { 0 };</span>
-<span class="source-line-no">343</span><span id="line-343"> }</span>
-<span class="source-line-no">344</span><span id="line-344"> Get g = new Get(r);</span>
-<span class="source-line-no">345</span><span id="line-345"> region.get(g);</span>
-<span class="source-line-no">346</span><span id="line-346"> fail();</span>
-<span class="source-line-no">347</span><span id="line-347"> } catch (org.apache.hadoop.hbase.DoNotRetryIOException xc) {</span>
-<span class="source-line-no">348</span><span id="line-348"> }</span>
-<span class="source-line-no">349</span><span id="line-349"> assertNull(region.getCoprocessorHost().findCoprocessor(CoprocessorII.class));</span>
-<span class="source-line-no">350</span><span id="line-350"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">351</span><span id="line-351"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
-<span class="source-line-no">352</span><span id="line-352"> c = c2 = null;</span>
-<span class="source-line-no">353</span><span id="line-353"> // perform a GC</span>
-<span class="source-line-no">354</span><span id="line-354"> System.gc();</span>
-<span class="source-line-no">355</span><span id="line-355"> // reopen the region</span>
-<span class="source-line-no">356</span><span id="line-356"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
-<span class="source-line-no">357</span><span id="line-357"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">358</span><span id="line-358"> // CPimpl is unaffected, still the same reference</span>
-<span class="source-line-no">359</span><span id="line-359"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
-<span class="source-line-no">360</span><span id="line-360"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
-<span class="source-line-no">361</span><span id="line-361"> // new map and object created, hence the reference is different</span>
-<span class="source-line-no">362</span><span id="line-362"> // hence the old entry was indeed removed by the GC and new one has been created</span>
-<span class="source-line-no">363</span><span id="line-363"> Object o3 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
-<span class="source-line-no">364</span><span id="line-364"> assertFalse(o3 == o2);</span>
-<span class="source-line-no">365</span><span id="line-365"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
-<span class="source-line-no">366</span><span id="line-366"> }</span>
-<span class="source-line-no">367</span><span id="line-367"></span>
-<span class="source-line-no">368</span><span id="line-368"> @Test</span>
-<span class="source-line-no">369</span><span id="line-369"> public void testCoprocessorInterface() throws IOException {</span>
-<span class="source-line-no">370</span><span id="line-370"> TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">371</span><span id="line-371"> byte[][] families = { fam1, fam2, fam3 };</span>
-<span class="source-line-no">372</span><span id="line-372"></span>
-<span class="source-line-no">373</span><span id="line-373"> Configuration hc = initConfig();</span>
-<span class="source-line-no">374</span><span id="line-374"> HRegion region = initHRegion(tableName, name.getMethodName(), hc,</span>
-<span class="source-line-no">375</span><span id="line-375"> new Class<?>[] { CoprocessorImpl.class }, families);</span>
-<span class="source-line-no">376</span><span id="line-376"> for (int i = 0; i < 3; i++) {</span>
-<span class="source-line-no">377</span><span id="line-377"> HTestConst.addContent(region, fam3);</span>
-<span class="source-line-no">378</span><span id="line-378"> region.flush(true);</span>
-<span class="source-line-no">379</span><span id="line-379"> }</span>
-<span class="source-line-no">380</span><span id="line-380"></span>
-<span class="source-line-no">381</span><span id="line-381"> region.compact(false);</span>
-<span class="source-line-no">382</span><span id="line-382"></span>
-<span class="source-line-no">383</span><span id="line-383"> // HBASE-4197</span>
-<span class="source-line-no">384</span><span id="line-384"> Scan s = new Scan();</span>
-<span class="source-line-no">385</span><span id="line-385"> RegionScanner scanner = region.getCoprocessorHost().postScannerOpen(s, region.getScanner(s));</span>
-<span class="source-line-no">386</span><span id="line-386"> assertTrue(scanner instanceof CustomScanner);</span>
-<span class="source-line-no">387</span><span id="line-387"> // this would throw an exception before HBASE-4197</span>
-<span class="source-line-no">388</span><span id="line-388"> scanner.next(new ArrayList<>());</span>
-<span class="source-line-no">389</span><span id="line-389"></span>
-<span class="source-line-no">390</span><span id="line-390"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
-<span class="source-line-no">391</span><span id="line-391"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">392</span><span id="line-392"></span>
-<span class="source-line-no">393</span><span id="line-393"> assertTrue("Coprocessor not started", ((CoprocessorImpl) c).wasStarted());</span>
-<span class="source-line-no">394</span><span id="line-394"> assertTrue("Coprocessor not stopped", ((CoprocessorImpl) c).wasStopped());</span>
-<span class="source-line-no">395</span><span id="line-395"> assertTrue(((CoprocessorImpl) c).wasOpened());</span>
-<span class="source-line-no">396</span><span id="line-396"> assertTrue(((CoprocessorImpl) c).wasClosed());</span>
-<span class="source-line-no">397</span><span id="line-397"> assertTrue(((CoprocessorImpl) c).wasFlushed());</span>
-<span class="source-line-no">398</span><span id="line-398"> assertTrue(((CoprocessorImpl) c).wasCompacted());</span>
-<span class="source-line-no">399</span><span id="line-399"> }</span>
-<span class="source-line-no">400</span><span id="line-400"></span>
-<span class="source-line-no">401</span><span id="line-401"> HRegion reopenRegion(final HRegion closedRegion, Class<?>... implClasses) throws IOException {</span>
-<span class="source-line-no">402</span><span id="line-402"> // RegionInfo info = new RegionInfo(tableName, null, null, false);</span>
-<span class="source-line-no">403</span><span id="line-403"> HRegion r = HRegion.openHRegion(closedRegion, null);</span>
-<span class="source-line-no">404</span><span id="line-404"></span>
-<span class="source-line-no">405</span><span id="line-405"> // this following piece is a hack. currently a coprocessorHost</span>
-<span class="source-line-no">406</span><span id="line-406"> // is secretly loaded at OpenRegionHandler. we don't really</span>
-<span class="source-line-no">407</span><span id="line-407"> // start a region server here, so just manually create cphost</span>
-<span class="source-line-no">408</span><span id="line-408"> // and set it to region.</span>
-<span class="source-line-no">409</span><span id="line-409"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">410</span><span id="line-410"> RegionCoprocessorHost host =</span>
-<span class="source-line-no">411</span><span id="line-411"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
-<span class="source-line-no">412</span><span id="line-412"> r.setCoprocessorHost(host);</span>
-<span class="source-line-no">413</span><span id="line-413"></span>
-<span class="source-line-no">414</span><span id="line-414"> for (Class<?> implClass : implClasses) {</span>
-<span class="source-line-no">415</span><span id="line-415"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
-<span class="source-line-no">416</span><span id="line-416"> }</span>
-<span class="source-line-no">417</span><span id="line-417"> // we need to manually call pre- and postOpen here since the</span>
-<span class="source-line-no">418</span><span id="line-418"> // above load() is not the real case for CP loading. A CP is</span>
-<span class="source-line-no">419</span><span id="line-419"> // expected to be loaded by default from 1) configuration; or 2)</span>
-<span class="source-line-no">420</span><span id="line-420"> // HTableDescriptor. If it's loaded after HRegion initialized,</span>
-<span class="source-line-no">421</span><span id="line-421"> // the pre- and postOpen() won't be triggered automatically.</span>
-<span class="source-line-no">422</span><span id="line-422"> // Here we have to call pre and postOpen explicitly.</span>
-<span class="source-line-no">423</span><span id="line-423"> host.preOpen();</span>
-<span class="source-line-no">424</span><span id="line-424"> host.postOpen();</span>
-<span class="source-line-no">425</span><span id="line-425"> return r;</span>
-<span class="source-line-no">426</span><span id="line-426"> }</span>
-<span class="source-line-no">427</span><span id="line-427"></span>
-<span class="source-line-no">428</span><span id="line-428"> HRegion initHRegion(TableName tableName, String callingMethod, Configuration conf,</span>
-<span class="source-line-no">429</span><span id="line-429"> Class<?>[] implClasses, byte[][] families) throws IOException {</span>
-<span class="source-line-no">430</span><span id="line-430"> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
-<span class="source-line-no">431</span><span id="line-431"> for (byte[] family : families) {</span>
-<span class="source-line-no">432</span><span id="line-432"> builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(family));</span>
-<span class="source-line-no">433</span><span id="line-433"> }</span>
-<span class="source-line-no">434</span><span id="line-434"> ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0, 0, null,</span>
-<span class="source-line-no">435</span><span id="line-435"> MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);</span>
-<span class="source-line-no">436</span><span id="line-436"> RegionInfo info = RegionInfoBuilder.newBuilder(tableName).setStartKey(null).setEndKey(null)</span>
-<span class="source-line-no">437</span><span id="line-437"> .setSplit(false).build();</span>
-<span class="source-line-no">438</span><span id="line-438"> Path path = new Path(DIR + callingMethod);</span>
-<span class="source-line-no">439</span><span id="line-439"> HRegion r = HBaseTestingUtil.createRegionAndWAL(info, path, conf, builder.build());</span>
-<span class="source-line-no">440</span><span id="line-440"></span>
-<span class="source-line-no">441</span><span id="line-441"> // this following piece is a hack.</span>
-<span class="source-line-no">442</span><span id="line-442"> RegionCoprocessorHost host =</span>
-<span class="source-line-no">443</span><span id="line-443"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
-<span class="source-line-no">444</span><span id="line-444"> r.setCoprocessorHost(host);</span>
-<span class="source-line-no">445</span><span id="line-445"></span>
-<span class="source-line-no">446</span><span id="line-446"> for (Class<?> implClass : implClasses) {</span>
-<span class="source-line-no">447</span><span id="line-447"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
-<span class="source-line-no">448</span><span id="line-448"> Coprocessor c = host.findCoprocessor(implClass.getName());</span>
-<span class="source-line-no">449</span><span id="line-449"> assertNotNull(c);</span>
-<span class="source-line-no">450</span><span id="line-450"> }</span>
-<span class="source-line-no">451</span><span id="line-451"></span>
-<span class="source-line-no">452</span><span id="line-452"> // Here we have to call pre and postOpen explicitly.</span>
-<span class="source-line-no">453</span><span id="line-453"> host.preOpen();</span>
-<span class="source-line-no">454</span><span id="line-454"> host.postOpen();</span>
-<span class="source-line-no">455</span><span id="line-455"> return r;</span>
-<span class="source-line-no">456</span><span id="line-456"> }</span>
-<span class="source-line-no">457</span><span id="line-457"></span>
-<span class="source-line-no">458</span><span id="line-458"> private Configuration initConfig() {</span>
-<span class="source-line-no">459</span><span id="line-459"> // Always compact if there is more than one store file.</span>
-<span class="source-line-no">460</span><span id="line-460"> TEST_UTIL.getConfiguration().setInt("hbase.hstore.compactionThreshold", 2);</span>
-<span class="source-line-no">461</span><span id="line-461"> TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, 10 * 1000);</span>
-<span class="source-line-no">462</span><span id="line-462"> // Increase the amount of time between client retries</span>
-<span class="source-line-no">463</span><span id="line-463"> TEST_UTIL.getConfiguration().setLong("hbase.client.pause", 15 * 1000);</span>
-<span class="source-line-no">464</span><span id="line-464"> // This size should make it so we always split using the addContent</span>
-<span class="source-line-no">465</span><span id="line-465"> // below. After adding all data, the first region is 1.3M</span>
-<span class="source-line-no">466</span><span id="line-466"> TEST_UTIL.getConfiguration().setLong(HConstants.HREGION_MAX_FILESIZE, 1024 * 128);</span>
-<span class="source-line-no">467</span><span id="line-467"> TEST_UTIL.getConfiguration().setBoolean(CoprocessorHost.ABORT_ON_ERROR_KEY, false);</span>
-<span class="source-line-no">468</span><span id="line-468"></span>
-<span class="source-line-no">469</span><span id="line-469"> return TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">470</span><span id="line-470"> }</span>
-<span class="source-line-no">471</span><span id="line-471">}</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.HConstants;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.HTestConst;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.TableName;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.client.Get;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.client.RegionInfo;</span>
+<span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
+<span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.client.Scan;</span>
+<span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.client.TableDescriptorBuilder;</span>
+<span class="source-line-no">052</span><span id="line-52">import org.apache.hadoop.hbase.regionserver.ChunkCreator;</span>
+<span class="source-line-no">053</span><span id="line-53">import org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker;</span>
+<span class="source-line-no">054</span><span id="line-54">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
+<span class="source-line-no">055</span><span id="line-55">import org.apache.hadoop.hbase.regionserver.InternalScanner;</span>
+<span class="source-line-no">056</span><span id="line-56">import org.apache.hadoop.hbase.regionserver.MemStoreLAB;</span>
+<span class="source-line-no">057</span><span id="line-57">import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;</span>
+<span class="source-line-no">058</span><span id="line-58">import org.apache.hadoop.hbase.regionserver.RegionScanner;</span>
+<span class="source-line-no">059</span><span id="line-59">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
+<span class="source-line-no">060</span><span id="line-60">import org.apache.hadoop.hbase.regionserver.ScanType;</span>
+<span class="source-line-no">061</span><span id="line-61">import org.apache.hadoop.hbase.regionserver.ScannerContext;</span>
+<span class="source-line-no">062</span><span id="line-62">import org.apache.hadoop.hbase.regionserver.Store;</span>
+<span class="source-line-no">063</span><span id="line-63">import org.apache.hadoop.hbase.regionserver.StoreFile;</span>
+<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;</span>
+<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;</span>
+<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
+<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">068</span><span id="line-68">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">069</span><span id="line-69">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">070</span><span id="line-70">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">071</span><span id="line-71">import org.junit.jupiter.api.TestInfo;</span>
+<span class="source-line-no">072</span><span id="line-72">import org.mockito.Mockito;</span>
+<span class="source-line-no">073</span><span id="line-73"></span>
+<span class="source-line-no">074</span><span id="line-74">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">075</span><span id="line-75">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">076</span><span id="line-76">public class TestCoprocessorInterface {</span>
+<span class="source-line-no">077</span><span id="line-77"></span>
+<span class="source-line-no">078</span><span id="line-78"> private String currentTestName;</span>
+<span class="source-line-no">079</span><span id="line-79"> private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();</span>
+<span class="source-line-no">080</span><span id="line-80"> static final Path DIR = TEST_UTIL.getDataTestDir();</span>
+<span class="source-line-no">081</span><span id="line-81"></span>
+<span class="source-line-no">082</span><span id="line-82"> @BeforeEach</span>
+<span class="source-line-no">083</span><span id="line-83"> public void setUp(TestInfo testInfo) {</span>
+<span class="source-line-no">084</span><span id="line-84"> currentTestName = testInfo.getTestMethod().get().getName();</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"></span>
+<span class="source-line-no">087</span><span id="line-87"> private static class CustomScanner implements RegionScanner {</span>
+<span class="source-line-no">088</span><span id="line-88"></span>
+<span class="source-line-no">089</span><span id="line-89"> private RegionScanner delegate;</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> public CustomScanner(RegionScanner delegate) {</span>
+<span class="source-line-no">092</span><span id="line-92"> this.delegate = delegate;</span>
+<span class="source-line-no">093</span><span id="line-93"> }</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95"> @Override</span>
+<span class="source-line-no">096</span><span id="line-96"> public boolean next(List<? super ExtendedCell> results) throws IOException {</span>
+<span class="source-line-no">097</span><span id="line-97"> return delegate.next(results);</span>
+<span class="source-line-no">098</span><span id="line-98"> }</span>
+<span class="source-line-no">099</span><span id="line-99"></span>
+<span class="source-line-no">100</span><span id="line-100"> @Override</span>
+<span class="source-line-no">101</span><span id="line-101"> public boolean next(List<? super ExtendedCell> result, ScannerContext scannerContext)</span>
+<span class="source-line-no">102</span><span id="line-102"> throws IOException {</span>
+<span class="source-line-no">103</span><span id="line-103"> return delegate.next(result, scannerContext);</span>
+<span class="source-line-no">104</span><span id="line-104"> }</span>
+<span class="source-line-no">105</span><span id="line-105"></span>
+<span class="source-line-no">106</span><span id="line-106"> @Override</span>
+<span class="source-line-no">107</span><span id="line-107"> public boolean nextRaw(List<? super ExtendedCell> result) throws IOException {</span>
+<span class="source-line-no">108</span><span id="line-108"> return delegate.nextRaw(result);</span>
+<span class="source-line-no">109</span><span id="line-109"> }</span>
+<span class="source-line-no">110</span><span id="line-110"></span>
+<span class="source-line-no">111</span><span id="line-111"> @Override</span>
+<span class="source-line-no">112</span><span id="line-112"> public boolean nextRaw(List<? super ExtendedCell> result, ScannerContext context)</span>
+<span class="source-line-no">113</span><span id="line-113"> throws IOException {</span>
+<span class="source-line-no">114</span><span id="line-114"> return delegate.nextRaw(result, context);</span>
+<span class="source-line-no">115</span><span id="line-115"> }</span>
+<span class="source-line-no">116</span><span id="line-116"></span>
+<span class="source-line-no">117</span><span id="line-117"> @Override</span>
+<span class="source-line-no">118</span><span id="line-118"> public Set<Path> getFilesRead() {</span>
+<span class="source-line-no">119</span><span id="line-119"> return delegate.getFilesRead();</span>
+<span class="source-line-no">120</span><span id="line-120"> }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122"> @Override</span>
+<span class="source-line-no">123</span><span id="line-123"> public void close() throws IOException {</span>
+<span class="source-line-no">124</span><span id="line-124"> delegate.close();</span>
+<span class="source-line-no">125</span><span id="line-125"> }</span>
+<span class="source-line-no">126</span><span id="line-126"></span>
+<span class="source-line-no">127</span><span id="line-127"> @Override</span>
+<span class="source-line-no">128</span><span id="line-128"> public RegionInfo getRegionInfo() {</span>
+<span class="source-line-no">129</span><span id="line-129"> return delegate.getRegionInfo();</span>
+<span class="source-line-no">130</span><span id="line-130"> }</span>
+<span class="source-line-no">131</span><span id="line-131"></span>
+<span class="source-line-no">132</span><span id="line-132"> @Override</span>
+<span class="source-line-no">133</span><span id="line-133"> public boolean isFilterDone() throws IOException {</span>
+<span class="source-line-no">134</span><span id="line-134"> return delegate.isFilterDone();</span>
+<span class="source-line-no">135</span><span id="line-135"> }</span>
+<span class="source-line-no">136</span><span id="line-136"></span>
+<span class="source-line-no">137</span><span id="line-137"> @Override</span>
+<span class="source-line-no">138</span><span id="line-138"> public boolean reseek(byte[] row) throws IOException {</span>
+<span class="source-line-no">139</span><span id="line-139"> return false;</span>
+<span class="source-line-no">140</span><span id="line-140"> }</span>
+<span class="source-line-no">141</span><span id="line-141"></span>
+<span class="source-line-no">142</span><span id="line-142"> @Override</span>
+<span class="source-line-no">143</span><span id="line-143"> public long getMaxResultSize() {</span>
+<span class="source-line-no">144</span><span id="line-144"> return delegate.getMaxResultSize();</span>
+<span class="source-line-no">145</span><span id="line-145"> }</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147"> @Override</span>
+<span class="source-line-no">148</span><span id="line-148"> public long getMvccReadPoint() {</span>
+<span class="source-line-no">149</span><span id="line-149"> return delegate.getMvccReadPoint();</span>
+<span class="source-line-no">150</span><span id="line-150"> }</span>
+<span class="source-line-no">151</span><span id="line-151"></span>
+<span class="source-line-no">152</span><span id="line-152"> @Override</span>
+<span class="source-line-no">153</span><span id="line-153"> public int getBatch() {</span>
+<span class="source-line-no">154</span><span id="line-154"> return delegate.getBatch();</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> }</span>
+<span class="source-line-no">157</span><span id="line-157"></span>
+<span class="source-line-no">158</span><span id="line-158"> public static class CoprocessorImpl implements RegionCoprocessor, RegionObserver {</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160"> private boolean startCalled;</span>
+<span class="source-line-no">161</span><span id="line-161"> private boolean stopCalled;</span>
+<span class="source-line-no">162</span><span id="line-162"> private boolean preOpenCalled;</span>
+<span class="source-line-no">163</span><span id="line-163"> private boolean postOpenCalled;</span>
+<span class="source-line-no">164</span><span id="line-164"> private boolean preCloseCalled;</span>
+<span class="source-line-no">165</span><span id="line-165"> private boolean postCloseCalled;</span>
+<span class="source-line-no">166</span><span id="line-166"> private boolean preCompactCalled;</span>
+<span class="source-line-no">167</span><span id="line-167"> private boolean postCompactCalled;</span>
+<span class="source-line-no">168</span><span id="line-168"> private boolean preFlushCalled;</span>
+<span class="source-line-no">169</span><span id="line-169"> private boolean postFlushCalled;</span>
+<span class="source-line-no">170</span><span id="line-170"> private ConcurrentMap<String, Object> sharedData;</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172"> @Override</span>
+<span class="source-line-no">173</span><span id="line-173"> public void start(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">174</span><span id="line-174"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
+<span class="source-line-no">175</span><span id="line-175"> // using new String here, so that there will be new object on each invocation</span>
+<span class="source-line-no">176</span><span id="line-176"> sharedData.putIfAbsent("test1", new Object());</span>
+<span class="source-line-no">177</span><span id="line-177"> startCalled = true;</span>
+<span class="source-line-no">178</span><span id="line-178"> }</span>
+<span class="source-line-no">179</span><span id="line-179"></span>
+<span class="source-line-no">180</span><span id="line-180"> @Override</span>
+<span class="source-line-no">181</span><span id="line-181"> public void stop(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">182</span><span id="line-182"> sharedData = null;</span>
+<span class="source-line-no">183</span><span id="line-183"> stopCalled = true;</span>
+<span class="source-line-no">184</span><span id="line-184"> }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186"> @Override</span>
+<span class="source-line-no">187</span><span id="line-187"> public Optional<RegionObserver> getRegionObserver() {</span>
+<span class="source-line-no">188</span><span id="line-188"> return Optional.of(this);</span>
+<span class="source-line-no">189</span><span id="line-189"> }</span>
+<span class="source-line-no">190</span><span id="line-190"></span>
+<span class="source-line-no">191</span><span id="line-191"> @Override</span>
+<span class="source-line-no">192</span><span id="line-192"> public void preOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
+<span class="source-line-no">193</span><span id="line-193"> preOpenCalled = true;</span>
+<span class="source-line-no">194</span><span id="line-194"> }</span>
+<span class="source-line-no">195</span><span id="line-195"></span>
+<span class="source-line-no">196</span><span id="line-196"> @Override</span>
+<span class="source-line-no">197</span><span id="line-197"> public void postOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
+<span class="source-line-no">198</span><span id="line-198"> postOpenCalled = true;</span>
+<span class="source-line-no">199</span><span id="line-199"> }</span>
+<span class="source-line-no">200</span><span id="line-200"></span>
+<span class="source-line-no">201</span><span id="line-201"> @Override</span>
+<span class="source-line-no">202</span><span id="line-202"> public void preClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">203</span><span id="line-203"> boolean abortRequested) {</span>
+<span class="source-line-no">204</span><span id="line-204"> preCloseCalled = true;</span>
+<span class="source-line-no">205</span><span id="line-205"> }</span>
+<span class="source-line-no">206</span><span id="line-206"></span>
+<span class="source-line-no">207</span><span id="line-207"> @Override</span>
+<span class="source-line-no">208</span><span id="line-208"> public void postClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">209</span><span id="line-209"> boolean abortRequested) {</span>
+<span class="source-line-no">210</span><span id="line-210"> postCloseCalled = true;</span>
+<span class="source-line-no">211</span><span id="line-211"> }</span>
+<span class="source-line-no">212</span><span id="line-212"></span>
+<span class="source-line-no">213</span><span id="line-213"> @Override</span>
+<span class="source-line-no">214</span><span id="line-214"> public InternalScanner preCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">215</span><span id="line-215"> Store store, InternalScanner scanner, ScanType scanType, CompactionLifeCycleTracker tracker,</span>
+<span class="source-line-no">216</span><span id="line-216"> CompactionRequest request) {</span>
+<span class="source-line-no">217</span><span id="line-217"> preCompactCalled = true;</span>
+<span class="source-line-no">218</span><span id="line-218"> return scanner;</span>
+<span class="source-line-no">219</span><span id="line-219"> }</span>
+<span class="source-line-no">220</span><span id="line-220"></span>
+<span class="source-line-no">221</span><span id="line-221"> @Override</span>
+<span class="source-line-no">222</span><span id="line-222"> public void postCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e, Store store,</span>
+<span class="source-line-no">223</span><span id="line-223"> StoreFile resultFile, CompactionLifeCycleTracker tracker, CompactionRequest request) {</span>
+<span class="source-line-no">224</span><span id="line-224"> postCompactCalled = true;</span>
+<span class="source-line-no">225</span><span id="line-225"> }</span>
+<span class="source-line-no">226</span><span id="line-226"></span>
+<span class="source-line-no">227</span><span id="line-227"> @Override</span>
+<span class="source-line-no">228</span><span id="line-228"> public void preFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">229</span><span id="line-229"> FlushLifeCycleTracker tracker) {</span>
+<span class="source-line-no">230</span><span id="line-230"> preFlushCalled = true;</span>
+<span class="source-line-no">231</span><span id="line-231"> }</span>
+<span class="source-line-no">232</span><span id="line-232"></span>
+<span class="source-line-no">233</span><span id="line-233"> @Override</span>
+<span class="source-line-no">234</span><span id="line-234"> public void postFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">235</span><span id="line-235"> FlushLifeCycleTracker tracker) {</span>
+<span class="source-line-no">236</span><span id="line-236"> postFlushCalled = true;</span>
+<span class="source-line-no">237</span><span id="line-237"> }</span>
+<span class="source-line-no">238</span><span id="line-238"></span>
+<span class="source-line-no">239</span><span id="line-239"> @Override</span>
+<span class="source-line-no">240</span><span id="line-240"> public RegionScanner postScannerOpen(</span>
+<span class="source-line-no">241</span><span id="line-241"> final ObserverContext<? extends RegionCoprocessorEnvironment> e, final Scan scan,</span>
+<span class="source-line-no">242</span><span id="line-242"> final RegionScanner s) throws IOException {</span>
+<span class="source-line-no">243</span><span id="line-243"> return new CustomScanner(s);</span>
+<span class="source-line-no">244</span><span id="line-244"> }</span>
+<span class="source-line-no">245</span><span id="line-245"></span>
+<span class="source-line-no">246</span><span id="line-246"> boolean wasStarted() {</span>
+<span class="source-line-no">247</span><span id="line-247"> return startCalled;</span>
+<span class="source-line-no">248</span><span id="line-248"> }</span>
+<span class="source-line-no">249</span><span id="line-249"></span>
+<span class="source-line-no">250</span><span id="line-250"> boolean wasStopped() {</span>
+<span class="source-line-no">251</span><span id="line-251"> return stopCalled;</span>
+<span class="source-line-no">252</span><span id="line-252"> }</span>
+<span class="source-line-no">253</span><span id="line-253"></span>
+<span class="source-line-no">254</span><span id="line-254"> boolean wasOpened() {</span>
+<span class="source-line-no">255</span><span id="line-255"> return (preOpenCalled && postOpenCalled);</span>
+<span class="source-line-no">256</span><span id="line-256"> }</span>
+<span class="source-line-no">257</span><span id="line-257"></span>
+<span class="source-line-no">258</span><span id="line-258"> boolean wasClosed() {</span>
+<span class="source-line-no">259</span><span id="line-259"> return (preCloseCalled && postCloseCalled);</span>
+<span class="source-line-no">260</span><span id="line-260"> }</span>
+<span class="source-line-no">261</span><span id="line-261"></span>
+<span class="source-line-no">262</span><span id="line-262"> boolean wasFlushed() {</span>
+<span class="source-line-no">263</span><span id="line-263"> return (preFlushCalled && postFlushCalled);</span>
+<span class="source-line-no">264</span><span id="line-264"> }</span>
+<span class="source-line-no">265</span><span id="line-265"></span>
+<span class="source-line-no">266</span><span id="line-266"> boolean wasCompacted() {</span>
+<span class="source-line-no">267</span><span id="line-267"> return (preCompactCalled && postCompactCalled);</span>
+<span class="source-line-no">268</span><span id="line-268"> }</span>
+<span class="source-line-no">269</span><span id="line-269"></span>
+<span class="source-line-no">270</span><span id="line-270"> Map<String, Object> getSharedData() {</span>
+<span class="source-line-no">271</span><span id="line-271"> return sharedData;</span>
+<span class="source-line-no">272</span><span id="line-272"> }</span>
+<span class="source-line-no">273</span><span id="line-273"> }</span>
+<span class="source-line-no">274</span><span id="line-274"></span>
+<span class="source-line-no">275</span><span id="line-275"> public static class CoprocessorII implements RegionCoprocessor {</span>
+<span class="source-line-no">276</span><span id="line-276"> private ConcurrentMap<String, Object> sharedData;</span>
+<span class="source-line-no">277</span><span id="line-277"></span>
+<span class="source-line-no">278</span><span id="line-278"> @Override</span>
+<span class="source-line-no">279</span><span id="line-279"> public void start(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">280</span><span id="line-280"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
+<span class="source-line-no">281</span><span id="line-281"> sharedData.putIfAbsent("test2", new Object());</span>
+<span class="source-line-no">282</span><span id="line-282"> }</span>
+<span class="source-line-no">283</span><span id="line-283"></span>
+<span class="source-line-no">284</span><span id="line-284"> @Override</span>
+<span class="source-line-no">285</span><span id="line-285"> public void stop(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">286</span><span id="line-286"> sharedData = null;</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"></span>
+<span class="source-line-no">289</span><span id="line-289"> @Override</span>
+<span class="source-line-no">290</span><span id="line-290"> public Optional<RegionObserver> getRegionObserver() {</span>
+<span class="source-line-no">291</span><span id="line-291"> return Optional.of(new RegionObserver() {</span>
+<span class="source-line-no">292</span><span id="line-292"> @Override</span>
+<span class="source-line-no">293</span><span id="line-293"> public void preGetOp(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">294</span><span id="line-294"> final Get get, final List<Cell> results) throws IOException {</span>
+<span class="source-line-no">295</span><span id="line-295"> throw new RuntimeException();</span>
+<span class="source-line-no">296</span><span id="line-296"> }</span>
+<span class="source-line-no">297</span><span id="line-297"> });</span>
+<span class="source-line-no">298</span><span id="line-298"> }</span>
+<span class="source-line-no">299</span><span id="line-299"></span>
+<span class="source-line-no">300</span><span id="line-300"> Map<String, Object> getSharedData() {</span>
+<span class="source-line-no">301</span><span id="line-301"> return sharedData;</span>
+<span class="source-line-no">302</span><span id="line-302"> }</span>
+<span class="source-line-no">303</span><span id="line-303"> }</span>
+<span class="source-line-no">304</span><span id="line-304"></span>
+<span class="source-line-no">305</span><span id="line-305"> @Test</span>
+<span class="source-line-no">306</span><span id="line-306"> public void testSharedData() throws IOException {</span>
+<span class="source-line-no">307</span><span id="line-307"> TableName tableName = TableName.valueOf(currentTestName);</span>
+<span class="source-line-no">308</span><span id="line-308"> byte[][] families = { fam1, fam2, fam3 };</span>
+<span class="source-line-no">309</span><span id="line-309"></span>
+<span class="source-line-no">310</span><span id="line-310"> Configuration hc = initConfig();</span>
+<span class="source-line-no">311</span><span id="line-311"> HRegion region = initHRegion(tableName, currentTestName, hc, new Class<?>[] {}, families);</span>
+<span class="source-line-no">312</span><span id="line-312"></span>
+<span class="source-line-no">313</span><span id="line-313"> for (int i = 0; i < 3; i++) {</span>
+<span class="source-line-no">314</span><span id="line-314"> HTestConst.addContent(region, fam3);</span>
+<span class="source-line-no">315</span><span id="line-315"> region.flush(true);</span>
+<span class="source-line-no">316</span><span id="line-316"> }</span>
+<span class="source-line-no">317</span><span id="line-317"></span>
+<span class="source-line-no">318</span><span id="line-318"> region.compact(false);</span>
+<span class="source-line-no">319</span><span id="line-319"></span>
+<span class="source-line-no">320</span><span id="line-320"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
+<span class="source-line-no">321</span><span id="line-321"></span>
+<span class="source-line-no">322</span><span id="line-322"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">323</span><span id="line-323"> Coprocessor c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
+<span class="source-line-no">324</span><span id="line-324"> Object o = ((CoprocessorImpl) c).getSharedData().get("test1");</span>
+<span class="source-line-no">325</span><span id="line-325"> Object o2 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
+<span class="source-line-no">326</span><span id="line-326"> assertNotNull(o);</span>
+<span class="source-line-no">327</span><span id="line-327"> assertNotNull(o2);</span>
+<span class="source-line-no">328</span><span id="line-328"> // to coprocessors get different sharedDatas</span>
+<span class="source-line-no">329</span><span id="line-329"> assertFalse(((CoprocessorImpl) c).getSharedData() == ((CoprocessorII) c2).getSharedData());</span>
+<span class="source-line-no">330</span><span id="line-330"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">331</span><span id="line-331"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
+<span class="source-line-no">332</span><span id="line-332"> // make sure that all coprocessor of a class have identical sharedDatas</span>
+<span class="source-line-no">333</span><span id="line-333"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
+<span class="source-line-no">334</span><span id="line-334"> assertTrue(((CoprocessorII) c2).getSharedData().get("test2") == o2);</span>
+<span class="source-line-no">335</span><span id="line-335"></span>
+<span class="source-line-no">336</span><span id="line-336"> // now have all Environments fail</span>
+<span class="source-line-no">337</span><span id="line-337"> try {</span>
+<span class="source-line-no">338</span><span id="line-338"> byte[] r = region.getRegionInfo().getStartKey();</span>
+<span class="source-line-no">339</span><span id="line-339"> if (r == null || r.length <= 0) {</span>
+<span class="source-line-no">340</span><span id="line-340"> // Its the start row. Can't ask for null. Ask for minimal key instead.</span>
+<span class="source-line-no">341</span><span id="line-341"> r = new byte[] { 0 };</span>
+<span class="source-line-no">342</span><span id="line-342"> }</span>
+<span class="source-line-no">343</span><span id="line-343"> Get g = new Get(r);</span>
+<span class="source-line-no">344</span><span id="line-344"> region.get(g);</span>
+<span class="source-line-no">345</span><span id="line-345"> fail();</span>
+<span class="source-line-no">346</span><span id="line-346"> } catch (org.apache.hadoop.hbase.DoNotRetryIOException xc) {</span>
+<span class="source-line-no">347</span><span id="line-347"> }</span>
+<span class="source-line-no">348</span><span id="line-348"> assertNull(region.getCoprocessorHost().findCoprocessor(CoprocessorII.class));</span>
+<span class="source-line-no">349</span><span id="line-349"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">350</span><span id="line-350"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
+<span class="source-line-no">351</span><span id="line-351"> c = c2 = null;</span>
+<span class="source-line-no">352</span><span id="line-352"> // perform a GC</span>
+<span class="source-line-no">353</span><span id="line-353"> System.gc();</span>
+<span class="source-line-no">354</span><span id="line-354"> // reopen the region</span>
+<span class="source-line-no">355</span><span id="line-355"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
+<span class="source-line-no">356</span><span id="line-356"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">357</span><span id="line-357"> // CPimpl is unaffected, still the same reference</span>
+<span class="source-line-no">358</span><span id="line-358"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
+<span class="source-line-no">359</span><span id="line-359"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
+<span class="source-line-no">360</span><span id="line-360"> // new map and object created, hence the reference is different</span>
+<span class="source-line-no">361</span><span id="line-361"> // hence the old entry was indeed removed by the GC and new one has been created</span>
+<span class="source-line-no">362</span><span id="line-362"> Object o3 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
+<span class="source-line-no">363</span><span id="line-363"> assertFalse(o3 == o2);</span>
+<span class="source-line-no">364</span><span id="line-364"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
+<span class="source-line-no">365</span><span id="line-365"> }</span>
+<span class="source-line-no">366</span><span id="line-366"></span>
+<span class="source-line-no">367</span><span id="line-367"> @Test</span>
+<span class="source-line-no">368</span><span id="line-368"> public void testCoprocessorInterface() throws IOException {</span>
+<span class="source-line-no">369</span><span id="line-369"> TableName tableName = TableName.valueOf(currentTestName);</span>
+<span class="source-line-no">370</span><span id="line-370"> byte[][] families = { fam1, fam2, fam3 };</span>
+<span class="source-line-no">371</span><span id="line-371"></span>
+<span class="source-line-no">372</span><span id="line-372"> Configuration hc = initConfig();</span>
+<span class="source-line-no">373</span><span id="line-373"> HRegion region = initHRegion(tableName, currentTestName, hc,</span>
+<span class="source-line-no">374</span><span id="line-374"> new Class<?>[] { CoprocessorImpl.class }, families);</span>
+<span class="source-line-no">375</span><span id="line-375"> for (int i = 0; i < 3; i++) {</span>
+<span class="source-line-no">376</span><span id="line-376"> HTestConst.addContent(region, fam3);</span>
+<span class="source-line-no">377</span><span id="line-377"> region.flush(true);</span>
+<span class="source-line-no">378</span><span id="line-378"> }</span>
+<span class="source-line-no">379</span><span id="line-379"></span>
+<span class="source-line-no">380</span><span id="line-380"> region.compact(false);</span>
+<span class="source-line-no">381</span><span id="line-381"></span>
+<span class="source-line-no">382</span><span id="line-382"> // HBASE-4197</span>
+<span class="source-line-no">383</span><span id="line-383"> Scan s = new Scan();</span>
+<span class="source-line-no">384</span><span id="line-384"> RegionScanner scanner = region.getCoprocessorHost().postScannerOpen(s, region.getScanner(s));</span>
+<span class="source-line-no">385</span><span id="line-385"> assertTrue(scanner instanceof CustomScanner);</span>
+<span class="source-line-no">386</span><span id="line-386"> // this would throw an exception before HBASE-4197</span>
+<span class="source-line-no">387</span><span id="line-387"> scanner.next(new ArrayList<>());</span>
+<span class="source-line-no">388</span><span id="line-388"></span>
+<span class="source-line-no">389</span><span id="line-389"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
+<span class="source-line-no">390</span><span id="line-390"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">391</span><span id="line-391"></span>
+<span class="source-line-no">392</span><span id="line-392"> assertTrue(((CoprocessorImpl) c).wasStarted(), "Coprocessor not started");</span>
+<span class="source-line-no">393</span><span id="line-393"> assertTrue(((CoprocessorImpl) c).wasStopped(), "Coprocessor not stopped");</span>
+<span class="source-line-no">394</span><span id="line-394"> assertTrue(((CoprocessorImpl) c).wasOpened());</span>
+<span class="source-line-no">395</span><span id="line-395"> assertTrue(((CoprocessorImpl) c).wasClosed());</span>
+<span class="source-line-no">396</span><span id="line-396"> assertTrue(((CoprocessorImpl) c).wasFlushed());</span>
+<span class="source-line-no">397</span><span id="line-397"> assertTrue(((CoprocessorImpl) c).wasCompacted());</span>
+<span class="source-line-no">398</span><span id="line-398"> }</span>
+<span class="source-line-no">399</span><span id="line-399"></span>
+<span class="source-line-no">400</span><span id="line-400"> HRegion reopenRegion(final HRegion closedRegion, Class<?>... implClasses) throws IOException {</span>
+<span class="source-line-no">401</span><span id="line-401"> // RegionInfo info = new RegionInfo(tableName, null, null, false);</span>
+<span class="source-line-no">402</span><span id="line-402"> HRegion r = HRegion.openHRegion(closedRegion, null);</span>
+<span class="source-line-no">403</span><span id="line-403"></span>
+<span class="source-line-no">404</span><span id="line-404"> // this following piece is a hack. currently a coprocessorHost</span>
+<span class="source-line-no">405</span><span id="line-405"> // is secretly loaded at OpenRegionHandler. we don't really</span>
+<span class="source-line-no">406</span><span id="line-406"> // start a region server here, so just manually create cphost</span>
+<span class="source-line-no">407</span><span id="line-407"> // and set it to region.</span>
+<span class="source-line-no">408</span><span id="line-408"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">409</span><span id="line-409"> RegionCoprocessorHost host =</span>
+<span class="source-line-no">410</span><span id="line-410"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
+<span class="source-line-no">411</span><span id="line-411"> r.setCoprocessorHost(host);</span>
+<span class="source-line-no">412</span><span id="line-412"></span>
+<span class="source-line-no">413</span><span id="line-413"> for (Class<?> implClass : implClasses) {</span>
+<span class="source-line-no">414</span><span id="line-414"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
+<span class="source-line-no">415</span><span id="line-415"> }</span>
+<span class="source-line-no">416</span><span id="line-416"> // we need to manually call pre- and postOpen here since the</span>
+<span class="source-line-no">417</span><span id="line-417"> // above load() is not the real case for CP loading. A CP is</span>
+<span class="source-line-no">418</span><span id="line-418"> // expected to be loaded by default from 1) configuration; or 2)</span>
+<span class="source-line-no">419</span><span id="line-419"> // HTableDescriptor. If it's loaded after HRegion initialized,</span>
+<span class="source-line-no">420</span><span id="line-420"> // the pre- and postOpen() won't be triggered automatically.</span>
+<span class="source-line-no">421</span><span id="line-421"> // Here we have to call pre and postOpen explicitly.</span>
+<span class="source-line-no">422</span><span id="line-422"> host.preOpen();</span>
+<span class="source-line-no">423</span><span id="line-423"> host.postOpen();</span>
+<span class="source-line-no">424</span><span id="line-424"> return r;</span>
+<span class="source-line-no">425</span><span id="line-425"> }</span>
+<span class="source-line-no">426</span><span id="line-426"></span>
+<span class="source-line-no">427</span><span id="line-427"> HRegion initHRegion(TableName tableName, String callingMethod, Configuration conf,</span>
+<span class="source-line-no">428</span><span id="line-428"> Class<?>[] implClasses, byte[][] families) throws IOException {</span>
+<span class="source-line-no">429</span><span id="line-429"> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
+<span class="source-line-no">430</span><span id="line-430"> for (byte[] family : families) {</span>
+<span class="source-line-no">431</span><span id="line-431"> builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(family));</span>
+<span class="source-line-no">432</span><span id="line-432"> }</span>
+<span class="source-line-no">433</span><span id="line-433"> ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0, 0, null,</span>
+<span class="source-line-no">434</span><span id="line-434"> MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);</span>
+<span class="source-line-no">435</span><span id="line-435"> RegionInfo info = RegionInfoBuilder.newBuilder(tableName).setStartKey(null).setEndKey(null)</span>
+<span class="source-line-no">436</span><span id="line-436"> .setSplit(false).build();</span>
+<span class="source-line-no">437</span><span id="line-437"> Path path = new Path(DIR + callingMethod);</span>
+<span class="source-line-no">438</span><span id="line-438"> HRegion r = HBaseTestingUtil.createRegionAndWAL(info, path, conf, builder.build());</span>
+<span class="source-line-no">439</span><span id="line-439"></span>
+<span class="source-line-no">440</span><span id="line-440"> // this following piece is a hack.</span>
+<span class="source-line-no">441</span><span id="line-441"> RegionCoprocessorHost host =</span>
+<span class="source-line-no">442</span><span id="line-442"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
+<span class="source-line-no">443</span><span id="line-443"> r.setCoprocessorHost(host);</span>
+<span class="source-line-no">444</span><span id="line-444"></span>
+<span class="source-line-no">445</span><span id="line-445"> for (Class<?> implClass : implClasses) {</span>
+<span class="source-line-no">446</span><span id="line-446"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
+<span class="source-line-no">447</span><span id="line-447"> Coprocessor c = host.findCoprocessor(implClass.getName());</span>
+<span class="source-line-no">448</span><span id="line-448"> assertNotNull(c);</span>
+<span class="source-line-no">449</span><span id="line-449"> }</span>
+<span class="source-line-no">450</span><span id="line-450"></span>
+<span class="source-line-no">451</span><span id="line-451"> // Here we have to call pre and postOpen explicitly.</span>
+<span class="source-line-no">452</span><span id="line-452"> host.preOpen();</span>
+<span class="source-line-no">453</span><span id="line-453"> host.postOpen();</span>
+<span class="source-line-no">454</span><span id="line-454"> return r;</span>
+<span class="source-line-no">455</span><span id="line-455"> }</span>
+<span class="source-line-no">456</span><span id="line-456"></span>
+<span class="source-line-no">457</span><span id="line-457"> private Configuration initConfig() {</span>
+<span class="source-line-no">458</span><span id="line-458"> // Always compact if there is more than one store file.</span>
+<span class="source-line-no">459</span><span id="line-459"> TEST_UTIL.getConfiguration().setInt("hbase.hstore.compactionThreshold", 2);</span>
+<span class="source-line-no">460</span><span id="line-460"> TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, 10 * 1000);</span>
+<span class="source-line-no">461</span><span id="line-461"> // Increase the amount of time between client retries</span>
+<span class="source-line-no">462</span><span id="line-462"> TEST_UTIL.getConfiguration().setLong("hbase.client.pause", 15 * 1000);</span>
+<span class="source-line-no">463</span><span id="line-463"> // This size should make it so we always split using the addContent</span>
+<span class="source-line-no">464</span><span id="line-464"> // below. After adding all data, the first region is 1.3M</span>
+<span class="source-line-no">465</span><span id="line-465"> TEST_UTIL.getConfiguration().setLong(HConstants.HREGION_MAX_FILESIZE, 1024 * 128);</span>
+<span class="source-line-no">466</span><span id="line-466"> TEST_UTIL.getConfiguration().setBoolean(CoprocessorHost.ABORT_ON_ERROR_KEY, false);</span>
+<span class="source-line-no">467</span><span id="line-467"></span>
+<span class="source-line-no">468</span><span id="line-468"> return TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">469</span><span id="line-469"> }</span>
+<span class="source-line-no">470</span><span id="line-470">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorImpl.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorImpl.html
index d64b7df1bd0..828f3e63965 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorImpl.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.CoprocessorImpl.html
@@ -33,11 +33,11 @@
<span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.HBaseTestingUtil.fam1;</span>
<span class="source-line-no">021</span><span id="line-21">import static org.apache.hadoop.hbase.HBaseTestingUtil.fam2;</span>
<span class="source-line-no">022</span><span id="line-22">import static org.apache.hadoop.hbase.HBaseTestingUtil.fam3;</span>
-<span class="source-line-no">023</span><span id="line-23">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">024</span><span id="line-24">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">025</span><span id="line-25">import static org.junit.Assert.assertNull;</span>
-<span class="source-line-no">026</span><span id="line-26">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">027</span><span id="line-27">import static org.junit.Assert.fail;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">024</span><span id="line-24">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">025</span><span id="line-25">import static org.junit.jupiter.api.Assertions.assertNull;</span>
+<span class="source-line-no">026</span><span id="line-26">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">027</span><span id="line-27">import static org.junit.jupiter.api.Assertions.fail;</span>
<span class="source-line-no">028</span><span id="line-28"></span>
<span class="source-line-no">029</span><span id="line-29">import java.io.IOException;</span>
<span class="source-line-no">030</span><span id="line-30">import java.util.ArrayList;</span>
@@ -52,436 +52,435 @@
<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.Coprocessor;</span>
<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.ExtendedCell;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.HConstants;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.HTestConst;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.TableName;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.client.Get;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.client.RegionInfo;</span>
-<span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
-<span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.client.Scan;</span>
-<span class="source-line-no">052</span><span id="line-52">import org.apache.hadoop.hbase.client.TableDescriptorBuilder;</span>
-<span class="source-line-no">053</span><span id="line-53">import org.apache.hadoop.hbase.regionserver.ChunkCreator;</span>
-<span class="source-line-no">054</span><span id="line-54">import org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker;</span>
-<span class="source-line-no">055</span><span id="line-55">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
-<span class="source-line-no">056</span><span id="line-56">import org.apache.hadoop.hbase.regionserver.InternalScanner;</span>
-<span class="source-line-no">057</span><span id="line-57">import org.apache.hadoop.hbase.regionserver.MemStoreLAB;</span>
-<span class="source-line-no">058</span><span id="line-58">import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;</span>
-<span class="source-line-no">059</span><span id="line-59">import org.apache.hadoop.hbase.regionserver.RegionScanner;</span>
-<span class="source-line-no">060</span><span id="line-60">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
-<span class="source-line-no">061</span><span id="line-61">import org.apache.hadoop.hbase.regionserver.ScanType;</span>
-<span class="source-line-no">062</span><span id="line-62">import org.apache.hadoop.hbase.regionserver.ScannerContext;</span>
-<span class="source-line-no">063</span><span id="line-63">import org.apache.hadoop.hbase.regionserver.Store;</span>
-<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.hbase.regionserver.StoreFile;</span>
-<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;</span>
-<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;</span>
-<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
-<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">069</span><span id="line-69">import org.junit.ClassRule;</span>
-<span class="source-line-no">070</span><span id="line-70">import org.junit.Rule;</span>
-<span class="source-line-no">071</span><span id="line-71">import org.junit.Test;</span>
-<span class="source-line-no">072</span><span id="line-72">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">073</span><span id="line-73">import org.junit.rules.TestName;</span>
-<span class="source-line-no">074</span><span id="line-74">import org.mockito.Mockito;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76">@Category({ CoprocessorTests.class, MediumTests.class })</span>
-<span class="source-line-no">077</span><span id="line-77">public class TestCoprocessorInterface {</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79"> @ClassRule</span>
-<span class="source-line-no">080</span><span id="line-80"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">081</span><span id="line-81"> HBaseClassTestRule.forClass(TestCoprocessorInterface.class);</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83"> @Rule</span>
-<span class="source-line-no">084</span><span id="line-84"> public TestName name = new TestName();</span>
-<span class="source-line-no">085</span><span id="line-85"> private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();</span>
-<span class="source-line-no">086</span><span id="line-86"> static final Path DIR = TEST_UTIL.getDataTestDir();</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88"> private static class CustomScanner implements RegionScanner {</span>
-<span class="source-line-no">089</span><span id="line-89"></span>
-<span class="source-line-no">090</span><span id="line-90"> private RegionScanner delegate;</span>
-<span class="source-line-no">091</span><span id="line-91"></span>
-<span class="source-line-no">092</span><span id="line-92"> public CustomScanner(RegionScanner delegate) {</span>
-<span class="source-line-no">093</span><span id="line-93"> this.delegate = delegate;</span>
-<span class="source-line-no">094</span><span id="line-94"> }</span>
-<span class="source-line-no">095</span><span id="line-95"></span>
-<span class="source-line-no">096</span><span id="line-96"> @Override</span>
-<span class="source-line-no">097</span><span id="line-97"> public boolean next(List<? super ExtendedCell> results) throws IOException {</span>
-<span class="source-line-no">098</span><span id="line-98"> return delegate.next(results);</span>
-<span class="source-line-no">099</span><span id="line-99"> }</span>
-<span class="source-line-no">100</span><span id="line-100"></span>
-<span class="source-line-no">101</span><span id="line-101"> @Override</span>
-<span class="source-line-no">102</span><span id="line-102"> public boolean next(List<? super ExtendedCell> result, ScannerContext scannerContext)</span>
-<span class="source-line-no">103</span><span id="line-103"> throws IOException {</span>
-<span class="source-line-no">104</span><span id="line-104"> return delegate.next(result, scannerContext);</span>
-<span class="source-line-no">105</span><span id="line-105"> }</span>
-<span class="source-line-no">106</span><span id="line-106"></span>
-<span class="source-line-no">107</span><span id="line-107"> @Override</span>
-<span class="source-line-no">108</span><span id="line-108"> public boolean nextRaw(List<? super ExtendedCell> result) throws IOException {</span>
-<span class="source-line-no">109</span><span id="line-109"> return delegate.nextRaw(result);</span>
-<span class="source-line-no">110</span><span id="line-110"> }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112"> @Override</span>
-<span class="source-line-no">113</span><span id="line-113"> public boolean nextRaw(List<? super ExtendedCell> result, ScannerContext context)</span>
-<span class="source-line-no">114</span><span id="line-114"> throws IOException {</span>
-<span class="source-line-no">115</span><span id="line-115"> return delegate.nextRaw(result, context);</span>
-<span class="source-line-no">116</span><span id="line-116"> }</span>
-<span class="source-line-no">117</span><span id="line-117"></span>
-<span class="source-line-no">118</span><span id="line-118"> @Override</span>
-<span class="source-line-no">119</span><span id="line-119"> public Set<Path> getFilesRead() {</span>
-<span class="source-line-no">120</span><span id="line-120"> return delegate.getFilesRead();</span>
-<span class="source-line-no">121</span><span id="line-121"> }</span>
-<span class="source-line-no">122</span><span id="line-122"></span>
-<span class="source-line-no">123</span><span id="line-123"> @Override</span>
-<span class="source-line-no">124</span><span id="line-124"> public void close() throws IOException {</span>
-<span class="source-line-no">125</span><span id="line-125"> delegate.close();</span>
-<span class="source-line-no">126</span><span id="line-126"> }</span>
-<span class="source-line-no">127</span><span id="line-127"></span>
-<span class="source-line-no">128</span><span id="line-128"> @Override</span>
-<span class="source-line-no">129</span><span id="line-129"> public RegionInfo getRegionInfo() {</span>
-<span class="source-line-no">130</span><span id="line-130"> return delegate.getRegionInfo();</span>
-<span class="source-line-no">131</span><span id="line-131"> }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133"> @Override</span>
-<span class="source-line-no">134</span><span id="line-134"> public boolean isFilterDone() throws IOException {</span>
-<span class="source-line-no">135</span><span id="line-135"> return delegate.isFilterDone();</span>
-<span class="source-line-no">136</span><span id="line-136"> }</span>
-<span class="source-line-no">137</span><span id="line-137"></span>
-<span class="source-line-no">138</span><span id="line-138"> @Override</span>
-<span class="source-line-no">139</span><span id="line-139"> public boolean reseek(byte[] row) throws IOException {</span>
-<span class="source-line-no">140</span><span id="line-140"> return false;</span>
-<span class="source-line-no">141</span><span id="line-141"> }</span>
-<span class="source-line-no">142</span><span id="line-142"></span>
-<span class="source-line-no">143</span><span id="line-143"> @Override</span>
-<span class="source-line-no">144</span><span id="line-144"> public long getMaxResultSize() {</span>
-<span class="source-line-no">145</span><span id="line-145"> return delegate.getMaxResultSize();</span>
-<span class="source-line-no">146</span><span id="line-146"> }</span>
-<span class="source-line-no">147</span><span id="line-147"></span>
-<span class="source-line-no">148</span><span id="line-148"> @Override</span>
-<span class="source-line-no">149</span><span id="line-149"> public long getMvccReadPoint() {</span>
-<span class="source-line-no">150</span><span id="line-150"> return delegate.getMvccReadPoint();</span>
-<span class="source-line-no">151</span><span id="line-151"> }</span>
-<span class="source-line-no">152</span><span id="line-152"></span>
-<span class="source-line-no">153</span><span id="line-153"> @Override</span>
-<span class="source-line-no">154</span><span id="line-154"> public int getBatch() {</span>
-<span class="source-line-no">155</span><span id="line-155"> return delegate.getBatch();</span>
-<span class="source-line-no">156</span><span id="line-156"> }</span>
-<span class="source-line-no">157</span><span id="line-157"> }</span>
-<span class="source-line-no">158</span><span id="line-158"></span>
-<span class="source-line-no">159</span><span id="line-159"> public static class CoprocessorImpl implements RegionCoprocessor, RegionObserver {</span>
-<span class="source-line-no">160</span><span id="line-160"></span>
-<span class="source-line-no">161</span><span id="line-161"> private boolean startCalled;</span>
-<span class="source-line-no">162</span><span id="line-162"> private boolean stopCalled;</span>
-<span class="source-line-no">163</span><span id="line-163"> private boolean preOpenCalled;</span>
-<span class="source-line-no">164</span><span id="line-164"> private boolean postOpenCalled;</span>
-<span class="source-line-no">165</span><span id="line-165"> private boolean preCloseCalled;</span>
-<span class="source-line-no">166</span><span id="line-166"> private boolean postCloseCalled;</span>
-<span class="source-line-no">167</span><span id="line-167"> private boolean preCompactCalled;</span>
-<span class="source-line-no">168</span><span id="line-168"> private boolean postCompactCalled;</span>
-<span class="source-line-no">169</span><span id="line-169"> private boolean preFlushCalled;</span>
-<span class="source-line-no">170</span><span id="line-170"> private boolean postFlushCalled;</span>
-<span class="source-line-no">171</span><span id="line-171"> private ConcurrentMap<String, Object> sharedData;</span>
-<span class="source-line-no">172</span><span id="line-172"></span>
-<span class="source-line-no">173</span><span id="line-173"> @Override</span>
-<span class="source-line-no">174</span><span id="line-174"> public void start(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">175</span><span id="line-175"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
-<span class="source-line-no">176</span><span id="line-176"> // using new String here, so that there will be new object on each invocation</span>
-<span class="source-line-no">177</span><span id="line-177"> sharedData.putIfAbsent("test1", new Object());</span>
-<span class="source-line-no">178</span><span id="line-178"> startCalled = true;</span>
-<span class="source-line-no">179</span><span id="line-179"> }</span>
-<span class="source-line-no">180</span><span id="line-180"></span>
-<span class="source-line-no">181</span><span id="line-181"> @Override</span>
-<span class="source-line-no">182</span><span id="line-182"> public void stop(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">183</span><span id="line-183"> sharedData = null;</span>
-<span class="source-line-no">184</span><span id="line-184"> stopCalled = true;</span>
-<span class="source-line-no">185</span><span id="line-185"> }</span>
-<span class="source-line-no">186</span><span id="line-186"></span>
-<span class="source-line-no">187</span><span id="line-187"> @Override</span>
-<span class="source-line-no">188</span><span id="line-188"> public Optional<RegionObserver> getRegionObserver() {</span>
-<span class="source-line-no">189</span><span id="line-189"> return Optional.of(this);</span>
-<span class="source-line-no">190</span><span id="line-190"> }</span>
-<span class="source-line-no">191</span><span id="line-191"></span>
-<span class="source-line-no">192</span><span id="line-192"> @Override</span>
-<span class="source-line-no">193</span><span id="line-193"> public void preOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
-<span class="source-line-no">194</span><span id="line-194"> preOpenCalled = true;</span>
-<span class="source-line-no">195</span><span id="line-195"> }</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197"> @Override</span>
-<span class="source-line-no">198</span><span id="line-198"> public void postOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
-<span class="source-line-no">199</span><span id="line-199"> postOpenCalled = true;</span>
-<span class="source-line-no">200</span><span id="line-200"> }</span>
-<span class="source-line-no">201</span><span id="line-201"></span>
-<span class="source-line-no">202</span><span id="line-202"> @Override</span>
-<span class="source-line-no">203</span><span id="line-203"> public void preClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">204</span><span id="line-204"> boolean abortRequested) {</span>
-<span class="source-line-no">205</span><span id="line-205"> preCloseCalled = true;</span>
-<span class="source-line-no">206</span><span id="line-206"> }</span>
-<span class="source-line-no">207</span><span id="line-207"></span>
-<span class="source-line-no">208</span><span id="line-208"> @Override</span>
-<span class="source-line-no">209</span><span id="line-209"> public void postClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">210</span><span id="line-210"> boolean abortRequested) {</span>
-<span class="source-line-no">211</span><span id="line-211"> postCloseCalled = true;</span>
-<span class="source-line-no">212</span><span id="line-212"> }</span>
-<span class="source-line-no">213</span><span id="line-213"></span>
-<span class="source-line-no">214</span><span id="line-214"> @Override</span>
-<span class="source-line-no">215</span><span id="line-215"> public InternalScanner preCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">216</span><span id="line-216"> Store store, InternalScanner scanner, ScanType scanType, CompactionLifeCycleTracker tracker,</span>
-<span class="source-line-no">217</span><span id="line-217"> CompactionRequest request) {</span>
-<span class="source-line-no">218</span><span id="line-218"> preCompactCalled = true;</span>
-<span class="source-line-no">219</span><span id="line-219"> return scanner;</span>
-<span class="source-line-no">220</span><span id="line-220"> }</span>
-<span class="source-line-no">221</span><span id="line-221"></span>
-<span class="source-line-no">222</span><span id="line-222"> @Override</span>
-<span class="source-line-no">223</span><span id="line-223"> public void postCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e, Store store,</span>
-<span class="source-line-no">224</span><span id="line-224"> StoreFile resultFile, CompactionLifeCycleTracker tracker, CompactionRequest request) {</span>
-<span class="source-line-no">225</span><span id="line-225"> postCompactCalled = true;</span>
-<span class="source-line-no">226</span><span id="line-226"> }</span>
-<span class="source-line-no">227</span><span id="line-227"></span>
-<span class="source-line-no">228</span><span id="line-228"> @Override</span>
-<span class="source-line-no">229</span><span id="line-229"> public void preFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">230</span><span id="line-230"> FlushLifeCycleTracker tracker) {</span>
-<span class="source-line-no">231</span><span id="line-231"> preFlushCalled = true;</span>
-<span class="source-line-no">232</span><span id="line-232"> }</span>
-<span class="source-line-no">233</span><span id="line-233"></span>
-<span class="source-line-no">234</span><span id="line-234"> @Override</span>
-<span class="source-line-no">235</span><span id="line-235"> public void postFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">236</span><span id="line-236"> FlushLifeCycleTracker tracker) {</span>
-<span class="source-line-no">237</span><span id="line-237"> postFlushCalled = true;</span>
-<span class="source-line-no">238</span><span id="line-238"> }</span>
-<span class="source-line-no">239</span><span id="line-239"></span>
-<span class="source-line-no">240</span><span id="line-240"> @Override</span>
-<span class="source-line-no">241</span><span id="line-241"> public RegionScanner postScannerOpen(</span>
-<span class="source-line-no">242</span><span id="line-242"> final ObserverContext<? extends RegionCoprocessorEnvironment> e, final Scan scan,</span>
-<span class="source-line-no">243</span><span id="line-243"> final RegionScanner s) throws IOException {</span>
-<span class="source-line-no">244</span><span id="line-244"> return new CustomScanner(s);</span>
-<span class="source-line-no">245</span><span id="line-245"> }</span>
-<span class="source-line-no">246</span><span id="line-246"></span>
-<span class="source-line-no">247</span><span id="line-247"> boolean wasStarted() {</span>
-<span class="source-line-no">248</span><span id="line-248"> return startCalled;</span>
-<span class="source-line-no">249</span><span id="line-249"> }</span>
-<span class="source-line-no">250</span><span id="line-250"></span>
-<span class="source-line-no">251</span><span id="line-251"> boolean wasStopped() {</span>
-<span class="source-line-no">252</span><span id="line-252"> return stopCalled;</span>
-<span class="source-line-no">253</span><span id="line-253"> }</span>
-<span class="source-line-no">254</span><span id="line-254"></span>
-<span class="source-line-no">255</span><span id="line-255"> boolean wasOpened() {</span>
-<span class="source-line-no">256</span><span id="line-256"> return (preOpenCalled && postOpenCalled);</span>
-<span class="source-line-no">257</span><span id="line-257"> }</span>
-<span class="source-line-no">258</span><span id="line-258"></span>
-<span class="source-line-no">259</span><span id="line-259"> boolean wasClosed() {</span>
-<span class="source-line-no">260</span><span id="line-260"> return (preCloseCalled && postCloseCalled);</span>
-<span class="source-line-no">261</span><span id="line-261"> }</span>
-<span class="source-line-no">262</span><span id="line-262"></span>
-<span class="source-line-no">263</span><span id="line-263"> boolean wasFlushed() {</span>
-<span class="source-line-no">264</span><span id="line-264"> return (preFlushCalled && postFlushCalled);</span>
-<span class="source-line-no">265</span><span id="line-265"> }</span>
-<span class="source-line-no">266</span><span id="line-266"></span>
-<span class="source-line-no">267</span><span id="line-267"> boolean wasCompacted() {</span>
-<span class="source-line-no">268</span><span id="line-268"> return (preCompactCalled && postCompactCalled);</span>
-<span class="source-line-no">269</span><span id="line-269"> }</span>
-<span class="source-line-no">270</span><span id="line-270"></span>
-<span class="source-line-no">271</span><span id="line-271"> Map<String, Object> getSharedData() {</span>
-<span class="source-line-no">272</span><span id="line-272"> return sharedData;</span>
-<span class="source-line-no">273</span><span id="line-273"> }</span>
-<span class="source-line-no">274</span><span id="line-274"> }</span>
-<span class="source-line-no">275</span><span id="line-275"></span>
-<span class="source-line-no">276</span><span id="line-276"> public static class CoprocessorII implements RegionCoprocessor {</span>
-<span class="source-line-no">277</span><span id="line-277"> private ConcurrentMap<String, Object> sharedData;</span>
-<span class="source-line-no">278</span><span id="line-278"></span>
-<span class="source-line-no">279</span><span id="line-279"> @Override</span>
-<span class="source-line-no">280</span><span id="line-280"> public void start(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">281</span><span id="line-281"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
-<span class="source-line-no">282</span><span id="line-282"> sharedData.putIfAbsent("test2", new Object());</span>
-<span class="source-line-no">283</span><span id="line-283"> }</span>
-<span class="source-line-no">284</span><span id="line-284"></span>
-<span class="source-line-no">285</span><span id="line-285"> @Override</span>
-<span class="source-line-no">286</span><span id="line-286"> public void stop(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">287</span><span id="line-287"> sharedData = null;</span>
-<span class="source-line-no">288</span><span id="line-288"> }</span>
-<span class="source-line-no">289</span><span id="line-289"></span>
-<span class="source-line-no">290</span><span id="line-290"> @Override</span>
-<span class="source-line-no">291</span><span id="line-291"> public Optional<RegionObserver> getRegionObserver() {</span>
-<span class="source-line-no">292</span><span id="line-292"> return Optional.of(new RegionObserver() {</span>
-<span class="source-line-no">293</span><span id="line-293"> @Override</span>
-<span class="source-line-no">294</span><span id="line-294"> public void preGetOp(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">295</span><span id="line-295"> final Get get, final List<Cell> results) throws IOException {</span>
-<span class="source-line-no">296</span><span id="line-296"> throw new RuntimeException();</span>
-<span class="source-line-no">297</span><span id="line-297"> }</span>
-<span class="source-line-no">298</span><span id="line-298"> });</span>
-<span class="source-line-no">299</span><span id="line-299"> }</span>
-<span class="source-line-no">300</span><span id="line-300"></span>
-<span class="source-line-no">301</span><span id="line-301"> Map<String, Object> getSharedData() {</span>
-<span class="source-line-no">302</span><span id="line-302"> return sharedData;</span>
-<span class="source-line-no">303</span><span id="line-303"> }</span>
-<span class="source-line-no">304</span><span id="line-304"> }</span>
-<span class="source-line-no">305</span><span id="line-305"></span>
-<span class="source-line-no">306</span><span id="line-306"> @Test</span>
-<span class="source-line-no">307</span><span id="line-307"> public void testSharedData() throws IOException {</span>
-<span class="source-line-no">308</span><span id="line-308"> TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">309</span><span id="line-309"> byte[][] families = { fam1, fam2, fam3 };</span>
-<span class="source-line-no">310</span><span id="line-310"></span>
-<span class="source-line-no">311</span><span id="line-311"> Configuration hc = initConfig();</span>
-<span class="source-line-no">312</span><span id="line-312"> HRegion region = initHRegion(tableName, name.getMethodName(), hc, new Class<?>[] {}, families);</span>
-<span class="source-line-no">313</span><span id="line-313"></span>
-<span class="source-line-no">314</span><span id="line-314"> for (int i = 0; i < 3; i++) {</span>
-<span class="source-line-no">315</span><span id="line-315"> HTestConst.addContent(region, fam3);</span>
-<span class="source-line-no">316</span><span id="line-316"> region.flush(true);</span>
-<span class="source-line-no">317</span><span id="line-317"> }</span>
-<span class="source-line-no">318</span><span id="line-318"></span>
-<span class="source-line-no">319</span><span id="line-319"> region.compact(false);</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
-<span class="source-line-no">322</span><span id="line-322"></span>
-<span class="source-line-no">323</span><span id="line-323"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">324</span><span id="line-324"> Coprocessor c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
-<span class="source-line-no">325</span><span id="line-325"> Object o = ((CoprocessorImpl) c).getSharedData().get("test1");</span>
-<span class="source-line-no">326</span><span id="line-326"> Object o2 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
-<span class="source-line-no">327</span><span id="line-327"> assertNotNull(o);</span>
-<span class="source-line-no">328</span><span id="line-328"> assertNotNull(o2);</span>
-<span class="source-line-no">329</span><span id="line-329"> // to coprocessors get different sharedDatas</span>
-<span class="source-line-no">330</span><span id="line-330"> assertFalse(((CoprocessorImpl) c).getSharedData() == ((CoprocessorII) c2).getSharedData());</span>
-<span class="source-line-no">331</span><span id="line-331"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">332</span><span id="line-332"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
-<span class="source-line-no">333</span><span id="line-333"> // make sure that all coprocessor of a class have identical sharedDatas</span>
-<span class="source-line-no">334</span><span id="line-334"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
-<span class="source-line-no">335</span><span id="line-335"> assertTrue(((CoprocessorII) c2).getSharedData().get("test2") == o2);</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337"> // now have all Environments fail</span>
-<span class="source-line-no">338</span><span id="line-338"> try {</span>
-<span class="source-line-no">339</span><span id="line-339"> byte[] r = region.getRegionInfo().getStartKey();</span>
-<span class="source-line-no">340</span><span id="line-340"> if (r == null || r.length <= 0) {</span>
-<span class="source-line-no">341</span><span id="line-341"> // Its the start row. Can't ask for null. Ask for minimal key instead.</span>
-<span class="source-line-no">342</span><span id="line-342"> r = new byte[] { 0 };</span>
-<span class="source-line-no">343</span><span id="line-343"> }</span>
-<span class="source-line-no">344</span><span id="line-344"> Get g = new Get(r);</span>
-<span class="source-line-no">345</span><span id="line-345"> region.get(g);</span>
-<span class="source-line-no">346</span><span id="line-346"> fail();</span>
-<span class="source-line-no">347</span><span id="line-347"> } catch (org.apache.hadoop.hbase.DoNotRetryIOException xc) {</span>
-<span class="source-line-no">348</span><span id="line-348"> }</span>
-<span class="source-line-no">349</span><span id="line-349"> assertNull(region.getCoprocessorHost().findCoprocessor(CoprocessorII.class));</span>
-<span class="source-line-no">350</span><span id="line-350"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">351</span><span id="line-351"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
-<span class="source-line-no">352</span><span id="line-352"> c = c2 = null;</span>
-<span class="source-line-no">353</span><span id="line-353"> // perform a GC</span>
-<span class="source-line-no">354</span><span id="line-354"> System.gc();</span>
-<span class="source-line-no">355</span><span id="line-355"> // reopen the region</span>
-<span class="source-line-no">356</span><span id="line-356"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
-<span class="source-line-no">357</span><span id="line-357"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">358</span><span id="line-358"> // CPimpl is unaffected, still the same reference</span>
-<span class="source-line-no">359</span><span id="line-359"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
-<span class="source-line-no">360</span><span id="line-360"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
-<span class="source-line-no">361</span><span id="line-361"> // new map and object created, hence the reference is different</span>
-<span class="source-line-no">362</span><span id="line-362"> // hence the old entry was indeed removed by the GC and new one has been created</span>
-<span class="source-line-no">363</span><span id="line-363"> Object o3 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
-<span class="source-line-no">364</span><span id="line-364"> assertFalse(o3 == o2);</span>
-<span class="source-line-no">365</span><span id="line-365"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
-<span class="source-line-no">366</span><span id="line-366"> }</span>
-<span class="source-line-no">367</span><span id="line-367"></span>
-<span class="source-line-no">368</span><span id="line-368"> @Test</span>
-<span class="source-line-no">369</span><span id="line-369"> public void testCoprocessorInterface() throws IOException {</span>
-<span class="source-line-no">370</span><span id="line-370"> TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">371</span><span id="line-371"> byte[][] families = { fam1, fam2, fam3 };</span>
-<span class="source-line-no">372</span><span id="line-372"></span>
-<span class="source-line-no">373</span><span id="line-373"> Configuration hc = initConfig();</span>
-<span class="source-line-no">374</span><span id="line-374"> HRegion region = initHRegion(tableName, name.getMethodName(), hc,</span>
-<span class="source-line-no">375</span><span id="line-375"> new Class<?>[] { CoprocessorImpl.class }, families);</span>
-<span class="source-line-no">376</span><span id="line-376"> for (int i = 0; i < 3; i++) {</span>
-<span class="source-line-no">377</span><span id="line-377"> HTestConst.addContent(region, fam3);</span>
-<span class="source-line-no">378</span><span id="line-378"> region.flush(true);</span>
-<span class="source-line-no">379</span><span id="line-379"> }</span>
-<span class="source-line-no">380</span><span id="line-380"></span>
-<span class="source-line-no">381</span><span id="line-381"> region.compact(false);</span>
-<span class="source-line-no">382</span><span id="line-382"></span>
-<span class="source-line-no">383</span><span id="line-383"> // HBASE-4197</span>
-<span class="source-line-no">384</span><span id="line-384"> Scan s = new Scan();</span>
-<span class="source-line-no">385</span><span id="line-385"> RegionScanner scanner = region.getCoprocessorHost().postScannerOpen(s, region.getScanner(s));</span>
-<span class="source-line-no">386</span><span id="line-386"> assertTrue(scanner instanceof CustomScanner);</span>
-<span class="source-line-no">387</span><span id="line-387"> // this would throw an exception before HBASE-4197</span>
-<span class="source-line-no">388</span><span id="line-388"> scanner.next(new ArrayList<>());</span>
-<span class="source-line-no">389</span><span id="line-389"></span>
-<span class="source-line-no">390</span><span id="line-390"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
-<span class="source-line-no">391</span><span id="line-391"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">392</span><span id="line-392"></span>
-<span class="source-line-no">393</span><span id="line-393"> assertTrue("Coprocessor not started", ((CoprocessorImpl) c).wasStarted());</span>
-<span class="source-line-no">394</span><span id="line-394"> assertTrue("Coprocessor not stopped", ((CoprocessorImpl) c).wasStopped());</span>
-<span class="source-line-no">395</span><span id="line-395"> assertTrue(((CoprocessorImpl) c).wasOpened());</span>
-<span class="source-line-no">396</span><span id="line-396"> assertTrue(((CoprocessorImpl) c).wasClosed());</span>
-<span class="source-line-no">397</span><span id="line-397"> assertTrue(((CoprocessorImpl) c).wasFlushed());</span>
-<span class="source-line-no">398</span><span id="line-398"> assertTrue(((CoprocessorImpl) c).wasCompacted());</span>
-<span class="source-line-no">399</span><span id="line-399"> }</span>
-<span class="source-line-no">400</span><span id="line-400"></span>
-<span class="source-line-no">401</span><span id="line-401"> HRegion reopenRegion(final HRegion closedRegion, Class<?>... implClasses) throws IOException {</span>
-<span class="source-line-no">402</span><span id="line-402"> // RegionInfo info = new RegionInfo(tableName, null, null, false);</span>
-<span class="source-line-no">403</span><span id="line-403"> HRegion r = HRegion.openHRegion(closedRegion, null);</span>
-<span class="source-line-no">404</span><span id="line-404"></span>
-<span class="source-line-no">405</span><span id="line-405"> // this following piece is a hack. currently a coprocessorHost</span>
-<span class="source-line-no">406</span><span id="line-406"> // is secretly loaded at OpenRegionHandler. we don't really</span>
-<span class="source-line-no">407</span><span id="line-407"> // start a region server here, so just manually create cphost</span>
-<span class="source-line-no">408</span><span id="line-408"> // and set it to region.</span>
-<span class="source-line-no">409</span><span id="line-409"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">410</span><span id="line-410"> RegionCoprocessorHost host =</span>
-<span class="source-line-no">411</span><span id="line-411"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
-<span class="source-line-no">412</span><span id="line-412"> r.setCoprocessorHost(host);</span>
-<span class="source-line-no">413</span><span id="line-413"></span>
-<span class="source-line-no">414</span><span id="line-414"> for (Class<?> implClass : implClasses) {</span>
-<span class="source-line-no">415</span><span id="line-415"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
-<span class="source-line-no">416</span><span id="line-416"> }</span>
-<span class="source-line-no">417</span><span id="line-417"> // we need to manually call pre- and postOpen here since the</span>
-<span class="source-line-no">418</span><span id="line-418"> // above load() is not the real case for CP loading. A CP is</span>
-<span class="source-line-no">419</span><span id="line-419"> // expected to be loaded by default from 1) configuration; or 2)</span>
-<span class="source-line-no">420</span><span id="line-420"> // HTableDescriptor. If it's loaded after HRegion initialized,</span>
-<span class="source-line-no">421</span><span id="line-421"> // the pre- and postOpen() won't be triggered automatically.</span>
-<span class="source-line-no">422</span><span id="line-422"> // Here we have to call pre and postOpen explicitly.</span>
-<span class="source-line-no">423</span><span id="line-423"> host.preOpen();</span>
-<span class="source-line-no">424</span><span id="line-424"> host.postOpen();</span>
-<span class="source-line-no">425</span><span id="line-425"> return r;</span>
-<span class="source-line-no">426</span><span id="line-426"> }</span>
-<span class="source-line-no">427</span><span id="line-427"></span>
-<span class="source-line-no">428</span><span id="line-428"> HRegion initHRegion(TableName tableName, String callingMethod, Configuration conf,</span>
-<span class="source-line-no">429</span><span id="line-429"> Class<?>[] implClasses, byte[][] families) throws IOException {</span>
-<span class="source-line-no">430</span><span id="line-430"> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
-<span class="source-line-no">431</span><span id="line-431"> for (byte[] family : families) {</span>
-<span class="source-line-no">432</span><span id="line-432"> builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(family));</span>
-<span class="source-line-no">433</span><span id="line-433"> }</span>
-<span class="source-line-no">434</span><span id="line-434"> ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0, 0, null,</span>
-<span class="source-line-no">435</span><span id="line-435"> MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);</span>
-<span class="source-line-no">436</span><span id="line-436"> RegionInfo info = RegionInfoBuilder.newBuilder(tableName).setStartKey(null).setEndKey(null)</span>
-<span class="source-line-no">437</span><span id="line-437"> .setSplit(false).build();</span>
-<span class="source-line-no">438</span><span id="line-438"> Path path = new Path(DIR + callingMethod);</span>
-<span class="source-line-no">439</span><span id="line-439"> HRegion r = HBaseTestingUtil.createRegionAndWAL(info, path, conf, builder.build());</span>
-<span class="source-line-no">440</span><span id="line-440"></span>
-<span class="source-line-no">441</span><span id="line-441"> // this following piece is a hack.</span>
-<span class="source-line-no">442</span><span id="line-442"> RegionCoprocessorHost host =</span>
-<span class="source-line-no">443</span><span id="line-443"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
-<span class="source-line-no">444</span><span id="line-444"> r.setCoprocessorHost(host);</span>
-<span class="source-line-no">445</span><span id="line-445"></span>
-<span class="source-line-no">446</span><span id="line-446"> for (Class<?> implClass : implClasses) {</span>
-<span class="source-line-no">447</span><span id="line-447"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
-<span class="source-line-no">448</span><span id="line-448"> Coprocessor c = host.findCoprocessor(implClass.getName());</span>
-<span class="source-line-no">449</span><span id="line-449"> assertNotNull(c);</span>
-<span class="source-line-no">450</span><span id="line-450"> }</span>
-<span class="source-line-no">451</span><span id="line-451"></span>
-<span class="source-line-no">452</span><span id="line-452"> // Here we have to call pre and postOpen explicitly.</span>
-<span class="source-line-no">453</span><span id="line-453"> host.preOpen();</span>
-<span class="source-line-no">454</span><span id="line-454"> host.postOpen();</span>
-<span class="source-line-no">455</span><span id="line-455"> return r;</span>
-<span class="source-line-no">456</span><span id="line-456"> }</span>
-<span class="source-line-no">457</span><span id="line-457"></span>
-<span class="source-line-no">458</span><span id="line-458"> private Configuration initConfig() {</span>
-<span class="source-line-no">459</span><span id="line-459"> // Always compact if there is more than one store file.</span>
-<span class="source-line-no">460</span><span id="line-460"> TEST_UTIL.getConfiguration().setInt("hbase.hstore.compactionThreshold", 2);</span>
-<span class="source-line-no">461</span><span id="line-461"> TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, 10 * 1000);</span>
-<span class="source-line-no">462</span><span id="line-462"> // Increase the amount of time between client retries</span>
-<span class="source-line-no">463</span><span id="line-463"> TEST_UTIL.getConfiguration().setLong("hbase.client.pause", 15 * 1000);</span>
-<span class="source-line-no">464</span><span id="line-464"> // This size should make it so we always split using the addContent</span>
-<span class="source-line-no">465</span><span id="line-465"> // below. After adding all data, the first region is 1.3M</span>
-<span class="source-line-no">466</span><span id="line-466"> TEST_UTIL.getConfiguration().setLong(HConstants.HREGION_MAX_FILESIZE, 1024 * 128);</span>
-<span class="source-line-no">467</span><span id="line-467"> TEST_UTIL.getConfiguration().setBoolean(CoprocessorHost.ABORT_ON_ERROR_KEY, false);</span>
-<span class="source-line-no">468</span><span id="line-468"></span>
-<span class="source-line-no">469</span><span id="line-469"> return TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">470</span><span id="line-470"> }</span>
-<span class="source-line-no">471</span><span id="line-471">}</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.HConstants;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.HTestConst;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.TableName;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.client.Get;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.client.RegionInfo;</span>
+<span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
+<span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.client.Scan;</span>
+<span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.client.TableDescriptorBuilder;</span>
+<span class="source-line-no">052</span><span id="line-52">import org.apache.hadoop.hbase.regionserver.ChunkCreator;</span>
+<span class="source-line-no">053</span><span id="line-53">import org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker;</span>
+<span class="source-line-no">054</span><span id="line-54">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
+<span class="source-line-no">055</span><span id="line-55">import org.apache.hadoop.hbase.regionserver.InternalScanner;</span>
+<span class="source-line-no">056</span><span id="line-56">import org.apache.hadoop.hbase.regionserver.MemStoreLAB;</span>
+<span class="source-line-no">057</span><span id="line-57">import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;</span>
+<span class="source-line-no">058</span><span id="line-58">import org.apache.hadoop.hbase.regionserver.RegionScanner;</span>
+<span class="source-line-no">059</span><span id="line-59">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
+<span class="source-line-no">060</span><span id="line-60">import org.apache.hadoop.hbase.regionserver.ScanType;</span>
+<span class="source-line-no">061</span><span id="line-61">import org.apache.hadoop.hbase.regionserver.ScannerContext;</span>
+<span class="source-line-no">062</span><span id="line-62">import org.apache.hadoop.hbase.regionserver.Store;</span>
+<span class="source-line-no">063</span><span id="line-63">import org.apache.hadoop.hbase.regionserver.StoreFile;</span>
+<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;</span>
+<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;</span>
+<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
+<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">068</span><span id="line-68">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">069</span><span id="line-69">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">070</span><span id="line-70">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">071</span><span id="line-71">import org.junit.jupiter.api.TestInfo;</span>
+<span class="source-line-no">072</span><span id="line-72">import org.mockito.Mockito;</span>
+<span class="source-line-no">073</span><span id="line-73"></span>
+<span class="source-line-no">074</span><span id="line-74">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">075</span><span id="line-75">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">076</span><span id="line-76">public class TestCoprocessorInterface {</span>
+<span class="source-line-no">077</span><span id="line-77"></span>
+<span class="source-line-no">078</span><span id="line-78"> private String currentTestName;</span>
+<span class="source-line-no">079</span><span id="line-79"> private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();</span>
+<span class="source-line-no">080</span><span id="line-80"> static final Path DIR = TEST_UTIL.getDataTestDir();</span>
+<span class="source-line-no">081</span><span id="line-81"></span>
+<span class="source-line-no">082</span><span id="line-82"> @BeforeEach</span>
+<span class="source-line-no">083</span><span id="line-83"> public void setUp(TestInfo testInfo) {</span>
+<span class="source-line-no">084</span><span id="line-84"> currentTestName = testInfo.getTestMethod().get().getName();</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"></span>
+<span class="source-line-no">087</span><span id="line-87"> private static class CustomScanner implements RegionScanner {</span>
+<span class="source-line-no">088</span><span id="line-88"></span>
+<span class="source-line-no">089</span><span id="line-89"> private RegionScanner delegate;</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> public CustomScanner(RegionScanner delegate) {</span>
+<span class="source-line-no">092</span><span id="line-92"> this.delegate = delegate;</span>
+<span class="source-line-no">093</span><span id="line-93"> }</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95"> @Override</span>
+<span class="source-line-no">096</span><span id="line-96"> public boolean next(List<? super ExtendedCell> results) throws IOException {</span>
+<span class="source-line-no">097</span><span id="line-97"> return delegate.next(results);</span>
+<span class="source-line-no">098</span><span id="line-98"> }</span>
+<span class="source-line-no">099</span><span id="line-99"></span>
+<span class="source-line-no">100</span><span id="line-100"> @Override</span>
+<span class="source-line-no">101</span><span id="line-101"> public boolean next(List<? super ExtendedCell> result, ScannerContext scannerContext)</span>
+<span class="source-line-no">102</span><span id="line-102"> throws IOException {</span>
+<span class="source-line-no">103</span><span id="line-103"> return delegate.next(result, scannerContext);</span>
+<span class="source-line-no">104</span><span id="line-104"> }</span>
+<span class="source-line-no">105</span><span id="line-105"></span>
+<span class="source-line-no">106</span><span id="line-106"> @Override</span>
+<span class="source-line-no">107</span><span id="line-107"> public boolean nextRaw(List<? super ExtendedCell> result) throws IOException {</span>
+<span class="source-line-no">108</span><span id="line-108"> return delegate.nextRaw(result);</span>
+<span class="source-line-no">109</span><span id="line-109"> }</span>
+<span class="source-line-no">110</span><span id="line-110"></span>
+<span class="source-line-no">111</span><span id="line-111"> @Override</span>
+<span class="source-line-no">112</span><span id="line-112"> public boolean nextRaw(List<? super ExtendedCell> result, ScannerContext context)</span>
+<span class="source-line-no">113</span><span id="line-113"> throws IOException {</span>
+<span class="source-line-no">114</span><span id="line-114"> return delegate.nextRaw(result, context);</span>
+<span class="source-line-no">115</span><span id="line-115"> }</span>
+<span class="source-line-no">116</span><span id="line-116"></span>
+<span class="source-line-no">117</span><span id="line-117"> @Override</span>
+<span class="source-line-no">118</span><span id="line-118"> public Set<Path> getFilesRead() {</span>
+<span class="source-line-no">119</span><span id="line-119"> return delegate.getFilesRead();</span>
+<span class="source-line-no">120</span><span id="line-120"> }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122"> @Override</span>
+<span class="source-line-no">123</span><span id="line-123"> public void close() throws IOException {</span>
+<span class="source-line-no">124</span><span id="line-124"> delegate.close();</span>
+<span class="source-line-no">125</span><span id="line-125"> }</span>
+<span class="source-line-no">126</span><span id="line-126"></span>
+<span class="source-line-no">127</span><span id="line-127"> @Override</span>
+<span class="source-line-no">128</span><span id="line-128"> public RegionInfo getRegionInfo() {</span>
+<span class="source-line-no">129</span><span id="line-129"> return delegate.getRegionInfo();</span>
+<span class="source-line-no">130</span><span id="line-130"> }</span>
+<span class="source-line-no">131</span><span id="line-131"></span>
+<span class="source-line-no">132</span><span id="line-132"> @Override</span>
+<span class="source-line-no">133</span><span id="line-133"> public boolean isFilterDone() throws IOException {</span>
+<span class="source-line-no">134</span><span id="line-134"> return delegate.isFilterDone();</span>
+<span class="source-line-no">135</span><span id="line-135"> }</span>
+<span class="source-line-no">136</span><span id="line-136"></span>
+<span class="source-line-no">137</span><span id="line-137"> @Override</span>
+<span class="source-line-no">138</span><span id="line-138"> public boolean reseek(byte[] row) throws IOException {</span>
+<span class="source-line-no">139</span><span id="line-139"> return false;</span>
+<span class="source-line-no">140</span><span id="line-140"> }</span>
+<span class="source-line-no">141</span><span id="line-141"></span>
+<span class="source-line-no">142</span><span id="line-142"> @Override</span>
+<span class="source-line-no">143</span><span id="line-143"> public long getMaxResultSize() {</span>
+<span class="source-line-no">144</span><span id="line-144"> return delegate.getMaxResultSize();</span>
+<span class="source-line-no">145</span><span id="line-145"> }</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147"> @Override</span>
+<span class="source-line-no">148</span><span id="line-148"> public long getMvccReadPoint() {</span>
+<span class="source-line-no">149</span><span id="line-149"> return delegate.getMvccReadPoint();</span>
+<span class="source-line-no">150</span><span id="line-150"> }</span>
+<span class="source-line-no">151</span><span id="line-151"></span>
+<span class="source-line-no">152</span><span id="line-152"> @Override</span>
+<span class="source-line-no">153</span><span id="line-153"> public int getBatch() {</span>
+<span class="source-line-no">154</span><span id="line-154"> return delegate.getBatch();</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> }</span>
+<span class="source-line-no">157</span><span id="line-157"></span>
+<span class="source-line-no">158</span><span id="line-158"> public static class CoprocessorImpl implements RegionCoprocessor, RegionObserver {</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160"> private boolean startCalled;</span>
+<span class="source-line-no">161</span><span id="line-161"> private boolean stopCalled;</span>
+<span class="source-line-no">162</span><span id="line-162"> private boolean preOpenCalled;</span>
+<span class="source-line-no">163</span><span id="line-163"> private boolean postOpenCalled;</span>
+<span class="source-line-no">164</span><span id="line-164"> private boolean preCloseCalled;</span>
+<span class="source-line-no">165</span><span id="line-165"> private boolean postCloseCalled;</span>
+<span class="source-line-no">166</span><span id="line-166"> private boolean preCompactCalled;</span>
+<span class="source-line-no">167</span><span id="line-167"> private boolean postCompactCalled;</span>
+<span class="source-line-no">168</span><span id="line-168"> private boolean preFlushCalled;</span>
+<span class="source-line-no">169</span><span id="line-169"> private boolean postFlushCalled;</span>
+<span class="source-line-no">170</span><span id="line-170"> private ConcurrentMap<String, Object> sharedData;</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172"> @Override</span>
+<span class="source-line-no">173</span><span id="line-173"> public void start(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">174</span><span id="line-174"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
+<span class="source-line-no">175</span><span id="line-175"> // using new String here, so that there will be new object on each invocation</span>
+<span class="source-line-no">176</span><span id="line-176"> sharedData.putIfAbsent("test1", new Object());</span>
+<span class="source-line-no">177</span><span id="line-177"> startCalled = true;</span>
+<span class="source-line-no">178</span><span id="line-178"> }</span>
+<span class="source-line-no">179</span><span id="line-179"></span>
+<span class="source-line-no">180</span><span id="line-180"> @Override</span>
+<span class="source-line-no">181</span><span id="line-181"> public void stop(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">182</span><span id="line-182"> sharedData = null;</span>
+<span class="source-line-no">183</span><span id="line-183"> stopCalled = true;</span>
+<span class="source-line-no">184</span><span id="line-184"> }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186"> @Override</span>
+<span class="source-line-no">187</span><span id="line-187"> public Optional<RegionObserver> getRegionObserver() {</span>
+<span class="source-line-no">188</span><span id="line-188"> return Optional.of(this);</span>
+<span class="source-line-no">189</span><span id="line-189"> }</span>
+<span class="source-line-no">190</span><span id="line-190"></span>
+<span class="source-line-no">191</span><span id="line-191"> @Override</span>
+<span class="source-line-no">192</span><span id="line-192"> public void preOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
+<span class="source-line-no">193</span><span id="line-193"> preOpenCalled = true;</span>
+<span class="source-line-no">194</span><span id="line-194"> }</span>
+<span class="source-line-no">195</span><span id="line-195"></span>
+<span class="source-line-no">196</span><span id="line-196"> @Override</span>
+<span class="source-line-no">197</span><span id="line-197"> public void postOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
+<span class="source-line-no">198</span><span id="line-198"> postOpenCalled = true;</span>
+<span class="source-line-no">199</span><span id="line-199"> }</span>
+<span class="source-line-no">200</span><span id="line-200"></span>
+<span class="source-line-no">201</span><span id="line-201"> @Override</span>
+<span class="source-line-no">202</span><span id="line-202"> public void preClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">203</span><span id="line-203"> boolean abortRequested) {</span>
+<span class="source-line-no">204</span><span id="line-204"> preCloseCalled = true;</span>
+<span class="source-line-no">205</span><span id="line-205"> }</span>
+<span class="source-line-no">206</span><span id="line-206"></span>
+<span class="source-line-no">207</span><span id="line-207"> @Override</span>
+<span class="source-line-no">208</span><span id="line-208"> public void postClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">209</span><span id="line-209"> boolean abortRequested) {</span>
+<span class="source-line-no">210</span><span id="line-210"> postCloseCalled = true;</span>
+<span class="source-line-no">211</span><span id="line-211"> }</span>
+<span class="source-line-no">212</span><span id="line-212"></span>
+<span class="source-line-no">213</span><span id="line-213"> @Override</span>
+<span class="source-line-no">214</span><span id="line-214"> public InternalScanner preCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">215</span><span id="line-215"> Store store, InternalScanner scanner, ScanType scanType, CompactionLifeCycleTracker tracker,</span>
+<span class="source-line-no">216</span><span id="line-216"> CompactionRequest request) {</span>
+<span class="source-line-no">217</span><span id="line-217"> preCompactCalled = true;</span>
+<span class="source-line-no">218</span><span id="line-218"> return scanner;</span>
+<span class="source-line-no">219</span><span id="line-219"> }</span>
+<span class="source-line-no">220</span><span id="line-220"></span>
+<span class="source-line-no">221</span><span id="line-221"> @Override</span>
+<span class="source-line-no">222</span><span id="line-222"> public void postCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e, Store store,</span>
+<span class="source-line-no">223</span><span id="line-223"> StoreFile resultFile, CompactionLifeCycleTracker tracker, CompactionRequest request) {</span>
+<span class="source-line-no">224</span><span id="line-224"> postCompactCalled = true;</span>
+<span class="source-line-no">225</span><span id="line-225"> }</span>
+<span class="source-line-no">226</span><span id="line-226"></span>
+<span class="source-line-no">227</span><span id="line-227"> @Override</span>
+<span class="source-line-no">228</span><span id="line-228"> public void preFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">229</span><span id="line-229"> FlushLifeCycleTracker tracker) {</span>
+<span class="source-line-no">230</span><span id="line-230"> preFlushCalled = true;</span>
+<span class="source-line-no">231</span><span id="line-231"> }</span>
+<span class="source-line-no">232</span><span id="line-232"></span>
+<span class="source-line-no">233</span><span id="line-233"> @Override</span>
+<span class="source-line-no">234</span><span id="line-234"> public void postFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">235</span><span id="line-235"> FlushLifeCycleTracker tracker) {</span>
+<span class="source-line-no">236</span><span id="line-236"> postFlushCalled = true;</span>
+<span class="source-line-no">237</span><span id="line-237"> }</span>
+<span class="source-line-no">238</span><span id="line-238"></span>
+<span class="source-line-no">239</span><span id="line-239"> @Override</span>
+<span class="source-line-no">240</span><span id="line-240"> public RegionScanner postScannerOpen(</span>
+<span class="source-line-no">241</span><span id="line-241"> final ObserverContext<? extends RegionCoprocessorEnvironment> e, final Scan scan,</span>
+<span class="source-line-no">242</span><span id="line-242"> final RegionScanner s) throws IOException {</span>
+<span class="source-line-no">243</span><span id="line-243"> return new CustomScanner(s);</span>
+<span class="source-line-no">244</span><span id="line-244"> }</span>
+<span class="source-line-no">245</span><span id="line-245"></span>
+<span class="source-line-no">246</span><span id="line-246"> boolean wasStarted() {</span>
+<span class="source-line-no">247</span><span id="line-247"> return startCalled;</span>
+<span class="source-line-no">248</span><span id="line-248"> }</span>
+<span class="source-line-no">249</span><span id="line-249"></span>
+<span class="source-line-no">250</span><span id="line-250"> boolean wasStopped() {</span>
+<span class="source-line-no">251</span><span id="line-251"> return stopCalled;</span>
+<span class="source-line-no">252</span><span id="line-252"> }</span>
+<span class="source-line-no">253</span><span id="line-253"></span>
+<span class="source-line-no">254</span><span id="line-254"> boolean wasOpened() {</span>
+<span class="source-line-no">255</span><span id="line-255"> return (preOpenCalled && postOpenCalled);</span>
+<span class="source-line-no">256</span><span id="line-256"> }</span>
+<span class="source-line-no">257</span><span id="line-257"></span>
+<span class="source-line-no">258</span><span id="line-258"> boolean wasClosed() {</span>
+<span class="source-line-no">259</span><span id="line-259"> return (preCloseCalled && postCloseCalled);</span>
+<span class="source-line-no">260</span><span id="line-260"> }</span>
+<span class="source-line-no">261</span><span id="line-261"></span>
+<span class="source-line-no">262</span><span id="line-262"> boolean wasFlushed() {</span>
+<span class="source-line-no">263</span><span id="line-263"> return (preFlushCalled && postFlushCalled);</span>
+<span class="source-line-no">264</span><span id="line-264"> }</span>
+<span class="source-line-no">265</span><span id="line-265"></span>
+<span class="source-line-no">266</span><span id="line-266"> boolean wasCompacted() {</span>
+<span class="source-line-no">267</span><span id="line-267"> return (preCompactCalled && postCompactCalled);</span>
+<span class="source-line-no">268</span><span id="line-268"> }</span>
+<span class="source-line-no">269</span><span id="line-269"></span>
+<span class="source-line-no">270</span><span id="line-270"> Map<String, Object> getSharedData() {</span>
+<span class="source-line-no">271</span><span id="line-271"> return sharedData;</span>
+<span class="source-line-no">272</span><span id="line-272"> }</span>
+<span class="source-line-no">273</span><span id="line-273"> }</span>
+<span class="source-line-no">274</span><span id="line-274"></span>
+<span class="source-line-no">275</span><span id="line-275"> public static class CoprocessorII implements RegionCoprocessor {</span>
+<span class="source-line-no">276</span><span id="line-276"> private ConcurrentMap<String, Object> sharedData;</span>
+<span class="source-line-no">277</span><span id="line-277"></span>
+<span class="source-line-no">278</span><span id="line-278"> @Override</span>
+<span class="source-line-no">279</span><span id="line-279"> public void start(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">280</span><span id="line-280"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
+<span class="source-line-no">281</span><span id="line-281"> sharedData.putIfAbsent("test2", new Object());</span>
+<span class="source-line-no">282</span><span id="line-282"> }</span>
+<span class="source-line-no">283</span><span id="line-283"></span>
+<span class="source-line-no">284</span><span id="line-284"> @Override</span>
+<span class="source-line-no">285</span><span id="line-285"> public void stop(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">286</span><span id="line-286"> sharedData = null;</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"></span>
+<span class="source-line-no">289</span><span id="line-289"> @Override</span>
+<span class="source-line-no">290</span><span id="line-290"> public Optional<RegionObserver> getRegionObserver() {</span>
+<span class="source-line-no">291</span><span id="line-291"> return Optional.of(new RegionObserver() {</span>
+<span class="source-line-no">292</span><span id="line-292"> @Override</span>
+<span class="source-line-no">293</span><span id="line-293"> public void preGetOp(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">294</span><span id="line-294"> final Get get, final List<Cell> results) throws IOException {</span>
+<span class="source-line-no">295</span><span id="line-295"> throw new RuntimeException();</span>
+<span class="source-line-no">296</span><span id="line-296"> }</span>
+<span class="source-line-no">297</span><span id="line-297"> });</span>
+<span class="source-line-no">298</span><span id="line-298"> }</span>
+<span class="source-line-no">299</span><span id="line-299"></span>
+<span class="source-line-no">300</span><span id="line-300"> Map<String, Object> getSharedData() {</span>
+<span class="source-line-no">301</span><span id="line-301"> return sharedData;</span>
+<span class="source-line-no">302</span><span id="line-302"> }</span>
+<span class="source-line-no">303</span><span id="line-303"> }</span>
+<span class="source-line-no">304</span><span id="line-304"></span>
+<span class="source-line-no">305</span><span id="line-305"> @Test</span>
+<span class="source-line-no">306</span><span id="line-306"> public void testSharedData() throws IOException {</span>
+<span class="source-line-no">307</span><span id="line-307"> TableName tableName = TableName.valueOf(currentTestName);</span>
+<span class="source-line-no">308</span><span id="line-308"> byte[][] families = { fam1, fam2, fam3 };</span>
+<span class="source-line-no">309</span><span id="line-309"></span>
+<span class="source-line-no">310</span><span id="line-310"> Configuration hc = initConfig();</span>
+<span class="source-line-no">311</span><span id="line-311"> HRegion region = initHRegion(tableName, currentTestName, hc, new Class<?>[] {}, families);</span>
+<span class="source-line-no">312</span><span id="line-312"></span>
+<span class="source-line-no">313</span><span id="line-313"> for (int i = 0; i < 3; i++) {</span>
+<span class="source-line-no">314</span><span id="line-314"> HTestConst.addContent(region, fam3);</span>
+<span class="source-line-no">315</span><span id="line-315"> region.flush(true);</span>
+<span class="source-line-no">316</span><span id="line-316"> }</span>
+<span class="source-line-no">317</span><span id="line-317"></span>
+<span class="source-line-no">318</span><span id="line-318"> region.compact(false);</span>
+<span class="source-line-no">319</span><span id="line-319"></span>
+<span class="source-line-no">320</span><span id="line-320"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
+<span class="source-line-no">321</span><span id="line-321"></span>
+<span class="source-line-no">322</span><span id="line-322"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">323</span><span id="line-323"> Coprocessor c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
+<span class="source-line-no">324</span><span id="line-324"> Object o = ((CoprocessorImpl) c).getSharedData().get("test1");</span>
+<span class="source-line-no">325</span><span id="line-325"> Object o2 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
+<span class="source-line-no">326</span><span id="line-326"> assertNotNull(o);</span>
+<span class="source-line-no">327</span><span id="line-327"> assertNotNull(o2);</span>
+<span class="source-line-no">328</span><span id="line-328"> // to coprocessors get different sharedDatas</span>
+<span class="source-line-no">329</span><span id="line-329"> assertFalse(((CoprocessorImpl) c).getSharedData() == ((CoprocessorII) c2).getSharedData());</span>
+<span class="source-line-no">330</span><span id="line-330"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">331</span><span id="line-331"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
+<span class="source-line-no">332</span><span id="line-332"> // make sure that all coprocessor of a class have identical sharedDatas</span>
+<span class="source-line-no">333</span><span id="line-333"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
+<span class="source-line-no">334</span><span id="line-334"> assertTrue(((CoprocessorII) c2).getSharedData().get("test2") == o2);</span>
+<span class="source-line-no">335</span><span id="line-335"></span>
+<span class="source-line-no">336</span><span id="line-336"> // now have all Environments fail</span>
+<span class="source-line-no">337</span><span id="line-337"> try {</span>
+<span class="source-line-no">338</span><span id="line-338"> byte[] r = region.getRegionInfo().getStartKey();</span>
+<span class="source-line-no">339</span><span id="line-339"> if (r == null || r.length <= 0) {</span>
+<span class="source-line-no">340</span><span id="line-340"> // Its the start row. Can't ask for null. Ask for minimal key instead.</span>
+<span class="source-line-no">341</span><span id="line-341"> r = new byte[] { 0 };</span>
+<span class="source-line-no">342</span><span id="line-342"> }</span>
+<span class="source-line-no">343</span><span id="line-343"> Get g = new Get(r);</span>
+<span class="source-line-no">344</span><span id="line-344"> region.get(g);</span>
+<span class="source-line-no">345</span><span id="line-345"> fail();</span>
+<span class="source-line-no">346</span><span id="line-346"> } catch (org.apache.hadoop.hbase.DoNotRetryIOException xc) {</span>
+<span class="source-line-no">347</span><span id="line-347"> }</span>
+<span class="source-line-no">348</span><span id="line-348"> assertNull(region.getCoprocessorHost().findCoprocessor(CoprocessorII.class));</span>
+<span class="source-line-no">349</span><span id="line-349"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">350</span><span id="line-350"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
+<span class="source-line-no">351</span><span id="line-351"> c = c2 = null;</span>
+<span class="source-line-no">352</span><span id="line-352"> // perform a GC</span>
+<span class="source-line-no">353</span><span id="line-353"> System.gc();</span>
+<span class="source-line-no">354</span><span id="line-354"> // reopen the region</span>
+<span class="source-line-no">355</span><span id="line-355"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
+<span class="source-line-no">356</span><span id="line-356"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">357</span><span id="line-357"> // CPimpl is unaffected, still the same reference</span>
+<span class="source-line-no">358</span><span id="line-358"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
+<span class="source-line-no">359</span><span id="line-359"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
+<span class="source-line-no">360</span><span id="line-360"> // new map and object created, hence the reference is different</span>
+<span class="source-line-no">361</span><span id="line-361"> // hence the old entry was indeed removed by the GC and new one has been created</span>
+<span class="source-line-no">362</span><span id="line-362"> Object o3 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
+<span class="source-line-no">363</span><span id="line-363"> assertFalse(o3 == o2);</span>
+<span class="source-line-no">364</span><span id="line-364"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
+<span class="source-line-no">365</span><span id="line-365"> }</span>
+<span class="source-line-no">366</span><span id="line-366"></span>
+<span class="source-line-no">367</span><span id="line-367"> @Test</span>
+<span class="source-line-no">368</span><span id="line-368"> public void testCoprocessorInterface() throws IOException {</span>
+<span class="source-line-no">369</span><span id="line-369"> TableName tableName = TableName.valueOf(currentTestName);</span>
+<span class="source-line-no">370</span><span id="line-370"> byte[][] families = { fam1, fam2, fam3 };</span>
+<span class="source-line-no">371</span><span id="line-371"></span>
+<span class="source-line-no">372</span><span id="line-372"> Configuration hc = initConfig();</span>
+<span class="source-line-no">373</span><span id="line-373"> HRegion region = initHRegion(tableName, currentTestName, hc,</span>
+<span class="source-line-no">374</span><span id="line-374"> new Class<?>[] { CoprocessorImpl.class }, families);</span>
+<span class="source-line-no">375</span><span id="line-375"> for (int i = 0; i < 3; i++) {</span>
+<span class="source-line-no">376</span><span id="line-376"> HTestConst.addContent(region, fam3);</span>
+<span class="source-line-no">377</span><span id="line-377"> region.flush(true);</span>
+<span class="source-line-no">378</span><span id="line-378"> }</span>
+<span class="source-line-no">379</span><span id="line-379"></span>
+<span class="source-line-no">380</span><span id="line-380"> region.compact(false);</span>
+<span class="source-line-no">381</span><span id="line-381"></span>
+<span class="source-line-no">382</span><span id="line-382"> // HBASE-4197</span>
+<span class="source-line-no">383</span><span id="line-383"> Scan s = new Scan();</span>
+<span class="source-line-no">384</span><span id="line-384"> RegionScanner scanner = region.getCoprocessorHost().postScannerOpen(s, region.getScanner(s));</span>
+<span class="source-line-no">385</span><span id="line-385"> assertTrue(scanner instanceof CustomScanner);</span>
+<span class="source-line-no">386</span><span id="line-386"> // this would throw an exception before HBASE-4197</span>
+<span class="source-line-no">387</span><span id="line-387"> scanner.next(new ArrayList<>());</span>
+<span class="source-line-no">388</span><span id="line-388"></span>
+<span class="source-line-no">389</span><span id="line-389"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
+<span class="source-line-no">390</span><span id="line-390"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">391</span><span id="line-391"></span>
+<span class="source-line-no">392</span><span id="line-392"> assertTrue(((CoprocessorImpl) c).wasStarted(), "Coprocessor not started");</span>
+<span class="source-line-no">393</span><span id="line-393"> assertTrue(((CoprocessorImpl) c).wasStopped(), "Coprocessor not stopped");</span>
+<span class="source-line-no">394</span><span id="line-394"> assertTrue(((CoprocessorImpl) c).wasOpened());</span>
+<span class="source-line-no">395</span><span id="line-395"> assertTrue(((CoprocessorImpl) c).wasClosed());</span>
+<span class="source-line-no">396</span><span id="line-396"> assertTrue(((CoprocessorImpl) c).wasFlushed());</span>
+<span class="source-line-no">397</span><span id="line-397"> assertTrue(((CoprocessorImpl) c).wasCompacted());</span>
+<span class="source-line-no">398</span><span id="line-398"> }</span>
+<span class="source-line-no">399</span><span id="line-399"></span>
+<span class="source-line-no">400</span><span id="line-400"> HRegion reopenRegion(final HRegion closedRegion, Class<?>... implClasses) throws IOException {</span>
+<span class="source-line-no">401</span><span id="line-401"> // RegionInfo info = new RegionInfo(tableName, null, null, false);</span>
+<span class="source-line-no">402</span><span id="line-402"> HRegion r = HRegion.openHRegion(closedRegion, null);</span>
+<span class="source-line-no">403</span><span id="line-403"></span>
+<span class="source-line-no">404</span><span id="line-404"> // this following piece is a hack. currently a coprocessorHost</span>
+<span class="source-line-no">405</span><span id="line-405"> // is secretly loaded at OpenRegionHandler. we don't really</span>
+<span class="source-line-no">406</span><span id="line-406"> // start a region server here, so just manually create cphost</span>
+<span class="source-line-no">407</span><span id="line-407"> // and set it to region.</span>
+<span class="source-line-no">408</span><span id="line-408"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">409</span><span id="line-409"> RegionCoprocessorHost host =</span>
+<span class="source-line-no">410</span><span id="line-410"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
+<span class="source-line-no">411</span><span id="line-411"> r.setCoprocessorHost(host);</span>
+<span class="source-line-no">412</span><span id="line-412"></span>
+<span class="source-line-no">413</span><span id="line-413"> for (Class<?> implClass : implClasses) {</span>
+<span class="source-line-no">414</span><span id="line-414"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
+<span class="source-line-no">415</span><span id="line-415"> }</span>
+<span class="source-line-no">416</span><span id="line-416"> // we need to manually call pre- and postOpen here since the</span>
+<span class="source-line-no">417</span><span id="line-417"> // above load() is not the real case for CP loading. A CP is</span>
+<span class="source-line-no">418</span><span id="line-418"> // expected to be loaded by default from 1) configuration; or 2)</span>
+<span class="source-line-no">419</span><span id="line-419"> // HTableDescriptor. If it's loaded after HRegion initialized,</span>
+<span class="source-line-no">420</span><span id="line-420"> // the pre- and postOpen() won't be triggered automatically.</span>
+<span class="source-line-no">421</span><span id="line-421"> // Here we have to call pre and postOpen explicitly.</span>
+<span class="source-line-no">422</span><span id="line-422"> host.preOpen();</span>
+<span class="source-line-no">423</span><span id="line-423"> host.postOpen();</span>
+<span class="source-line-no">424</span><span id="line-424"> return r;</span>
+<span class="source-line-no">425</span><span id="line-425"> }</span>
+<span class="source-line-no">426</span><span id="line-426"></span>
+<span class="source-line-no">427</span><span id="line-427"> HRegion initHRegion(TableName tableName, String callingMethod, Configuration conf,</span>
+<span class="source-line-no">428</span><span id="line-428"> Class<?>[] implClasses, byte[][] families) throws IOException {</span>
+<span class="source-line-no">429</span><span id="line-429"> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
+<span class="source-line-no">430</span><span id="line-430"> for (byte[] family : families) {</span>
+<span class="source-line-no">431</span><span id="line-431"> builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(family));</span>
+<span class="source-line-no">432</span><span id="line-432"> }</span>
+<span class="source-line-no">433</span><span id="line-433"> ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0, 0, null,</span>
+<span class="source-line-no">434</span><span id="line-434"> MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);</span>
+<span class="source-line-no">435</span><span id="line-435"> RegionInfo info = RegionInfoBuilder.newBuilder(tableName).setStartKey(null).setEndKey(null)</span>
+<span class="source-line-no">436</span><span id="line-436"> .setSplit(false).build();</span>
+<span class="source-line-no">437</span><span id="line-437"> Path path = new Path(DIR + callingMethod);</span>
+<span class="source-line-no">438</span><span id="line-438"> HRegion r = HBaseTestingUtil.createRegionAndWAL(info, path, conf, builder.build());</span>
+<span class="source-line-no">439</span><span id="line-439"></span>
+<span class="source-line-no">440</span><span id="line-440"> // this following piece is a hack.</span>
+<span class="source-line-no">441</span><span id="line-441"> RegionCoprocessorHost host =</span>
+<span class="source-line-no">442</span><span id="line-442"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
+<span class="source-line-no">443</span><span id="line-443"> r.setCoprocessorHost(host);</span>
+<span class="source-line-no">444</span><span id="line-444"></span>
+<span class="source-line-no">445</span><span id="line-445"> for (Class<?> implClass : implClasses) {</span>
+<span class="source-line-no">446</span><span id="line-446"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
+<span class="source-line-no">447</span><span id="line-447"> Coprocessor c = host.findCoprocessor(implClass.getName());</span>
+<span class="source-line-no">448</span><span id="line-448"> assertNotNull(c);</span>
+<span class="source-line-no">449</span><span id="line-449"> }</span>
+<span class="source-line-no">450</span><span id="line-450"></span>
+<span class="source-line-no">451</span><span id="line-451"> // Here we have to call pre and postOpen explicitly.</span>
+<span class="source-line-no">452</span><span id="line-452"> host.preOpen();</span>
+<span class="source-line-no">453</span><span id="line-453"> host.postOpen();</span>
+<span class="source-line-no">454</span><span id="line-454"> return r;</span>
+<span class="source-line-no">455</span><span id="line-455"> }</span>
+<span class="source-line-no">456</span><span id="line-456"></span>
+<span class="source-line-no">457</span><span id="line-457"> private Configuration initConfig() {</span>
+<span class="source-line-no">458</span><span id="line-458"> // Always compact if there is more than one store file.</span>
+<span class="source-line-no">459</span><span id="line-459"> TEST_UTIL.getConfiguration().setInt("hbase.hstore.compactionThreshold", 2);</span>
+<span class="source-line-no">460</span><span id="line-460"> TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, 10 * 1000);</span>
+<span class="source-line-no">461</span><span id="line-461"> // Increase the amount of time between client retries</span>
+<span class="source-line-no">462</span><span id="line-462"> TEST_UTIL.getConfiguration().setLong("hbase.client.pause", 15 * 1000);</span>
+<span class="source-line-no">463</span><span id="line-463"> // This size should make it so we always split using the addContent</span>
+<span class="source-line-no">464</span><span id="line-464"> // below. After adding all data, the first region is 1.3M</span>
+<span class="source-line-no">465</span><span id="line-465"> TEST_UTIL.getConfiguration().setLong(HConstants.HREGION_MAX_FILESIZE, 1024 * 128);</span>
+<span class="source-line-no">466</span><span id="line-466"> TEST_UTIL.getConfiguration().setBoolean(CoprocessorHost.ABORT_ON_ERROR_KEY, false);</span>
+<span class="source-line-no">467</span><span id="line-467"></span>
+<span class="source-line-no">468</span><span id="line-468"> return TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">469</span><span id="line-469"> }</span>
+<span class="source-line-no">470</span><span id="line-470">}</span>
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html
index 68853729dcf..3d84dfcac15 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.html
@@ -33,11 +33,11 @@
<span class="source-line-no">020</span><span id="line-20">import static org.apache.hadoop.hbase.HBaseTestingUtil.fam1;</span>
<span class="source-line-no">021</span><span id="line-21">import static org.apache.hadoop.hbase.HBaseTestingUtil.fam2;</span>
<span class="source-line-no">022</span><span id="line-22">import static org.apache.hadoop.hbase.HBaseTestingUtil.fam3;</span>
-<span class="source-line-no">023</span><span id="line-23">import static org.junit.Assert.assertFalse;</span>
-<span class="source-line-no">024</span><span id="line-24">import static org.junit.Assert.assertNotNull;</span>
-<span class="source-line-no">025</span><span id="line-25">import static org.junit.Assert.assertNull;</span>
-<span class="source-line-no">026</span><span id="line-26">import static org.junit.Assert.assertTrue;</span>
-<span class="source-line-no">027</span><span id="line-27">import static org.junit.Assert.fail;</span>
+<span class="source-line-no">023</span><span id="line-23">import static org.junit.jupiter.api.Assertions.assertFalse;</span>
+<span class="source-line-no">024</span><span id="line-24">import static org.junit.jupiter.api.Assertions.assertNotNull;</span>
+<span class="source-line-no">025</span><span id="line-25">import static org.junit.jupiter.api.Assertions.assertNull;</span>
+<span class="source-line-no">026</span><span id="line-26">import static org.junit.jupiter.api.Assertions.assertTrue;</span>
+<span class="source-line-no">027</span><span id="line-27">import static org.junit.jupiter.api.Assertions.fail;</span>
<span class="source-line-no">028</span><span id="line-28"></span>
<span class="source-line-no">029</span><span id="line-29">import java.io.IOException;</span>
<span class="source-line-no">030</span><span id="line-30">import java.util.ArrayList;</span>
@@ -52,436 +52,435 @@
<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.Coprocessor;</span>
<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.CoprocessorEnvironment;</span>
<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.ExtendedCell;</span>
-<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.HBaseClassTestRule;</span>
-<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
-<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.HConstants;</span>
-<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.HTestConst;</span>
-<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.TableName;</span>
-<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;</span>
-<span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.client.Get;</span>
-<span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.client.RegionInfo;</span>
-<span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
-<span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.client.Scan;</span>
-<span class="source-line-no">052</span><span id="line-52">import org.apache.hadoop.hbase.client.TableDescriptorBuilder;</span>
-<span class="source-line-no">053</span><span id="line-53">import org.apache.hadoop.hbase.regionserver.ChunkCreator;</span>
-<span class="source-line-no">054</span><span id="line-54">import org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker;</span>
-<span class="source-line-no">055</span><span id="line-55">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
-<span class="source-line-no">056</span><span id="line-56">import org.apache.hadoop.hbase.regionserver.InternalScanner;</span>
-<span class="source-line-no">057</span><span id="line-57">import org.apache.hadoop.hbase.regionserver.MemStoreLAB;</span>
-<span class="source-line-no">058</span><span id="line-58">import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;</span>
-<span class="source-line-no">059</span><span id="line-59">import org.apache.hadoop.hbase.regionserver.RegionScanner;</span>
-<span class="source-line-no">060</span><span id="line-60">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
-<span class="source-line-no">061</span><span id="line-61">import org.apache.hadoop.hbase.regionserver.ScanType;</span>
-<span class="source-line-no">062</span><span id="line-62">import org.apache.hadoop.hbase.regionserver.ScannerContext;</span>
-<span class="source-line-no">063</span><span id="line-63">import org.apache.hadoop.hbase.regionserver.Store;</span>
-<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.hbase.regionserver.StoreFile;</span>
-<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;</span>
-<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;</span>
-<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
-<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
-<span class="source-line-no">069</span><span id="line-69">import org.junit.ClassRule;</span>
-<span class="source-line-no">070</span><span id="line-70">import org.junit.Rule;</span>
-<span class="source-line-no">071</span><span id="line-71">import org.junit.Test;</span>
-<span class="source-line-no">072</span><span id="line-72">import org.junit.experimental.categories.Category;</span>
-<span class="source-line-no">073</span><span id="line-73">import org.junit.rules.TestName;</span>
-<span class="source-line-no">074</span><span id="line-74">import org.mockito.Mockito;</span>
-<span class="source-line-no">075</span><span id="line-75"></span>
-<span class="source-line-no">076</span><span id="line-76">@Category({ CoprocessorTests.class, MediumTests.class })</span>
-<span class="source-line-no">077</span><span id="line-77">public class TestCoprocessorInterface {</span>
-<span class="source-line-no">078</span><span id="line-78"></span>
-<span class="source-line-no">079</span><span id="line-79"> @ClassRule</span>
-<span class="source-line-no">080</span><span id="line-80"> public static final HBaseClassTestRule CLASS_RULE =</span>
-<span class="source-line-no">081</span><span id="line-81"> HBaseClassTestRule.forClass(TestCoprocessorInterface.class);</span>
-<span class="source-line-no">082</span><span id="line-82"></span>
-<span class="source-line-no">083</span><span id="line-83"> @Rule</span>
-<span class="source-line-no">084</span><span id="line-84"> public TestName name = new TestName();</span>
-<span class="source-line-no">085</span><span id="line-85"> private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();</span>
-<span class="source-line-no">086</span><span id="line-86"> static final Path DIR = TEST_UTIL.getDataTestDir();</span>
-<span class="source-line-no">087</span><span id="line-87"></span>
-<span class="source-line-no">088</span><span id="line-88"> private static class CustomScanner implements RegionScanner {</span>
-<span class="source-line-no">089</span><span id="line-89"></span>
-<span class="source-line-no">090</span><span id="line-90"> private RegionScanner delegate;</span>
-<span class="source-line-no">091</span><span id="line-91"></span>
-<span class="source-line-no">092</span><span id="line-92"> public CustomScanner(RegionScanner delegate) {</span>
-<span class="source-line-no">093</span><span id="line-93"> this.delegate = delegate;</span>
-<span class="source-line-no">094</span><span id="line-94"> }</span>
-<span class="source-line-no">095</span><span id="line-95"></span>
-<span class="source-line-no">096</span><span id="line-96"> @Override</span>
-<span class="source-line-no">097</span><span id="line-97"> public boolean next(List<? super ExtendedCell> results) throws IOException {</span>
-<span class="source-line-no">098</span><span id="line-98"> return delegate.next(results);</span>
-<span class="source-line-no">099</span><span id="line-99"> }</span>
-<span class="source-line-no">100</span><span id="line-100"></span>
-<span class="source-line-no">101</span><span id="line-101"> @Override</span>
-<span class="source-line-no">102</span><span id="line-102"> public boolean next(List<? super ExtendedCell> result, ScannerContext scannerContext)</span>
-<span class="source-line-no">103</span><span id="line-103"> throws IOException {</span>
-<span class="source-line-no">104</span><span id="line-104"> return delegate.next(result, scannerContext);</span>
-<span class="source-line-no">105</span><span id="line-105"> }</span>
-<span class="source-line-no">106</span><span id="line-106"></span>
-<span class="source-line-no">107</span><span id="line-107"> @Override</span>
-<span class="source-line-no">108</span><span id="line-108"> public boolean nextRaw(List<? super ExtendedCell> result) throws IOException {</span>
-<span class="source-line-no">109</span><span id="line-109"> return delegate.nextRaw(result);</span>
-<span class="source-line-no">110</span><span id="line-110"> }</span>
-<span class="source-line-no">111</span><span id="line-111"></span>
-<span class="source-line-no">112</span><span id="line-112"> @Override</span>
-<span class="source-line-no">113</span><span id="line-113"> public boolean nextRaw(List<? super ExtendedCell> result, ScannerContext context)</span>
-<span class="source-line-no">114</span><span id="line-114"> throws IOException {</span>
-<span class="source-line-no">115</span><span id="line-115"> return delegate.nextRaw(result, context);</span>
-<span class="source-line-no">116</span><span id="line-116"> }</span>
-<span class="source-line-no">117</span><span id="line-117"></span>
-<span class="source-line-no">118</span><span id="line-118"> @Override</span>
-<span class="source-line-no">119</span><span id="line-119"> public Set<Path> getFilesRead() {</span>
-<span class="source-line-no">120</span><span id="line-120"> return delegate.getFilesRead();</span>
-<span class="source-line-no">121</span><span id="line-121"> }</span>
-<span class="source-line-no">122</span><span id="line-122"></span>
-<span class="source-line-no">123</span><span id="line-123"> @Override</span>
-<span class="source-line-no">124</span><span id="line-124"> public void close() throws IOException {</span>
-<span class="source-line-no">125</span><span id="line-125"> delegate.close();</span>
-<span class="source-line-no">126</span><span id="line-126"> }</span>
-<span class="source-line-no">127</span><span id="line-127"></span>
-<span class="source-line-no">128</span><span id="line-128"> @Override</span>
-<span class="source-line-no">129</span><span id="line-129"> public RegionInfo getRegionInfo() {</span>
-<span class="source-line-no">130</span><span id="line-130"> return delegate.getRegionInfo();</span>
-<span class="source-line-no">131</span><span id="line-131"> }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133"> @Override</span>
-<span class="source-line-no">134</span><span id="line-134"> public boolean isFilterDone() throws IOException {</span>
-<span class="source-line-no">135</span><span id="line-135"> return delegate.isFilterDone();</span>
-<span class="source-line-no">136</span><span id="line-136"> }</span>
-<span class="source-line-no">137</span><span id="line-137"></span>
-<span class="source-line-no">138</span><span id="line-138"> @Override</span>
-<span class="source-line-no">139</span><span id="line-139"> public boolean reseek(byte[] row) throws IOException {</span>
-<span class="source-line-no">140</span><span id="line-140"> return false;</span>
-<span class="source-line-no">141</span><span id="line-141"> }</span>
-<span class="source-line-no">142</span><span id="line-142"></span>
-<span class="source-line-no">143</span><span id="line-143"> @Override</span>
-<span class="source-line-no">144</span><span id="line-144"> public long getMaxResultSize() {</span>
-<span class="source-line-no">145</span><span id="line-145"> return delegate.getMaxResultSize();</span>
-<span class="source-line-no">146</span><span id="line-146"> }</span>
-<span class="source-line-no">147</span><span id="line-147"></span>
-<span class="source-line-no">148</span><span id="line-148"> @Override</span>
-<span class="source-line-no">149</span><span id="line-149"> public long getMvccReadPoint() {</span>
-<span class="source-line-no">150</span><span id="line-150"> return delegate.getMvccReadPoint();</span>
-<span class="source-line-no">151</span><span id="line-151"> }</span>
-<span class="source-line-no">152</span><span id="line-152"></span>
-<span class="source-line-no">153</span><span id="line-153"> @Override</span>
-<span class="source-line-no">154</span><span id="line-154"> public int getBatch() {</span>
-<span class="source-line-no">155</span><span id="line-155"> return delegate.getBatch();</span>
-<span class="source-line-no">156</span><span id="line-156"> }</span>
-<span class="source-line-no">157</span><span id="line-157"> }</span>
-<span class="source-line-no">158</span><span id="line-158"></span>
-<span class="source-line-no">159</span><span id="line-159"> public static class CoprocessorImpl implements RegionCoprocessor, RegionObserver {</span>
-<span class="source-line-no">160</span><span id="line-160"></span>
-<span class="source-line-no">161</span><span id="line-161"> private boolean startCalled;</span>
-<span class="source-line-no">162</span><span id="line-162"> private boolean stopCalled;</span>
-<span class="source-line-no">163</span><span id="line-163"> private boolean preOpenCalled;</span>
-<span class="source-line-no">164</span><span id="line-164"> private boolean postOpenCalled;</span>
-<span class="source-line-no">165</span><span id="line-165"> private boolean preCloseCalled;</span>
-<span class="source-line-no">166</span><span id="line-166"> private boolean postCloseCalled;</span>
-<span class="source-line-no">167</span><span id="line-167"> private boolean preCompactCalled;</span>
-<span class="source-line-no">168</span><span id="line-168"> private boolean postCompactCalled;</span>
-<span class="source-line-no">169</span><span id="line-169"> private boolean preFlushCalled;</span>
-<span class="source-line-no">170</span><span id="line-170"> private boolean postFlushCalled;</span>
-<span class="source-line-no">171</span><span id="line-171"> private ConcurrentMap<String, Object> sharedData;</span>
-<span class="source-line-no">172</span><span id="line-172"></span>
-<span class="source-line-no">173</span><span id="line-173"> @Override</span>
-<span class="source-line-no">174</span><span id="line-174"> public void start(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">175</span><span id="line-175"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
-<span class="source-line-no">176</span><span id="line-176"> // using new String here, so that there will be new object on each invocation</span>
-<span class="source-line-no">177</span><span id="line-177"> sharedData.putIfAbsent("test1", new Object());</span>
-<span class="source-line-no">178</span><span id="line-178"> startCalled = true;</span>
-<span class="source-line-no">179</span><span id="line-179"> }</span>
-<span class="source-line-no">180</span><span id="line-180"></span>
-<span class="source-line-no">181</span><span id="line-181"> @Override</span>
-<span class="source-line-no">182</span><span id="line-182"> public void stop(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">183</span><span id="line-183"> sharedData = null;</span>
-<span class="source-line-no">184</span><span id="line-184"> stopCalled = true;</span>
-<span class="source-line-no">185</span><span id="line-185"> }</span>
-<span class="source-line-no">186</span><span id="line-186"></span>
-<span class="source-line-no">187</span><span id="line-187"> @Override</span>
-<span class="source-line-no">188</span><span id="line-188"> public Optional<RegionObserver> getRegionObserver() {</span>
-<span class="source-line-no">189</span><span id="line-189"> return Optional.of(this);</span>
-<span class="source-line-no">190</span><span id="line-190"> }</span>
-<span class="source-line-no">191</span><span id="line-191"></span>
-<span class="source-line-no">192</span><span id="line-192"> @Override</span>
-<span class="source-line-no">193</span><span id="line-193"> public void preOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
-<span class="source-line-no">194</span><span id="line-194"> preOpenCalled = true;</span>
-<span class="source-line-no">195</span><span id="line-195"> }</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197"> @Override</span>
-<span class="source-line-no">198</span><span id="line-198"> public void postOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
-<span class="source-line-no">199</span><span id="line-199"> postOpenCalled = true;</span>
-<span class="source-line-no">200</span><span id="line-200"> }</span>
-<span class="source-line-no">201</span><span id="line-201"></span>
-<span class="source-line-no">202</span><span id="line-202"> @Override</span>
-<span class="source-line-no">203</span><span id="line-203"> public void preClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">204</span><span id="line-204"> boolean abortRequested) {</span>
-<span class="source-line-no">205</span><span id="line-205"> preCloseCalled = true;</span>
-<span class="source-line-no">206</span><span id="line-206"> }</span>
-<span class="source-line-no">207</span><span id="line-207"></span>
-<span class="source-line-no">208</span><span id="line-208"> @Override</span>
-<span class="source-line-no">209</span><span id="line-209"> public void postClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">210</span><span id="line-210"> boolean abortRequested) {</span>
-<span class="source-line-no">211</span><span id="line-211"> postCloseCalled = true;</span>
-<span class="source-line-no">212</span><span id="line-212"> }</span>
-<span class="source-line-no">213</span><span id="line-213"></span>
-<span class="source-line-no">214</span><span id="line-214"> @Override</span>
-<span class="source-line-no">215</span><span id="line-215"> public InternalScanner preCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">216</span><span id="line-216"> Store store, InternalScanner scanner, ScanType scanType, CompactionLifeCycleTracker tracker,</span>
-<span class="source-line-no">217</span><span id="line-217"> CompactionRequest request) {</span>
-<span class="source-line-no">218</span><span id="line-218"> preCompactCalled = true;</span>
-<span class="source-line-no">219</span><span id="line-219"> return scanner;</span>
-<span class="source-line-no">220</span><span id="line-220"> }</span>
-<span class="source-line-no">221</span><span id="line-221"></span>
-<span class="source-line-no">222</span><span id="line-222"> @Override</span>
-<span class="source-line-no">223</span><span id="line-223"> public void postCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e, Store store,</span>
-<span class="source-line-no">224</span><span id="line-224"> StoreFile resultFile, CompactionLifeCycleTracker tracker, CompactionRequest request) {</span>
-<span class="source-line-no">225</span><span id="line-225"> postCompactCalled = true;</span>
-<span class="source-line-no">226</span><span id="line-226"> }</span>
-<span class="source-line-no">227</span><span id="line-227"></span>
-<span class="source-line-no">228</span><span id="line-228"> @Override</span>
-<span class="source-line-no">229</span><span id="line-229"> public void preFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">230</span><span id="line-230"> FlushLifeCycleTracker tracker) {</span>
-<span class="source-line-no">231</span><span id="line-231"> preFlushCalled = true;</span>
-<span class="source-line-no">232</span><span id="line-232"> }</span>
-<span class="source-line-no">233</span><span id="line-233"></span>
-<span class="source-line-no">234</span><span id="line-234"> @Override</span>
-<span class="source-line-no">235</span><span id="line-235"> public void postFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">236</span><span id="line-236"> FlushLifeCycleTracker tracker) {</span>
-<span class="source-line-no">237</span><span id="line-237"> postFlushCalled = true;</span>
-<span class="source-line-no">238</span><span id="line-238"> }</span>
-<span class="source-line-no">239</span><span id="line-239"></span>
-<span class="source-line-no">240</span><span id="line-240"> @Override</span>
-<span class="source-line-no">241</span><span id="line-241"> public RegionScanner postScannerOpen(</span>
-<span class="source-line-no">242</span><span id="line-242"> final ObserverContext<? extends RegionCoprocessorEnvironment> e, final Scan scan,</span>
-<span class="source-line-no">243</span><span id="line-243"> final RegionScanner s) throws IOException {</span>
-<span class="source-line-no">244</span><span id="line-244"> return new CustomScanner(s);</span>
-<span class="source-line-no">245</span><span id="line-245"> }</span>
-<span class="source-line-no">246</span><span id="line-246"></span>
-<span class="source-line-no">247</span><span id="line-247"> boolean wasStarted() {</span>
-<span class="source-line-no">248</span><span id="line-248"> return startCalled;</span>
-<span class="source-line-no">249</span><span id="line-249"> }</span>
-<span class="source-line-no">250</span><span id="line-250"></span>
-<span class="source-line-no">251</span><span id="line-251"> boolean wasStopped() {</span>
-<span class="source-line-no">252</span><span id="line-252"> return stopCalled;</span>
-<span class="source-line-no">253</span><span id="line-253"> }</span>
-<span class="source-line-no">254</span><span id="line-254"></span>
-<span class="source-line-no">255</span><span id="line-255"> boolean wasOpened() {</span>
-<span class="source-line-no">256</span><span id="line-256"> return (preOpenCalled && postOpenCalled);</span>
-<span class="source-line-no">257</span><span id="line-257"> }</span>
-<span class="source-line-no">258</span><span id="line-258"></span>
-<span class="source-line-no">259</span><span id="line-259"> boolean wasClosed() {</span>
-<span class="source-line-no">260</span><span id="line-260"> return (preCloseCalled && postCloseCalled);</span>
-<span class="source-line-no">261</span><span id="line-261"> }</span>
-<span class="source-line-no">262</span><span id="line-262"></span>
-<span class="source-line-no">263</span><span id="line-263"> boolean wasFlushed() {</span>
-<span class="source-line-no">264</span><span id="line-264"> return (preFlushCalled && postFlushCalled);</span>
-<span class="source-line-no">265</span><span id="line-265"> }</span>
-<span class="source-line-no">266</span><span id="line-266"></span>
-<span class="source-line-no">267</span><span id="line-267"> boolean wasCompacted() {</span>
-<span class="source-line-no">268</span><span id="line-268"> return (preCompactCalled && postCompactCalled);</span>
-<span class="source-line-no">269</span><span id="line-269"> }</span>
-<span class="source-line-no">270</span><span id="line-270"></span>
-<span class="source-line-no">271</span><span id="line-271"> Map<String, Object> getSharedData() {</span>
-<span class="source-line-no">272</span><span id="line-272"> return sharedData;</span>
-<span class="source-line-no">273</span><span id="line-273"> }</span>
-<span class="source-line-no">274</span><span id="line-274"> }</span>
-<span class="source-line-no">275</span><span id="line-275"></span>
-<span class="source-line-no">276</span><span id="line-276"> public static class CoprocessorII implements RegionCoprocessor {</span>
-<span class="source-line-no">277</span><span id="line-277"> private ConcurrentMap<String, Object> sharedData;</span>
-<span class="source-line-no">278</span><span id="line-278"></span>
-<span class="source-line-no">279</span><span id="line-279"> @Override</span>
-<span class="source-line-no">280</span><span id="line-280"> public void start(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">281</span><span id="line-281"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
-<span class="source-line-no">282</span><span id="line-282"> sharedData.putIfAbsent("test2", new Object());</span>
-<span class="source-line-no">283</span><span id="line-283"> }</span>
-<span class="source-line-no">284</span><span id="line-284"></span>
-<span class="source-line-no">285</span><span id="line-285"> @Override</span>
-<span class="source-line-no">286</span><span id="line-286"> public void stop(CoprocessorEnvironment e) {</span>
-<span class="source-line-no">287</span><span id="line-287"> sharedData = null;</span>
-<span class="source-line-no">288</span><span id="line-288"> }</span>
-<span class="source-line-no">289</span><span id="line-289"></span>
-<span class="source-line-no">290</span><span id="line-290"> @Override</span>
-<span class="source-line-no">291</span><span id="line-291"> public Optional<RegionObserver> getRegionObserver() {</span>
-<span class="source-line-no">292</span><span id="line-292"> return Optional.of(new RegionObserver() {</span>
-<span class="source-line-no">293</span><span id="line-293"> @Override</span>
-<span class="source-line-no">294</span><span id="line-294"> public void preGetOp(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
-<span class="source-line-no">295</span><span id="line-295"> final Get get, final List<Cell> results) throws IOException {</span>
-<span class="source-line-no">296</span><span id="line-296"> throw new RuntimeException();</span>
-<span class="source-line-no">297</span><span id="line-297"> }</span>
-<span class="source-line-no">298</span><span id="line-298"> });</span>
-<span class="source-line-no">299</span><span id="line-299"> }</span>
-<span class="source-line-no">300</span><span id="line-300"></span>
-<span class="source-line-no">301</span><span id="line-301"> Map<String, Object> getSharedData() {</span>
-<span class="source-line-no">302</span><span id="line-302"> return sharedData;</span>
-<span class="source-line-no">303</span><span id="line-303"> }</span>
-<span class="source-line-no">304</span><span id="line-304"> }</span>
-<span class="source-line-no">305</span><span id="line-305"></span>
-<span class="source-line-no">306</span><span id="line-306"> @Test</span>
-<span class="source-line-no">307</span><span id="line-307"> public void testSharedData() throws IOException {</span>
-<span class="source-line-no">308</span><span id="line-308"> TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">309</span><span id="line-309"> byte[][] families = { fam1, fam2, fam3 };</span>
-<span class="source-line-no">310</span><span id="line-310"></span>
-<span class="source-line-no">311</span><span id="line-311"> Configuration hc = initConfig();</span>
-<span class="source-line-no">312</span><span id="line-312"> HRegion region = initHRegion(tableName, name.getMethodName(), hc, new Class<?>[] {}, families);</span>
-<span class="source-line-no">313</span><span id="line-313"></span>
-<span class="source-line-no">314</span><span id="line-314"> for (int i = 0; i < 3; i++) {</span>
-<span class="source-line-no">315</span><span id="line-315"> HTestConst.addContent(region, fam3);</span>
-<span class="source-line-no">316</span><span id="line-316"> region.flush(true);</span>
-<span class="source-line-no">317</span><span id="line-317"> }</span>
-<span class="source-line-no">318</span><span id="line-318"></span>
-<span class="source-line-no">319</span><span id="line-319"> region.compact(false);</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
-<span class="source-line-no">322</span><span id="line-322"></span>
-<span class="source-line-no">323</span><span id="line-323"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">324</span><span id="line-324"> Coprocessor c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
-<span class="source-line-no">325</span><span id="line-325"> Object o = ((CoprocessorImpl) c).getSharedData().get("test1");</span>
-<span class="source-line-no">326</span><span id="line-326"> Object o2 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
-<span class="source-line-no">327</span><span id="line-327"> assertNotNull(o);</span>
-<span class="source-line-no">328</span><span id="line-328"> assertNotNull(o2);</span>
-<span class="source-line-no">329</span><span id="line-329"> // to coprocessors get different sharedDatas</span>
-<span class="source-line-no">330</span><span id="line-330"> assertFalse(((CoprocessorImpl) c).getSharedData() == ((CoprocessorII) c2).getSharedData());</span>
-<span class="source-line-no">331</span><span id="line-331"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">332</span><span id="line-332"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
-<span class="source-line-no">333</span><span id="line-333"> // make sure that all coprocessor of a class have identical sharedDatas</span>
-<span class="source-line-no">334</span><span id="line-334"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
-<span class="source-line-no">335</span><span id="line-335"> assertTrue(((CoprocessorII) c2).getSharedData().get("test2") == o2);</span>
-<span class="source-line-no">336</span><span id="line-336"></span>
-<span class="source-line-no">337</span><span id="line-337"> // now have all Environments fail</span>
-<span class="source-line-no">338</span><span id="line-338"> try {</span>
-<span class="source-line-no">339</span><span id="line-339"> byte[] r = region.getRegionInfo().getStartKey();</span>
-<span class="source-line-no">340</span><span id="line-340"> if (r == null || r.length <= 0) {</span>
-<span class="source-line-no">341</span><span id="line-341"> // Its the start row. Can't ask for null. Ask for minimal key instead.</span>
-<span class="source-line-no">342</span><span id="line-342"> r = new byte[] { 0 };</span>
-<span class="source-line-no">343</span><span id="line-343"> }</span>
-<span class="source-line-no">344</span><span id="line-344"> Get g = new Get(r);</span>
-<span class="source-line-no">345</span><span id="line-345"> region.get(g);</span>
-<span class="source-line-no">346</span><span id="line-346"> fail();</span>
-<span class="source-line-no">347</span><span id="line-347"> } catch (org.apache.hadoop.hbase.DoNotRetryIOException xc) {</span>
-<span class="source-line-no">348</span><span id="line-348"> }</span>
-<span class="source-line-no">349</span><span id="line-349"> assertNull(region.getCoprocessorHost().findCoprocessor(CoprocessorII.class));</span>
-<span class="source-line-no">350</span><span id="line-350"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">351</span><span id="line-351"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
-<span class="source-line-no">352</span><span id="line-352"> c = c2 = null;</span>
-<span class="source-line-no">353</span><span id="line-353"> // perform a GC</span>
-<span class="source-line-no">354</span><span id="line-354"> System.gc();</span>
-<span class="source-line-no">355</span><span id="line-355"> // reopen the region</span>
-<span class="source-line-no">356</span><span id="line-356"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
-<span class="source-line-no">357</span><span id="line-357"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">358</span><span id="line-358"> // CPimpl is unaffected, still the same reference</span>
-<span class="source-line-no">359</span><span id="line-359"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
-<span class="source-line-no">360</span><span id="line-360"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
-<span class="source-line-no">361</span><span id="line-361"> // new map and object created, hence the reference is different</span>
-<span class="source-line-no">362</span><span id="line-362"> // hence the old entry was indeed removed by the GC and new one has been created</span>
-<span class="source-line-no">363</span><span id="line-363"> Object o3 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
-<span class="source-line-no">364</span><span id="line-364"> assertFalse(o3 == o2);</span>
-<span class="source-line-no">365</span><span id="line-365"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
-<span class="source-line-no">366</span><span id="line-366"> }</span>
-<span class="source-line-no">367</span><span id="line-367"></span>
-<span class="source-line-no">368</span><span id="line-368"> @Test</span>
-<span class="source-line-no">369</span><span id="line-369"> public void testCoprocessorInterface() throws IOException {</span>
-<span class="source-line-no">370</span><span id="line-370"> TableName tableName = TableName.valueOf(name.getMethodName());</span>
-<span class="source-line-no">371</span><span id="line-371"> byte[][] families = { fam1, fam2, fam3 };</span>
-<span class="source-line-no">372</span><span id="line-372"></span>
-<span class="source-line-no">373</span><span id="line-373"> Configuration hc = initConfig();</span>
-<span class="source-line-no">374</span><span id="line-374"> HRegion region = initHRegion(tableName, name.getMethodName(), hc,</span>
-<span class="source-line-no">375</span><span id="line-375"> new Class<?>[] { CoprocessorImpl.class }, families);</span>
-<span class="source-line-no">376</span><span id="line-376"> for (int i = 0; i < 3; i++) {</span>
-<span class="source-line-no">377</span><span id="line-377"> HTestConst.addContent(region, fam3);</span>
-<span class="source-line-no">378</span><span id="line-378"> region.flush(true);</span>
-<span class="source-line-no">379</span><span id="line-379"> }</span>
-<span class="source-line-no">380</span><span id="line-380"></span>
-<span class="source-line-no">381</span><span id="line-381"> region.compact(false);</span>
-<span class="source-line-no">382</span><span id="line-382"></span>
-<span class="source-line-no">383</span><span id="line-383"> // HBASE-4197</span>
-<span class="source-line-no">384</span><span id="line-384"> Scan s = new Scan();</span>
-<span class="source-line-no">385</span><span id="line-385"> RegionScanner scanner = region.getCoprocessorHost().postScannerOpen(s, region.getScanner(s));</span>
-<span class="source-line-no">386</span><span id="line-386"> assertTrue(scanner instanceof CustomScanner);</span>
-<span class="source-line-no">387</span><span id="line-387"> // this would throw an exception before HBASE-4197</span>
-<span class="source-line-no">388</span><span id="line-388"> scanner.next(new ArrayList<>());</span>
-<span class="source-line-no">389</span><span id="line-389"></span>
-<span class="source-line-no">390</span><span id="line-390"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
-<span class="source-line-no">391</span><span id="line-391"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
-<span class="source-line-no">392</span><span id="line-392"></span>
-<span class="source-line-no">393</span><span id="line-393"> assertTrue("Coprocessor not started", ((CoprocessorImpl) c).wasStarted());</span>
-<span class="source-line-no">394</span><span id="line-394"> assertTrue("Coprocessor not stopped", ((CoprocessorImpl) c).wasStopped());</span>
-<span class="source-line-no">395</span><span id="line-395"> assertTrue(((CoprocessorImpl) c).wasOpened());</span>
-<span class="source-line-no">396</span><span id="line-396"> assertTrue(((CoprocessorImpl) c).wasClosed());</span>
-<span class="source-line-no">397</span><span id="line-397"> assertTrue(((CoprocessorImpl) c).wasFlushed());</span>
-<span class="source-line-no">398</span><span id="line-398"> assertTrue(((CoprocessorImpl) c).wasCompacted());</span>
-<span class="source-line-no">399</span><span id="line-399"> }</span>
-<span class="source-line-no">400</span><span id="line-400"></span>
-<span class="source-line-no">401</span><span id="line-401"> HRegion reopenRegion(final HRegion closedRegion, Class<?>... implClasses) throws IOException {</span>
-<span class="source-line-no">402</span><span id="line-402"> // RegionInfo info = new RegionInfo(tableName, null, null, false);</span>
-<span class="source-line-no">403</span><span id="line-403"> HRegion r = HRegion.openHRegion(closedRegion, null);</span>
-<span class="source-line-no">404</span><span id="line-404"></span>
-<span class="source-line-no">405</span><span id="line-405"> // this following piece is a hack. currently a coprocessorHost</span>
-<span class="source-line-no">406</span><span id="line-406"> // is secretly loaded at OpenRegionHandler. we don't really</span>
-<span class="source-line-no">407</span><span id="line-407"> // start a region server here, so just manually create cphost</span>
-<span class="source-line-no">408</span><span id="line-408"> // and set it to region.</span>
-<span class="source-line-no">409</span><span id="line-409"> Configuration conf = TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">410</span><span id="line-410"> RegionCoprocessorHost host =</span>
-<span class="source-line-no">411</span><span id="line-411"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
-<span class="source-line-no">412</span><span id="line-412"> r.setCoprocessorHost(host);</span>
-<span class="source-line-no">413</span><span id="line-413"></span>
-<span class="source-line-no">414</span><span id="line-414"> for (Class<?> implClass : implClasses) {</span>
-<span class="source-line-no">415</span><span id="line-415"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
-<span class="source-line-no">416</span><span id="line-416"> }</span>
-<span class="source-line-no">417</span><span id="line-417"> // we need to manually call pre- and postOpen here since the</span>
-<span class="source-line-no">418</span><span id="line-418"> // above load() is not the real case for CP loading. A CP is</span>
-<span class="source-line-no">419</span><span id="line-419"> // expected to be loaded by default from 1) configuration; or 2)</span>
-<span class="source-line-no">420</span><span id="line-420"> // HTableDescriptor. If it's loaded after HRegion initialized,</span>
-<span class="source-line-no">421</span><span id="line-421"> // the pre- and postOpen() won't be triggered automatically.</span>
-<span class="source-line-no">422</span><span id="line-422"> // Here we have to call pre and postOpen explicitly.</span>
-<span class="source-line-no">423</span><span id="line-423"> host.preOpen();</span>
-<span class="source-line-no">424</span><span id="line-424"> host.postOpen();</span>
-<span class="source-line-no">425</span><span id="line-425"> return r;</span>
-<span class="source-line-no">426</span><span id="line-426"> }</span>
-<span class="source-line-no">427</span><span id="line-427"></span>
-<span class="source-line-no">428</span><span id="line-428"> HRegion initHRegion(TableName tableName, String callingMethod, Configuration conf,</span>
-<span class="source-line-no">429</span><span id="line-429"> Class<?>[] implClasses, byte[][] families) throws IOException {</span>
-<span class="source-line-no">430</span><span id="line-430"> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
-<span class="source-line-no">431</span><span id="line-431"> for (byte[] family : families) {</span>
-<span class="source-line-no">432</span><span id="line-432"> builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(family));</span>
-<span class="source-line-no">433</span><span id="line-433"> }</span>
-<span class="source-line-no">434</span><span id="line-434"> ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0, 0, null,</span>
-<span class="source-line-no">435</span><span id="line-435"> MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);</span>
-<span class="source-line-no">436</span><span id="line-436"> RegionInfo info = RegionInfoBuilder.newBuilder(tableName).setStartKey(null).setEndKey(null)</span>
-<span class="source-line-no">437</span><span id="line-437"> .setSplit(false).build();</span>
-<span class="source-line-no">438</span><span id="line-438"> Path path = new Path(DIR + callingMethod);</span>
-<span class="source-line-no">439</span><span id="line-439"> HRegion r = HBaseTestingUtil.createRegionAndWAL(info, path, conf, builder.build());</span>
-<span class="source-line-no">440</span><span id="line-440"></span>
-<span class="source-line-no">441</span><span id="line-441"> // this following piece is a hack.</span>
-<span class="source-line-no">442</span><span id="line-442"> RegionCoprocessorHost host =</span>
-<span class="source-line-no">443</span><span id="line-443"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
-<span class="source-line-no">444</span><span id="line-444"> r.setCoprocessorHost(host);</span>
-<span class="source-line-no">445</span><span id="line-445"></span>
-<span class="source-line-no">446</span><span id="line-446"> for (Class<?> implClass : implClasses) {</span>
-<span class="source-line-no">447</span><span id="line-447"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
-<span class="source-line-no">448</span><span id="line-448"> Coprocessor c = host.findCoprocessor(implClass.getName());</span>
-<span class="source-line-no">449</span><span id="line-449"> assertNotNull(c);</span>
-<span class="source-line-no">450</span><span id="line-450"> }</span>
-<span class="source-line-no">451</span><span id="line-451"></span>
-<span class="source-line-no">452</span><span id="line-452"> // Here we have to call pre and postOpen explicitly.</span>
-<span class="source-line-no">453</span><span id="line-453"> host.preOpen();</span>
-<span class="source-line-no">454</span><span id="line-454"> host.postOpen();</span>
-<span class="source-line-no">455</span><span id="line-455"> return r;</span>
-<span class="source-line-no">456</span><span id="line-456"> }</span>
-<span class="source-line-no">457</span><span id="line-457"></span>
-<span class="source-line-no">458</span><span id="line-458"> private Configuration initConfig() {</span>
-<span class="source-line-no">459</span><span id="line-459"> // Always compact if there is more than one store file.</span>
-<span class="source-line-no">460</span><span id="line-460"> TEST_UTIL.getConfiguration().setInt("hbase.hstore.compactionThreshold", 2);</span>
-<span class="source-line-no">461</span><span id="line-461"> TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, 10 * 1000);</span>
-<span class="source-line-no">462</span><span id="line-462"> // Increase the amount of time between client retries</span>
-<span class="source-line-no">463</span><span id="line-463"> TEST_UTIL.getConfiguration().setLong("hbase.client.pause", 15 * 1000);</span>
-<span class="source-line-no">464</span><span id="line-464"> // This size should make it so we always split using the addContent</span>
-<span class="source-line-no">465</span><span id="line-465"> // below. After adding all data, the first region is 1.3M</span>
-<span class="source-line-no">466</span><span id="line-466"> TEST_UTIL.getConfiguration().setLong(HConstants.HREGION_MAX_FILESIZE, 1024 * 128);</span>
-<span class="source-line-no">467</span><span id="line-467"> TEST_UTIL.getConfiguration().setBoolean(CoprocessorHost.ABORT_ON_ERROR_KEY, false);</span>
-<span class="source-line-no">468</span><span id="line-468"></span>
-<span class="source-line-no">469</span><span id="line-469"> return TEST_UTIL.getConfiguration();</span>
-<span class="source-line-no">470</span><span id="line-470"> }</span>
-<span class="source-line-no">471</span><span id="line-471">}</span>
+<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.HBaseTestingUtil;</span>
+<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.HConstants;</span>
+<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.HTestConst;</span>
+<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.TableName;</span>
+<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;</span>
+<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.client.Get;</span>
+<span class="source-line-no">048</span><span id="line-48">import org.apache.hadoop.hbase.client.RegionInfo;</span>
+<span class="source-line-no">049</span><span id="line-49">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
+<span class="source-line-no">050</span><span id="line-50">import org.apache.hadoop.hbase.client.Scan;</span>
+<span class="source-line-no">051</span><span id="line-51">import org.apache.hadoop.hbase.client.TableDescriptorBuilder;</span>
+<span class="source-line-no">052</span><span id="line-52">import org.apache.hadoop.hbase.regionserver.ChunkCreator;</span>
+<span class="source-line-no">053</span><span id="line-53">import org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker;</span>
+<span class="source-line-no">054</span><span id="line-54">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
+<span class="source-line-no">055</span><span id="line-55">import org.apache.hadoop.hbase.regionserver.InternalScanner;</span>
+<span class="source-line-no">056</span><span id="line-56">import org.apache.hadoop.hbase.regionserver.MemStoreLAB;</span>
+<span class="source-line-no">057</span><span id="line-57">import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;</span>
+<span class="source-line-no">058</span><span id="line-58">import org.apache.hadoop.hbase.regionserver.RegionScanner;</span>
+<span class="source-line-no">059</span><span id="line-59">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
+<span class="source-line-no">060</span><span id="line-60">import org.apache.hadoop.hbase.regionserver.ScanType;</span>
+<span class="source-line-no">061</span><span id="line-61">import org.apache.hadoop.hbase.regionserver.ScannerContext;</span>
+<span class="source-line-no">062</span><span id="line-62">import org.apache.hadoop.hbase.regionserver.Store;</span>
+<span class="source-line-no">063</span><span id="line-63">import org.apache.hadoop.hbase.regionserver.StoreFile;</span>
+<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker;</span>
+<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;</span>
+<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.testclassification.CoprocessorTests;</span>
+<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.testclassification.MediumTests;</span>
+<span class="source-line-no">068</span><span id="line-68">import org.junit.jupiter.api.BeforeEach;</span>
+<span class="source-line-no">069</span><span id="line-69">import org.junit.jupiter.api.Tag;</span>
+<span class="source-line-no">070</span><span id="line-70">import org.junit.jupiter.api.Test;</span>
+<span class="source-line-no">071</span><span id="line-71">import org.junit.jupiter.api.TestInfo;</span>
+<span class="source-line-no">072</span><span id="line-72">import org.mockito.Mockito;</span>
+<span class="source-line-no">073</span><span id="line-73"></span>
+<span class="source-line-no">074</span><span id="line-74">@Tag(CoprocessorTests.TAG)</span>
+<span class="source-line-no">075</span><span id="line-75">@Tag(MediumTests.TAG)</span>
+<span class="source-line-no">076</span><span id="line-76">public class TestCoprocessorInterface {</span>
+<span class="source-line-no">077</span><span id="line-77"></span>
+<span class="source-line-no">078</span><span id="line-78"> private String currentTestName;</span>
+<span class="source-line-no">079</span><span id="line-79"> private static final HBaseTestingUtil TEST_UTIL = new HBaseTestingUtil();</span>
+<span class="source-line-no">080</span><span id="line-80"> static final Path DIR = TEST_UTIL.getDataTestDir();</span>
+<span class="source-line-no">081</span><span id="line-81"></span>
+<span class="source-line-no">082</span><span id="line-82"> @BeforeEach</span>
+<span class="source-line-no">083</span><span id="line-83"> public void setUp(TestInfo testInfo) {</span>
+<span class="source-line-no">084</span><span id="line-84"> currentTestName = testInfo.getTestMethod().get().getName();</span>
+<span class="source-line-no">085</span><span id="line-85"> }</span>
+<span class="source-line-no">086</span><span id="line-86"></span>
+<span class="source-line-no">087</span><span id="line-87"> private static class CustomScanner implements RegionScanner {</span>
+<span class="source-line-no">088</span><span id="line-88"></span>
+<span class="source-line-no">089</span><span id="line-89"> private RegionScanner delegate;</span>
+<span class="source-line-no">090</span><span id="line-90"></span>
+<span class="source-line-no">091</span><span id="line-91"> public CustomScanner(RegionScanner delegate) {</span>
+<span class="source-line-no">092</span><span id="line-92"> this.delegate = delegate;</span>
+<span class="source-line-no">093</span><span id="line-93"> }</span>
+<span class="source-line-no">094</span><span id="line-94"></span>
+<span class="source-line-no">095</span><span id="line-95"> @Override</span>
+<span class="source-line-no">096</span><span id="line-96"> public boolean next(List<? super ExtendedCell> results) throws IOException {</span>
+<span class="source-line-no">097</span><span id="line-97"> return delegate.next(results);</span>
+<span class="source-line-no">098</span><span id="line-98"> }</span>
+<span class="source-line-no">099</span><span id="line-99"></span>
+<span class="source-line-no">100</span><span id="line-100"> @Override</span>
+<span class="source-line-no">101</span><span id="line-101"> public boolean next(List<? super ExtendedCell> result, ScannerContext scannerContext)</span>
+<span class="source-line-no">102</span><span id="line-102"> throws IOException {</span>
+<span class="source-line-no">103</span><span id="line-103"> return delegate.next(result, scannerContext);</span>
+<span class="source-line-no">104</span><span id="line-104"> }</span>
+<span class="source-line-no">105</span><span id="line-105"></span>
+<span class="source-line-no">106</span><span id="line-106"> @Override</span>
+<span class="source-line-no">107</span><span id="line-107"> public boolean nextRaw(List<? super ExtendedCell> result) throws IOException {</span>
+<span class="source-line-no">108</span><span id="line-108"> return delegate.nextRaw(result);</span>
+<span class="source-line-no">109</span><span id="line-109"> }</span>
+<span class="source-line-no">110</span><span id="line-110"></span>
+<span class="source-line-no">111</span><span id="line-111"> @Override</span>
+<span class="source-line-no">112</span><span id="line-112"> public boolean nextRaw(List<? super ExtendedCell> result, ScannerContext context)</span>
+<span class="source-line-no">113</span><span id="line-113"> throws IOException {</span>
+<span class="source-line-no">114</span><span id="line-114"> return delegate.nextRaw(result, context);</span>
+<span class="source-line-no">115</span><span id="line-115"> }</span>
+<span class="source-line-no">116</span><span id="line-116"></span>
+<span class="source-line-no">117</span><span id="line-117"> @Override</span>
+<span class="source-line-no">118</span><span id="line-118"> public Set<Path> getFilesRead() {</span>
+<span class="source-line-no">119</span><span id="line-119"> return delegate.getFilesRead();</span>
+<span class="source-line-no">120</span><span id="line-120"> }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122"> @Override</span>
+<span class="source-line-no">123</span><span id="line-123"> public void close() throws IOException {</span>
+<span class="source-line-no">124</span><span id="line-124"> delegate.close();</span>
+<span class="source-line-no">125</span><span id="line-125"> }</span>
+<span class="source-line-no">126</span><span id="line-126"></span>
+<span class="source-line-no">127</span><span id="line-127"> @Override</span>
+<span class="source-line-no">128</span><span id="line-128"> public RegionInfo getRegionInfo() {</span>
+<span class="source-line-no">129</span><span id="line-129"> return delegate.getRegionInfo();</span>
+<span class="source-line-no">130</span><span id="line-130"> }</span>
+<span class="source-line-no">131</span><span id="line-131"></span>
+<span class="source-line-no">132</span><span id="line-132"> @Override</span>
+<span class="source-line-no">133</span><span id="line-133"> public boolean isFilterDone() throws IOException {</span>
+<span class="source-line-no">134</span><span id="line-134"> return delegate.isFilterDone();</span>
+<span class="source-line-no">135</span><span id="line-135"> }</span>
+<span class="source-line-no">136</span><span id="line-136"></span>
+<span class="source-line-no">137</span><span id="line-137"> @Override</span>
+<span class="source-line-no">138</span><span id="line-138"> public boolean reseek(byte[] row) throws IOException {</span>
+<span class="source-line-no">139</span><span id="line-139"> return false;</span>
+<span class="source-line-no">140</span><span id="line-140"> }</span>
+<span class="source-line-no">141</span><span id="line-141"></span>
+<span class="source-line-no">142</span><span id="line-142"> @Override</span>
+<span class="source-line-no">143</span><span id="line-143"> public long getMaxResultSize() {</span>
+<span class="source-line-no">144</span><span id="line-144"> return delegate.getMaxResultSize();</span>
+<span class="source-line-no">145</span><span id="line-145"> }</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147"> @Override</span>
+<span class="source-line-no">148</span><span id="line-148"> public long getMvccReadPoint() {</span>
+<span class="source-line-no">149</span><span id="line-149"> return delegate.getMvccReadPoint();</span>
+<span class="source-line-no">150</span><span id="line-150"> }</span>
+<span class="source-line-no">151</span><span id="line-151"></span>
+<span class="source-line-no">152</span><span id="line-152"> @Override</span>
+<span class="source-line-no">153</span><span id="line-153"> public int getBatch() {</span>
+<span class="source-line-no">154</span><span id="line-154"> return delegate.getBatch();</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> }</span>
+<span class="source-line-no">157</span><span id="line-157"></span>
+<span class="source-line-no">158</span><span id="line-158"> public static class CoprocessorImpl implements RegionCoprocessor, RegionObserver {</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160"> private boolean startCalled;</span>
+<span class="source-line-no">161</span><span id="line-161"> private boolean stopCalled;</span>
+<span class="source-line-no">162</span><span id="line-162"> private boolean preOpenCalled;</span>
+<span class="source-line-no">163</span><span id="line-163"> private boolean postOpenCalled;</span>
+<span class="source-line-no">164</span><span id="line-164"> private boolean preCloseCalled;</span>
+<span class="source-line-no">165</span><span id="line-165"> private boolean postCloseCalled;</span>
+<span class="source-line-no">166</span><span id="line-166"> private boolean preCompactCalled;</span>
+<span class="source-line-no">167</span><span id="line-167"> private boolean postCompactCalled;</span>
+<span class="source-line-no">168</span><span id="line-168"> private boolean preFlushCalled;</span>
+<span class="source-line-no">169</span><span id="line-169"> private boolean postFlushCalled;</span>
+<span class="source-line-no">170</span><span id="line-170"> private ConcurrentMap<String, Object> sharedData;</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172"> @Override</span>
+<span class="source-line-no">173</span><span id="line-173"> public void start(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">174</span><span id="line-174"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
+<span class="source-line-no">175</span><span id="line-175"> // using new String here, so that there will be new object on each invocation</span>
+<span class="source-line-no">176</span><span id="line-176"> sharedData.putIfAbsent("test1", new Object());</span>
+<span class="source-line-no">177</span><span id="line-177"> startCalled = true;</span>
+<span class="source-line-no">178</span><span id="line-178"> }</span>
+<span class="source-line-no">179</span><span id="line-179"></span>
+<span class="source-line-no">180</span><span id="line-180"> @Override</span>
+<span class="source-line-no">181</span><span id="line-181"> public void stop(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">182</span><span id="line-182"> sharedData = null;</span>
+<span class="source-line-no">183</span><span id="line-183"> stopCalled = true;</span>
+<span class="source-line-no">184</span><span id="line-184"> }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186"> @Override</span>
+<span class="source-line-no">187</span><span id="line-187"> public Optional<RegionObserver> getRegionObserver() {</span>
+<span class="source-line-no">188</span><span id="line-188"> return Optional.of(this);</span>
+<span class="source-line-no">189</span><span id="line-189"> }</span>
+<span class="source-line-no">190</span><span id="line-190"></span>
+<span class="source-line-no">191</span><span id="line-191"> @Override</span>
+<span class="source-line-no">192</span><span id="line-192"> public void preOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
+<span class="source-line-no">193</span><span id="line-193"> preOpenCalled = true;</span>
+<span class="source-line-no">194</span><span id="line-194"> }</span>
+<span class="source-line-no">195</span><span id="line-195"></span>
+<span class="source-line-no">196</span><span id="line-196"> @Override</span>
+<span class="source-line-no">197</span><span id="line-197"> public void postOpen(ObserverContext<? extends RegionCoprocessorEnvironment> e) {</span>
+<span class="source-line-no">198</span><span id="line-198"> postOpenCalled = true;</span>
+<span class="source-line-no">199</span><span id="line-199"> }</span>
+<span class="source-line-no">200</span><span id="line-200"></span>
+<span class="source-line-no">201</span><span id="line-201"> @Override</span>
+<span class="source-line-no">202</span><span id="line-202"> public void preClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">203</span><span id="line-203"> boolean abortRequested) {</span>
+<span class="source-line-no">204</span><span id="line-204"> preCloseCalled = true;</span>
+<span class="source-line-no">205</span><span id="line-205"> }</span>
+<span class="source-line-no">206</span><span id="line-206"></span>
+<span class="source-line-no">207</span><span id="line-207"> @Override</span>
+<span class="source-line-no">208</span><span id="line-208"> public void postClose(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">209</span><span id="line-209"> boolean abortRequested) {</span>
+<span class="source-line-no">210</span><span id="line-210"> postCloseCalled = true;</span>
+<span class="source-line-no">211</span><span id="line-211"> }</span>
+<span class="source-line-no">212</span><span id="line-212"></span>
+<span class="source-line-no">213</span><span id="line-213"> @Override</span>
+<span class="source-line-no">214</span><span id="line-214"> public InternalScanner preCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">215</span><span id="line-215"> Store store, InternalScanner scanner, ScanType scanType, CompactionLifeCycleTracker tracker,</span>
+<span class="source-line-no">216</span><span id="line-216"> CompactionRequest request) {</span>
+<span class="source-line-no">217</span><span id="line-217"> preCompactCalled = true;</span>
+<span class="source-line-no">218</span><span id="line-218"> return scanner;</span>
+<span class="source-line-no">219</span><span id="line-219"> }</span>
+<span class="source-line-no">220</span><span id="line-220"></span>
+<span class="source-line-no">221</span><span id="line-221"> @Override</span>
+<span class="source-line-no">222</span><span id="line-222"> public void postCompact(ObserverContext<? extends RegionCoprocessorEnvironment> e, Store store,</span>
+<span class="source-line-no">223</span><span id="line-223"> StoreFile resultFile, CompactionLifeCycleTracker tracker, CompactionRequest request) {</span>
+<span class="source-line-no">224</span><span id="line-224"> postCompactCalled = true;</span>
+<span class="source-line-no">225</span><span id="line-225"> }</span>
+<span class="source-line-no">226</span><span id="line-226"></span>
+<span class="source-line-no">227</span><span id="line-227"> @Override</span>
+<span class="source-line-no">228</span><span id="line-228"> public void preFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">229</span><span id="line-229"> FlushLifeCycleTracker tracker) {</span>
+<span class="source-line-no">230</span><span id="line-230"> preFlushCalled = true;</span>
+<span class="source-line-no">231</span><span id="line-231"> }</span>
+<span class="source-line-no">232</span><span id="line-232"></span>
+<span class="source-line-no">233</span><span id="line-233"> @Override</span>
+<span class="source-line-no">234</span><span id="line-234"> public void postFlush(ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">235</span><span id="line-235"> FlushLifeCycleTracker tracker) {</span>
+<span class="source-line-no">236</span><span id="line-236"> postFlushCalled = true;</span>
+<span class="source-line-no">237</span><span id="line-237"> }</span>
+<span class="source-line-no">238</span><span id="line-238"></span>
+<span class="source-line-no">239</span><span id="line-239"> @Override</span>
+<span class="source-line-no">240</span><span id="line-240"> public RegionScanner postScannerOpen(</span>
+<span class="source-line-no">241</span><span id="line-241"> final ObserverContext<? extends RegionCoprocessorEnvironment> e, final Scan scan,</span>
+<span class="source-line-no">242</span><span id="line-242"> final RegionScanner s) throws IOException {</span>
+<span class="source-line-no">243</span><span id="line-243"> return new CustomScanner(s);</span>
+<span class="source-line-no">244</span><span id="line-244"> }</span>
+<span class="source-line-no">245</span><span id="line-245"></span>
+<span class="source-line-no">246</span><span id="line-246"> boolean wasStarted() {</span>
+<span class="source-line-no">247</span><span id="line-247"> return startCalled;</span>
+<span class="source-line-no">248</span><span id="line-248"> }</span>
+<span class="source-line-no">249</span><span id="line-249"></span>
+<span class="source-line-no">250</span><span id="line-250"> boolean wasStopped() {</span>
+<span class="source-line-no">251</span><span id="line-251"> return stopCalled;</span>
+<span class="source-line-no">252</span><span id="line-252"> }</span>
+<span class="source-line-no">253</span><span id="line-253"></span>
+<span class="source-line-no">254</span><span id="line-254"> boolean wasOpened() {</span>
+<span class="source-line-no">255</span><span id="line-255"> return (preOpenCalled && postOpenCalled);</span>
+<span class="source-line-no">256</span><span id="line-256"> }</span>
+<span class="source-line-no">257</span><span id="line-257"></span>
+<span class="source-line-no">258</span><span id="line-258"> boolean wasClosed() {</span>
+<span class="source-line-no">259</span><span id="line-259"> return (preCloseCalled && postCloseCalled);</span>
+<span class="source-line-no">260</span><span id="line-260"> }</span>
+<span class="source-line-no">261</span><span id="line-261"></span>
+<span class="source-line-no">262</span><span id="line-262"> boolean wasFlushed() {</span>
+<span class="source-line-no">263</span><span id="line-263"> return (preFlushCalled && postFlushCalled);</span>
+<span class="source-line-no">264</span><span id="line-264"> }</span>
+<span class="source-line-no">265</span><span id="line-265"></span>
+<span class="source-line-no">266</span><span id="line-266"> boolean wasCompacted() {</span>
+<span class="source-line-no">267</span><span id="line-267"> return (preCompactCalled && postCompactCalled);</span>
+<span class="source-line-no">268</span><span id="line-268"> }</span>
+<span class="source-line-no">269</span><span id="line-269"></span>
+<span class="source-line-no">270</span><span id="line-270"> Map<String, Object> getSharedData() {</span>
+<span class="source-line-no">271</span><span id="line-271"> return sharedData;</span>
+<span class="source-line-no">272</span><span id="line-272"> }</span>
+<span class="source-line-no">273</span><span id="line-273"> }</span>
+<span class="source-line-no">274</span><span id="line-274"></span>
+<span class="source-line-no">275</span><span id="line-275"> public static class CoprocessorII implements RegionCoprocessor {</span>
+<span class="source-line-no">276</span><span id="line-276"> private ConcurrentMap<String, Object> sharedData;</span>
+<span class="source-line-no">277</span><span id="line-277"></span>
+<span class="source-line-no">278</span><span id="line-278"> @Override</span>
+<span class="source-line-no">279</span><span id="line-279"> public void start(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">280</span><span id="line-280"> sharedData = ((RegionCoprocessorEnvironment) e).getSharedData();</span>
+<span class="source-line-no">281</span><span id="line-281"> sharedData.putIfAbsent("test2", new Object());</span>
+<span class="source-line-no">282</span><span id="line-282"> }</span>
+<span class="source-line-no">283</span><span id="line-283"></span>
+<span class="source-line-no">284</span><span id="line-284"> @Override</span>
+<span class="source-line-no">285</span><span id="line-285"> public void stop(CoprocessorEnvironment e) {</span>
+<span class="source-line-no">286</span><span id="line-286"> sharedData = null;</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"></span>
+<span class="source-line-no">289</span><span id="line-289"> @Override</span>
+<span class="source-line-no">290</span><span id="line-290"> public Optional<RegionObserver> getRegionObserver() {</span>
+<span class="source-line-no">291</span><span id="line-291"> return Optional.of(new RegionObserver() {</span>
+<span class="source-line-no">292</span><span id="line-292"> @Override</span>
+<span class="source-line-no">293</span><span id="line-293"> public void preGetOp(final ObserverContext<? extends RegionCoprocessorEnvironment> e,</span>
+<span class="source-line-no">294</span><span id="line-294"> final Get get, final List<Cell> results) throws IOException {</span>
+<span class="source-line-no">295</span><span id="line-295"> throw new RuntimeException();</span>
+<span class="source-line-no">296</span><span id="line-296"> }</span>
+<span class="source-line-no">297</span><span id="line-297"> });</span>
+<span class="source-line-no">298</span><span id="line-298"> }</span>
+<span class="source-line-no">299</span><span id="line-299"></span>
+<span class="source-line-no">300</span><span id="line-300"> Map<String, Object> getSharedData() {</span>
+<span class="source-line-no">301</span><span id="line-301"> return sharedData;</span>
+<span class="source-line-no">302</span><span id="line-302"> }</span>
+<span class="source-line-no">303</span><span id="line-303"> }</span>
+<span class="source-line-no">304</span><span id="line-304"></span>
+<span class="source-line-no">305</span><span id="line-305"> @Test</span>
+<span class="source-line-no">306</span><span id="line-306"> public void testSharedData() throws IOException {</span>
+<span class="source-line-no">307</span><span id="line-307"> TableName tableName = TableName.valueOf(currentTestName);</span>
+<span class="source-line-no">308</span><span id="line-308"> byte[][] families = { fam1, fam2, fam3 };</span>
+<span class="source-line-no">309</span><span id="line-309"></span>
+<span class="source-line-no">310</span><span id="line-310"> Configuration hc = initConfig();</span>
+<span class="source-line-no">311</span><span id="line-311"> HRegion region = initHRegion(tableName, currentTestName, hc, new Class<?>[] {}, families);</span>
+<span class="source-line-no">312</span><span id="line-312"></span>
+<span class="source-line-no">313</span><span id="line-313"> for (int i = 0; i < 3; i++) {</span>
+<span class="source-line-no">314</span><span id="line-314"> HTestConst.addContent(region, fam3);</span>
+<span class="source-line-no">315</span><span id="line-315"> region.flush(true);</span>
+<span class="source-line-no">316</span><span id="line-316"> }</span>
+<span class="source-line-no">317</span><span id="line-317"></span>
+<span class="source-line-no">318</span><span id="line-318"> region.compact(false);</span>
+<span class="source-line-no">319</span><span id="line-319"></span>
+<span class="source-line-no">320</span><span id="line-320"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
+<span class="source-line-no">321</span><span id="line-321"></span>
+<span class="source-line-no">322</span><span id="line-322"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">323</span><span id="line-323"> Coprocessor c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
+<span class="source-line-no">324</span><span id="line-324"> Object o = ((CoprocessorImpl) c).getSharedData().get("test1");</span>
+<span class="source-line-no">325</span><span id="line-325"> Object o2 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
+<span class="source-line-no">326</span><span id="line-326"> assertNotNull(o);</span>
+<span class="source-line-no">327</span><span id="line-327"> assertNotNull(o2);</span>
+<span class="source-line-no">328</span><span id="line-328"> // to coprocessors get different sharedDatas</span>
+<span class="source-line-no">329</span><span id="line-329"> assertFalse(((CoprocessorImpl) c).getSharedData() == ((CoprocessorII) c2).getSharedData());</span>
+<span class="source-line-no">330</span><span id="line-330"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">331</span><span id="line-331"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
+<span class="source-line-no">332</span><span id="line-332"> // make sure that all coprocessor of a class have identical sharedDatas</span>
+<span class="source-line-no">333</span><span id="line-333"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
+<span class="source-line-no">334</span><span id="line-334"> assertTrue(((CoprocessorII) c2).getSharedData().get("test2") == o2);</span>
+<span class="source-line-no">335</span><span id="line-335"></span>
+<span class="source-line-no">336</span><span id="line-336"> // now have all Environments fail</span>
+<span class="source-line-no">337</span><span id="line-337"> try {</span>
+<span class="source-line-no">338</span><span id="line-338"> byte[] r = region.getRegionInfo().getStartKey();</span>
+<span class="source-line-no">339</span><span id="line-339"> if (r == null || r.length <= 0) {</span>
+<span class="source-line-no">340</span><span id="line-340"> // Its the start row. Can't ask for null. Ask for minimal key instead.</span>
+<span class="source-line-no">341</span><span id="line-341"> r = new byte[] { 0 };</span>
+<span class="source-line-no">342</span><span id="line-342"> }</span>
+<span class="source-line-no">343</span><span id="line-343"> Get g = new Get(r);</span>
+<span class="source-line-no">344</span><span id="line-344"> region.get(g);</span>
+<span class="source-line-no">345</span><span id="line-345"> fail();</span>
+<span class="source-line-no">346</span><span id="line-346"> } catch (org.apache.hadoop.hbase.DoNotRetryIOException xc) {</span>
+<span class="source-line-no">347</span><span id="line-347"> }</span>
+<span class="source-line-no">348</span><span id="line-348"> assertNull(region.getCoprocessorHost().findCoprocessor(CoprocessorII.class));</span>
+<span class="source-line-no">349</span><span id="line-349"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">350</span><span id="line-350"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
+<span class="source-line-no">351</span><span id="line-351"> c = c2 = null;</span>
+<span class="source-line-no">352</span><span id="line-352"> // perform a GC</span>
+<span class="source-line-no">353</span><span id="line-353"> System.gc();</span>
+<span class="source-line-no">354</span><span id="line-354"> // reopen the region</span>
+<span class="source-line-no">355</span><span id="line-355"> region = reopenRegion(region, CoprocessorImpl.class, CoprocessorII.class);</span>
+<span class="source-line-no">356</span><span id="line-356"> c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">357</span><span id="line-357"> // CPimpl is unaffected, still the same reference</span>
+<span class="source-line-no">358</span><span id="line-358"> assertTrue(((CoprocessorImpl) c).getSharedData().get("test1") == o);</span>
+<span class="source-line-no">359</span><span id="line-359"> c2 = region.getCoprocessorHost().findCoprocessor(CoprocessorII.class);</span>
+<span class="source-line-no">360</span><span id="line-360"> // new map and object created, hence the reference is different</span>
+<span class="source-line-no">361</span><span id="line-361"> // hence the old entry was indeed removed by the GC and new one has been created</span>
+<span class="source-line-no">362</span><span id="line-362"> Object o3 = ((CoprocessorII) c2).getSharedData().get("test2");</span>
+<span class="source-line-no">363</span><span id="line-363"> assertFalse(o3 == o2);</span>
+<span class="source-line-no">364</span><span id="line-364"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
+<span class="source-line-no">365</span><span id="line-365"> }</span>
+<span class="source-line-no">366</span><span id="line-366"></span>
+<span class="source-line-no">367</span><span id="line-367"> @Test</span>
+<span class="source-line-no">368</span><span id="line-368"> public void testCoprocessorInterface() throws IOException {</span>
+<span class="source-line-no">369</span><span id="line-369"> TableName tableName = TableName.valueOf(currentTestName);</span>
+<span class="source-line-no">370</span><span id="line-370"> byte[][] families = { fam1, fam2, fam3 };</span>
+<span class="source-line-no">371</span><span id="line-371"></span>
+<span class="source-line-no">372</span><span id="line-372"> Configuration hc = initConfig();</span>
+<span class="source-line-no">373</span><span id="line-373"> HRegion region = initHRegion(tableName, currentTestName, hc,</span>
+<span class="source-line-no">374</span><span id="line-374"> new Class<?>[] { CoprocessorImpl.class }, families);</span>
+<span class="source-line-no">375</span><span id="line-375"> for (int i = 0; i < 3; i++) {</span>
+<span class="source-line-no">376</span><span id="line-376"> HTestConst.addContent(region, fam3);</span>
+<span class="source-line-no">377</span><span id="line-377"> region.flush(true);</span>
+<span class="source-line-no">378</span><span id="line-378"> }</span>
+<span class="source-line-no">379</span><span id="line-379"></span>
+<span class="source-line-no">380</span><span id="line-380"> region.compact(false);</span>
+<span class="source-line-no">381</span><span id="line-381"></span>
+<span class="source-line-no">382</span><span id="line-382"> // HBASE-4197</span>
+<span class="source-line-no">383</span><span id="line-383"> Scan s = new Scan();</span>
+<span class="source-line-no">384</span><span id="line-384"> RegionScanner scanner = region.getCoprocessorHost().postScannerOpen(s, region.getScanner(s));</span>
+<span class="source-line-no">385</span><span id="line-385"> assertTrue(scanner instanceof CustomScanner);</span>
+<span class="source-line-no">386</span><span id="line-386"> // this would throw an exception before HBASE-4197</span>
+<span class="source-line-no">387</span><span id="line-387"> scanner.next(new ArrayList<>());</span>
+<span class="source-line-no">388</span><span id="line-388"></span>
+<span class="source-line-no">389</span><span id="line-389"> HBaseTestingUtil.closeRegionAndWAL(region);</span>
+<span class="source-line-no">390</span><span id="line-390"> Coprocessor c = region.getCoprocessorHost().findCoprocessor(CoprocessorImpl.class);</span>
+<span class="source-line-no">391</span><span id="line-391"></span>
+<span class="source-line-no">392</span><span id="line-392"> assertTrue(((CoprocessorImpl) c).wasStarted(), "Coprocessor not started");</span>
+<span class="source-line-no">393</span><span id="line-393"> assertTrue(((CoprocessorImpl) c).wasStopped(), "Coprocessor not stopped");</span>
+<span class="source-line-no">394</span><span id="line-394"> assertTrue(((CoprocessorImpl) c).wasOpened());</span>
+<span class="source-line-no">395</span><span id="line-395"> assertTrue(((CoprocessorImpl) c).wasClosed());</span>
+<span class="source-line-no">396</span><span id="line-396"> assertTrue(((CoprocessorImpl) c).wasFlushed());</span>
+<span class="source-line-no">397</span><span id="line-397"> assertTrue(((CoprocessorImpl) c).wasCompacted());</span>
+<span class="source-line-no">398</span><span id="line-398"> }</span>
+<span class="source-line-no">399</span><span id="line-399"></span>
+<span class="source-line-no">400</span><span id="line-400"> HRegion reopenRegion(final HRegion closedRegion, Class<?>... implClasses) throws IOException {</span>
+<span class="source-line-no">401</span><span id="line-401"> // RegionInfo info = new RegionInfo(tableName, null, null, false);</span>
+<span class="source-line-no">402</span><span id="line-402"> HRegion r = HRegion.openHRegion(closedRegion, null);</span>
+<span class="source-line-no">403</span><span id="line-403"></span>
+<span class="source-line-no">404</span><span id="line-404"> // this following piece is a hack. currently a coprocessorHost</span>
+<span class="source-line-no">405</span><span id="line-405"> // is secretly loaded at OpenRegionHandler. we don't really</span>
+<span class="source-line-no">406</span><span id="line-406"> // start a region server here, so just manually create cphost</span>
+<span class="source-line-no">407</span><span id="line-407"> // and set it to region.</span>
+<span class="source-line-no">408</span><span id="line-408"> Configuration conf = TEST_UTIL.getConfiguration();</span>
+<span class="source-line-no">409</span><span id="line-409"> RegionCoprocessorHost host =</span>
+<span class="source-line-no">410</span><span id="line-410"> new RegionCoprocessorHost(r, Mockito.mock(RegionServerServices.class), conf);</span>
+<span class="source-line-no">411</span><span id="line-411"> r.setCoprocessorHost(host);</span>
+<span class="source-line-no">412</span><span id="line-412"></span>
+<span class="source-line-no">413</span><span id="line-413"> for (Class<?> implClass : implClasses) {</span>
+<span class="source-line-no">414</span><span id="line-414"> host.load(implClass.asSubclass(RegionCoprocessor.class), Coprocessor.PRIORITY_USER, conf);</span>
+<span class="source-line-no">415</span><span id="line-415"> }</span>
+<span class="source-line-no">416</span><span id="line-416"> // we need to manually call pre- and postOpen here since the</span>
+<span class="source-line-no">417</span><span id="line-417"> // above load() is not the real case for CP loading. A CP is</span>
+<span class="source-line-no">418</span><span id="line-418"> // expected to be loaded by default from 1) configuration; or 2)</span>
+<span class="source-line-no">419</span><span id="line-419"> // HTableDescriptor. If it's loaded after HRegion initialized,</span>
+<span class="source-line-no">420</span><span id="line-420"> // the pre- and postOpen() won't be triggered automatically.</span>
+<span class="source-line-no">421</span><span id="line-421"> // Here we have to call pre and postOpen explicitly.</span>
+<span class="source-line-no">422</span><span id="line-422"> host.preOpen();</span>
+<span class="source-line-no">423</span><span id="line-423"> host.postOpen();</span>
+<span class="source-line-no">424</span><span id="line-424"> return r;</span>
+<span class="source-line-no">425</span><span id="line-425"> }</span>
+<span class="source-line-no">426</span><span id="line-426"></span>
+<span class="source-line-no">427</span><span id="line-427"> HRegion initHRegion(TableName tableName, String callingMethod, Configuration conf,</span>
+<span class="source-line-no">428</span><span id="line-428"> Class<?>[] implClasses, byte[][] families) throws IOException {</span>
+<span class="source-line-no">429</span><span id="line-429"> TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
... 231459 lines suppressed ...