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" />&#160;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" />&#160;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" />&#160;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" />&#160;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" />&#160;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" />&#160;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" />&#160;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" />&#160;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" />&#160;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>
 &nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
 <dt>setUpCluster() - Method in class org.apache.hadoop.hbase.chaos.util.ChaosMonkeyRunner</dt>
 <dd>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
@@ -26073,7 +25937,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
@@ -28342,7 +28206,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
@@ -43071,10 +42935,6 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</div>
@@ -127,18 +119,16 @@ loadScripts(document, 'script');</script>
 <div class="col-last even-row-color">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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&lt;Configuration, FileSystem, RegionInfo, Path, byte[],</span>
-<span class="source-line-no">187</span><span id="line-187">      Collection&lt;HStoreFile&gt;&gt; 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&lt;Configuration, FileSystem, RegionInfo, Path, byte[],</span>
-<span class="source-line-no">196</span><span id="line-196">      Collection&lt;HStoreFile&gt;&gt; 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&lt;Path, Boolean&gt; existsTracker = new HashMap&lt;&gt;();</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 -&gt; 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&lt;HStoreFile&gt; list = new ArrayList&lt;&gt;();</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&lt;Path&gt; srcPath = ArgumentCaptor.forClass(Path.class);</span>
-<span class="source-line-no">231</span><span id="line-231">      ArgumentCaptor&lt;Path&gt; 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&lt;Configuration, FS, Region, Dir, Family, Files&gt; {</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) -&gt; 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) -&gt; 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) -&gt; 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&lt;HRegion&gt; 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, () -&gt; 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&lt;Configuration, FileSystem, RegionInfo, Path, byte[],</span>
+<span class="source-line-no">183</span><span id="line-183">      Collection&lt;HStoreFile&gt;&gt; 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&lt;Configuration, FileSystem, RegionInfo, Path, byte[],</span>
+<span class="source-line-no">192</span><span id="line-192">      Collection&lt;HStoreFile&gt;&gt; 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&lt;Path, Boolean&gt; existsTracker = new HashMap&lt;&gt;();</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 -&gt; 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&lt;HStoreFile&gt; list = new ArrayList&lt;&gt;();</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&lt;Path&gt; srcPath = ArgumentCaptor.forClass(Path.class);</span>
+<span class="source-line-no">227</span><span id="line-227">      ArgumentCaptor&lt;Path&gt; 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&lt;Configuration, FS, Region, Dir, Family, Files&gt; {</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) -&gt; 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">      () -&gt; testArchiveStoreFilesDifferentFileSystems("/wal-dir", baseDir, (conf, fs, region, dir,</span>
+<span class="source-line-no">286</span><span id="line-286">        family, list) -&gt; 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) -&gt; 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&lt;HRegion&gt; 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 &gt; 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 &gt; 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&lt;HRegion&gt; 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&lt;Path&gt; files = new ArrayList&lt;&gt;();</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) &amp;&amp; !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&lt;HRegion&gt; 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&lt;Path&gt; files = new ArrayList&lt;&gt;();</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) &amp;&amp; !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&lt;HRegion&gt; 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&lt;HRegion&gt; 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&lt;HRegion&gt; 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&lt;HRegion&gt; 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&lt;HRegion&gt; 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&lt;Path&gt; regionDirList = regions.stream()</span>
-<span class="source-line-no">439</span><span id="line-439">      .map(region -&gt; 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 -&gt; !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 &gt; 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&lt;HRegion&gt; 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&lt;Path&gt; regionDirList = regions.stream()</span>
+<span class="source-line-no">436</span><span id="line-436">      .map(region -&gt; 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 -&gt; !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 &gt; 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&lt;HRegion&gt; 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&lt;Path&gt; regionDirList = regions.stream()</span>
-<span class="source-line-no">477</span><span id="line-477">      .map(region -&gt; 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&lt;Void&gt;) () -&gt; {</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&lt;HRegion&gt; 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&lt;HRegion&gt; 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&lt;HRegion&gt; 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&lt;Path&gt; regionDirList = regions.stream()</span>
+<span class="source-line-no">474</span><span id="line-474">      .map(region -&gt; 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, () -&gt; ugi.doAs((PrivilegedExceptionAction&lt;Void&gt;) () -&gt; {</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&lt;HRegion&gt; 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&lt;HRegion&gt; 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&lt;String&gt; 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&lt;String&gt; 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&lt;String&gt; 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&lt;String&gt; archivedFiles = new ArrayList&lt;&gt;();</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() &lt; 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() &gt;= 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&lt;String&gt; 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&lt;String&gt; archivedFiles = new ArrayList&lt;&gt;();</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() &lt; 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() &gt;= 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 &lt; 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 &lt; 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&lt;HRegion&gt; 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&lt;HRegion&gt; 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&lt;String&gt; 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 &lt; 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 &lt; 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&lt;HRegion&gt; 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&lt;HRegion&gt; 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&lt;String&gt; 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) &lt; 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) &lt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;byte[], List&lt;Cell&gt;&gt; map = append.getFamilyCellMap();</span>
-<span class="source-line-no">105</span><span id="line-105">      for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; 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") &amp;&amp; !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&lt;Row&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;byte[], List&lt;Cell&gt;&gt; map = append.getFamilyCellMap();</span>
+<span class="source-line-no">104</span><span id="line-104">      for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; 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") &amp;&amp; !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&lt;Row&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;byte[], List&lt;Cell&gt;&gt; map = append.getFamilyCellMap();</span>
-<span class="source-line-no">105</span><span id="line-105">      for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; 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") &amp;&amp; !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&lt;Row&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;byte[], List&lt;Cell&gt;&gt; map = append.getFamilyCellMap();</span>
+<span class="source-line-no">104</span><span id="line-104">      for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; 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") &amp;&amp; !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&lt;Row&gt; 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 -&gt; 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 -&gt; {</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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; {</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 -&gt; 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 -&gt; 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 -&gt; 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&lt;ClientMetaObserver&gt; 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&lt;ClientMetaObserver&gt; 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 -&gt; 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 -&gt; {</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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; 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 -&gt; {</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 -&gt; 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 -&gt; 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 -&gt; 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&lt;ClientMetaObserver&gt; 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&lt;ClientMetaObserver&gt; 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">        &amp;&amp; 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">        &amp;&amp; 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">        () -&gt; 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">        &amp;&amp; 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">        &amp;&amp; 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">        () -&gt; 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">        &amp;&amp; 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">        &amp;&amp; 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">        () -&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">073</span><span id="line-73">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">068</span><span id="line-68">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">115</span><span id="line-115">      host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">110</span><span id="line-110">      host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">174</span><span id="line-174">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">192</span><span id="line-192">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">169</span><span id="line-169">    host = new CoprocessorHostForTest&lt;&gt;(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, () -&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">187</span><span id="line-187">    host = new CoprocessorHostForTest&lt;&gt;(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, () -&gt; 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&lt;E extends Coprocessor&gt;</span>
-<span class="source-line-no">213</span><span id="line-213">    extends CoprocessorHost&lt;E, CoprocessorEnvironment&lt;E&gt;&gt; {</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&lt;E extends Coprocessor&gt;</span>
+<span class="source-line-no">208</span><span id="line-208">    extends CoprocessorHost&lt;E, CoprocessorEnvironment&lt;E&gt;&gt; {</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&lt;?&gt; 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&lt;E&gt; 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&lt;&gt;(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&lt;?&gt; 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&lt;E&gt; 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&lt;&gt;(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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">073</span><span id="line-73">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">068</span><span id="line-68">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">115</span><span id="line-115">      host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">110</span><span id="line-110">      host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">174</span><span id="line-174">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">192</span><span id="line-192">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">169</span><span id="line-169">    host = new CoprocessorHostForTest&lt;&gt;(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, () -&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">187</span><span id="line-187">    host = new CoprocessorHostForTest&lt;&gt;(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, () -&gt; 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&lt;E extends Coprocessor&gt;</span>
-<span class="source-line-no">213</span><span id="line-213">    extends CoprocessorHost&lt;E, CoprocessorEnvironment&lt;E&gt;&gt; {</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&lt;E extends Coprocessor&gt;</span>
+<span class="source-line-no">208</span><span id="line-208">    extends CoprocessorHost&lt;E, CoprocessorEnvironment&lt;E&gt;&gt; {</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&lt;?&gt; 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&lt;E&gt; 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&lt;&gt;(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&lt;?&gt; 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&lt;E&gt; 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&lt;&gt;(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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">073</span><span id="line-73">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">068</span><span id="line-68">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">115</span><span id="line-115">      host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">110</span><span id="line-110">      host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">174</span><span id="line-174">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
-<span class="source-line-no">192</span><span id="line-192">    host = new CoprocessorHostForTest&lt;&gt;(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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;?&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">169</span><span id="line-169">    host = new CoprocessorHostForTest&lt;&gt;(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, () -&gt; 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&lt;RegionCoprocessor, CoprocessorEnvironment&lt;RegionCoprocessor&gt;&gt; host;</span>
+<span class="source-line-no">187</span><span id="line-187">    host = new CoprocessorHostForTest&lt;&gt;(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, () -&gt; 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&lt;E extends Coprocessor&gt;</span>
-<span class="source-line-no">213</span><span id="line-213">    extends CoprocessorHost&lt;E, CoprocessorEnvironment&lt;E&gt;&gt; {</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&lt;E extends Coprocessor&gt;</span>
+<span class="source-line-no">208</span><span id="line-208">    extends CoprocessorHost&lt;E, CoprocessorEnvironment&lt;E&gt;&gt; {</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&lt;?&gt; 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&lt;E&gt; 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&lt;&gt;(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&lt;?&gt; 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&lt;E&gt; 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&lt;&gt;(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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;Path&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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&lt;String, Object&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; e,</span>
-<span class="source-line-no">295</span><span id="line-295">          final Get get, final List&lt;Cell&gt; 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&lt;String, Object&gt; 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&lt;?&gt;[] {}, 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 &lt; 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 &lt;= 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&lt;?&gt;[] { CoprocessorImpl.class }, families);</span>
-<span class="source-line-no">376</span><span id="line-376">    for (int i = 0; i &lt; 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&lt;&gt;());</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&lt;?&gt;... 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&lt;?&gt; 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&lt;?&gt;[] 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&lt;?&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;Path&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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&lt;String, Object&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; e,</span>
+<span class="source-line-no">294</span><span id="line-294">          final Get get, final List&lt;Cell&gt; 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&lt;String, Object&gt; 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&lt;?&gt;[] {}, 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 &lt; 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 &lt;= 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&lt;?&gt;[] { CoprocessorImpl.class }, families);</span>
+<span class="source-line-no">375</span><span id="line-375">    for (int i = 0; i &lt; 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&lt;&gt;());</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&lt;?&gt;... 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&lt;?&gt; 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&lt;?&gt;[] 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&lt;?&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;Path&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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&lt;String, Object&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; e,</span>
-<span class="source-line-no">295</span><span id="line-295">          final Get get, final List&lt;Cell&gt; 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&lt;String, Object&gt; 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&lt;?&gt;[] {}, 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 &lt; 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 &lt;= 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&lt;?&gt;[] { CoprocessorImpl.class }, families);</span>
-<span class="source-line-no">376</span><span id="line-376">    for (int i = 0; i &lt; 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&lt;&gt;());</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&lt;?&gt;... 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&lt;?&gt; 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&lt;?&gt;[] 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&lt;?&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;Path&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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&lt;String, Object&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; e,</span>
+<span class="source-line-no">294</span><span id="line-294">          final Get get, final List&lt;Cell&gt; 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&lt;String, Object&gt; 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&lt;?&gt;[] {}, 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 &lt; 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 &lt;= 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&lt;?&gt;[] { CoprocessorImpl.class }, families);</span>
+<span class="source-line-no">375</span><span id="line-375">    for (int i = 0; i &lt; 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&lt;&gt;());</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&lt;?&gt;... 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&lt;?&gt; 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&lt;?&gt;[] 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&lt;?&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;Path&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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&lt;String, Object&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; e,</span>
-<span class="source-line-no">295</span><span id="line-295">          final Get get, final List&lt;Cell&gt; 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&lt;String, Object&gt; 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&lt;?&gt;[] {}, 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 &lt; 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 &lt;= 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&lt;?&gt;[] { CoprocessorImpl.class }, families);</span>
-<span class="source-line-no">376</span><span id="line-376">    for (int i = 0; i &lt; 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&lt;&gt;());</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&lt;?&gt;... 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&lt;?&gt; 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&lt;?&gt;[] 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&lt;?&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;? super ExtendedCell&gt; 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&lt;Path&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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&lt;String, Object&gt; 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&lt;String, Object&gt; 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&lt;RegionObserver&gt; 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&lt;? extends RegionCoprocessorEnvironment&gt; e,</span>
+<span class="source-line-no">294</span><span id="line-294">          final Get get, final List&lt;Cell&gt; 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&lt;String, Object&gt; 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&lt;?&gt;[] {}, 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 &lt; 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 &lt;= 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&lt;?&gt;[] { CoprocessorImpl.class }, families);</span>
+<span class="source-line-no">375</span><span id="line-375">    for (int i = 0; i &lt; 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&lt;&gt;());</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&lt;?&gt;... 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&lt;?&gt; 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&lt;?&gt;[] 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 ...